From a17296357072489602cd7258e504d0f7bd48b878 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:37:17 +0100 Subject: [PATCH 01/76] Update .gitignore --- .gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.gitignore b/.gitignore index 51410e9..a0b7f53 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,11 @@ +# RLBot specific +RefreshEnv.cmd +requirements.txt +rlbot.cfg +run.bat +run-gui.bat +run.py + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] From ab39d1d3291f6d6fde71487a8dc279efaf803f03 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:37:41 +0100 Subject: [PATCH 02/76] Remove training --- training/drive_to_ball_grader.py | 48 ---------------- training/example_playlist.py | 12 ---- training/hello_world_training.py | 96 -------------------------------- training/training_util.py | 7 --- training/unit_tests.py | 37 ------------ 5 files changed, 200 deletions(-) delete mode 100644 training/drive_to_ball_grader.py delete mode 100644 training/example_playlist.py delete mode 100644 training/hello_world_training.py delete mode 100644 training/training_util.py delete mode 100644 training/unit_tests.py diff --git a/training/drive_to_ball_grader.py b/training/drive_to_ball_grader.py deleted file mode 100644 index 948be82..0000000 --- a/training/drive_to_ball_grader.py +++ /dev/null @@ -1,48 +0,0 @@ -from dataclasses import dataclass, field -from math import sqrt -from typing import Optional - -from rlbot.training.training import Grade, Pass, Fail - -from rlbottraining.grading.training_tick_packet import TrainingTickPacket -from rlbottraining.common_graders.timeout import FailOnTimeout -from rlbottraining.common_graders.compound_grader import CompoundGrader -from rlbottraining.grading.grader import Grader - - -""" -This file shows how to create Graders which specify when the Exercises finish -and whether the bots passed the exercise. -""" - - -class DriveToBallGrader(CompoundGrader): - """ - Checks that the car gets to the ball in a reasonable amount of time. - """ - def __init__(self, timeout_seconds=4.0, min_dist_to_pass=200): - super().__init__([ - PassOnNearBall(min_dist_to_pass=min_dist_to_pass), - FailOnTimeout(timeout_seconds), - ]) - -@dataclass -class PassOnNearBall(Grader): - """ - Returns a Pass grade once the car is sufficiently close to the ball. - """ - - min_dist_to_pass: float = 200 - car_index: int = 0 - - def on_tick(self, tick: TrainingTickPacket) -> Optional[Grade]: - car = tick.game_tick_packet.game_cars[self.car_index].physics.location - ball = tick.game_tick_packet.game_ball.physics.location - - dist = sqrt( - (car.x - ball.x) ** 2 + - (car.y - ball.y) ** 2 - ) - if dist <= self.min_dist_to_pass: - return Pass() - return None diff --git a/training/example_playlist.py b/training/example_playlist.py deleted file mode 100644 index 860ba20..0000000 --- a/training/example_playlist.py +++ /dev/null @@ -1,12 +0,0 @@ -import hello_world_training -import rlbottraining.common_exercises.bronze_goalie as bronze_goalie - -def make_default_playlist(): - exercises = ( - hello_world_training.make_default_playlist() + - bronze_goalie.make_default_playlist() - ) - for exercise in exercises: - exercise.match_config = hello_world_training.make_match_config_with_my_bot() - - return exercises diff --git a/training/hello_world_training.py b/training/hello_world_training.py deleted file mode 100644 index f25bb2e..0000000 --- a/training/hello_world_training.py +++ /dev/null @@ -1,96 +0,0 @@ -from pathlib import Path -from dataclasses import dataclass, field -from math import pi - -from rlbot.utils.game_state_util import GameState, BoostState, BallState, CarState, Physics, Vector3, Rotator -from rlbot.matchconfig.match_config import MatchConfig, PlayerConfig, Team -from rlbottraining.common_exercises.common_base_exercises import StrikerExercise -from rlbottraining.rng import SeededRandomNumberGenerator -from rlbottraining.match_configs import make_empty_match_config -from rlbottraining.grading.grader import Grader -from rlbottraining.training_exercise import TrainingExercise, Playlist - -import training_util -from drive_to_ball_grader import DriveToBallGrader - - -def make_match_config_with_my_bot() -> MatchConfig: - # Makes a config which only has our bot in it for now. - # For more defails: https://youtu.be/uGFmOZCpel8?t=375 - match_config = make_empty_match_config() - match_config.player_configs = [ - PlayerConfig.bot_config( - Path(__file__).absolute().parent.parent / 'python_example' / 'python_example.cfg', - Team.BLUE - ), - ] - return match_config - -@dataclass -class StrikerPatience(StrikerExercise): - """ - Drops the ball from a certain height, requiring the bot to not drive - underneath the ball until it's in reach. - """ - - car_start_x: float = 0 - - def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - return GameState( - ball=BallState(physics=Physics( - location=Vector3(0, 4400, 1000), - velocity=Vector3(0, 0, 200), - angular_velocity=Vector3(0, 0, 0))), - cars={ - 0: CarState( - physics=Physics( - location=Vector3(self.car_start_x, 3000, 0), - rotation=Rotator(0, pi / 2, 0), - velocity=Vector3(0, 0, 0), - angular_velocity=Vector3(0, 0, 0)), - jumped=False, - double_jumped=False, - boost_amount=0) - }, - boosts={i: BoostState(0) for i in range(34)}, - ) - -@dataclass -class DrivesToBallExercise(TrainingExercise): - """ - Checks that we drive to the ball when it's in the center of the field. - """ - grader: Grader = field(default_factory=DriveToBallGrader) - - def make_game_state(self, rng: SeededRandomNumberGenerator) -> GameState: - return GameState( - ball=BallState(physics=Physics( - location=Vector3(0, 0, 100), - velocity=Vector3(0, 0, 0), - angular_velocity=Vector3(0, 0, 0))), - cars={ - 0: CarState( - physics=Physics( - location=Vector3(0, 2000, 0), - rotation=Rotator(0, -pi / 2, 0), - velocity=Vector3(0, 0, 0), - angular_velocity=Vector3(0, 0, 0)), - jumped=False, - double_jumped=False, - boost_amount=100) - }, - boosts={i: BoostState(0) for i in range(34)}, - ) - - -def make_default_playlist() -> Playlist: - exercises = [ - StrikerPatience('start perfectly center'), - StrikerPatience('start on the right', car_start_x=-1000), - DrivesToBallExercise('Get close to ball'), - DrivesToBallExercise('Get close-ish to ball', grader=DriveToBallGrader(min_dist_to_pass=1000)) - ] - for exercise in exercises: - exercise.match_config = make_match_config_with_my_bot() - - return exercises diff --git a/training/training_util.py b/training/training_util.py deleted file mode 100644 index 4ac53da..0000000 --- a/training/training_util.py +++ /dev/null @@ -1,7 +0,0 @@ -from rlbottraining.rng import SeededRandomNumberGenerator - -from rlbot.utils.game_state_util import Vector3 - - -def get_car_start_near_goal(rng: SeededRandomNumberGenerator) -> Vector3: - return Vector3(rng.uniform(1000, 2000), 3000, 0) diff --git a/training/unit_tests.py b/training/unit_tests.py deleted file mode 100644 index a147c35..0000000 --- a/training/unit_tests.py +++ /dev/null @@ -1,37 +0,0 @@ -import unittest - -from rlbot.training.training import Pass, Fail -from rlbottraining.exercise_runner import run_playlist - -from hello_world_training import StrikerPatience - -class PatienceTest(unittest.TestCase): - """ - These units check that this bot behaves as we expect, - with regards to the StrikerPatience exercise. - - By default, the bot isn't very smart so it'll fail in the cases where - patience is required but passes in cases where no patience is required. - - Tutorial: - https://youtu.be/hCw250aGN8c?list=PL6LKXu1RlPdxh9vxmG1y2sghQwK47_gCH&t=187 - """ - - def test_patience_required(self): - result_iter = run_playlist([StrikerPatience(name='patience required')]) - results = list(result_iter) - self.assertEqual(len(results), 1) - result = results[0] - self.assertEqual(result.exercise.name, 'patience required') - self.assertIsInstance(result.grade, Fail) # If you make the bot is smarter, update this assert that we pass. - - def test_no_patience_required(self): - result_iter = run_playlist([StrikerPatience(name='no patience required', car_start_x=-1000)]) - results = list(result_iter) - self.assertEqual(len(results), 1) - result = results[0] - self.assertEqual(result.exercise.name, 'no patience required') - self.assertIsInstance(result.grade, Pass) - -if __name__ == '__main__': - unittest.main() From b5449f4d734655ce83dfca10a284eee7165d485b Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:40:18 +0100 Subject: [PATCH 03/76] Change ATBA to teacher --- {python_example => bots}/__init__.py | 0 {python_example => bots}/appearance.cfg | 0 bots/teacher/__init__.py | 0 .../python_example.cfg => bots/teacher/teacher.cfg | 13 ++++++------- .../python_example.py => bots/teacher/teacher.py | 4 ++-- {python_example => bots}/util/orientation.py | 0 {python_example => bots}/util/vec.py | 0 7 files changed, 8 insertions(+), 9 deletions(-) rename {python_example => bots}/__init__.py (100%) rename {python_example => bots}/appearance.cfg (100%) create mode 100644 bots/teacher/__init__.py rename python_example/python_example.cfg => bots/teacher/teacher.cfg (61%) rename python_example/python_example.py => bots/teacher/teacher.py (97%) rename {python_example => bots}/util/orientation.py (100%) rename {python_example => bots}/util/vec.py (100%) diff --git a/python_example/__init__.py b/bots/__init__.py similarity index 100% rename from python_example/__init__.py rename to bots/__init__.py diff --git a/python_example/appearance.cfg b/bots/appearance.cfg similarity index 100% rename from python_example/appearance.cfg rename to bots/appearance.cfg diff --git a/bots/teacher/__init__.py b/bots/teacher/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python_example/python_example.cfg b/bots/teacher/teacher.cfg similarity index 61% rename from python_example/python_example.cfg rename to bots/teacher/teacher.cfg index 99dd157..586a6ea 100644 --- a/python_example/python_example.cfg +++ b/bots/teacher/teacher.cfg @@ -1,27 +1,26 @@ [Locations] # Path to loadout config. Can use relative path from here. -looks_config = ./appearance.cfg +looks_config = ../appearance.cfg # Path to python file. Can use relative path from here. -python_file = ./python_example.py +python_file = ./teacher.py # Name of the bot in-game -name = PythonExampleBot +name = Teacher [Details] # These values are optional but useful metadata for helper programs # Name of the bot's creator/developer -developer = The RLBot community +developer = r0bbi3 # Short description of the bot -description = This is a multi-line description - of the official python example bot +description = # Fun fact about the bot fun_fact = # Link to github repository -github = https://github.com/RLBot/RLBotPythonExample +github = # Programming language language = python diff --git a/python_example/python_example.py b/bots/teacher/teacher.py similarity index 97% rename from python_example/python_example.py rename to bots/teacher/teacher.py index ccaabfe..7982f42 100644 --- a/python_example/python_example.py +++ b/bots/teacher/teacher.py @@ -3,8 +3,8 @@ from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket -from util.orientation import Orientation -from util.vec import Vec3 +from ..util.orientation import Orientation +from ..util.vec import Vec3 class PythonExample(BaseAgent): diff --git a/python_example/util/orientation.py b/bots/util/orientation.py similarity index 100% rename from python_example/util/orientation.py rename to bots/util/orientation.py diff --git a/python_example/util/vec.py b/bots/util/vec.py similarity index 100% rename from python_example/util/vec.py rename to bots/util/vec.py From 4fd700a07f3202d3da544d8b03a0653ef9f60c56 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:41:29 +0100 Subject: [PATCH 04/76] Create learner --- bots/learner/__init__.py | 0 bots/learner/learner.cfg | 26 ++++++++++++++++++++++++++ bots/learner/learner.py | 16 ++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 bots/learner/__init__.py create mode 100644 bots/learner/learner.cfg create mode 100644 bots/learner/learner.py diff --git a/bots/learner/__init__.py b/bots/learner/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bots/learner/learner.cfg b/bots/learner/learner.cfg new file mode 100644 index 0000000..3932431 --- /dev/null +++ b/bots/learner/learner.cfg @@ -0,0 +1,26 @@ +[Locations] +# Path to loadout config. Can use relative path from here. +looks_config = ../appearance.cfg + +# Path to python file. Can use relative path from here. +python_file = ./learner.py + +# Name of the bot in-game +name = Learner + +[Details] +# These values are optional but useful metadata for helper programs +# Name of the bot's creator/developer +developer = r0bbi3 + +# Short description of the bot +description = + +# Fun fact about the bot +fun_fact = + +# Link to github repository +github = + +# Programming language +language = python diff --git a/bots/learner/learner.py b/bots/learner/learner.py new file mode 100644 index 0000000..269a978 --- /dev/null +++ b/bots/learner/learner.py @@ -0,0 +1,16 @@ +import math + +from rlbot.agents.base_agent import BaseAgent, SimpleControllerState +from rlbot.utils.structures.game_data_struct import GameTickPacket + + +class PythonExample(BaseAgent): + + def initialize_agent(self): + # This runs once before the bot starts up + self.controller_state = SimpleControllerState() + + def get_output(self, packet: GameTickPacket) -> SimpleControllerState: + return self.controller_state + + From b97ed07d44f758764e822e7622108c47746187a6 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:43:00 +0100 Subject: [PATCH 05/76] Remove ignored files --- RefreshEnv.cmd | 66 ------------------------------------------- requirements.txt | 7 ----- rlbot.cfg | 73 ------------------------------------------------ run-gui.bat | 11 -------- run.bat | 11 -------- run.py | 43 ---------------------------- 6 files changed, 211 deletions(-) delete mode 100644 RefreshEnv.cmd delete mode 100644 requirements.txt delete mode 100644 rlbot.cfg delete mode 100644 run-gui.bat delete mode 100644 run.bat delete mode 100644 run.py diff --git a/RefreshEnv.cmd b/RefreshEnv.cmd deleted file mode 100644 index 567fd78..0000000 --- a/RefreshEnv.cmd +++ /dev/null @@ -1,66 +0,0 @@ -@echo off -:: This file is taken from chocolatey: -:: https://github.com/chocolatey/choco/blob/master/src/chocolatey.resources/redirects/RefreshEnv.cmd -:: -:: RefreshEnv.cmd -:: -:: Batch file to read environment variables from registry and -:: set session variables to these values. -:: -:: With this batch file, there should be no need to reload command -:: environment every time you want environment changes to propagate - -::echo "RefreshEnv.cmd only works from cmd.exe, please install the Chocolatey Profile to take advantage of refreshenv from PowerShell" -echo | set /p dummy="Refreshing environment variables from registry for cmd.exe. Please wait..." - -goto main - -:: Set one environment variable from registry key -:SetFromReg - "%WinDir%\System32\Reg" QUERY "%~1" /v "%~2" > "%TEMP%\_envset.tmp" 2>NUL - for /f "usebackq skip=2 tokens=2,*" %%A IN ("%TEMP%\_envset.tmp") do ( - echo/set "%~3=%%B" - ) - goto :EOF - -:: Get a list of environment variables from registry -:GetRegEnv - "%WinDir%\System32\Reg" QUERY "%~1" > "%TEMP%\_envget.tmp" - for /f "usebackq skip=2" %%A IN ("%TEMP%\_envget.tmp") do ( - if /I not "%%~A"=="Path" ( - call :SetFromReg "%~1" "%%~A" "%%~A" - ) - ) - goto :EOF - -:main - echo/@echo off >"%TEMP%\_env.cmd" - - :: Slowly generating final file - call :GetRegEnv "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" >> "%TEMP%\_env.cmd" - call :GetRegEnv "HKCU\Environment">>"%TEMP%\_env.cmd" >> "%TEMP%\_env.cmd" - - :: Special handling for PATH - mix both User and System - call :SetFromReg "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" Path Path_HKLM >> "%TEMP%\_env.cmd" - call :SetFromReg "HKCU\Environment" Path Path_HKCU >> "%TEMP%\_env.cmd" - - :: Caution: do not insert space-chars before >> redirection sign - echo/set "Path=%%Path_HKLM%%;%%Path_HKCU%%" >> "%TEMP%\_env.cmd" - - :: Cleanup - del /f /q "%TEMP%\_envset.tmp" 2>nul - del /f /q "%TEMP%\_envget.tmp" 2>nul - - :: capture user / architecture - SET "OriginalUserName=%USERNAME%" - SET "OriginalArchitecture=%PROCESSOR_ARCHITECTURE%" - - :: Set these variables - call "%TEMP%\_env.cmd" - - :: reset user / architecture - SET "USERNAME=%OriginalUserName%" - SET "PROCESSOR_ARCHITECTURE=%OriginalArchitecture%" - - echo | set /p dummy="Finished." - echo . \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 25c0c97..0000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -# Include everything the framework requires -# You will automatically get updates for all versions starting with "1.". -rlbot==1.* -rlbottraining - -# This will cause pip to auto-upgrade and stop scaring people with warning messages -pip diff --git a/rlbot.cfg b/rlbot.cfg deleted file mode 100644 index 3424a1a..0000000 --- a/rlbot.cfg +++ /dev/null @@ -1,73 +0,0 @@ -[RLBot Configuration] -# Visit https://github.com/RLBot/RLBot/wiki/Config-File-Documentation to see what you can put here. - -[Team Configuration] -# Visit https://github.com/RLBot/RLBot/wiki/Config-File-Documentation to see what you can put here. - -[Match Configuration] -# Number of bots/players which will be spawned. We support up to max 10. -num_participants = 2 -game_mode = Soccer -game_map = Mannfield - -[Mutator Configuration] -# Visit https://github.com/RLBot/RLBot/wiki/Config-File-Documentation to see what you can put here. - -[Participant Configuration] -# Put the name of your bot config file here. Only num_participants config files will be read! -# Everything needs a config, even players and default bots. We still set loadouts and names from config! -participant_config_0 = python_example/python_example.cfg -participant_config_1 = python_example/python_example.cfg -participant_config_2 = python_example/python_example.cfg -participant_config_3 = python_example/python_example.cfg -participant_config_4 = python_example/python_example.cfg -participant_config_5 = python_example/python_example.cfg -participant_config_6 = python_example/python_example.cfg -participant_config_7 = python_example/python_example.cfg -participant_config_8 = python_example/python_example.cfg -participant_config_9 = python_example/python_example.cfg - -# team 0 shoots on positive goal, team 1 shoots on negative goal -participant_team_0 = 0 -participant_team_1 = 1 -participant_team_2 = 0 -participant_team_3 = 1 -participant_team_4 = 0 -participant_team_5 = 1 -participant_team_6 = 0 -participant_team_7 = 1 -participant_team_8 = 0 -participant_team_9 = 1 - -# Accepted values are "human", "rlbot", "psyonix", and "party_member_bot" -# You can have up to 4 local players and they must be activated in game or it will crash. -# If no player is specified you will be spawned in as spectator! -# human - not controlled by the framework -# rlbot - controlled by the framework -# psyonix - default bots (skill level can be changed with participant_bot_skill -# party_member_bot - controlled by the framework but the game detects it as a human -participant_type_0 = rlbot -participant_type_1 = rlbot -participant_type_2 = rlbot -participant_type_3 = rlbot -participant_type_4 = rlbot -participant_type_5 = rlbot -participant_type_6 = rlbot -participant_type_7 = rlbot -participant_type_8 = rlbot -participant_type_9 = rlbot - - -# If participant is a bot and not RLBot controlled, this value will be used to set bot skill. -# 0.0 is Rookie, 0.5 is pro, 1.0 is all-star. You can set values in-between as well. -# Please leave a value here even if it isn't used :) -participant_bot_skill_0 = 1.0 -participant_bot_skill_1 = 1.0 -participant_bot_skill_2 = 1.0 -participant_bot_skill_3 = 1.0 -participant_bot_skill_4 = 1.0 -participant_bot_skill_5 = 1.0 -participant_bot_skill_6 = 1.0 -participant_bot_skill_7 = 1.0 -participant_bot_skill_8 = 1.0 -participant_bot_skill_9 = 1.0 diff --git a/run-gui.bat b/run-gui.bat deleted file mode 100644 index a1c00d9..0000000 --- a/run-gui.bat +++ /dev/null @@ -1,11 +0,0 @@ -@echo off - -@rem Change the working directory to the location of this file so that relative paths will work -cd /D "%~dp0" - -@rem Make sure the environment variables are up-to-date. This is useful if the user installed python a moment ago. -call ./RefreshEnv.cmd - -python run.py gui - -pause diff --git a/run.bat b/run.bat deleted file mode 100644 index b3318d9..0000000 --- a/run.bat +++ /dev/null @@ -1,11 +0,0 @@ -@echo off - -@rem Change the working directory to the location of this file so that relative paths will work -cd /D "%~dp0" - -@rem Make sure the environment variables are up-to-date. This is useful if the user installed python a moment ago. -call ./RefreshEnv.cmd - -python run.py - -pause diff --git a/run.py b/run.py deleted file mode 100644 index a679076..0000000 --- a/run.py +++ /dev/null @@ -1,43 +0,0 @@ -import sys - -# https://stackoverflow.com/a/51704613 -try: - from pip import main as pipmain -except ImportError: - from pip._internal import main as pipmain - -DEFAULT_LOGGER = 'rlbot' - -if __name__ == '__main__': - - try: - from rlbot.utils import public_utils, logging_utils - - logger = logging_utils.get_logger(DEFAULT_LOGGER) - if not public_utils.have_internet(): - logger.log(logging_utils.logging_level, - 'Skipping upgrade check for now since it looks like you have no internet') - elif public_utils.is_safe_to_upgrade(): - pipmain(['install', '-r', 'requirements.txt', '--upgrade', '--upgrade-strategy=eager']) - - # https://stackoverflow.com/a/44401013 - rlbots = [module for module in sys.modules if module.startswith('rlbot')] - for rlbot_module in rlbots: - sys.modules.pop(rlbot_module) - - except ImportError: - pipmain(['install', '-r', 'requirements.txt', '--upgrade', '--upgrade-strategy=eager']) - - try: - if len(sys.argv) > 1 and sys.argv[1] == 'gui': - from rlbot.gui.qt_root import RLBotQTGui - - RLBotQTGui.main() - else: - from rlbot import runner - - runner.main() - except Exception as e: - print("Encountered exception: ", e) - print("Press enter to close.") - input() From 672d6b73f32f12abab588caa3708171339ba23d3 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:43:49 +0100 Subject: [PATCH 06/76] Create __init__.py --- bots/util/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bots/util/__init__.py diff --git a/bots/util/__init__.py b/bots/util/__init__.py new file mode 100644 index 0000000..e69de29 From ad0b0223c79b99ee168f4d93d7f526f343237a1c Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:44:56 +0100 Subject: [PATCH 07/76] Stoctane --- bots/appearance.cfg | 73 +++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/bots/appearance.cfg b/bots/appearance.cfg index 468bbe3..0a33320 100644 --- a/bots/appearance.cfg +++ b/bots/appearance.cfg @@ -1,49 +1,56 @@ [Bot Loadout] -team_color_id = 60 +# Primary Color selection +team_color_id = 35 +# Secondary Color selection custom_color_id = 0 +# Car type (Octane, Merc, etc car_id = 23 +# Type of decal decal_id = 0 -wheels_id = 1565 -boost_id = 35 +# Wheel selection +wheels_id = 376 +# Boost selection +boost_id = 63 +# Antenna Selection antenna_id = 0 +# Hat Selection hat_id = 0 -paint_finish_id = 1681 -custom_finish_id = 1681 +# Paint Type (for first color) +paint_finish_id = 270 +# Paint Type (for secondary color) +custom_finish_id = 270 +# Engine Audio Selection engine_audio_id = 0 -trails_id = 3220 -goal_explosion_id = 3018 +# Car trail Selection +trails_id = 1948 +# Goal Explosion Selection +goal_explosion_id = 1903 [Bot Loadout Orange] -team_color_id = 3 +# Primary Color selection +team_color_id = 33 +# Secondary Color selection custom_color_id = 0 +# Car type (Octane, Merc, etc car_id = 23 +# Type of decal decal_id = 0 -wheels_id = 1565 -boost_id = 35 +# Wheel selection +wheels_id = 376 +# Boost selection +boost_id = 63 +# Antenna Selection antenna_id = 0 +# Hat Selection hat_id = 0 -paint_finish_id = 1681 -custom_finish_id = 1681 +# Paint Type (for first color) +paint_finish_id = 270 +# Paint Type (for secondary color) +custom_finish_id = 270 +# Engine Audio Selection engine_audio_id = 0 -trails_id = 3220 -goal_explosion_id = 3018 +# Car trail Selection +trails_id = 1948 +# Goal Explosion Selection +goal_explosion_id = 1903 -[Bot Paint Blue] -car_paint_id = 12 -decal_paint_id = 0 -wheels_paint_id = 7 -boost_paint_id = 7 -antenna_paint_id = 0 -hat_paint_id = 0 -trails_paint_id = 2 -goal_explosion_paint_id = 0 - -[Bot Paint Orange] -car_paint_id = 12 -decal_paint_id = 0 -wheels_paint_id = 14 -boost_paint_id = 14 -antenna_paint_id = 0 -hat_paint_id = 0 -trails_paint_id = 14 -goal_explosion_paint_id = 0 From b81ad6fed8060f373f40cb49d5fac89b2f42f3f2 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:46:19 +0100 Subject: [PATCH 08/76] Update README.md --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 8134594..a15a9ae 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,3 @@ https://www.youtube.com/watch?v=UjsQFNN0nSA 1. Download or clone this repository 1. In the files from the previous step, find and double click on run-gui.bat 1. Click the 'Run' button - -## Changing the bot - -- Bot behavior is controlled by `python_example/python_example.py` -- Bot appearance is controlled by `python_example/appearance.cfg` - -See https://github.com/RLBot/RLBotPythonExample/wiki for documentation and tutorials. From 31443d6565ac88925928d75fd7f288a451df1d0a Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 21:47:15 +0100 Subject: [PATCH 09/76] Create data folder --- bots/data/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bots/data/__init__.py diff --git a/bots/data/__init__.py b/bots/data/__init__.py new file mode 100644 index 0000000..e69de29 From 425c94f0c2cb33065d4d6d34239db522f4674bf6 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:02:54 +0100 Subject: [PATCH 10/76] Write ideas for data --- bots/util/data.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 bots/util/data.py diff --git a/bots/util/data.py b/bots/util/data.py new file mode 100644 index 0000000..6695e44 --- /dev/null +++ b/bots/util/data.py @@ -0,0 +1,34 @@ +''' +BALL: +ball: X, Y, Z (scaled to pitch dimensions) +ball velocity normalised: X, Y, Z +ball velocity magnitude / pitch length +ball prediction displacement: X, Y, Z (scaled to pitch dimensions, each 0.5 seconds for 3 seconds) + +CARS: +our car: X, Y, Z (scaled to pitch dimensions) +local ball normalised: X, Y, Z +our ball distance / pitch length +our car boost / 100 +car velocity magnitude +car velocity forward component +has wheel contact +is super sonic +has double jumped +repeat all our car info for closest opponent to ball + +MISC: +is kickoff +time since last touch, 10th log +is round active +''' + +import numpy as np +from rlbot.utils.structures.game_data_struct import GameTickPacket + + +def format_data(packet: GameTickPacket): + data = np.zeros() # Blank data + + + return data From ace98c45bd7d7ba4766c868ba59e70e0026c9b80 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:23:54 +0100 Subject: [PATCH 11/76] Update data.py --- bots/util/data.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bots/util/data.py b/bots/util/data.py index 6695e44..34a3229 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -10,7 +10,7 @@ local ball normalised: X, Y, Z our ball distance / pitch length our car boost / 100 -car velocity magnitude +car velocity magnitude / pitch length car velocity forward component has wheel contact is super sonic @@ -25,10 +25,14 @@ import numpy as np from rlbot.utils.structures.game_data_struct import GameTickPacket +from rlbot.utils.structures.ball_prediction_struct import BallPrediction -def format_data(packet: GameTickPacket): - data = np.zeros() # Blank data +data_size = (3 + 3 + 1 + 6 + (3 + 3 + 7) * 2 + 3) + + +def format_data(packet: GameTickPacket, prediction: BallPrediction): + data = np.zeros(shape = data_size) # Blank data return data From 542dd5a6aeef14d28a0f96e8b00c13c2331ba63b Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:30:40 +0100 Subject: [PATCH 12/76] Update data.py --- bots/util/data.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bots/util/data.py b/bots/util/data.py index 34a3229..4b5f107 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -7,6 +7,7 @@ CARS: our car: X, Y, Z (scaled to pitch dimensions) +our car nose: X, Y, Z local ball normalised: X, Y, Z our ball distance / pitch length our car boost / 100 @@ -31,7 +32,7 @@ data_size = (3 + 3 + 1 + 6 + (3 + 3 + 7) * 2 + 3) -def format_data(packet: GameTickPacket, prediction: BallPrediction): +def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data = np.zeros(shape = data_size) # Blank data From c4d5684c5024355ec054a41e55fd0e25713dc252 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:30:54 +0100 Subject: [PATCH 13/76] Update data.py --- bots/util/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bots/util/data.py b/bots/util/data.py index 4b5f107..ee06be1 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -29,7 +29,7 @@ from rlbot.utils.structures.ball_prediction_struct import BallPrediction -data_size = (3 + 3 + 1 + 6 + (3 + 3 + 7) * 2 + 3) +data_size = (3 + 3 + 1 + 6 + (3 + 3 + 3 + 7) * 2 + 3) def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): From e8830c0e0f41ff2f3021cc34157d76940975fc0e Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:37:21 +0100 Subject: [PATCH 14/76] Update data.py --- bots/util/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bots/util/data.py b/bots/util/data.py index ee06be1..5f7572b 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -25,7 +25,7 @@ ''' import numpy as np -from rlbot.utils.structures.game_data_struct import GameTickPacket +from rlbot.utils.structures.game_data_struct import GameTickPacket, PlayerInfo, GameInfo, BallInfo from rlbot.utils.structures.ball_prediction_struct import BallPrediction From aa6698bd9013c78f776639ce04562706a2cc7951 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:39:40 +0100 Subject: [PATCH 15/76] Update data.py --- bots/util/data.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bots/util/data.py b/bots/util/data.py index 5f7572b..79301b4 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -1,17 +1,17 @@ ''' BALL: -ball: X, Y, Z (scaled to pitch dimensions) +ball: (X, Y, Z) / pitch width ball velocity normalised: X, Y, Z -ball velocity magnitude / pitch length -ball prediction displacement: X, Y, Z (scaled to pitch dimensions, each 0.5 seconds for 3 seconds) +ball velocity magnitude / pitch width +ball prediction displacement: (X, Y, Z) / pitch width, each 0.5 seconds for 3 seconds CARS: our car: X, Y, Z (scaled to pitch dimensions) our car nose: X, Y, Z local ball normalised: X, Y, Z -our ball distance / pitch length +our ball distance / pitch width our car boost / 100 -car velocity magnitude / pitch length +car velocity magnitude / pitch width car velocity forward component has wheel contact is super sonic From ab67b4f04bbf751a61b95340a865118fde3a881f Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:44:09 +0100 Subject: [PATCH 16/76] Update data.py --- bots/util/data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bots/util/data.py b/bots/util/data.py index 79301b4..8090dca 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -3,7 +3,7 @@ ball: (X, Y, Z) / pitch width ball velocity normalised: X, Y, Z ball velocity magnitude / pitch width -ball prediction displacement: (X, Y, Z) / pitch width, each 0.5 seconds for 3 seconds +ball prediction displacement: (X, Y, Z) / pitch width, each second for 3 seconds CARS: our car: X, Y, Z (scaled to pitch dimensions) @@ -29,7 +29,7 @@ from rlbot.utils.structures.ball_prediction_struct import BallPrediction -data_size = (3 + 3 + 1 + 6 + (3 + 3 + 3 + 7) * 2 + 3) +data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): From fe0f1677e7a7e2fa8f890d7f88eeb2178c83bc04 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:48:23 +0100 Subject: [PATCH 17/76] Constants --- bots/util/constants.py | 18 ++++++++++++++++++ bots/util/data.py | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 bots/util/constants.py diff --git a/bots/util/constants.py b/bots/util/constants.py new file mode 100644 index 0000000..52530fa --- /dev/null +++ b/bots/util/constants.py @@ -0,0 +1,18 @@ +#https://discordapp.com/channels/348658686962696195/446761380654219264/546468104348237854 +ball_radius_uu = 92.75 +octane_com_height_uu = 16.5 +gravity_uu_s2 = 650.0 +max_throttle_speed_uu_s = 1410.0 +max_boost_speed_uu_s = 2300.0 +car_mass = 180.0 +accel_boost_uu_s2 = 991.0 + 2.0/3.0 +accel_brake_uu_s2 = -3500.0 +accel_coast_uu_s2 = -525.0 +ball_restitution = 0.6 +jump_hold_duration_s = 0.2 +max_angular_accel_yaw_rads_s2 = 9.11 +max_angular_accel_pitch_rads_s2 = 12.46 +max_angular_accel_roll_rads_s2 = 38.34 +jump_initial_vel_uu_s = 300.0 +accel_jumping_uu_s2 = 1400.0 +physics_slice_time_s = 1.0/60.0 diff --git a/bots/util/data.py b/bots/util/data.py index 8090dca..f5d0418 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -24,10 +24,12 @@ is round active ''' + import numpy as np from rlbot.utils.structures.game_data_struct import GameTickPacket, PlayerInfo, GameInfo, BallInfo from rlbot.utils.structures.ball_prediction_struct import BallPrediction +from ..util.vec import Vec3 data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) @@ -35,5 +37,4 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data = np.zeros(shape = data_size) # Blank data - return data From be2ea3cfd5c68179cd52d9ff2e19e5ba69c56ac4 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 22:52:41 +0100 Subject: [PATCH 18/76] Add (useful) constants --- bots/util/constants.py | 5 ++++- bots/util/data.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bots/util/constants.py b/bots/util/constants.py index 52530fa..bc564b1 100644 --- a/bots/util/constants.py +++ b/bots/util/constants.py @@ -1,4 +1,4 @@ -#https://discordapp.com/channels/348658686962696195/446761380654219264/546468104348237854 +# https://discordapp.com/channels/348658686962696195/446761380654219264/546468104348237854 ball_radius_uu = 92.75 octane_com_height_uu = 16.5 gravity_uu_s2 = 650.0 @@ -16,3 +16,6 @@ jump_initial_vel_uu_s = 300.0 accel_jumping_uu_s2 = 1400.0 physics_slice_time_s = 1.0/60.0 +pitch_side_uu = 4096.0 +pitch_back_uu = 5120.0 +pitch_ceiling_uu = 2044.0 diff --git a/bots/util/data.py b/bots/util/data.py index f5d0418..2208140 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -30,6 +30,7 @@ from rlbot.utils.structures.ball_prediction_struct import BallPrediction from ..util.vec import Vec3 +from ..util.constants import * data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) From 0f7e096888782e48f23ad502144673a6529eac78 Mon Sep 17 00:00:00 2001 From: Robbie Date: Mon, 8 Jul 2019 23:01:38 +0100 Subject: [PATCH 19/76] Update data.py --- bots/util/data.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/bots/util/data.py b/bots/util/data.py index 2208140..50ad8bb 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -3,6 +3,8 @@ ball: (X, Y, Z) / pitch width ball velocity normalised: X, Y, Z ball velocity magnitude / pitch width + +BALL PREDICTION: ball prediction displacement: (X, Y, Z) / pitch width, each second for 3 seconds CARS: @@ -38,4 +40,27 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data = np.zeros(shape = data_size) # Blank data + # Ball + ball: BallData = packet.game_ball + ball_position = Vec3(ball.physics.location) / pitch_side_uu + ball_velocity = Vec3(ball.physics.velocity) + ball_velocity_magnitude = ball_velocity.magnitude / pitch_side_uu + ball_velocity = ball_velocity.normalised() + data[0] = ball_position.x + data[1] = ball_position.y + data[2] = ball_position.z + data[3] = ball_velocity.x + data[4] = ball_velocity.y + data[5] = ball_velocity.z + data[6] = ball_velocity_magnitude + + # Ball prediction + ball_position = Vec3(ball.physics.location) + for i in range(3): + frame = (i + 1) * 60 + predicted_location = prediction.slices[frame].physics.location + displacement = (predicted_location - ball_position) / pitch_side_uu + data[7 + i * 3] #TODO + + return data From db91a4a6d5b5a464868524d0befe2fef944fbf47 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 11:50:39 +0100 Subject: [PATCH 20/76] Finish data collection, for now --- bots/util/data.py | 69 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/bots/util/data.py b/bots/util/data.py index 50ad8bb..9a567d2 100644 --- a/bots/util/data.py +++ b/bots/util/data.py @@ -8,15 +8,15 @@ ball prediction displacement: (X, Y, Z) / pitch width, each second for 3 seconds CARS: -our car: X, Y, Z (scaled to pitch dimensions) +our car: (X, Y, Z) / pitch width our car nose: X, Y, Z local ball normalised: X, Y, Z our ball distance / pitch width our car boost / 100 car velocity magnitude / pitch width car velocity forward component -has wheel contact is super sonic +has wheel contact has double jumped repeat all our car info for closest opponent to ball @@ -26,15 +26,19 @@ is round active ''' +from math import log10 as log import numpy as np from rlbot.utils.structures.game_data_struct import GameTickPacket, PlayerInfo, GameInfo, BallInfo from rlbot.utils.structures.ball_prediction_struct import BallPrediction -from ..util.vec import Vec3 -from ..util.constants import * +from vec import Vec3 +from constants import * +from orientation import Orientation, relative_location + data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) +car_data_size = 16 def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): @@ -55,12 +59,65 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data[6] = ball_velocity_magnitude # Ball prediction - ball_position = Vec3(ball.physics.location) + ball_position = Vec3(ball.physics.location) # Rescale for i in range(3): frame = (i + 1) * 60 predicted_location = prediction.slices[frame].physics.location displacement = (predicted_location - ball_position) / pitch_side_uu - data[7 + i * 3] #TODO + data[7 + i * 3] = displacement.x + data[8 + i * 3] = displacement.y + data[9 + i * 3] = displacement.z + # Cars + my_car = packet.game_cars[index] + enemy_car = get_enemy_car(index, packet) + for i, car in enumerate([my_car, enemy_car]): + if not car: continue + car_position = Vec3(car.physics.location) / pitch_side_uu + data[16 + i * car_data_size] = car_position.x + data[17 + i * car_data_size] = car_position.y + data[18 + i * car_data_size] = car_position.z + car_orientation = Orientation(car.physics.rotation) + car_direction = car_orientation.forward.normalised() + data[19 + i * car_data_size] = car_direction.x + data[20 + i * car_data_size] = car_direction.y + data[21 + i * car_data_size] = car_direction.z + car_position = Vec3(car.physics.location) # Rescale + local = relative_location(car_position, car_orientation, ball_position).normalised() + data[22 + i * car_data_size] = local.x + data[23 + i * car_data_size] = local.y + data[24 + i * car_data_size] = local.z + data[25 + i * car_data_size] = car_position.distance(ball_position) / pitch_side_uu + data[26 + i * car_data_size] = car.boost / 100 + car_velocity_magnitude = car.physics.velocity.magnitude + data[27 + i * car_data_size] = car_velocity_magnitude / pitch_side_uu + data[28 + i * car_data_size] = car_direction.dot(car.physics.velocity) / car_velocity_magnitude + data[29 + i * car_data_size] = (1 if car.is_super_sonic else -1) + data[30 + i * car_data_size] = (1 if car.has_wheel_contact else -1) + data[31 + i * car_data_size] = (1 if not car.double_jumped else -1) + # Misc + data[48] = (1 if packet.game_info.is_kickoff_pause else -1) + data[49] = log(packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds) + data[50] = (1 if packet.game_info.is_round_active else -1) + return data + + +def get_enemy_car(index: int, packet: GameTickPacket) -> PlayerInfo: + ball_position = Vec3(packet.game_ball.physics.location) + team = (1 - packet.game_cars[index].team) + + closest_car = None + min_distance = 0 + + for index, car in enumerate(packet.game_cars[:packet.num_cars]): + if not car or car.team != team: continue + car_position = Vec3(car.physics.location) + distance = car_position.distance(ball_position) + + if not closest_car or distance < min_distance: + closest_car = car + min_distance = distance + + return closest_car From 1c78fd342953e704e7ba4b6bfbb8ac19d10967a8 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 11:53:22 +0100 Subject: [PATCH 21/76] Learner collects data --- bots/learner/learner.py | 6 ++++-- bots/util/{data.py => collect_data.py} | 0 2 files changed, 4 insertions(+), 2 deletions(-) rename bots/util/{data.py => collect_data.py} (100%) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 269a978..50c9b8e 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -1,8 +1,8 @@ -import math - from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket +from ..utils.collect_data import format_data + class PythonExample(BaseAgent): @@ -11,6 +11,8 @@ def initialize_agent(self): self.controller_state = SimpleControllerState() def get_output(self, packet: GameTickPacket) -> SimpleControllerState: + data = format_data(self.index, packet, self.get_ball_prediction_struct()) + return self.controller_state diff --git a/bots/util/data.py b/bots/util/collect_data.py similarity index 100% rename from bots/util/data.py rename to bots/util/collect_data.py From 931c983733376678be04324707cb2e4ad0816e09 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 11:53:46 +0100 Subject: [PATCH 22/76] Rename agents --- bots/learner/learner.py | 2 +- bots/teacher/teacher.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 50c9b8e..0a5ef52 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -4,7 +4,7 @@ from ..utils.collect_data import format_data -class PythonExample(BaseAgent): +class Learner(BaseAgent): def initialize_agent(self): # This runs once before the bot starts up diff --git a/bots/teacher/teacher.py b/bots/teacher/teacher.py index 7982f42..18afb2d 100644 --- a/bots/teacher/teacher.py +++ b/bots/teacher/teacher.py @@ -7,7 +7,7 @@ from ..util.vec import Vec3 -class PythonExample(BaseAgent): +class Teacher(BaseAgent): def initialize_agent(self): # This runs once before the bot starts up From 7feacad89213d7606623c4f678b8b47b8e233f95 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 11:56:43 +0100 Subject: [PATCH 23/76] Dummy renderer --- bots/learner/learner.py | 4 +++- bots/util/dummy_renderer.py | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 bots/util/dummy_renderer.py diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 0a5ef52..a1c4923 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -2,13 +2,15 @@ from rlbot.utils.structures.game_data_struct import GameTickPacket from ..utils.collect_data import format_data +from ..teacher.teacher import Teacher +from ..utils.dummy_renderer import DummyRenderer class Learner(BaseAgent): def initialize_agent(self): - # This runs once before the bot starts up self.controller_state = SimpleControllerState() + self.teacher = Teacher(self) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: data = format_data(self.index, packet, self.get_ball_prediction_struct()) diff --git a/bots/util/dummy_renderer.py b/bots/util/dummy_renderer.py new file mode 100644 index 0000000..8524ba1 --- /dev/null +++ b/bots/util/dummy_renderer.py @@ -0,0 +1,48 @@ +from rlbot.utils.rendering.rendering_manager import RenderingManager + +class DummyRenderer(RenderingManager): + + def __init__(self, renderer): + self.renderGroup = renderer.renderGroup + self.render_state = renderer.render_state + self.builder = renderer.builder + self.render_list = renderer.render_list + self.group_id = renderer.group_id + self.bot_index = renderer.bot_index + self.bot_team = renderer.bot_team + + def clear_screen(self, group_id='default'): + pass + + def draw_line_2d(self, x1, y1, x2, y2, color): + return self + + def draw_polyline_2d(self, vectors, color): + return self + + def draw_line_3d(self, vec1, vec2, color): + return self + + def draw_polyline_3d(self, vectors, color): + return self + + def draw_line_2d_3d(self, x, y, vec, color): + return self + + def draw_rect_2d(self, x, y, width, height, filled, color): + return self + + def draw_rect_3d(self, vec, width, height, filled, color, centered=False): + return self + + def draw_string_2d(self, x, y, scale_x, scale_y, text, color): + return self + + def draw_string_3d(self, vec, scale_x, scale_y, text, color): + return self + + def begin_rendering(self, group_id='default'): + pass + + def end_rendering(self): + pass From 42a40920d7fb0e813836b194ec7130418ba2fa8a Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 11:59:15 +0100 Subject: [PATCH 24/76] Update learner.py --- bots/learner/learner.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index a1c4923..765e618 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -10,7 +10,10 @@ class Learner(BaseAgent): def initialize_agent(self): self.controller_state = SimpleControllerState() + + # Teacher self.teacher = Teacher(self) + self.teacher.renderer = DummyRenderer(self.renderer) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: data = format_data(self.index, packet, self.get_ball_prediction_struct()) From 423a6e935fe41e03f5052dd7c7816646eac706bc Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 12:03:08 +0100 Subject: [PATCH 25/76] Labels --- bots/util/collect_data.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index 9a567d2..74aee8b 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -31,6 +31,7 @@ import numpy as np from rlbot.utils.structures.game_data_struct import GameTickPacket, PlayerInfo, GameInfo, BallInfo from rlbot.utils.structures.ball_prediction_struct import BallPrediction +from rlbot.agents.base_agent import SimpleControllerState from vec import Vec3 from constants import * @@ -104,6 +105,20 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): return data +def format_labels(controls: SimpleControllerState): + labels = np.zeros(shape = 9) # Blank labels + labels[0] = controls.throttle + labels[1] = controls.steer + labels[2] = controls.pitch + labels[3] = controls.yaw + labels[4] = controls.roll + labels[5] = (1 if controls.jump else -1) + labels[6] = (1 if controls.boost else -1) + labels[7] = (1 if controls.handbrake else -1) + labels[8] = (1 if controls.use_item else -1) + return labels + + def get_enemy_car(index: int, packet: GameTickPacket) -> PlayerInfo: ball_position = Vec3(packet.game_ball.physics.location) team = (1 - packet.game_cars[index].team) From f6595dbb645d22f00671a8c812526ec33eb9ce87 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 12:19:50 +0100 Subject: [PATCH 26/76] Start network code --- bots/learner/learner.py | 21 ++++++++++++++++++++- bots/util/collect_data.py | 3 ++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 765e618..18eba5e 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -1,7 +1,7 @@ from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket -from ..utils.collect_data import format_data +from ..utils.collect_data import format_data, format_labels, data_size, label_size from ..teacher.teacher import Teacher from ..utils.dummy_renderer import DummyRenderer @@ -15,8 +15,27 @@ def initialize_agent(self): self.teacher = Teacher(self) self.teacher.renderer = DummyRenderer(self.renderer) + # Tensorflow + import tensorflow as tf + from tensorflow import keras + #self.tf = tf + #self.keras = keras + + # Network + self.model = keras.Sequential([ + keras.layers.Flatten(input_shape = data_size), + keras.layers.Dense(data_size, activation = tf.nn.relu), + keras.layers.Dense(label_size, activation = tf.nn.relu) + ]) + self.model.compile(optimizer='adam', + loss='sparse_categorical_crossentropy', + metrics=['accuracy']) + def get_output(self, packet: GameTickPacket) -> SimpleControllerState: + teacher_output = self.teacher.get_output(packet) + data = format_data(self.index, packet, self.get_ball_prediction_struct()) + labels = format_labels(teacher_output) return self.controller_state diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index 74aee8b..f561664 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -40,6 +40,7 @@ data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) car_data_size = 16 +label_size = 9 def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): @@ -106,7 +107,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): def format_labels(controls: SimpleControllerState): - labels = np.zeros(shape = 9) # Blank labels + labels = np.zeros(shape = label_size) # Blank labels labels[0] = controls.throttle labels[1] = controls.steer labels[2] = controls.pitch From 7065a19fa01ba5f1c2762f324ccf6656c61720ce Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 12:28:29 +0100 Subject: [PATCH 27/76] Let's see how this goes --- bots/learner/learner.py | 8 ++++++++ bots/util/collect_data.py | 15 +++++++++++++++ bots/util/util.py | 2 ++ 3 files changed, 25 insertions(+) create mode 100644 bots/util/util.py diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 18eba5e..9179e4c 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -36,7 +36,15 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: data = format_data(self.index, packet, self.get_ball_prediction_struct()) labels = format_labels(teacher_output) + + output = self.model.predict([data]) + self.controller_state = from_labels(output) + + self.train(data, labels) return self.controller_state + def train(self, data, labels): + self.model.fit([data], [labels], epochs = 1) + diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index f561664..dfb7c23 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -36,6 +36,7 @@ from vec import Vec3 from constants import * from orientation import Orientation, relative_location +from util import * data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) @@ -120,6 +121,20 @@ def format_labels(controls: SimpleControllerState): return labels +def from_labels(labels) -> SimpleControllerState: + controls = SimpleControllerState() + controls.throttle = clamp11(labels[0]) + controls.steer = clamp11(labels[1]) + controls.pitch = clamp11(labels[2]) + controls.yaw = clamp11(labels[3]) + controls.roll = clamp11(labels[4]) + controls.jump = (labels[5] > 0) + controls.boost = (labels[6] > 0) + controls.handbrake = (labels[7] > 0) + controls.use_item = (labels[8] > 0) + return controls + + def get_enemy_car(index: int, packet: GameTickPacket) -> PlayerInfo: ball_position = Vec3(packet.game_ball.physics.location) team = (1 - packet.game_cars[index].team) diff --git a/bots/util/util.py b/bots/util/util.py new file mode 100644 index 0000000..901f71b --- /dev/null +++ b/bots/util/util.py @@ -0,0 +1,2 @@ +def clamp11(value): + return max(-1, min(1, value)) From 9d9ea786df5ead5fcb8fdc408040cc6b842065ce Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 12:48:14 +0100 Subject: [PATCH 28/76] Fix imports, for now... --- bots/learner/learner.py | 12 ++++++++---- bots/teacher/teacher.py | 7 +++++-- bots/util/collect_data.py | 8 ++++---- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 9179e4c..3afa55e 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -1,9 +1,13 @@ +import os +import sys + from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket -from ..utils.collect_data import format_data, format_labels, data_size, label_size -from ..teacher.teacher import Teacher -from ..utils.dummy_renderer import DummyRenderer +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from util.collect_data import format_data, format_labels, data_size, label_size +from teacher.teacher import Teacher +from util.dummy_renderer import DummyRenderer class Learner(BaseAgent): @@ -40,7 +44,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: output = self.model.predict([data]) self.controller_state = from_labels(output) - self.train(data, labels) + #self.train(data, labels) return self.controller_state diff --git a/bots/teacher/teacher.py b/bots/teacher/teacher.py index 18afb2d..3bad03b 100644 --- a/bots/teacher/teacher.py +++ b/bots/teacher/teacher.py @@ -1,10 +1,13 @@ import math +import os +import sys from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket -from ..util.orientation import Orientation -from ..util.vec import Vec3 +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from util.orientation import Orientation +from util.vec import Vec3 class Teacher(BaseAgent): diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index dfb7c23..8dc2911 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -33,10 +33,10 @@ from rlbot.utils.structures.ball_prediction_struct import BallPrediction from rlbot.agents.base_agent import SimpleControllerState -from vec import Vec3 -from constants import * -from orientation import Orientation, relative_location -from util import * +from .vec import Vec3 +from .constants import * +from .orientation import Orientation, relative_location +from .util import * data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) From 072a790f23e0dd720cf2b072b45d296240dc5483 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 12:49:40 +0100 Subject: [PATCH 29/76] Update learner.py --- bots/learner/learner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 3afa55e..2d071da 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -16,7 +16,7 @@ def initialize_agent(self): self.controller_state = SimpleControllerState() # Teacher - self.teacher = Teacher(self) + self.teacher = Teacher(self, self.team, self.index) self.teacher.renderer = DummyRenderer(self.renderer) # Tensorflow From 3301b4d1bb51c65f7978e26a57e669e48d9649b6 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 13:15:05 +0100 Subject: [PATCH 30/76] Fix imports and network, flip packet --- bots/learner/learner.py | 25 ++++++++++++------------- bots/teacher/teacher.py | 2 +- bots/util/collect_data.py | 16 ++++++++++------ bots/util/vec.py | 7 ++++++- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 2d071da..d6ffbcc 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -17,31 +17,30 @@ def initialize_agent(self): # Teacher self.teacher = Teacher(self, self.team, self.index) + self.teacher.initialize_agent() self.teacher.renderer = DummyRenderer(self.renderer) # Tensorflow import tensorflow as tf - from tensorflow import keras + from tensorflow.keras import layers #self.tf = tf - #self.keras = keras # Network - self.model = keras.Sequential([ - keras.layers.Flatten(input_shape = data_size), - keras.layers.Dense(data_size, activation = tf.nn.relu), - keras.layers.Dense(label_size, activation = tf.nn.relu) - ]) - self.model.compile(optimizer='adam', - loss='sparse_categorical_crossentropy', - metrics=['accuracy']) + self.model = tf.keras.Sequential([ + layers.Dense(data_size, activation = 'relu', input_shape = (data_size,)), + layers.Dense(data_size, activation = 'relu'), + layers.Dense(label_size, activation = 'relu')]) + self.model.compile(optimizer = tf.train.AdamOptimizer(0.001), + loss = 'categorical_crossentropy') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: teacher_output = self.teacher.get_output(packet) - data = format_data(self.index, packet, self.get_ball_prediction_struct()) - labels = format_labels(teacher_output) + data = format_data(self.index, packet, self.get_ball_prediction_struct()).tolist() + #print(data) + labels = format_labels(teacher_output).tolist() - output = self.model.predict([data]) + output = self.model.predict(data) self.controller_state = from_labels(output) #self.train(data, labels) diff --git a/bots/teacher/teacher.py b/bots/teacher/teacher.py index 3bad03b..5d9df99 100644 --- a/bots/teacher/teacher.py +++ b/bots/teacher/teacher.py @@ -41,7 +41,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.controller_state.throttle = 1.0 self.controller_state.steer = turn - draw_debug(self.renderer, my_car, packet.game_ball, action_display) + #draw_debug(self.renderer, my_car, packet.game_ball, action_display) return self.controller_state diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index 8dc2911..c5e12e7 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -29,7 +29,7 @@ from math import log10 as log import numpy as np -from rlbot.utils.structures.game_data_struct import GameTickPacket, PlayerInfo, GameInfo, BallInfo +from rlbot.utils.structures.game_data_struct import GameTickPacket, PlayerInfo, GameInfo, BallInfo, rotate_game_tick_packet_boost_omitted as flip_packet from rlbot.utils.structures.ball_prediction_struct import BallPrediction from rlbot.agents.base_agent import SimpleControllerState @@ -47,11 +47,14 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data = np.zeros(shape = data_size) # Blank data + flip = (packet.game_cars[index].team == 1) + if flip: packet = flip_packet(packet) + # Ball ball: BallData = packet.game_ball ball_position = Vec3(ball.physics.location) / pitch_side_uu ball_velocity = Vec3(ball.physics.velocity) - ball_velocity_magnitude = ball_velocity.magnitude / pitch_side_uu + ball_velocity_magnitude = ball_velocity.length() / pitch_side_uu ball_velocity = ball_velocity.normalised() data[0] = ball_position.x data[1] = ball_position.y @@ -65,7 +68,8 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): ball_position = Vec3(ball.physics.location) # Rescale for i in range(3): frame = (i + 1) * 60 - predicted_location = prediction.slices[frame].physics.location + predicted_location = Vec3(prediction.slices[frame].physics.location) + if flip: predicted_location = Vec3(-predicted_location.x, -predicted_location.y, predicted_location.z) displacement = (predicted_location - ball_position) / pitch_side_uu data[7 + i * 3] = displacement.x data[8 + i * 3] = displacement.y @@ -90,9 +94,9 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data[22 + i * car_data_size] = local.x data[23 + i * car_data_size] = local.y data[24 + i * car_data_size] = local.z - data[25 + i * car_data_size] = car_position.distance(ball_position) / pitch_side_uu + data[25 + i * car_data_size] = car_position.dist(ball_position) / pitch_side_uu data[26 + i * car_data_size] = car.boost / 100 - car_velocity_magnitude = car.physics.velocity.magnitude + car_velocity_magnitude = Vec3(car.physics.velocity).length() data[27 + i * car_data_size] = car_velocity_magnitude / pitch_side_uu data[28 + i * car_data_size] = car_direction.dot(car.physics.velocity) / car_velocity_magnitude data[29 + i * car_data_size] = (1 if car.is_super_sonic else -1) @@ -145,7 +149,7 @@ def get_enemy_car(index: int, packet: GameTickPacket) -> PlayerInfo: for index, car in enumerate(packet.game_cars[:packet.num_cars]): if not car or car.team != team: continue car_position = Vec3(car.physics.location) - distance = car_position.distance(ball_position) + distance = car_position.dist(ball_position) if not closest_car or distance < min_distance: closest_car = car diff --git a/bots/util/vec.py b/bots/util/vec.py index 6850e4f..c956fd0 100644 --- a/bots/util/vec.py +++ b/bots/util/vec.py @@ -74,7 +74,12 @@ def dist(self, other: 'Vec3') -> float: def normalized(self): """Returns a vector with the same direction but a length of one.""" - return self / self.length() + length = self.length() + if length == 0: return Vec3(self) + return self / length + + def normalised(self): + return self.normalized() def rescale(self, new_len: float) -> 'Vec3': """Returns a vector with the same direction but a different length.""" From b4f864fa576613fba757944cb3792c70ec1ef32c Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 13:22:49 +0100 Subject: [PATCH 31/76] Update learner.py --- bots/learner/learner.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index d6ffbcc..c06beaf 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -5,7 +5,7 @@ from rlbot.utils.structures.game_data_struct import GameTickPacket sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from util.collect_data import format_data, format_labels, data_size, label_size +from util.collect_data import format_data, format_labels, data_size, label_size, from_labels from teacher.teacher import Teacher from util.dummy_renderer import DummyRenderer @@ -28,20 +28,21 @@ def initialize_agent(self): # Network self.model = tf.keras.Sequential([ layers.Dense(data_size, activation = 'relu', input_shape = (data_size,)), - layers.Dense(data_size, activation = 'relu'), + #layers.Dense(data_size, activation = 'relu'), layers.Dense(label_size, activation = 'relu')]) self.model.compile(optimizer = tf.train.AdamOptimizer(0.001), - loss = 'categorical_crossentropy') + loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: teacher_output = self.teacher.get_output(packet) - data = format_data(self.index, packet, self.get_ball_prediction_struct()).tolist() + data = format_data(self.index, packet, self.get_ball_prediction_struct()).reshape((1, data_size)) #print(data) - labels = format_labels(teacher_output).tolist() + #return self.controller_state + labels = format_labels(teacher_output) output = self.model.predict(data) - self.controller_state = from_labels(output) + self.controller_state = from_labels(output[0]) #self.train(data, labels) From eead64cfa7fdca8d311a400c2a1bd44f5894f8cc Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 13:30:04 +0100 Subject: [PATCH 32/76] Doing something --- bots/learner/learner.py | 16 +++++++--------- bots/util/collect_data.py | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index c06beaf..edef4c9 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -28,23 +28,21 @@ def initialize_agent(self): # Network self.model = tf.keras.Sequential([ layers.Dense(data_size, activation = 'relu', input_shape = (data_size,)), - #layers.Dense(data_size, activation = 'relu'), - layers.Dense(label_size, activation = 'relu')]) + layers.Dense(data_size, activation = 'relu'), + layers.Dense(label_size, activation = 'sigmoid')]) self.model.compile(optimizer = tf.train.AdamOptimizer(0.001), - loss = 'mse') + loss = 'mean_squared_error') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: teacher_output = self.teacher.get_output(packet) data = format_data(self.index, packet, self.get_ball_prediction_struct()).reshape((1, data_size)) - #print(data) - #return self.controller_state - labels = format_labels(teacher_output) + labels = format_labels(teacher_output).reshape((1, label_size)) - output = self.model.predict(data) - self.controller_state = from_labels(output[0]) + output = self.model.predict(data)[0] + self.controller_state = from_labels(output) - #self.train(data, labels) + self.train(data, labels) return self.controller_state diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index c5e12e7..12e6368 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -105,7 +105,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): # Misc data[48] = (1 if packet.game_info.is_kickoff_pause else -1) - data[49] = log(packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds) + data[49] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) data[50] = (1 if packet.game_info.is_round_active else -1) return data From f9d7204d1c9194bbeb4f49423515bc1984ef2f40 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 14:26:07 +0100 Subject: [PATCH 33/76] Fix clamps --- bots/learner/learner.py | 21 ++++++++++++++------- bots/teacher/teacher.py | 5 +++-- bots/util/collect_data.py | 38 +++++++++++++++++++------------------- bots/util/util.py | 7 +++++++ 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index edef4c9..a23a078 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -14,6 +14,7 @@ class Learner(BaseAgent): def initialize_agent(self): self.controller_state = SimpleControllerState() + self.last_time = 0 # Teacher self.teacher = Teacher(self, self.team, self.index) @@ -26,12 +27,13 @@ def initialize_agent(self): #self.tf = tf # Network + regularisation_rate = 0.01 self.model = tf.keras.Sequential([ - layers.Dense(data_size, activation = 'relu', input_shape = (data_size,)), - layers.Dense(data_size, activation = 'relu'), - layers.Dense(label_size, activation = 'sigmoid')]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.001), - loss = 'mean_squared_error') + layers.Dense(data_size, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)), + layers.Dense(data_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)), + layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) + self.model.compile(optimizer = tf.train.AdamOptimizer(0.01), + loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: teacher_output = self.teacher.get_output(packet) @@ -40,10 +42,15 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: labels = format_labels(teacher_output).reshape((1, label_size)) output = self.model.predict(data)[0] - self.controller_state = from_labels(output) + print(labels.tolist(), output.tolist()) - self.train(data, labels) + time = packet.game_info.seconds_elapsed + #if time - self.last_time > 0.1: + if True: + self.train(data, labels) + self.last_time= time + self.controller_state = from_labels(output) return self.controller_state def train(self, data, labels): diff --git a/bots/teacher/teacher.py b/bots/teacher/teacher.py index 5d9df99..8db2e87 100644 --- a/bots/teacher/teacher.py +++ b/bots/teacher/teacher.py @@ -8,6 +8,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from util.orientation import Orientation from util.vec import Vec3 +from util.util import * class Teacher(BaseAgent): @@ -29,13 +30,13 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car_direction = car_orientation.forward steer_correction_radians = find_correction(car_direction, car_to_ball) + #turn = clamp11(steer_correction_radians * -3) + turn = -math.copysign(1, steer_correction_radians) if steer_correction_radians > 0: # Positive radians in the unit circle is a turn to the left. - turn = -1.0 # Negative value for a turn to the left. action_display = "turn left" else: - turn = 1.0 action_display = "turn right" self.controller_state.throttle = 1.0 diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index 12e6368..2280346 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -98,7 +98,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data[26 + i * car_data_size] = car.boost / 100 car_velocity_magnitude = Vec3(car.physics.velocity).length() data[27 + i * car_data_size] = car_velocity_magnitude / pitch_side_uu - data[28 + i * car_data_size] = car_direction.dot(car.physics.velocity) / car_velocity_magnitude + data[28 + i * car_data_size] = car_direction.dot(car.physics.velocity) / max(0.01, car_velocity_magnitude) data[29 + i * car_data_size] = (1 if car.is_super_sonic else -1) data[30 + i * car_data_size] = (1 if car.has_wheel_contact else -1) data[31 + i * car_data_size] = (1 if not car.double_jumped else -1) @@ -113,29 +113,29 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): def format_labels(controls: SimpleControllerState): labels = np.zeros(shape = label_size) # Blank labels - labels[0] = controls.throttle - labels[1] = controls.steer - labels[2] = controls.pitch - labels[3] = controls.yaw - labels[4] = controls.roll - labels[5] = (1 if controls.jump else -1) - labels[6] = (1 if controls.boost else -1) - labels[7] = (1 if controls.handbrake else -1) - labels[8] = (1 if controls.use_item else -1) + labels[0] = transform_clamp(controls.throttle, True) + labels[1] = transform_clamp(controls.steer, True) + labels[2] = transform_clamp(controls.pitch, True) + labels[3] = transform_clamp(controls.yaw, True) + labels[4] = transform_clamp(controls.roll, True) + labels[5] = (1 if controls.jump else 0) + labels[6] = (1 if controls.boost else 0) + labels[7] = (1 if controls.handbrake else 0) + labels[8] = (1 if controls.use_item else 0) return labels def from_labels(labels) -> SimpleControllerState: controls = SimpleControllerState() - controls.throttle = clamp11(labels[0]) - controls.steer = clamp11(labels[1]) - controls.pitch = clamp11(labels[2]) - controls.yaw = clamp11(labels[3]) - controls.roll = clamp11(labels[4]) - controls.jump = (labels[5] > 0) - controls.boost = (labels[6] > 0) - controls.handbrake = (labels[7] > 0) - controls.use_item = (labels[8] > 0) + controls.throttle = clamp11(transform_clamp(labels[0], False)) + controls.steer = clamp11(transform_clamp(labels[1], False)) + controls.pitch = clamp11(transform_clamp(labels[2], False)) + controls.yaw = clamp11(transform_clamp(labels[3], False)) + controls.roll = clamp11(transform_clamp(labels[4], False)) + controls.jump = (labels[5] > 0.5) + controls.boost = (labels[6] > 0.5) + controls.handbrake = (labels[7] > 0.5) + controls.use_item = (labels[8] > 0.5) return controls diff --git a/bots/util/util.py b/bots/util/util.py index 901f71b..247e02b 100644 --- a/bots/util/util.py +++ b/bots/util/util.py @@ -1,2 +1,9 @@ def clamp11(value): return max(-1, min(1, value)) + +def clamp01(value): + return max(0, min(1, value)) + +def transform_clamp(value, forwards: bool): + if forwards: return (value + 1) / 2 + return value * 2 - 1 From 43ec6567414dabbc3ffdc77f351c47ce7efb0209 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 14:44:11 +0100 Subject: [PATCH 34/76] Update learner.py --- bots/learner/learner.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index a23a078..7c38e48 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -6,7 +6,6 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from util.collect_data import format_data, format_labels, data_size, label_size, from_labels -from teacher.teacher import Teacher from util.dummy_renderer import DummyRenderer @@ -15,8 +14,12 @@ class Learner(BaseAgent): def initialize_agent(self): self.controller_state = SimpleControllerState() self.last_time = 0 + self.delta_time = None # Teacher + #from teacher.teacher import Teacher + sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\Atba2') + from atba2 import Atba2 as Teacher self.teacher = Teacher(self, self.team, self.index) self.teacher.initialize_agent() self.teacher.renderer = DummyRenderer(self.renderer) @@ -42,13 +45,13 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: labels = format_labels(teacher_output).reshape((1, label_size)) output = self.model.predict(data)[0] - print(labels.tolist(), output.tolist()) + #print(labels.tolist(), output.tolist()) time = packet.game_info.seconds_elapsed - #if time - self.last_time > 0.1: - if True: + if self.delta_time is None or time - self.last_time > self.delta_time: + #if True: self.train(data, labels) - self.last_time= time + self.last_time = time self.controller_state = from_labels(output) return self.controller_state From b813501dffe3c3db8551b0d2671545c877932025 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 14:45:03 +0100 Subject: [PATCH 35/76] Update learner.py --- bots/learner/learner.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 7c38e48..f651066 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -17,9 +17,11 @@ def initialize_agent(self): self.delta_time = None # Teacher - #from teacher.teacher import Teacher - sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\Atba2') - from atba2 import Atba2 as Teacher + try: + sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\Atba2') + from atba2 import Atba2 as Teacher + except: + from teacher.teacher import Teacher self.teacher = Teacher(self, self.team, self.index) self.teacher.initialize_agent() self.teacher.renderer = DummyRenderer(self.renderer) From 676d650cb6b8ac39d0f884e92f8d137635fab535 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 14:57:36 +0100 Subject: [PATCH 36/76] try Rash --- bots/learner/learner.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index f651066..1323583 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -18,9 +18,10 @@ def initialize_agent(self): # Teacher try: - sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\Atba2') - from atba2 import Atba2 as Teacher - except: + sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\rashBot') + from Agent import RashBot as Teacher + except Exception as e: + print(e) from teacher.teacher import Teacher self.teacher = Teacher(self, self.team, self.index) self.teacher.initialize_agent() From 6e567c28af0d1fd6a6a7ba3f6dc1dcc1bc4ee906 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 15:06:37 +0100 Subject: [PATCH 37/76] Angular velocity --- bots/util/collect_data.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/bots/util/collect_data.py b/bots/util/collect_data.py index 2280346..2b4c004 100644 --- a/bots/util/collect_data.py +++ b/bots/util/collect_data.py @@ -10,6 +10,7 @@ CARS: our car: (X, Y, Z) / pitch width our car nose: X, Y, Z +local angular velocity: X, Y, Z local ball normalised: X, Y, Z our ball distance / pitch width our car boost / 100 @@ -39,8 +40,8 @@ from .util import * -data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 7) * 2 + 3) -car_data_size = 16 +data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 7) * 2 + 3) +car_data_size = 19 label_size = 9 @@ -102,11 +103,15 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data[29 + i * car_data_size] = (1 if car.is_super_sonic else -1) data[30 + i * car_data_size] = (1 if car.has_wheel_contact else -1) data[31 + i * car_data_size] = (1 if not car.double_jumped else -1) + ang_vel = relative_location(Vec3(0, 0, 0), car_orientation, Vec3(car.physics.angular_velocity)) + data[32 + i * car_data_size] = ang_vel.x + data[33 + i * car_data_size] = ang_vel.y + data[34 + i * car_data_size] = ang_vel.z # Misc - data[48] = (1 if packet.game_info.is_kickoff_pause else -1) - data[49] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) - data[50] = (1 if packet.game_info.is_round_active else -1) + data[54] = (1 if packet.game_info.is_kickoff_pause else -1) + data[55] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) + data[56] = (1 if packet.game_info.is_round_active else -1) return data From a10436495d360026d3682befa16273f054ccd4d6 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 15:28:12 +0100 Subject: [PATCH 38/76] Dummy --- bots/learner/learner.py | 14 +++++++++++--- bots/util/dummy_renderer.py | 3 +++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 1323583..876c0ee 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -9,6 +9,9 @@ from util.dummy_renderer import DummyRenderer +dummy_render = False + + class Learner(BaseAgent): def initialize_agent(self): @@ -24,9 +27,9 @@ def initialize_agent(self): print(e) from teacher.teacher import Teacher self.teacher = Teacher(self, self.team, self.index) + self.reset_teacher_functions() self.teacher.initialize_agent() - self.teacher.renderer = DummyRenderer(self.renderer) - + # Tensorflow import tensorflow as tf from tensorflow.keras import layers @@ -42,6 +45,7 @@ def initialize_agent(self): loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: + self.reset_teacher_functions() teacher_output = self.teacher.get_output(packet) data = format_data(self.index, packet, self.get_ball_prediction_struct()).reshape((1, data_size)) @@ -62,4 +66,8 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: def train(self, data, labels): self.model.fit([data], [labels], epochs = 1) - + def reset_teacher_functions(self): + if dummy_render: + self.teacher.renderer = DummyRenderer(self.renderer) + else: + self.teacher.renderer = self.renderer diff --git a/bots/util/dummy_renderer.py b/bots/util/dummy_renderer.py index 8524ba1..f1b5ef9 100644 --- a/bots/util/dummy_renderer.py +++ b/bots/util/dummy_renderer.py @@ -46,3 +46,6 @@ def begin_rendering(self, group_id='default'): def end_rendering(self): pass + + def clear_all_touched_render_groups(self): + pass From 60492bb3b25b0879382dd7d9e219e958fec9abdf Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 16:01:54 +0100 Subject: [PATCH 39/76] Util -> Utility + Ensure a safer start for the teacher --- bots/learner/learner.py | 19 ++++++++++++------- bots/teacher/teacher.py | 6 +++--- bots/{util => utility}/__init__.py | 0 bots/{util => utility}/collect_data.py | 4 ++-- bots/{util => utility}/constants.py | 0 bots/{util => utility}/dummy_renderer.py | 0 bots/{util => utility}/orientation.py | 2 +- bots/{util/util.py => utility/utility.py} | 0 bots/{util => utility}/vec.py | 0 9 files changed, 18 insertions(+), 13 deletions(-) rename bots/{util => utility}/__init__.py (100%) rename bots/{util => utility}/collect_data.py (98%) rename bots/{util => utility}/constants.py (100%) rename bots/{util => utility}/dummy_renderer.py (100%) rename bots/{util => utility}/orientation.py (98%) rename bots/{util/util.py => utility/utility.py} (100%) rename bots/{util => utility}/vec.py (100%) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 876c0ee..d8fc61c 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -5,8 +5,8 @@ from rlbot.utils.structures.game_data_struct import GameTickPacket sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from util.collect_data import format_data, format_labels, data_size, label_size, from_labels -from util.dummy_renderer import DummyRenderer +from utility.collect_data import format_data, format_labels, data_size, label_size, from_labels +from utility.dummy_renderer import DummyRenderer dummy_render = False @@ -21,13 +21,13 @@ def initialize_agent(self): # Teacher try: - sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\rashBot') - from Agent import RashBot as Teacher + sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\Stick') + from Agent import Stick as Teacher except Exception as e: print(e) from teacher.teacher import Teacher self.teacher = Teacher(self, self.team, self.index) - self.reset_teacher_functions() + self.reset_teacher_functions(first_time = True) self.teacher.initialize_agent() # Tensorflow @@ -64,10 +64,15 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: return self.controller_state def train(self, data, labels): - self.model.fit([data], [labels], epochs = 1) + self.model.fit([data], [labels], epochs = 5) - def reset_teacher_functions(self): + def reset_teacher_functions(self, first_time: bool = False): if dummy_render: self.teacher.renderer = DummyRenderer(self.renderer) else: self.teacher.renderer = self.renderer + + if first_time: + self.teacher.get_field_info = self.get_field_info + self.teacher.get_ball_prediction_struct = self.get_ball_prediction_struct + self.teacher.send_quick_chat = self.send_quick_chat diff --git a/bots/teacher/teacher.py b/bots/teacher/teacher.py index 8db2e87..b0f3bc9 100644 --- a/bots/teacher/teacher.py +++ b/bots/teacher/teacher.py @@ -6,9 +6,9 @@ from rlbot.utils.structures.game_data_struct import GameTickPacket sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -from util.orientation import Orientation -from util.vec import Vec3 -from util.util import * +from utility.orientation import Orientation +from utility.vec import Vec3 +from utility.util import * class Teacher(BaseAgent): diff --git a/bots/util/__init__.py b/bots/utility/__init__.py similarity index 100% rename from bots/util/__init__.py rename to bots/utility/__init__.py diff --git a/bots/util/collect_data.py b/bots/utility/collect_data.py similarity index 98% rename from bots/util/collect_data.py rename to bots/utility/collect_data.py index 2b4c004..0a844ab 100644 --- a/bots/util/collect_data.py +++ b/bots/utility/collect_data.py @@ -37,7 +37,7 @@ from .vec import Vec3 from .constants import * from .orientation import Orientation, relative_location -from .util import * +from .utility import * data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 7) * 2 + 3) @@ -126,7 +126,7 @@ def format_labels(controls: SimpleControllerState): labels[5] = (1 if controls.jump else 0) labels[6] = (1 if controls.boost else 0) labels[7] = (1 if controls.handbrake else 0) - labels[8] = (1 if controls.use_item else 0) + labels[8] = (1 if hasattr(controls, 'use_item') and controls.use_item else 0) return labels diff --git a/bots/util/constants.py b/bots/utility/constants.py similarity index 100% rename from bots/util/constants.py rename to bots/utility/constants.py diff --git a/bots/util/dummy_renderer.py b/bots/utility/dummy_renderer.py similarity index 100% rename from bots/util/dummy_renderer.py rename to bots/utility/dummy_renderer.py diff --git a/bots/util/orientation.py b/bots/utility/orientation.py similarity index 98% rename from bots/util/orientation.py rename to bots/utility/orientation.py index 2cf2e9a..a2d54ed 100644 --- a/bots/util/orientation.py +++ b/bots/utility/orientation.py @@ -1,6 +1,6 @@ import math -from util.vec import Vec3 +from utility.vec import Vec3 # This is a helper class for calculating directions relative to your car. You can extend it or delete if you want. diff --git a/bots/util/util.py b/bots/utility/utility.py similarity index 100% rename from bots/util/util.py rename to bots/utility/utility.py diff --git a/bots/util/vec.py b/bots/utility/vec.py similarity index 100% rename from bots/util/vec.py rename to bots/utility/vec.py From bcad5c7e3254d684ca6acd299c3a7e9064b55462 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 16:22:08 +0100 Subject: [PATCH 40/76] Let the model play on its own It's awful --- bots/learner/learner.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index d8fc61c..724131f 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -37,26 +37,30 @@ def initialize_agent(self): # Network regularisation_rate = 0.01 - self.model = tf.keras.Sequential([ - layers.Dense(data_size, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)), - layers.Dense(data_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)), + self.model = tf.keras.Sequential([\ + layers.Dense(data_size, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.01), + self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: - self.reset_teacher_functions() - teacher_output = self.teacher.get_output(packet) - + self.play_on_own = (packet.game_info.seconds_elapsed > 120) + data = format_data(self.index, packet, self.get_ball_prediction_struct()).reshape((1, data_size)) - labels = format_labels(teacher_output).reshape((1, label_size)) + labels = None + + if not self.play_on_own: + self.reset_teacher_functions() + teacher_output = self.teacher.get_output(packet) + labels = format_labels(teacher_output).reshape((1, label_size)) output = self.model.predict(data)[0] #print(labels.tolist(), output.tolist()) time = packet.game_info.seconds_elapsed - if self.delta_time is None or time - self.last_time > self.delta_time: - #if True: + if (self.delta_time is None or time - self.last_time > self.delta_time)\ + and not self.play_on_own: self.train(data, labels) self.last_time = time @@ -64,7 +68,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: return self.controller_state def train(self, data, labels): - self.model.fit([data], [labels], epochs = 5) + self.model.fit([data], [labels], epochs = 10) def reset_teacher_functions(self, first_time: bool = False): if dummy_render: From 9b856297708614c73b94c8752de9ea61601401ee Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 10 Jul 2019 21:52:12 +0100 Subject: [PATCH 41/76] Train after a set amount of time --- bots/learner/learner.py | 40 ++++++++++++++++++++++++++-------------- bots/teacher/teacher.py | 6 +++--- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 724131f..bfa93e2 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -17,15 +17,22 @@ class Learner(BaseAgent): def initialize_agent(self): self.controller_state = SimpleControllerState() self.last_time = 0 - self.delta_time = None + + # Variables + self.delta_time = 0.1 + self.play_on_own = False + + # Data and labels + self.gathered_data = [] + self.gathered_labels = [] # Teacher try: - sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\Stick') - from Agent import Stick as Teacher + sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Atba2') + from atba2 import Atba2 as Teacher except Exception as e: print(e) - from teacher.teacher import Teacher + from teacher import Teacher self.teacher = Teacher(self, self.team, self.index) self.reset_teacher_functions(first_time = True) self.teacher.initialize_agent() @@ -36,39 +43,44 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.01 + regularisation_rate = 10 self.model = tf.keras.Sequential([\ layers.Dense(data_size, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(data_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ + self.model.compile(optimizer = tf.train.AdamOptimizer(0.005),\ loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: - self.play_on_own = (packet.game_info.seconds_elapsed > 120) - - data = format_data(self.index, packet, self.get_ball_prediction_struct()).reshape((1, data_size)) + data = format_data(self.index, packet, self.get_ball_prediction_struct()) labels = None if not self.play_on_own: self.reset_teacher_functions() teacher_output = self.teacher.get_output(packet) - labels = format_labels(teacher_output).reshape((1, label_size)) + labels = format_labels(teacher_output) - output = self.model.predict(data)[0] - #print(labels.tolist(), output.tolist()) + self.gathered_data.append(data) + self.gathered_labels.append(labels) + + #print(len(self.gathered_data)) + + output = self.model.predict(data.reshape((1, data_size)))[0] time = packet.game_info.seconds_elapsed if (self.delta_time is None or time - self.last_time > self.delta_time)\ and not self.play_on_own: - self.train(data, labels) + self.train(self.gathered_data, self.gathered_labels) self.last_time = time + + self.gathered_data.clear() + self.gathered_labels.clear() self.controller_state = from_labels(output) return self.controller_state def train(self, data, labels): - self.model.fit([data], [labels], epochs = 10) + self.model.fit([data], [labels], epochs = 1) def reset_teacher_functions(self, first_time: bool = False): if dummy_render: diff --git a/bots/teacher/teacher.py b/bots/teacher/teacher.py index b0f3bc9..042b79f 100644 --- a/bots/teacher/teacher.py +++ b/bots/teacher/teacher.py @@ -8,7 +8,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utility.orientation import Orientation from utility.vec import Vec3 -from utility.util import * +from utility.utility import * class Teacher(BaseAgent): @@ -30,8 +30,8 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car_direction = car_orientation.forward steer_correction_radians = find_correction(car_direction, car_to_ball) - #turn = clamp11(steer_correction_radians * -3) - turn = -math.copysign(1, steer_correction_radians) + turn = clamp11(steer_correction_radians * -3) + #turn = -math.copysign(1, steer_correction_radians) if steer_correction_radians > 0: # Positive radians in the unit circle is a turn to the left. From 172fa6aef0308fbbfa1ac7ea688dfa440006e2b2 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 10:41:56 +0100 Subject: [PATCH 42/76] Trying out different learning --- bots/learner/learner.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index bfa93e2..0c6c0f6 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -1,6 +1,8 @@ import os import sys +from random import shuffle +import numpy as np from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket @@ -19,7 +21,8 @@ def initialize_agent(self): self.last_time = 0 # Variables - self.delta_time = 0.1 + self.epochs = 1000 + self.step_size = 250 self.play_on_own = False # Data and labels @@ -43,15 +46,18 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 10 + regularisation_rate = 0.1 self.model = tf.keras.Sequential([\ - layers.Dense(data_size, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(data_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size / 2, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size / 2, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.005),\ + self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: + if not packet.game_info.is_round_active or packet.game_cars[self.index].is_demolished: + return self.controller_state + data = format_data(self.index, packet, self.get_ball_prediction_struct()) labels = None @@ -67,20 +73,22 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: output = self.model.predict(data.reshape((1, data_size)))[0] - time = packet.game_info.seconds_elapsed - if (self.delta_time is None or time - self.last_time > self.delta_time)\ + if (self.step_size is None or len(self.gathered_data) % self.step_size == 0)\ and not self.play_on_own: - self.train(self.gathered_data, self.gathered_labels) - self.last_time = time - - self.gathered_data.clear() - self.gathered_labels.clear() + c = list(zip(self.gathered_data, self.gathered_labels)) + shuffle(c) + data, labels = zip(*c) + + self.train(data[:self.step_size], labels[:self.step_size]) + + '''self.gathered_data.clear() + self.gathered_labels.clear()''' self.controller_state = from_labels(output) return self.controller_state def train(self, data, labels): - self.model.fit([data], [labels], epochs = 1) + self.model.fit([data], [labels], epochs = self.epochs) def reset_teacher_functions(self, first_time: bool = False): if dummy_render: From 1bc820beb4feeec5ab233935f29ddbeb858ae008 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 11:02:27 +0100 Subject: [PATCH 43/76] Update learner.py --- bots/learner/learner.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 0c6c0f6..907ccfb 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -21,9 +21,10 @@ def initialize_agent(self): self.last_time = 0 # Variables - self.epochs = 1000 - self.step_size = 250 + self.epochs = 20 + self.step_size = 100 self.play_on_own = False + self.use_recent_data = True # Data and labels self.gathered_data = [] @@ -46,13 +47,13 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.1 + regularisation_rate = 0.01 self.model = tf.keras.Sequential([\ - layers.Dense(data_size / 2, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(data_size / 2, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ - loss = 'mse') + layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(label_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) + self.model.compile(optimizer = tf.train.AdamOptimizer(10),\ + loss = 'mae') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: if not packet.game_info.is_round_active or packet.game_cars[self.index].is_demolished: @@ -81,8 +82,9 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.train(data[:self.step_size], labels[:self.step_size]) - '''self.gathered_data.clear() - self.gathered_labels.clear()''' + if self.use_recent_data: + self.gathered_data.clear() + self.gathered_labels.clear() self.controller_state = from_labels(output) return self.controller_state From 07fe5195f55c888a91518e830d8204662d5ce879 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 11:06:40 +0100 Subject: [PATCH 44/76] Format labels in a more friendly way --- bots/learner/learner.py | 5 +++-- bots/utility/collect_data.py | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 907ccfb..b7ad114 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -56,7 +56,8 @@ def initialize_agent(self): loss = 'mae') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: - if not packet.game_info.is_round_active or packet.game_cars[self.index].is_demolished: + car = packet.game_cars[self.index] + if not packet.game_info.is_round_active or car.is_demolished: return self.controller_state data = format_data(self.index, packet, self.get_ball_prediction_struct()) @@ -65,7 +66,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: if not self.play_on_own: self.reset_teacher_functions() teacher_output = self.teacher.get_output(packet) - labels = format_labels(teacher_output) + labels = format_labels(teacher_output, car.has_wheel_contact) self.gathered_data.append(data) self.gathered_labels.append(labels) diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 0a844ab..be364e2 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -116,13 +116,13 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): return data -def format_labels(controls: SimpleControllerState): +def format_labels(controls: SimpleControllerState, wheel_contact: bool): labels = np.zeros(shape = label_size) # Blank labels - labels[0] = transform_clamp(controls.throttle, True) + labels[0] = (1 if controls.boost else transform_clamp(controls.throttle, True)) labels[1] = transform_clamp(controls.steer, True) - labels[2] = transform_clamp(controls.pitch, True) - labels[3] = transform_clamp(controls.yaw, True) - labels[4] = transform_clamp(controls.roll, True) + labels[2] = (transform_clamp(controls.pitch, True) if wheel_contact else 0) + labels[3] = (transform_clamp(controls.yaw, True) if wheel_contact else 0) + labels[4] = (transform_clamp(controls.roll, True) if wheel_contact else 0) labels[5] = (1 if controls.jump else 0) labels[6] = (1 if controls.boost else 0) labels[7] = (1 if controls.handbrake else 0) From 79f1bc9de471695ff6335500b192b156a637a6e4 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 11:50:03 +0100 Subject: [PATCH 45/76] Update learner.py --- bots/learner/learner.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index b7ad114..c35ef78 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -21,10 +21,10 @@ def initialize_agent(self): self.last_time = 0 # Variables - self.epochs = 20 - self.step_size = 100 + self.epochs = 5 + self.step_size = 30 self.play_on_own = False - self.use_recent_data = True + self.max_data_size = 500 # Data and labels self.gathered_data = [] @@ -47,13 +47,13 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.01 + regularisation_rate = 0.001 self.model = tf.keras.Sequential([\ - layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size, activation = 'tanh', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(10),\ - loss = 'mae') + self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ + loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -63,6 +63,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: data = format_data(self.index, packet, self.get_ball_prediction_struct()) labels = None + # Get the labels if not self.play_on_own: self.reset_teacher_functions() teacher_output = self.teacher.get_output(packet) @@ -71,10 +72,10 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.gathered_data.append(data) self.gathered_labels.append(labels) - #print(len(self.gathered_data)) - + # Get our own predicted output output = self.model.predict(data.reshape((1, data_size)))[0] + # Train if (self.step_size is None or len(self.gathered_data) % self.step_size == 0)\ and not self.play_on_own: c = list(zip(self.gathered_data, self.gathered_labels)) @@ -83,9 +84,10 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.train(data[:self.step_size], labels[:self.step_size]) - if self.use_recent_data: - self.gathered_data.clear() - self.gathered_labels.clear() + if self.max_data_size and len(self.gathered_data) > self.max_data_size: + for i in range(len(self.gathered_data) - self.max_data_size): + del self.gathered_data[0] + del self.gathered_labels[0] self.controller_state = from_labels(output) return self.controller_state From 650913f29073d6b9c169b8716109450a9b24936e Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 13:45:46 +0100 Subject: [PATCH 46/76] Realise I messed up the labels + other changes --- bots/learner/learner.py | 25 ++++++++++++++----------- bots/utility/collect_data.py | 10 +++++----- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index c35ef78..bc9916b 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -21,10 +21,10 @@ def initialize_agent(self): self.last_time = 0 # Variables - self.epochs = 5 - self.step_size = 30 + self.epochs = 1 + self.step_size = 250 self.play_on_own = False - self.max_data_size = 500 + self.max_data_size = 1000 # Data and labels self.gathered_data = [] @@ -32,8 +32,10 @@ def initialize_agent(self): # Teacher try: - sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Atba2') - from atba2 import Atba2 as Teacher + '''sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Atba2') + from atba2 import Atba2 as Teacher''' + sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\rashBot') + from Agent import RashBot as Teacher except Exception as e: print(e) from teacher import Teacher @@ -47,13 +49,13 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.001 + regularisation_rate = 0.0001 self.model = tf.keras.Sequential([\ - layers.Dense(data_size, activation = 'tanh', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(data_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(label_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) + layers.Dense(data_size / 2, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size / 2, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ - loss = 'mse') + loss = 'categorical_crossentropy') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -67,13 +69,14 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: if not self.play_on_own: self.reset_teacher_functions() teacher_output = self.teacher.get_output(packet) - labels = format_labels(teacher_output, car.has_wheel_contact) + labels = format_labels(teacher_output, car) self.gathered_data.append(data) self.gathered_labels.append(labels) # Get our own predicted output output = self.model.predict(data.reshape((1, data_size)))[0] + print(labels.tolist(), output.tolist()) # Train if (self.step_size is None or len(self.gathered_data) % self.step_size == 0)\ diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index be364e2..2d29422 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -116,13 +116,13 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): return data -def format_labels(controls: SimpleControllerState, wheel_contact: bool): +def format_labels(controls: SimpleControllerState, car: PlayerInfo): labels = np.zeros(shape = label_size) # Blank labels - labels[0] = (1 if controls.boost else transform_clamp(controls.throttle, True)) + labels[0] = (1 if controls.boost and car.boost >= 1 else transform_clamp(controls.throttle, True)) labels[1] = transform_clamp(controls.steer, True) - labels[2] = (transform_clamp(controls.pitch, True) if wheel_contact else 0) - labels[3] = (transform_clamp(controls.yaw, True) if wheel_contact else 0) - labels[4] = (transform_clamp(controls.roll, True) if wheel_contact else 0) + labels[2] = (0 if car.has_wheel_contact else transform_clamp(controls.pitch, True)) + labels[3] = (0 if car.has_wheel_contact else transform_clamp(controls.yaw, True)) + labels[4] = (0 if car.has_wheel_contact else transform_clamp(controls.roll, True)) labels[5] = (1 if controls.jump else 0) labels[6] = (1 if controls.boost else 0) labels[7] = (1 if controls.handbrake else 0) From 6af701dd770d72cc10f1a7cf8891a91fdb01173f Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 13:49:20 +0100 Subject: [PATCH 47/76] Clamp --- bots/utility/collect_data.py | 10 +++++----- bots/utility/utility.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 2d29422..b9d23c9 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -132,11 +132,11 @@ def format_labels(controls: SimpleControllerState, car: PlayerInfo): def from_labels(labels) -> SimpleControllerState: controls = SimpleControllerState() - controls.throttle = clamp11(transform_clamp(labels[0], False)) - controls.steer = clamp11(transform_clamp(labels[1], False)) - controls.pitch = clamp11(transform_clamp(labels[2], False)) - controls.yaw = clamp11(transform_clamp(labels[3], False)) - controls.roll = clamp11(transform_clamp(labels[4], False)) + controls.throttle = transform_clamp(labels[0], False) + controls.steer = transform_clamp(labels[1], False) + controls.pitch = transform_clamp(labels[2], False) + controls.yaw = transform_clamp(labels[3], False) + controls.roll = transform_clamp(labels[4], False) controls.jump = (labels[5] > 0.5) controls.boost = (labels[6] > 0.5) controls.handbrake = (labels[7] > 0.5) diff --git a/bots/utility/utility.py b/bots/utility/utility.py index 247e02b..608e567 100644 --- a/bots/utility/utility.py +++ b/bots/utility/utility.py @@ -5,5 +5,5 @@ def clamp01(value): return max(0, min(1, value)) def transform_clamp(value, forwards: bool): - if forwards: return (value + 1) / 2 - return value * 2 - 1 + if forwards: return clamp01((value + 1) / 2) + return clamp11(value * 2 - 1) From 4acf994b7fa2bc160edb5214435d78d1b6fb694b Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 14:05:21 +0100 Subject: [PATCH 48/76] Decent --- bots/learner/learner.py | 20 ++++++++++---------- bots/utility/collect_data.py | 20 ++++++++++---------- bots/utility/utility.py | 4 ---- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index bc9916b..ec16812 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -22,9 +22,9 @@ def initialize_agent(self): # Variables self.epochs = 1 - self.step_size = 250 + self.step_size = 1 self.play_on_own = False - self.max_data_size = 1000 + self.max_data_size = 1 # Data and labels self.gathered_data = [] @@ -49,13 +49,13 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.0001 + regularisation_rate = 0.00001 self.model = tf.keras.Sequential([\ - layers.Dense(data_size / 2, activation = 'sigmoid', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(data_size / 2, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(label_size, activation = 'sigmoid', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.01),\ - loss = 'categorical_crossentropy') + layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ + layers.Dense(label_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) + self.model.compile(optimizer = tf.train.AdamOptimizer(0.001),\ + loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -87,8 +87,8 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.train(data[:self.step_size], labels[:self.step_size]) - if self.max_data_size and len(self.gathered_data) > self.max_data_size: - for i in range(len(self.gathered_data) - self.max_data_size): + if self.max_data_size and len(self.gathered_data) >= self.max_data_size: + for i in range(1 + len(self.gathered_data) - self.max_data_size): del self.gathered_data[0] del self.gathered_labels[0] diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index b9d23c9..e005d4a 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -118,11 +118,11 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): def format_labels(controls: SimpleControllerState, car: PlayerInfo): labels = np.zeros(shape = label_size) # Blank labels - labels[0] = (1 if controls.boost and car.boost >= 1 else transform_clamp(controls.throttle, True)) - labels[1] = transform_clamp(controls.steer, True) - labels[2] = (0 if car.has_wheel_contact else transform_clamp(controls.pitch, True)) - labels[3] = (0 if car.has_wheel_contact else transform_clamp(controls.yaw, True)) - labels[4] = (0 if car.has_wheel_contact else transform_clamp(controls.roll, True)) + labels[0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) + labels[1] = clamp11(controls.steer) + labels[2] = (0 if car.has_wheel_contact else clamp11(controls.pitch)) + labels[3] = (0 if car.has_wheel_contact else clamp11(controls.yaw)) + labels[4] = (0 if car.has_wheel_contact else clamp11(controls.roll)) labels[5] = (1 if controls.jump else 0) labels[6] = (1 if controls.boost else 0) labels[7] = (1 if controls.handbrake else 0) @@ -132,11 +132,11 @@ def format_labels(controls: SimpleControllerState, car: PlayerInfo): def from_labels(labels) -> SimpleControllerState: controls = SimpleControllerState() - controls.throttle = transform_clamp(labels[0], False) - controls.steer = transform_clamp(labels[1], False) - controls.pitch = transform_clamp(labels[2], False) - controls.yaw = transform_clamp(labels[3], False) - controls.roll = transform_clamp(labels[4], False) + controls.throttle = clamp11(labels[0]) + controls.steer = clamp11(labels[1]) + controls.pitch = clamp11(labels[2]) + controls.yaw = clamp11(labels[3]) + controls.roll = clamp11(labels[4]) controls.jump = (labels[5] > 0.5) controls.boost = (labels[6] > 0.5) controls.handbrake = (labels[7] > 0.5) diff --git a/bots/utility/utility.py b/bots/utility/utility.py index 608e567..a249634 100644 --- a/bots/utility/utility.py +++ b/bots/utility/utility.py @@ -3,7 +3,3 @@ def clamp11(value): def clamp01(value): return max(0, min(1, value)) - -def transform_clamp(value, forwards: bool): - if forwards: return clamp01((value + 1) / 2) - return clamp11(value * 2 - 1) From 1250946ae78f5390341ed206b220056ad2635d3d Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 14:34:34 +0100 Subject: [PATCH 49/76] Update learner.py --- bots/learner/learner.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index ec16812..269f2ee 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -11,7 +11,7 @@ from utility.dummy_renderer import DummyRenderer -dummy_render = False +dummy_render = True class Learner(BaseAgent): @@ -21,10 +21,10 @@ def initialize_agent(self): self.last_time = 0 # Variables - self.epochs = 1 - self.step_size = 1 + self.epochs = 25 + self.step_size = 100 + self.max_data_size = 300 self.play_on_own = False - self.max_data_size = 1 # Data and labels self.gathered_data = [] @@ -49,7 +49,7 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.00001 + regularisation_rate = 0.000001 self.model = tf.keras.Sequential([\ layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ @@ -76,21 +76,27 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: # Get our own predicted output output = self.model.predict(data.reshape((1, data_size)))[0] - print(labels.tolist(), output.tolist()) + #print(labels.tolist(), output.tolist()) # Train - if (self.step_size is None or len(self.gathered_data) % self.step_size == 0)\ + print(len(self.gathered_data)) + self.renderer.begin_rendering('Status') + if (self.step_size is None or len(self.gathered_data) >= self.max_data_size)\ and not self.play_on_own: + self.renderer.draw_string_2d(10, 10, 2, 2, 'Training', self.renderer.blue()) + self.renderer.end_rendering() + c = list(zip(self.gathered_data, self.gathered_labels)) shuffle(c) data, labels = zip(*c) - + self.train(data[:self.step_size], labels[:self.step_size]) - if self.max_data_size and len(self.gathered_data) >= self.max_data_size: - for i in range(1 + len(self.gathered_data) - self.max_data_size): - del self.gathered_data[0] - del self.gathered_labels[0] + self.gathered_data.clear() + self.gathered_labels.clear() + else: + self.renderer.draw_string_2d(10, 10, 2, 2, 'Playing', self.renderer.white()) + self.renderer.end_rendering() self.controller_state = from_labels(output) return self.controller_state From 25adc6dc3670272f949532d2026462b7809f75b7 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 11 Jul 2019 16:33:22 +0100 Subject: [PATCH 50/76] Update learner.py --- bots/learner/learner.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 269f2ee..702ede2 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -11,7 +11,7 @@ from utility.dummy_renderer import DummyRenderer -dummy_render = True +dummy_render = False class Learner(BaseAgent): @@ -21,9 +21,9 @@ def initialize_agent(self): self.last_time = 0 # Variables - self.epochs = 25 - self.step_size = 100 - self.max_data_size = 300 + self.epochs = 40 + self.steps_used = 0.35 + self.training_steps = 200 self.play_on_own = False # Data and labels @@ -32,10 +32,10 @@ def initialize_agent(self): # Teacher try: - '''sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Atba2') - from atba2 import Atba2 as Teacher''' - sys.path.append(r'C:\Users\wood3\Documents\RLBot\Bots\rashBot') - from Agent import RashBot as Teacher + sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Dweller') + from dweller import Dweller as Teacher + '''sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Skybot') + from SkyBot import SkyBot as Teacher''' except Exception as e: print(e) from teacher import Teacher @@ -49,12 +49,12 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.000001 + regularisation_rate = 0.0000001 self.model = tf.keras.Sequential([\ layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.001),\ + self.model.compile(optimizer = tf.train.AdamOptimizer(0.00015),\ loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: @@ -81,7 +81,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: # Train print(len(self.gathered_data)) self.renderer.begin_rendering('Status') - if (self.step_size is None or len(self.gathered_data) >= self.max_data_size)\ + if len(self.gathered_data) >= self.training_steps\ and not self.play_on_own: self.renderer.draw_string_2d(10, 10, 2, 2, 'Training', self.renderer.blue()) self.renderer.end_rendering() @@ -90,7 +90,8 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: shuffle(c) data, labels = zip(*c) - self.train(data[:self.step_size], labels[:self.step_size]) + steps = int(self.training_steps * self.steps_used) + self.train(data[:steps], labels[:steps]) self.gathered_data.clear() self.gathered_labels.clear() From 125ef6ebeca400c32258b51547bfd60ccd9604c1 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 12 Jul 2019 10:29:26 +0100 Subject: [PATCH 51/76] I left this for a while and it seemed to learn something --- bots/learner/learner.py | 37 +++++++++++++++++++++++-------- bots/{data => models}/__init__.py | 0 bots/utility/collect_data.py | 23 ++++++++++++++----- 3 files changed, 45 insertions(+), 15 deletions(-) rename bots/{data => models}/__init__.py (100%) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 702ede2..848f480 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -18,13 +18,14 @@ class Learner(BaseAgent): def initialize_agent(self): self.controller_state = SimpleControllerState() - self.last_time = 0 + self.last_save = 0 # Variables - self.epochs = 40 - self.steps_used = 0.35 - self.training_steps = 200 + self.epochs = 30 + self.steps_used = 0.25 + self.training_steps = 250 self.play_on_own = False + self.save_time = 60 # Data and labels self.gathered_data = [] @@ -49,12 +50,12 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.0000001 + regularisation_rate = 0.00000001 self.model = tf.keras.Sequential([\ layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.00015),\ + self.model.compile(optimizer = tf.train.AdamOptimizer(0.0005),\ loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: @@ -79,25 +80,35 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: #print(labels.tolist(), output.tolist()) # Train - print(len(self.gathered_data)) + #print(len(self.gathered_data)) self.renderer.begin_rendering('Status') if len(self.gathered_data) >= self.training_steps\ and not self.play_on_own: self.renderer.draw_string_2d(10, 10, 2, 2, 'Training', self.renderer.blue()) self.renderer.end_rendering() - + + # Randomise data and labels c = list(zip(self.gathered_data, self.gathered_labels)) shuffle(c) data, labels = zip(*c) + # Begin training steps = int(self.training_steps * self.steps_used) self.train(data[:steps], labels[:steps]) self.gathered_data.clear() self.gathered_labels.clear() else: - self.renderer.draw_string_2d(10, 10, 2, 2, 'Playing', self.renderer.white()) + self.renderer.draw_string_2d(10, 10, 2, 2, 'Playing ('\ + + str(int(len(self.gathered_data) / self.training_steps * 100))\ + + '%)', self.renderer.white()) self.renderer.end_rendering() + + # Save model + time = packet.game_info.seconds_elapsed + if not self.play_on_own and time - self.last_save > self.save_time: + self.last_save = time + self.save() self.controller_state = from_labels(output) return self.controller_state @@ -105,6 +116,14 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: def train(self, data, labels): self.model.fit([data], [labels], epochs = self.epochs) + def save(self): + try: + path = str(__file__) + '../models/' + self.teacher.name + '_model.h5' + for i in range(20): print(path) + self.model.save(path) + except Exception as e: + for i in range(20): print(e) + def reset_teacher_functions(self, first_time: bool = False): if dummy_render: self.teacher.renderer = DummyRenderer(self.renderer) diff --git a/bots/data/__init__.py b/bots/models/__init__.py similarity index 100% rename from bots/data/__init__.py rename to bots/models/__init__.py diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index e005d4a..5c36fa2 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -116,17 +116,28 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): return data -def format_labels(controls: SimpleControllerState, car: PlayerInfo): +def format_labels(controls: SimpleControllerState, car: PlayerInfo, remove_noise: bool = False): labels = np.zeros(shape = label_size) # Blank labels - labels[0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) + + if remove_noise: + labels[0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) + air: bool = (not car.has_wheel_contact or controls.jump) + labels[2] = (clamp11(controls.pitch) if air else 0) + labels[3] = (clamp11(controls.yaw) if air else 0) + labels[4] = (clamp11(controls.roll) if air else 0) + labels[6] = (1 if controls.boost and car.boost >= 1 else 0) + else: + labels[0] = clamp11(controls.throttle) + labels[2] = clamp11(controls.pitch) + labels[3] = clamp11(controls.yaw) + labels[4] = clamp11(controls.roll) + labels[6] = (1 if controls.boost else 0) + labels[1] = clamp11(controls.steer) - labels[2] = (0 if car.has_wheel_contact else clamp11(controls.pitch)) - labels[3] = (0 if car.has_wheel_contact else clamp11(controls.yaw)) - labels[4] = (0 if car.has_wheel_contact else clamp11(controls.roll)) labels[5] = (1 if controls.jump else 0) - labels[6] = (1 if controls.boost else 0) labels[7] = (1 if controls.handbrake else 0) labels[8] = (1 if hasattr(controls, 'use_item') and controls.use_item else 0) + return labels From c90b0731974d49d3f1a3e61209b0475d44269d98 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 12 Jul 2019 13:54:16 +0100 Subject: [PATCH 52/76] Dweller model attempt --- bots/learner/learner.py | 19 ++++++++++--------- bots/models/Dweller_model (58 minutes).h5 | Bin 0 -> 45580 bytes bots/utility/collect_data.py | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 bots/models/Dweller_model (58 minutes).h5 diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 848f480..d77f081 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -35,11 +35,11 @@ def initialize_agent(self): try: sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Dweller') from dweller import Dweller as Teacher - '''sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Skybot') - from SkyBot import SkyBot as Teacher''' + self.teacher_name = 'Dweller' except Exception as e: print(e) from teacher import Teacher + self.teacher_name = 'Teacher' self.teacher = Teacher(self, self.team, self.index) self.reset_teacher_functions(first_time = True) self.teacher.initialize_agent() @@ -84,7 +84,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.renderer.begin_rendering('Status') if len(self.gathered_data) >= self.training_steps\ and not self.play_on_own: - self.renderer.draw_string_2d(10, 10, 2, 2, 'Training', self.renderer.blue()) + self.renderer.draw_string_2d(10, 10 + 100 * self.index, 2, 2, 'Training', self.renderer.team_color(car.team, True)) self.renderer.end_rendering() # Randomise data and labels @@ -99,9 +99,9 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.gathered_data.clear() self.gathered_labels.clear() else: - self.renderer.draw_string_2d(10, 10, 2, 2, 'Playing ('\ + self.renderer.draw_string_2d(10, 10 * (self.index + 1), 2, 2, 'Playing ('\ + str(int(len(self.gathered_data) / self.training_steps * 100))\ - + '%)', self.renderer.white()) + + '%)', self.renderer.team_color(car.team)) self.renderer.end_rendering() # Save model @@ -118,11 +118,12 @@ def train(self, data, labels): def save(self): try: - path = str(__file__) + '../models/' + self.teacher.name + '_model.h5' - for i in range(20): print(path) - self.model.save(path) + path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\ + , 'models/' + self.teacher_name + '_model.h5') + print('Saving to: ' + str(path).replace('\\', '/')) + self.model.save(str(path)) except Exception as e: - for i in range(20): print(e) + print(e) def reset_teacher_functions(self, first_time: bool = False): if dummy_render: diff --git a/bots/models/Dweller_model (58 minutes).h5 b/bots/models/Dweller_model (58 minutes).h5 new file mode 100644 index 0000000000000000000000000000000000000000..0813323c429ba8b8d4b82af1dc49b94d8419059d GIT binary patch literal 45580 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 Date: Fri, 12 Jul 2019 13:56:09 +0100 Subject: [PATCH 53/76] Teacher name --- bots/learner/learner.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index d77f081..7560307 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -35,11 +35,10 @@ def initialize_agent(self): try: sys.path.append(r'C:/Users/wood3/Documents/RLBot/Bots/Dweller') from dweller import Dweller as Teacher - self.teacher_name = 'Dweller' except Exception as e: print(e) from teacher import Teacher - self.teacher_name = 'Teacher' + self.teacher_name = Teacher.__name__ self.teacher = Teacher(self, self.team, self.index) self.reset_teacher_functions(first_time = True) self.teacher.initialize_agent() From 556ff709e2faa07a2b671472e25126ec937662d5 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 12 Jul 2019 13:58:16 +0100 Subject: [PATCH 54/76] Save time in model name --- bots/learner/learner.py | 2 +- ..._model (58 minutes).h5 => 3480_Dweller_model.h5} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename bots/models/{Dweller_model (58 minutes).h5 => 3480_Dweller_model.h5} (100%) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 7560307..19d0283 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -118,7 +118,7 @@ def train(self, data, labels): def save(self): try: path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\ - , 'models/' + self.teacher_name + '_model.h5') + , 'models/' + str(int(self.last_save)) + "_" + self.teacher_name + '_model.h5') print('Saving to: ' + str(path).replace('\\', '/')) self.model.save(str(path)) except Exception as e: diff --git a/bots/models/Dweller_model (58 minutes).h5 b/bots/models/3480_Dweller_model.h5 similarity index 100% rename from bots/models/Dweller_model (58 minutes).h5 rename to bots/models/3480_Dweller_model.h5 From 471e048fb91506bc371babe412e4fefea9a05bd9 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 8 Aug 2019 13:31:40 +0100 Subject: [PATCH 55/76] Try dynamically changing the size of the data --- bots/learner/learner.py | 18 +++++++++++------- bots/models/3480_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/3601_Dweller_model.h5 | Bin 0 -> 45580 bytes bots/utility/collect_data.py | 6 +++--- 4 files changed, 14 insertions(+), 10 deletions(-) delete mode 100644 bots/models/3480_Dweller_model.h5 create mode 100644 bots/models/3601_Dweller_model.h5 diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 19d0283..4cfccda 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -23,9 +23,9 @@ def initialize_agent(self): # Variables self.epochs = 30 self.steps_used = 0.25 - self.training_steps = 250 + self.training_steps = 10 self.play_on_own = False - self.save_time = 60 + self.save_time = 600 # Data and labels self.gathered_data = [] @@ -49,16 +49,17 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.00000001 + regularisation_rate = 0.0000001 self.model = tf.keras.Sequential([\ layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.0005),\ + self.model.compile(optimizer = tf.train.AdamOptimizer(0.001),\ loss = 'mse') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] + time = packet.game_info.seconds_elapsed if not packet.game_info.is_round_active or car.is_demolished: return self.controller_state @@ -76,10 +77,8 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: # Get our own predicted output output = self.model.predict(data.reshape((1, data_size)))[0] - #print(labels.tolist(), output.tolist()) # Train - #print(len(self.gathered_data)) self.renderer.begin_rendering('Status') if len(self.gathered_data) >= self.training_steps\ and not self.play_on_own: @@ -97,6 +96,8 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.gathered_data.clear() self.gathered_labels.clear() + + self.update_training_params(time) else: self.renderer.draw_string_2d(10, 10 * (self.index + 1), 2, 2, 'Playing ('\ + str(int(len(self.gathered_data) / self.training_steps * 100))\ @@ -104,7 +105,6 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.renderer.end_rendering() # Save model - time = packet.game_info.seconds_elapsed if not self.play_on_own and time - self.last_save > self.save_time: self.last_save = time self.save() @@ -134,3 +134,7 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.get_field_info = self.get_field_info self.teacher.get_ball_prediction_struct = self.get_ball_prediction_struct self.teacher.send_quick_chat = self.send_quick_chat + + def update_training_params(self, time: float): + self.training_steps = min(750, max(10, int(time))) + self.steps_used = max(0.1, 1 / max(1, time / 75)) diff --git a/bots/models/3480_Dweller_model.h5 b/bots/models/3480_Dweller_model.h5 deleted file mode 100644 index 0813323c429ba8b8d4b82af1dc49b94d8419059d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45580 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

*7abqsm5fP-|vfhYcbp95SqH$`wgwLMlirx`Um| zINZO`g{j!$O+UP>!b#5Nc(_3hb~#4lqk}hTguqvq>mUMpe!%n|We+|)c^sU5gh~W& z<9a23W89zT(^bbuVEXh)^qKlFy6OEzQa5A{PM)WR+P-`;sc9g2yZ$+sxFCm|k&<8{ z#YI5>!6oJpFPxs&%)z$Vn%wlS(qvrhe7f$*c9QSB7@0}+#Bk0Ok~HEh6|qVpUR$qG z@6%(+(fPvU$DBO!aI-&oV%0|9t}kaa_nf5VAzsY)Z41zT=`}X)v0!X+4n8UY7u=>ZY_n=`$Rx!Szp$bl|Vlp zz{r<6u#?mityA{+V6H41Dt-Y@R_{lr@_S&EJQt3XF2%XgC-B46YW$$y$T+X;2Ol5t zA$X`AT`84L#;lz}@9{O5ZBa3_ZSw|9yb}u>o@e8;NfNBerjt0?aRZ)Rp~-rm+eu{> z8N>5^=c#{o1Khux3^M{c;0io}+6e_%pJD>;eq(Ub`uos6p@vDbY{a9A-$?25$N11{ znDw&b(OlzVDX1#`0qPa{C|oH6&t5&Gd!z(wpy8vz;)fKen*D{|+nKcghExQEk z9|rK?Re$pKP93g~^u%d*1-2D81U&laBF{G&EDsbOIG=h8Kl!9^*QRQckR_{_nD*B& zPed6PYo~HoW|q?GSEJzjaYt?@E`yaGA4%YiGMaZTm)bRlV4+M0C1c_+V&F17e5jEg zdCJh$vnGMr#!gy1*_DxA+fHh!FiIZx1gn!%C{4HqE%Q!bLBT*8F(edr-xv=;5;5q- z=3>~_IQX>f23c^O4=Vd7koyzMh}mvGay~qU`O;tslb`014UPwCc2)+?+C3F3^u+Mq zom@I0;Fkfi{?hobY<{tx@Vxwgk@k|>JK74^0Hls-G zfQvRYtEy0GOn>;WX&wq+wE+4ghP)eA0{sI=(sjBkNXOlNT%5c>mum;GmwX;Uz2#f_ zvUw5}GLV6Qgk5O*{R#(R^J)9eET%;-pQK0M22qs~%(YG>$_Mt*N4AGase=_GCE*Oh z4^rscF}e8ZZ4nIJZGyUX_wd^8K~OSB1e=@fIFE$+vL<6mqmBpISWn!0hyDq0b%q0b6W`7ujT*Xp%~f_qtAp$!pO)=C;_jNEzJdcWAot43l)B^ZK@Ctr;+d6hE5)LxjvzVROi7A za=UT}JLI@IIQb2OyXF;W9}o-mrklC(P8BfpV;=aeZh`1BRV;t?jV5T+kg(M=Ig63g z;6_F*S$E0;n@0r0desYfXjCCIoy_6g;*B98gD%jCb{Cn_)vq{@-my&BD;bO&cp4YH zs^Lwy8H=lCHsG7`I%+37h1$G&Mn7e(;G+7k8@au#CY!VuSsRd(j#N}vE9}|E% zx)Z3-a8VpGW*|D+AHzH~K8aV&Kxf&DR9Hz7MjYM76?1QFe)tmHcXt-fX)Az{dQ0I+ z!Zmt3@i{Q(B5B;9ELxBx33^ly*kj44bWWUaJ2jUW#J?qSk0fD3(0N``VVGe5fe$+N zHNweO<2c0z9o+uT~+JMLe@4B;Fyd*V>E zJN=AC-VLNX$Od8{PwC}3)2M_?IJy4jIStsOh8}J+sOV!OI{UgV|Lql7GHVh?+g19q z8;d59QuU#Z+nvW@WM}~iEs19m4DchXrC5xr`o5|{t)#PN-3?_ao zkM{eqjqDen#OEom#nKHKAo^GjbM0z)AH`0RDQZG=XiF!YeA>cnGtXhXJw4IIWVof0Jk}0P? zSr?^WWaE}$y6{Bo0N&bg4C7nUVDFs4;G3vL{ow(2c5Xpk|E+jm;4hqS=8lzmPk7tz z+d+ZdSrorg3ig~G-$6KuFDID$M$BjfOIuU6R!R@nwkLyAp$Ui@w4z?G`*dw|5O^0B zqNb}AUsj6B`S84bBX)F3!?1fx$*86n&`(Yyx274> zEW@!_Yh;W5sTY_ZG7CXW@LhYy=LSvEmBN|>SI}V%g;-fJu>Z78;AeBkNL2~J8WBr! zC#X<~jJ>ewg$E9QT8;yK4&f1LVHoK;fxK5fNIuv$(>nbfdf0g#eq+ruvykc!ujy>+z|f3LAf~9?hy9fr3Vgk8qj&F3mruV@%v96f(7L>A^6c@ z!gsfWto{WkmAR0PU(kz|N)}Va9~U{D?8A6h+L4T0>H{a9CPPZjWKwfg1E!pigk^RC zq}5rGeWs@l9tRxBiLAY3`v+r~B$%rt1Z9J5i5_1v>7tGi85A-?}f%P99 z!KW&L^N@Z=URO_HkCyEvQF_DCVO=tp++UcyTzHdvw~h}MdJ#lJo8LE8y8=~y7vRYi){{RV( z?2Q{LD~RrxOgt)jjdUIn#unAhyqIEh%pP%yq`YqjTXrozdfwm0O7beB>aW62{veB& z`Q>!wr3*}pl{5Ybyoyq?2gwnwA^iJJH|dDowlrwiMVOvqg0TguxFIYabIwIVnAu%2 zZTE($ov<$^` z(Z?-tv0^J#P+f%woJQlN{pIw-CwFpGL<3A;Jmxaa&!QcI{YW9R3$0^&M=*~iB4L3_ zA~Ak$1ZUOn(qnC>xtoqUD0M;z=F86}jTUKORksyyW|=bvvFT)a#zY(t{ljL}{4<Jmp;&bgXPo8+BfFgZ`@b;FWoRfPD#+4LNrI%lc*X;)4 zw#SRC^|8Qs`8qt-b`qx!kp@u_1z0s8oE&fN1A56BwEvH{q;R|@ejH;C7GsyXh`BN;UZxfz1%f{oSW zeePMDyG<72l%jcYewpC%d_6NemxIE^>14iiFc}&WOS9xxptI&B%uUn*p+#{_zpZ8% z7AaV>wwXgUl$WB4{2;9AGn2k=-wOhlGb8rhgIGAFfOwWRxQ@}I`wH@?qPq*ou6#_C zZVV<9L^H7{PXta^MxmC;N%C6U1Xf(Nf)j>T=sM*V_2lm%>bFYhjdn$Hu49uKO zX@!;)JeYcmR*kqql&+4$d1b>fW$h?zIDU$JP#A-nq?}B8vyo^$JwaTu7_wYDn5NGD z!7OsQ&q=;1r(dH3;AqiWVs6pQ=*-uG2f^7iD+W0OOy?ZxfvQal#WQba(}D~)rrAM? z2y;Tjaj!s6v-gnqKRlVu=2Tu;)oBKf#V(gU6p?WF5&m(i6+4Vmgq4zy(baAw%P=iG?caB!VgNWP1j z09Uyg<#>naIQOYws7PtG>3i;>-!bBte4ljs-KH65b|EwS3ejn~O>TWJ;kjsD<_^7% z29>zkbkuZdNWPyzL#Nl%(ggw3EB693OW1-o6^apED}DGp_!E({8`{>NA zH|a`sDU`B$NhI+m4c%pfgJ!;EZqjkAIYw=rH02KNi4gvvi5CkzB@#0lA?F!UB_?Qct0 zPxpY<(K?)ZjT`9IjU(nZqivi|Wsun?HeuNr8!{lZldi%Cbk#W{P(NdZZ{CPQ{@{Ud z$4CNJ$;ra%$u%_SQX1XYn2+e%x+zWP}fhnj9p~ad#NU7a64KSPnC( z`W<&Ys5iH4u@X1V&6o<8tCEW+Cv)escT(Nj#W=jZoCF`ZO{NBgk($i4H1X+mZdzpk zxt6a*=y^}_e!4glc(94;e*dcdgBszB9P%zR5P7ACX4< zFu_|mnrzR>A%-~uIveGntzQ~QG<~I4U5?P;IAI9Diw&oQyvWx6_0&;i2FVZnO72wH zk<7tObj9`cbfNY`rnAYM?3Y-9(&xe%v0QIZ>Esd94u&q?;7#i$DiXCLu~hN$0GwAL zhesEu)8)ll#HS*Ov}vZ%O6}eBW6Bu1Y*HDSjYYiqPKDkipEQL2Fr{Kf* zrR3;(LwI{v55wx`;-&I1cr*VwIdP!g zTpbpycE`Tws<<{;dzf^riA!2N1J@lX03ny_oPT2ws>^SnOGGZxoB@XTbpX;4*Oi&` zde3Q8Qv;3jU5L92XOI$JF}cyvf=Zg+)TCURrYDWyL|>mE1B-t�-8-KR%6sHz~L2 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 br68{}&RomNjPse=%exF7&M%fqGy6XPKbbcI literal 0 HcmV?d00001 diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 247474f..2832bc7 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -134,9 +134,9 @@ def format_labels(controls: SimpleControllerState, car: PlayerInfo, remove_noise labels[6] = (1 if controls.boost else 0) labels[1] = clamp11(controls.steer) - labels[5] = (1 if controls.jump else 0) - labels[7] = (1 if controls.handbrake else 0) - labels[8] = (1 if hasattr(controls, 'use_item') and controls.use_item else 0) + labels[5] = (1 if controls.jump else -1) + labels[7] = (1 if controls.handbrake else -1) + labels[8] = (1 if hasattr(controls, 'use_item') and controls.use_item else -1) return labels From b6c941282439386bf7d4fe059c182e7560941316 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 8 Aug 2019 13:58:35 +0100 Subject: [PATCH 56/76] Runner --- bots/models/3480_Dweller_model_old.h5 | Bin 0 -> 45580 bytes bots/runner/__init__.py | 0 bots/runner/runner.cfg | 26 +++++++++++++++++ bots/runner/runner.py | 39 ++++++++++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 bots/models/3480_Dweller_model_old.h5 create mode 100644 bots/runner/__init__.py create mode 100644 bots/runner/runner.cfg create mode 100644 bots/runner/runner.py diff --git a/bots/models/3480_Dweller_model_old.h5 b/bots/models/3480_Dweller_model_old.h5 new file mode 100644 index 0000000000000000000000000000000000000000..0813323c429ba8b8d4b82af1dc49b94d8419059d GIT binary patch literal 45580 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 SimpleControllerState: + car = packet.game_cars[self.index] + if not packet.game_info.is_round_active or car.is_demolished: + return self.controller_state + + data = format_data(self.index, packet, self.get_ball_prediction_struct()) + + # Get our own predicted output + output = self.model.predict(data.reshape((1, data_size)))[0] + + self.controller_state = from_labels(output) + return self.controller_state From 5403dd53cecfa290130e0d9489bb086fed5819b6 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 8 Aug 2019 13:59:15 +0100 Subject: [PATCH 57/76] Update learner.py --- bots/learner/learner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 4cfccda..528be0f 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -119,7 +119,7 @@ def save(self): try: path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\ , 'models/' + str(int(self.last_save)) + "_" + self.teacher_name + '_model.h5') - print('Saving to: ' + str(path).replace('\\', '/')) + print('[' + self.name + '] Saving to: ' + str(path).replace('\\', '/')) self.model.save(str(path)) except Exception as e: print(e) From 5034d28a402dae4c3ed94373e85a6bdfb0b3da65 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 30 Aug 2019 17:47:19 +0100 Subject: [PATCH 58/76] Game speed --- bots/learner/learner.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 528be0f..8bbbbb0 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -5,12 +5,14 @@ import numpy as np from rlbot.agents.base_agent import BaseAgent, SimpleControllerState from rlbot.utils.structures.game_data_struct import GameTickPacket +from rlbot.utils.game_state_util import GameState sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utility.collect_data import format_data, format_labels, data_size, label_size, from_labels from utility.dummy_renderer import DummyRenderer +game_speed = 3 dummy_render = False @@ -60,7 +62,11 @@ def initialize_agent(self): def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] time = packet.game_info.seconds_elapsed + if not packet.game_info.is_round_active or car.is_demolished: + game_state = GameState(console_commands=['Set WorldInfo TimeDilation ' + str(game_speed)]) + self.set_game_state(game_state) + return self.controller_state data = format_data(self.index, packet, self.get_ball_prediction_struct()) From 07271e7adaba1b5b77711f4ad8711a97181717f7 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 30 Aug 2019 17:56:46 +0100 Subject: [PATCH 59/76] Only set the game speed once --- bots/learner/learner.py | 10 +++++++--- bots/models/1200_Dweller_model.h5 | Bin 0 -> 45580 bytes bots/models/600_Dweller_model.h5 | Bin 0 -> 45580 bytes 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 bots/models/1200_Dweller_model.h5 create mode 100644 bots/models/600_Dweller_model.h5 diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 8bbbbb0..7d234e0 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -21,6 +21,7 @@ class Learner(BaseAgent): def initialize_agent(self): self.controller_state = SimpleControllerState() self.last_save = 0 + self.state_set = False # Variables self.epochs = 30 @@ -62,11 +63,14 @@ def initialize_agent(self): def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] time = packet.game_info.seconds_elapsed - - if not packet.game_info.is_round_active or car.is_demolished: + + # State-set the game speed + if not self.state_set: game_state = GameState(console_commands=['Set WorldInfo TimeDilation ' + str(game_speed)]) self.set_game_state(game_state) - + self.state_set = True + + if not packet.game_info.is_round_active or car.is_demolished: return self.controller_state data = format_data(self.index, packet, self.get_ball_prediction_struct()) diff --git a/bots/models/1200_Dweller_model.h5 b/bots/models/1200_Dweller_model.h5 new file mode 100644 index 0000000000000000000000000000000000000000..00e628e2ee6324d2f476df5f1b711cb4a5dfb737 GIT binary patch literal 45580 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 DG}hSA literal 0 HcmV?d00001 diff --git a/bots/models/600_Dweller_model.h5 b/bots/models/600_Dweller_model.h5 new file mode 100644 index 0000000000000000000000000000000000000000..b4108b7a399c8aa42a9d2469b69936c313fe4980 GIT binary patch literal 45580 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

0=;JJhT2B(oC)DcV?9L@1m!yb6 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 Date: Fri, 30 Aug 2019 17:59:26 +0100 Subject: [PATCH 60/76] Try other dynamic params --- bots/learner/learner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 7d234e0..ef8493b 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -146,5 +146,5 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float): - self.training_steps = min(750, max(10, int(time))) - self.steps_used = max(0.1, 1 / max(1, time / 75)) + self.training_steps = min(300, max(10, int(time))) + self.steps_used = max(0.2, 1 / max(1, time / 150)) From 41ada06648f4a7b9eb5e8d22d3e3216d80b0aee1 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 30 Aug 2019 18:05:10 +0100 Subject: [PATCH 61/76] Fix state-setting --- bots/learner/learner.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index ef8493b..5e8a826 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -65,10 +65,13 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: time = packet.game_info.seconds_elapsed # State-set the game speed - if not self.state_set: - game_state = GameState(console_commands=['Set WorldInfo TimeDilation ' + str(game_speed)]) - self.set_game_state(game_state) - self.state_set = True + if packet.game_info.is_round_active: + if not self.state_set: + game_state = GameState(console_commands=['Set WorldInfo TimeDilation ' + str(game_speed)]) + self.set_game_state(game_state) + self.state_set = True + else: + self.state_set = False if not packet.game_info.is_round_active or car.is_demolished: return self.controller_state From 10b9cafb336e39ac10f04bd0e169add03038fde8 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 30 Aug 2019 19:12:52 +0100 Subject: [PATCH 62/76] Mess around (still) --- bots/learner/learner.py | 6 +++--- bots/models/1200_Dweller_model.h5 | Bin 45580 -> 45580 bytes bots/models/1800_Dweller_model.h5 | Bin 0 -> 45580 bytes bots/models/2400_Dweller_model.h5 | Bin 0 -> 45580 bytes bots/models/3000_Dweller_model.h5 | Bin 0 -> 45580 bytes bots/models/3602_Dweller_model.h5 | Bin 0 -> 45580 bytes bots/models/600_Dweller_model.h5 | Bin 45580 -> 45580 bytes 7 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 bots/models/1800_Dweller_model.h5 create mode 100644 bots/models/2400_Dweller_model.h5 create mode 100644 bots/models/3000_Dweller_model.h5 create mode 100644 bots/models/3602_Dweller_model.h5 diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 5e8a826..c27fe32 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -24,7 +24,7 @@ def initialize_agent(self): self.state_set = False # Variables - self.epochs = 30 + self.epochs = 20 self.steps_used = 0.25 self.training_steps = 10 self.play_on_own = False @@ -149,5 +149,5 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float): - self.training_steps = min(300, max(10, int(time))) - self.steps_used = max(0.2, 1 / max(1, time / 150)) + self.training_steps = min(500, max(5, time // 5)) + self.steps_used = max(0.15, 1 / max(1, time / 300)) diff --git a/bots/models/1200_Dweller_model.h5 b/bots/models/1200_Dweller_model.h5 index 00e628e2ee6324d2f476df5f1b711cb4a5dfb737..1364be782946917c9dc0646dffb8e633ac1e8041 100644 GIT binary patch literal 45580 zcmeFa30#g{w=mwMk~B*)lp;l?Ql$G@>lV#Orpzi0L_~v3Au3IVj3u*B$PhwZYeh1T zkxZF0&$AHUP4&Lt<2~nl&iS8nzH|QH`|RJZdtH0)b*;Vjy4Kpmx~{cL_Hc1)tY)Yt z_cN)g$|=cd{kp9G`B9hD^J`1$^Y!)qbr+gE4F6SY$m7nxADL-}!3% zi%zXP0>dYSgpQU~|0%s~$}*%ndbK9{$MN7Njh{(ghV+x~`sYw@*PnmhFH2Wzf!v?j zwMUCu#Cke)xBUhFNhI*QT^rZ+dtIF#)r%o0ctT{bEb|Nc+15e3I@^+ybF4@FH^O?m z_Wx#{Iu!my24~qAdCwX6=Q0k3PMA^`y?s zYkT##AwbT~+RobEDk`LYn5|tX$jL>?o=12@NLYAGEuH%Q{~AAJMbk|J!vZ2Be@V{7 z$=IZS@TBPA2~nW|VJ4QwCbi>{tbDr3PtpEFi2MV>FR@3;%7^_<$mORZ{3|qmiTh_= zR761Ngn&_DKPg8=LF#j`0hfFflsHFLF%4#Gh5eCPasYSsFWZ86iUmikkYX z&_vd$fT&J(Kj}nI2#xy5g+muvCLk~>baFtHY5j)aSscR2#*>#Av7dBV*GC%iVO}8lHF3v-am2{8~d|E zvL^qeiJ`#};gP?Q{)cYw3kzkh6?u7AG-8yYp$?_aE~V@=j*@Mi62U)I z{A}%aVgISt_}TuH)4!lM{~#|J+Fxq%znk{|(`xZc;s2d#(N(4*e;h2L0w#?4YpD32 zI8=;?jr}!&)hz?${T`<;|<*(6MeIRPP7)-9Pd_wIBc8eEr?;`XBcP*RD1HWxwm6`BPuF zu9d`J%hCUCjri|r|95|Cy%xQ0{zra(xyock^>*&@$LfD~u67(z{M-KM!cQluEY;KB zRp+m~P{&6-UjqjJ5pPCae$~+0^7{7z-$wosZ}_;{{EYFn@c)(HdcXAV@=}+*`T99D z%gZ(X<(IB~!}WK^^iRLE#?SgXzjVF7wjTa^-W_XwX-+n^xu5PcC!2c7)jyH?d@Zbh ze_Q_`<>kzORmdyUKH08y=>Hm2l=;wqVrm;3{o-Fv&RDLgs$A1qb@w%p_2y^2fawz7eD99pKaIcW&QISY*gFa zl-9NI&&Fv-(^|a0#_3u){ImW3K296g2_U0Rf9mB?Z?X0HdYk>JgFlmFE%-P8{=VL` zsngqfdcW)OznSnq8Dgy*75+93xD5I~3!vW4ja&Vn@&4Ir8y85?(RDSA84fhxtPhv8 zw8y4LQt1AV!Ia)$AWyCw2i;I*eQ>#b*P` z;YeU-_StQQ1EpcSGHeVv4BbbwD#EDpP6*#}JOgjH22u0WILO$mj+Zib;<(SAJg;{e zDV*~z5*`c^DhH%Pu9E?t`goIC*a&og=tpum@m%yApo-tBG`LmSc9`Tb6!%OW%jH!u zyyDAqSotIrBNtfF)q%}$%jCCW(vVJt-8S!m>OMX3l3_BAPYA*8uAAuA`={idp9}r3 zT2b7I3u3QtLAYqm1WAdyE?i6rr~XDqsrk!&^mdILYm`2Lu00OX_ZJ3il+Y0@jJAt` z2i6JOHmIS^?Ab7C&wFU0G!*@&N?E;8CJZ0vigL-6h)iW)qa!*zlegmtmXWAv8H<%r~@4>BT1p zK6a>O(ZrQsL6Vg%v_G%NAs1Y`K3=$js+&$0EiP6-gRMSTnevX#DZdv!wwO&y7jD88 z-BcR1dO5F2a;N<1XJM$i0f*-{;}2_3iXrZCVp*OCEM-BwYO@>q4A}_HH>tqm;~jW= zR70#zosHXcuZlyWTSCW^!|-6WE*j26lrJv8(-y;V)7N)2?WQ~{9q||ZM?R&r)jKhG z>vif-VZ*ULtzqlPIh^^S6yGoCL7l?;p;7OX*j{r5>^ag**t#ZxN^;ex^SpVy?3DrT z@okIxs;9WS?jtgpyBoHC>V>)wJEQv)b5v<+jPLf$hR~_W*qP<2t=cozU6g=Nqk5sd zb{U*d8b}S#Dxu-^4tymuwMgl60XY;m;g0&6m~tZ$CvUz%p*xg#ZSDx{ls-&6qmd;! z_$+}Bm>d@xek&GU54s>04zlHUtHS9~^i}ZxrpCjHlVIpU556uApic2_a8A?$+r>k1 z!Ll}(F+5mM3Uj6VayEG2jV^8oKq_M`FyHzEzI*G^#~)|J-O@I~-fRBoayvmV#T@ZW z;aBQ$xGz`9r}DY{HDnUAltem6r$665 z?SQu*M1tBHZy~(-g`yIVLQ;Ca3Z|dwfZe`J(ffK7=x9EMRC{e~(C8VAs{TxkGXS1! zjf24JEifo`6Xg_p;DQjs+!t`tdn+o@UWdN@-oO~cHdvUO4DWP2 zc%Q$$zDzj-X)o`Ju?m)4)TIeQU?cptHIt6ENT9O$-TA>4GyFK?8~F6Q zL5D{6#DUuPC}D^fE^%(n-M7!C)*YrnQ+FpEf8#j4^4gD6XC=`fb9d~!5o2k$vXDjo^ws=hY%M?y}WkT@bB|Z-bVe&g>sG1y3fkpx3-Y41A-{`Fo|Tv+guk z7dWHKpxfN~?g)N=p&uSumnxJ6hj4k)bBYg^N9U%^V2h+0tl#hEPCc!$VYmWL-6;t7 zvJcVTrJv}n>{*-Id%}Pq2Sg_~S>0Sd?0KBtMz&!$2MG?m*^XTsU#5=Mec`=&8asHW zVCC0__+(@o*q>EM2i_IZg%g(a%Ksafe_un9nL1qNy@j^kcIG^nLT*uZn^!hH4s+-9 z<$$!+=w%}(~TLBwcSM6vwxCs?xZR9nK}Urrl{}+?I1dkVgw55^LVD}0k*&F zi;X{Y75W8V$0>FPA+u)!k8IQ)n)RNG(aNhiPAeU|yEPPoK3HRbdN}TK9ftQ_>xt8K zAJEOW`*FjNmhh(0O?dG21}yktg<*wTX-y1(L+LWOz9ALwuj@}keC&Cz*>s_N(R8+3 z*^K+l9K_P79uQ_wO|RxVVxzW+toz-I4OMk`%*#b$zswd?`gM-j@Z()LHyn87Wh3(S zFvSCB#)G?_8O2Y^gmr<=JlW6|Z(FG2ynZEOO}Hk1OM5^M*W_`GXB*z6wGG}*IS!-z z7qgb1D_X0_@qplK^uEt+Smw5!8%9k4r_YmM%!do&7hKEbyUplpt{YFQ3dW9i8`G-I zdm-UfGT3Gr^TxDt!6Q8vc2?!njK^o-__Wisbx z7U{$`;o+y{@ac_wA@*W#@!`(pLYCW8n$V{&?nrLNrp76x`J)vF4A8te#H04AuDCmn=Sd?6gq)mwhSGgF$E0rv?U8#c?TC_rkevYt@mT**; z^`w9B4LvILhr8Y8aKlj&VZp~MWZ(HDxi?YZul6kVYkW-DX}gPc+nx~KZ(S{n+2)Cw zg_j_#gE6mmYQ@*AH8^XU7Piryi@M7fOZ-nN6`wCzh0^I3Y?-Jie(JaqJBodAL@TG_ z@L4sCJ)DXgKH1F@TWgLha}f{i^M*D7A*41Vg}cS57Jo6lO9Rc$Hj)C&^!6itZWDX~Q^cFbsY#n(VC+z7P6HS;`i$sQ-1!ia$s%{AKe&_Ie(p9wD~! z=))l=HO1FCRrEMZ5tlid!n{UOYS~!8AA4+JRY^xkKc)nq11-48w`H*YabK85d&Q4s zdK{YDf@^#&A=Bw>QCQcJJo|YX58tLpZ8q*Cn~D8#+0t2Hd}J$MU zWNzYd2Zm35LP4cE+ zILEIYBBn&`1M7Pdyr8Np?CqD$<`-ub+1)xqX#=hJLPZXbJ-1vKYw7?O@8!~hxN0ye z-3x(Z&tk;b#W1nQK4|zRo8ahFTB)=HRMMY;Lo+GdU801u&$MH)lLWW881P7`07=U; zfV*^LryzAMJ1*hzu713-*$PSGp%I|hLroZ}qzTRrn_B+ah!0Nhjr&iT(A;?|G2xpxN6orS7PF-^=(r`s zt)2!(DTBC!i#xhiN8sS^h1~1w2blVD2X_ih!Kr6V*u*LUzVl&@%L@|($1t9IwTfI% z3_(BJk1+6&JQcin#7TEIvhkKp@FK+om8M-4?9Me}^&bbp?cG)~-d@BnLz4M`qJ7bg zWFs8>xi7sbHRZmSc8OsTIlTC>8UOflOrqs8fT{W^JUzW0x;qB)>09er)zLz9sXC5H zPkUga_Orp~TQ0@F*iGpcr-bP7lWCM%CyZ@*ThM({z|tNaaBzbp-uJmH*X(=t-}_-Xip!lPxY4I^y7mov{C!uY!{MIBYtxOtdMzPc@xakl{CV zwyBWvoX&cjYy21#KEDDR>2|7Vq049E9eBkFJ^T=>g`I~tloU*xgU>@NMZ=^ZUVF6x zIE;;?nwoj2S=5E?C#WEA)L>!7JTQTq)a>JDS^<@yXjvl6x{!!#8Z;o2OYWR|EQ7_h zK}B8*b)ebu3_7WD2x5nMg4*u2y#C>5O5by`Xx{7l@Lf%tRTAy+0?P53p8F*2V?%gy z%vhnI%Mf}zVI80JTSO&24wLx}BPeR+ht^Fr(dd8$_iCn$Yb^}WZ=C^qk5LE7L=|d3 zFqZ-{qA;h&XByLTo_MEc96dSN6Zg8d!2=7Xl6O%)_}|fBSKkpdUg1mO_`Ms1vjdk= zSjSI7xp6Bj{?QV8xUM4?r{U1iOARNay26ZWyGYtx9Wb{imMJ!*gfS;2&iz~=Ed3;a z=Mmw^^i^U_M@MdxwN*UvIH52z?1E79Ig*6SF|2dl1KZx3N1LxJ(g)iZJe_BNKGUU? zTDY8ETAjeFO4U5^+8}TUu*4wCuRQvjrPT9Y36=EBA~~am?C@|FN0n@c9?GLpvwE?Z znfZ~;zqSzLqDJ8K4wrFW*>tj;aDpqEHR4ODil}+Lgw0dSNiupN4sFwzAFN&sqlfQc zkG**iF24rjdmhEL`Dgj~^(jz2P0{P@1N7be2rg7q@veiu*xzEkXqQoi%H^Z^ zgS;~C8!{YL2l-Qr*XOu$PAN6$e+nkGk(2g27KcU?7xC1p66%tT*nQzKUg~xOra9ij z8@gHeZfOvU?g!AXjUn51cOvOjdr|Yd7996{C&nIXN5h*e!Zn^l__Ta?C=SZS-QP!| z!kJZ+qBn_xhZfSQYxjkf-LfFD&wfmZE)lk@a)gUx7Sk=+K6k%@5rgYo>eH$}e4V3= zA8|V!OOm4qrb+F$gxv!tU%!-XE57DJ6?5k9DL;->}U`08=ldblQ$qucL< z@R_mLU%e%de7TO&jT+(J=c@eN?6hd0H;v6+3=`+6nF|A>PE(PWCyZ%q$s;v%F~uD5 zYe*kG?>3PT@D(@F2j)dIyC)T61*=v3Ts2`#S=zP;I&p2 zRBJjzlgc=BG|LCwuz8}To-cX@H{pWvePG(akM<2+2*n2DaM#HJaR0rs*lLj`+V3r) zlWDE!@wS7sT+0#1sG6cqVhh}*k*M(uM^* zbX{1OEgrqNl+V3$;F5`-Idz5{j(cRzH>=wh@A10I>ASY@x$7z%Ias-P*&5^G7L#)M zX6RU?_nZ0o%(iLXsS))$ma_RSPu|~XDBOwClbXgTi)GcS#h%4Fyl1R_ahm>A z`1sVCBfkXjj_DsU?bQl)et4NXKN?nCuDg!rwf2#|8*e4;_%H+Cg)N4|HwP6TFUZC| zA+K=$v$HZ=EaORqp8R8XHeQU==Hk_g{A6>saBD{YVh_!((n8z)Qn#DI(#I!_rJ?PY z6enlzk`|4QVf&$*u~KQX^nuU%;)Ll5#ryg;DL$;}Hv=V8$EL=K;Q zj1*SsVUxD;#e<~Rc>c-b;@1f(#jTW{>5WJf-~Dc*u(B;6Y#Z75{6AH;}Y2z)N%h?5@+hM zdGA)z;q3IhvFE zjHg?6+o*N+ayX)Q24}C>j~2PzDbp$lD|)(MyP90^di?%C;rezE9e9hzA6LO%_eyDK z4j(Ml%2zi@2;kL)kxc#;pIJ)5q(Hzdh=vKpN;NVQ$@W~GK ze#F4hM~#Xb9#+RL8y)#%=^IY=+(k`$_Yh3l_hzTWg_t5nbHs`j&^JE?g@n$0YKA2z zj!VD>i!XD|)P5XgXGg~-=}2`s4>i;F;2ZlpptQpZ&wX$Q<4>D7^h`h8Bb39<;SI5B z>o*vDzXNW$sKO&hr*h0RYj!qx#(Ugaqu=v8n7gYfdtGUZ3Ww5Jr^PDJ?2`tbou$S5 z=PoRixnX!SCt`}$ck%PlIh?a$0`~4I&xHoQ=s$87hHl+Jqb(29<0?7aSv_9d=l@8o zae0g_KYS#+jP<;wv6|FgB?WKDE##!KlccR=hR1Z$&^2Zp9lCyoDz;gn<>~o+=}wbk z?Ws@D^|*l7-8KnpvlA#GW(Eh%`5NSZDfPp-9e0@<4b3 zmv`!*W1!5x7c>UrxAcP2iq|yjQ8E{f+#`{{H$yNO;b%6(O55k4W zRf2uVP*&-v$$qItaI5DA(LbOZ3cu}!w>oQR+VFEuiTk_b#PcnM5d|&Ta#~^Gk~d+n zAan(I&9Y##)13sj)qX5S%k*dM1KKn24DFs42hI0S;(carvgf}KzPwmQ+TWJLb+ac$ zdk04GhVdI|uw*VT>aKt-zb8Tm%crpFURRza+Z$MwE`ot((O}xU8$~r&6iQNS#D|5u zB(rzMgU3_{;mPn2J`h|gPB%Ra4+J|Luz4WNz8*_EwThs*ZZ_dNdTH|OhpX8kG#tJS4aRu^Yhj^P9F5x; z$cim?(&0<4n9_5rFk|#PT71o#V>J&z#gCUIpqOAv1(b(=b_`b;?UA;}Dv1_<+ zUacJDT@-lTHebk{-;V>ooD#NLHo#jMovGcTX7GJ>Km587P~1KgZa-NsTPM|lcHxFC%1*+TLrK$<14vNZc(JgW->4wM9_VIVA z?V)v4eN72^KTr|cp9;Xj7oGS`=pIsCl1?f+(&6@Oa~{%i6&ie6h;0iC#oi@1A>W_j zR9+HzTi>Et8xzHk<(AyKNjijUsYAB1F<#rJ%_RjpLDIm7+lR-(Br9ut-B6py*cB0e z*+}`%wm{9r%~Z7cE3A1qg*Ihc;&X#Byr-27H7HmvH0-tnd>rj?_mw<|8T*91`cK2o zPnE@fTNlgrU1Ok`Z8N@S(Tor5?=1{C{{@zI8^VwKPe50_6gVHD%%fWmr<}g+c;Agf zG-u=-$2A}JLH^G5_~c+;?li^`7pTR9P1G7;=i?9@zhM&@=XAvvi(AmyZo^@x%UXEt zB8LuJT=1}KYmEE6u~0B+#nWo!ae#P6vR3KCLBE1cG_#Ke9^TvqYbM9zogvdGdPp%gOq~3|RQYpW~yF;K%Nc?C6(D z76<3Zd{w!ucl?AfyXiNIe)5?&PSaugz@=ztl@AvA$m(1WC%OhY{H8v+xYO&UEJrPJgX1# z!{(#?vF2)19+l!KQQd!=Hv4#?jb3y1e4Wjqt0WvX$r6hOZsf;9W$$Yyo1fG2sz!qMPa z;HQ6!Qkx@xX}neZvSS)lFW1J99V=OWcsze>UkoO;@$|rUI@)Bd5)G%T3N}YuqrLh< zYVX(&RHn=qOU)&cimN9@rvxR`sOUydhkPQ}h7#QO>L|s1X~Yq3rkuJ=4M!XHq;cJ& zuvo4y_3+PvJ0Glhy6hcT*fe!qdb>HQUhj`bEt=qrkkxd-u_3!{a}vykt)~yA@q89n z!JD;Rx##nH^sL+(Uq0FespC8Gd1GH#apVNtPl)!6_wGC$I|ThToFh6X@k2^{;ngeF-!@YRBy7?VE?Ux)kf zjRalzU@(bw8r~`zH*FayDz7Hf9tON}Zz)-X#KWLdZ(&8_vx1=(g4g{@SUIKuW?gDe zQ(k3IX3q_5{&E?;ZctsgxP43ZqleIFoHsw!=nsugwa1mmi-f${D(trqBnqokX`}KR zu#S_X@F6igCE*KM&as5mC3_@tMi(j0wjCR4Ib*QyBEE9bp4B_Ngk=4%@X2@;jLm36 zR)$^4TmA}cN;@GGRXO5-(IwQ=4$OaT}H#M$zM~HMM$firp7qA?bKcEWa+tIampU12y=rzbc>hs-`gRjm~=~ za7yV{*celeT1#AT$1Z2-x5w>p(y2CliNn$H{B_zK8-vZ(EI`lBUZkC5E%T%8#8UAH z_t`GnANNm0q18+taw!~-SLR?VO(khzCl#qmo`qDWp+9J?_y+n<&r%=PjofvATj@tH zRq3Y}#+XaShSbt9#4yn0-VWkVXVs9#T*soOFbMtPz8)}1{y|;1mBM&*sB?BX3 zzFsr4^Ej})LGkB2eds;29Y>sdLQWyN#otalqwQF8>^^fphlDzc zQN}vBBKxXnn|l$i&UD~sMuRCtwpOopawh*Z0hrilJ~gVYAgygBbkU~`c~u;Tiqo0k z^T-Rj2KVNy^afDk98FD>nqx}?Q;a_DMoV+&(8R?eB&IuX!Mwpmub&m*`xYfdY!r=y zbS6{RC&4)M!V}oHWG%!$Y{Dlycjnn*74>?kiyv%X!2DjPV8YC8RM@y58jop+%NEQ* zO@oEP(}`P!UW;DQBRWY9+g^rm{&%RR&2+eYuLzcAj3(DGEk2eP!h0JpMyFtZX!&RX z+_Vp*F0C5j{Kc6dmM4M2B7G3c?g&HEGoY|4iUTrN!<_kU+(EmV6sJrPH;i~kj}Oeo z7xyD!(8FNpPYYSD%jF{L?o|}Db%M}%{wWGAUk@i$2C<^&V_{&~O1fEcnwkXpQvMbt zn)qx991KdOg6?XRGH@-Z99oO|8Joz}B~8+xcsovR(hy!ea^Rio=VRX!8f?8U5H5ep z6ZYRfe^6)WYav%N2o#6-vC0J_UR;(9%Y(BytnVSfJ!=7D&xzl2{qa()J^p|JviHsc zo4!6+G~CIL7FX5K21zXIEE@UO^H?m8*ymC8*#jcfuwMe5|-AQ0aHD%do!8jFI z6ueT580*GsXq8ZN%oiWENTQyX3wY+sVeF)`ggSpqCn3s`op&|@W0MNFu)Ye^3e|95 zKp3^Z7mv4Qo`;HI@$44Gq^7nX_C4M%v^nj-hjJS6mudP`u(K6yzI+gzikHLP9}j5p zypwRHss}tbj^qYk)`|!0I zcF+{hw|@-AsVm{^`2+B_Vj!(~ZzlB8@x`r6_DMcfcjQ*Ziuj|8Ptnb5O~G)O7adPh z;kaJAVdsXHuxMWgiOUE%JnxXoRj1o>)x?jGAe!Kc>aN1YExP<@OOk9{Y=LQ4cHvuU zz@1t)gISwa^23Oc_`UQpMN5uA);CS^=_|D8Jjd4g?D57@^|0) zc+fhQx~=tuZ#V;TyC`FppBL(WPr;Gzt%@!MoTqP(AHa(61isrwp6#Z0puv;QLZ)&7 zneWkn_t)p}>_w@h;Ijz_37JAz!vRIdd{*J-Ng254yBk-I-$^Gn_r~{moneTP91TCe z9-a5EVu$OxI3@c6IVEm|$LY&qM4#)DP5pO^`}=heHN#fG9kVA;IrNIe`k5sT@O%mj z?GJIm$6gfrx-phW7ji4?3dyB=x#x|Ulx}Q5quZ{54%e>0q-|ZuV}%)qS+(T*-}cdE zx(Am=s&JkRepw*z7-lIC)y{K4d*xIzN?%4_bmp+8b2gL?*2c`IP0{Gd8S<)Gh`uA7 zalO_VD)Lq3C7ry*fP}G_^v)h$tM`Up25U&Oa2hvJ_yi?;{pe`p3Mg7zQzUGT=C_Xy z7p-2VLr;h9gp+BBcsbY`zRpM^ua^lhb#xe9b+$rro(erPnkzV**e5yl{Ubqs6-5|n z)8WgiH0y9V-0#vH%7-H)e#~>qbMq79yL985Y1Ob}t2z%_w@grd(FNyxy(2CvO~JsP zgZW^nCA!pn6nZ>*K#$)KXD^ctY(umMxXQVVj-{p$97P=FJUQ-{u75xHSgx_9>z11%ZOs^+UG|Z;;!*2plG4 zh(pdg^MYZanD^O{Rlh5s_2}KyrJ@bn4Zc7tn^wZwlB2Y`=mDHuk^nE~&fzQC9ccEQNZw{#4&oMd(&+C41J`)6=hRqE z%6mq021G&+b8ozwJDZnGNhOzsv!UUvVPLhm54Fr*$x~ug@ns)*?3C38yJii?enkpk zc?MvYavZwf_Ck4+vqD^xP2#EruR%k6D6}mc!9%z8gl#uN#n}fNV^_^4IAZ-v$j@C2 zWj$kI+Fm(4dSof|pB;zYHcjAh(*_haJ-7;*$$Yl0@7nV1PUUpeOA(jY#KX$DxuE@V z3iXQ~OqP$-;9GJme1o>!ev2ZyA2Ji=%Qg6kZ4I?8-V3k07tsrK;EV-kl=8d<4s+8- zpLa<-XH`3VdaVr~nW@Z*{FY+Nc^ zZ$w|4!C#gy5U=_*Q%;U2zui`}A+SO$o2Se7ojP*f za@jhoi<)e_u!QIdO(d$eVTFe`o`xMEcJ%1=K&=_hHenMZd)W(p_K6vu7li{*&6}9pH=R_ z*ja1Ri{5>ZYHre)5agaCk|6s~YYeJh%wZZaF#m2-u72_cmK3z(@tx0szHx6sLr=|j;C3lWpo@SQ#;#}m(vfSLv#?9TrZ>eJ&R$h(G0|m zb0oQ$Ghmhe-J+pOno(ZHL)dqIExcc5z^W~sB)dE7A@pg9`Fmeb)t!y7Nn@~Bx-%W( znzu&1gnr!BdI;L}t0Zxelt-)?0&%Z8U>vm-XE{%WqPY#&Fy|9IaTmmorykPP31dZZ z*g3I=#ljU?F_hLrjn-yv77V|1!pQ+T+{Nq+-I-P>9K6*8`z4-{*sr+)`?h&nq zkgY}>(=LvLZ>F9sdYl)wzEk4XiK&q7r^f@!<#F8MCFGkqhD$g0g>(8vFm<9C-%)Kv zyFzQ=h-~gMOx{NW`vh|X;{r%}Jsn;Q?M{o1D2filETBNEA(b@jgS~vs&{|_UKieCD zfo(6+wT5dca(z=_?F%Drm+6UnjE+&a3PY|?FvJ_{vc+u2rOR(6ZyLNPf**NPM74qqPbJ zpLA`UVO~O8(&q_>W#0y8WsQa(xwmOyNRs63$N|{%dpfyP_7oh~4&k2itsywJnUFdD z9klDChFwj2L1mX5+Hg*jm#c&LNqM#K=4?2&d#VE$+}F~@G-Y1?;~ZUglePI`sqp4R zC+fFDoyry-rI$11_<80Ndfv-KjG5O4BP@5o>FhZa>Q1EIcbVvQCZ23OC14<1LuPEP z0P_$dv8QxD9I3Lv#~y8=vtc}Je}5g?HccsNJ2Ozc{Cy&f)e96C+;O zIT4`>J#V|giA%eM7u(z*RdKcWcItH4-YAbEk5vinM_q;8mZ!*nL08s!H5gV5JWlz` zBj|*CD7Aeb0pB8L2+}=y!m@^&;Pl{Tbacfl(YKSaILN69-(CAoqMH#-a?exXQ2Ilm zm6jX69DG82y!jJcjE*CT*It=layiVjFrW#0^XdNbCgfGzl6S!}8t=D+-e{c?l>2w& zVV#D;_Pm{fZ^jNmzpaVTP4+FBU&D6z=}f=Exc4I0s08bO-pGGUVZJnT~Gikptrfbp`%kR99!8?=fAiv=Hq(9lXa)2W7D$cJ;U)vp9M zYjbGpF_gDtAEikN=5T*$L-4+~fd)x7(sW%Nu6A0(){Xq|nzb#@o!~mSjY(Yq1~GD;4OwSe@6{HZD)reDoJ8<=VU&7cOq4o zt)*Ulhln#@ZKR_;yQBLSU-pS?A#^iqT%_E8AiYoOK+pFFNvaZCz%J8P9DnC9Eonak z)))$y<2V;e@CoVKMu5@-15UW5$Rln6S6W|(DYwm`W_Syb(?2OzOn(MaA&Ksndr01N zR^`m;Z6Gshp{Q)un4g!G2>A}<@%oGq%x!0j`TjfLX3z#m@6inPpFITc2~7&O+;7Rn zv3I~{t~$?uY9-*>EA+|u8SM$qf&KRebE(G>@$=jPxL}?m-m;zxw+@DJriK@K%HDP9 ze7;C`EetsSa|)dc+Xlw3x`_EQe{EF*H{J-6g zzuNonmB8;YlJybFVqI)_J$JvNnPq2!*2ggZM`PLRV|ss&MgOgY6Pt%f@MEyMVXR_$JG?mg^FBRQ%&=KcUsGvppu0r3#m9+KwR#0+% zCsm=Kj zmI)oEbwSR(MU8A{i34m-ieBzL>1teCYI-M_EUpYB-yORIxjmdT89m_cCS{&eY78sKreMPtkLB5MNR2Vwi@1=Q34b7?;)>H zL2_;3)IP9DvE5`SD_wVyYy?<-fZ)Y0T`i=hnzivGKg95AfZ~cCT z;(v~R%kDS-mfgR>zx6Mlsb{dUwxipB{zENU`dwbeze?rg&eYY{WqR@jnUr30>%$Z9BZ2lP^A87DR95r;y*NDbQ+93Ptt(F7_OpFK&LgUTCpB zM{IXk2Vb0z#R#?IwAP}EHXmyRQY~FsoX2%44eW+@dv}D{8qLwK@g!Q9w22C|m1XbQ zv`O*GQt|Qw4IJp*f?k&!VBa|g)bIODFzG&zm9y0$;6fw@=WZmglEa0{j=M-cwL(yO zI)zqDF$LZE>tWIGG5GbX0?>`Yr2qLN#I4Zb_2)IAZO|L2+LlT~&7_bR<^a3h_KU5i z_k*){?8QrOAA|YL4Ya%MCrTgk0{XT8qWM`r@dN1NUo7R}zY&qraeFZJ2rcs1TB6XWKo0R8HmONXRfRlnN zX+^j!7PtQ>oI583-5Mp6yX>7|AG`H1V*z4;i7njNwhQ{K)8au35(QyGAsOzmVx9R1 zsQtHdaJEX|%;x;ieU zN6y1w?>ISLZgjBnAv^4CE zcrEN9xajxBndT03dr22oayR2QYafa#ZM)%D!yoV_vZ{HWZQ7YnD{Bfn3%sGl%SoW(nD4Z$SqHpao+g^dtj8EV zC7$24L>T66h0!zZ@kQKftW>`W?$1-X#!8nmZ5tN1K6^ws)O#r3sZIuW)gnpFNGEPB zc_2A5R+qyQFOio1L2y3Q0KG(p!1-Tk)5K(K*=;-gXnceojO>WRbOrw2(*pNA%E6>{ zL#VO237_p-Bix^{OWf_0BR;8_h~j)@jNd#T9GqV9_q+zw&V9Jh>0qAN&U+=+^es zCCmz1zl*|^uTP4qmgBgM-B|I~V_&?Ze2HSVOcoE;G-JI4C9*r!3EVp$g!APN*wp_t zJ-i;l`;(k`M&xGznJr%3?MAOQnV@7ricqON4)jfB-_VIWC_Zl_W=_|@ug-;QU&Kae}GdMRLh%h3S*Lu`)DS9Dn6B?7DD8 zh=0D30<^o(r`x4smPs<<%ln1q2Cs#vv))*h+md}cnB(h-9YEJVTX0l(PK9Yp#FXdh z)Z+YCA+OgLXrpzQz$H+W?pjckaYzTlCaxvB@wqT&lpVa9R}NFA^}{K0%kasLp}68@ z0=;hLOzo52it|Trto30i2l>38k5V{G{KjqE+Y3NI0@asC+n? zeD4o}A@k&Ejch#mA^idEFL{YoGT-5WE6-?dxF@@ryE6=R#a*&7a{eU;1_ujN3tKF? z6yiZap697=!Db=xR3onPI!Q4wLZX&9k+#g63nNpCDDcok(wkwxwmq+jubWSo+`3aF z#0}I0hXLEE{qsb+H(@jAp7B6o;YG3x_zd$K%>u`>rkwmkc0LgpB5VQb+9C(b(nbrW z6=Ny%t~Gy&&4V`s+vA;9i6s42AufwmptED1Lzm|g?nP0sy!0~-XuO1~A76wnQ-|{1 z@Q+Z`2chLiEsPmlNear^IP}!pI4QuEU05^19yiVNn{k%3oQO5MfB^a+J`ztO`+Mo2Hak;54<^&A!uyY!X@4}#Y&r8F%i0A-i{t9?2Le3voDHC z^oH(@AA&QUTjB0rdTca8q#2DWU`@|{yzH_E#k~So2n6bWJ(|1veVt^vwaN{nSdb zHmnP_INh5y)@Fmvy9MIJ@5{+{sf6uDcyain2hb1H=};yMTMZJ$4A~hP5eH2nx}%jO zYflJ`=%I!m`b7&K$D5PG^jWCO*|6~72T^df!s38rF)GF#LvtQeY}?bq_gS%^zhN&N zD_aBmW3+joNfhsW8%atbAL-DFuk`3l7#Uf%V3RH-WVw0>9<3z;IKHNKrT^{;&4V zJesQT|M$iWl~krO%UF~-Is5Y{8OoGKA(AxGAdy5F5@pDcLX=3EqLRYdpGPQ7l1Qn9 zMjBK!O6BhR``+&#zu&#<{_gs%d)Hm-ckf?k?RC!D`|Rhe^X%vOeBSTZ+fQALxK>L7 z=kcWr0{U@c_f)d6{1~3!QCchZonv|_Ji&)uE2x~=Ule@bhcXFb#Br_?Dpab|+t;JP zrE4sCEK-M$*Z%^t)|prwAoz0XJ3QSnh?gQe8AqCjKQ93ZZ99x_IGt_&(;2k?gE$Ev zG$*{LnppBahAr)!&bY?DgjecTuyBGh;oqxdM@Fl$xIGG9n{$X5Ri`}qQi(^T7N3EI{Tw4INC%EdWzm-3 z3~~0Vv1G?3f^ILvw60o+j~mw$$uII`&idv?GG9u1vc)lyfjAXeKdl zuVXB=g_-av7cge}dirotA(k2}ptF|$#Z8BFKz>&Y<5em|-<^2_-9(2-4Vl97cPB~Q zMqhf{hzDnXXP|^#Avyi-3D`;-k)x85ZR7EBF?TsK2XlpoeL96x9b3PAJHAnf|yfw*$#(t39u1?i@elZpkb75h0HJCZo z)1xDAFnGd3wtc5Bee_3yvciG1fb-gxSRcW%_%BS7*%;audWR|7atj|@?G?x$rjM0qRnGAgm?KZ9%kOm zn}IVQ3X!QRlxQ@k7t|c{5MO^u$9oH!!1GEbKG5Yud8Q~~+{eGaab-4b_ zg+7_?hiN&Qq_64)TiGl@3C<>N7jtSe%^R3+3j$yyZ#f32%F<=6i%Ism0#0Mk`4q`# z(05P9Gq0to`gBF|Slow*>^4K6j#S)I&Lh<#j%0RSE+*8>rPQhxmCa+o)F6v2&259r zC#329f=>AHK@+F7$q_^E1~9qr24g2^kd;mDFachrd z+UA*LM$=6QJ0L>NZI2*pKXBZ+1q-Rgn(<)RAW5f9ybcqj-@)uqZ5sE?mv>ONgvNss z)8NpCEq=97<^7J8@B9Nw5x4NG-Y}jI)kJZ#Td+zg6UOsLF*HJ!gxruN6%wWd^6kjc z?Pk z+a2)lqUrQa+$aPKXo1o$EqXj*zonM00Uf=rP3&7Ec>Zez=<;_8P#P%&p#g0m;~feo zem`O!)T|*@8|olTdLuo3y9e0t%lNz}nSEil6yr zlXy=5e;jWsZi1|yC|ES}DzB*82hC#4NQvSvc9m8PYppLx-uhf+(>`g_^o~Hda3~3O zEpnqNDM?sA%M~*&-+=krQ;0&rBzDI}iiejKC<=S9rpi+xgHySZz zS|7+R%tH^Ev!H^L$)bIIu(2?W?Oc^jw8MnSrnfVwd$BHK&|ri88duoaT}yCdWjrp} zG=+Ry^%W-vIK!``0ycix6e8^6$hsYwfYK*Q_(uD`!t36dR7d$P*kqjKFOQr=n!O1* zQ2Lu$e|<7KTL?hLqD6Ga%rNSZ)(4TF+aXAcGAZm&7~P{yR@-dFsBAvtrX)*tEGcE= z9z^2CsDo^u+e=>H{M*3RUWS|ZtVl;^8N2@46*6TwnOGXDVT#o-r(+hU>JOrc>jDL$ znW;&RdwPTWqo>TA2V0QM>}J&WB@(Z;I5d6gMCPx}ph49uP@pV;c@e5c)c51uMVE7MFWoMJw$x3?xJ#b`)emZ62-C@J-V(qmX&DA!HQ;iPP={t zTUNPJ29@2DZm>vGsn4+u^BI)k38j=?Pv?PxL9mszu!$Jj7| zSo2^ks_%UXT2*`Kp=xEmdDR)@a4&dC(SZ*246wEvrxG2%sbt=)Hq2ai7St2Fah~xB zh~}8bUz+cseIg418K%&BjE7N^`ay|Wva@F!5)ID7wX*mg42*XoUVXoz%3p{q*%nMI zw}#MryKL}r?^$N{!!Sym^T24iBzm|UV@;)8$e#BbssD=nd5Y{8}U2 z_;r$zTeg%m3vqlk?{K)}Bu|ywH<7Wo=fSxaH4@?Q1B#M!P}^-hNilQ43ogD;nZKB7 ztBH`HIx+g`P8QF6RF$~dj3G}ZMo^14Ct!U4Mv_t0Lb?Sr(WdYcUaGGmo%V~#jVt5G z&9fpjN^%!UD7vvKPu_!!|0-}dKZ_BT%Ct17*o>97Zt|M3(3GUOR~vvK6=>q_WpDaTg^;zT2L4pE^^}TC3n!0JV}t#+|DF$-Y3Ofs>DJfj_g=?hHY$iq(SOG;NY=OIGT5Yj81w$ z=Scm;z@lYTF!ls&>v)BWleAd5%?#a9Glvxa6@<-W###w0Xp?o)31Iaj5pPE75fkMJ z)QekV#RtXHoU9Z&TZQ7vm3p}H{Rm9&nT3{Oe;|Lw3(gOt2wOYz$;BuGYM`(Mb6@%s z%aXNg-U(gR$Z(?|c6B?P0 zZT8@P!GccXd6N09jbOjxF{>he0!2$$Txh!j8ci%v@o6Ev6@3U#ADfUT*X>BR^9cJz zErtmkCk5^bsG_=?@!~yPhc1`km3@O(0RvJ};R z>PLACKEacxi|NvMVQ6@|oZc)H$3~io3~wrNs2l=2Tu9vu*3fv{daQChN?y3lq&GYS zq4DHlyx3Smbn5rwE5AC%H2f1j-yuOEUWl%;b7zA}W&jBYfR}sQ;8oi-HnwXLm3gT^ z8VpvE`}t8!`s)~a=1CrA1qm^~g3@T(*yHeF$pL;tW(6Cf{1>B!W)Zg+we-|30s6rB z9WK4y!=$(t(Xu8!T4)*&!_A|RS;MjT{6$ETe;@OU^BJ)&04h4P|wjl^#}r+62}MY!YG30q0})=&J@k$sHSs0=wJaRk>q zDrEM_TJbl>eg-+gnK<;_60Z&I##@bVamiN!a%9O`IbEGIW%`xPE!xjzNZ zQE25*1r%K|m6e3Tm^%$76AInKFr97(#Aq=+Y^^s;oeX7ihJ8!dj65 zocYX<=r?YFO~#hwj^+WnDs(SH{^mlvUZ%7Unr#HAt|_GMfJJ=-OW%kKhgQHsG%n-Yj=^B^B|PDAFl zevEafgr%1!!EA%^WTx+UIyg(6)S296dQ>8Cymb%MZct|O^&B-{Xy#PoP`tUb5R(NaOy- z`w*TTg&X%&$ifY zq85+NF)z(zNb`bVICSAW?$MY-YbR=wTrT4xZ;}MP+dqZ0T9@MQq5J%*1p-WpZX(^# z`-XYLY7*7-@zCD6jO`CSgT?Nakb1Bi8$|BFuF*%hqwphtdrmlZ$vfkdkYaqZAe^9M zB&=9T&^$bvC`hM**wzG?B+|r`It;Lt)-&nsKRZEiw+GlxSE25z9`v%4B&{tqK(9_E zVlra_2@{YbYkcHcs|~g!=RN1$EEcCt3Ia^R>R*gwbRjg2-N`YKqOfb-I9PvNl*D8o z1OHd6;p^QR_|~OIhhJ^uB52fVK<<2Q#3fl>bi>djsx{^bbHpVXOzhK{h!88h zygnI^aE$WI$Pg^79|Cob&tPo0-hQ zK`_ZE0ekL$q_rGanMON^+OUQw$VIYgZl}?9iVU?68Gxw?SzIQFE4xWZlqxNeB6~Fy ziHyZHj-{_ga;@gViR~N*?Y;PE6@C~Js^fH zI3Er>C#2z_Njco}?JGa}az5M{cM_J>9pM#n_V!y**3{smE2`@!VB8^5(!W9-%7T<& zF1duK7x7VS?-E$NKbIXn^Bsrgn4szK1V~$~z-nFC!}Om$2bWGxV!Cs#!0Mk5A;f^&nMav`0cZKcRh2$QIzz^?-K&=kpOee4tei`(#&Pv> z8%uJrWE#oNQ~}M!B{;Q;8-w6L*k>@K4|m{If($KtbPY@r zyV=E@Cz7|b7Ot4ZV@2pR;@Q&xak_Qz=<_(@)mY3LtN0t>AmTpN8!t()5^0 zH!9`Z;-A)qsPOg_bW9&ZUgQ)&`1K-@CdYZyPEiF)E-F)>u(NP6 z%!_`z+>CqMxP40XOg2^T1v~YrAtrs})#~}*hTEo2;OpeTmb}v>iPwzDitf$qHD7%a zFc3_Q%q`*QhdS0f=QX=tKaoCIcLJZ^;EFwZYp~(NLhP>t*m`Oz>!o;<={Fw6pY_35 z|E>{=+0`IjE6?h54`Xt%8SE_l4U$nTnyt)X&yis)e$~Y+^dADtU2|y6&KNXo9D(4; zzMy7$4x9yHFl*Rv5~o2XI~YFAiK+dtOPrPJtAKzB zH(}2C?eO@H0P#v=qytf3N9zp|6{XOO2$b3t_V zGpPHJjy+k&P({|3%4oL3m2y9@d({dmtL#zcfiT?>kN{hQ9;3^i2ds7AR&2RE23kK$ z&TGU(s7qCPci>66l|*%# zAgL(|CD|rVFm0V948Ax^ET3D@k!lI(rGoULL>-q0l1?^NZYKT(TpjRt3{4a1!r>Ki zxcLho$BUOi=(c(E#oLKkCqIV$;A$WobErOd7Fj&3N97$Hp=9Me z`eDF{zIg@oJ?AgpwRA0L&YD8+eiNp)2K~HsC1T{_rq^hFPmL53dL7Y z!0{c{=Th7|8Uar%?daL5Z<#6y33`7)C{V@U;Jl(3m--~JuguJOudFB0q4(bK(_jou zJFP>Uc2%LEgaFmJ=RtBNR$`LpOa3lluC{z^HJujWN3(XD;)q)^%8nj{j5JHq*1VnO zaXo=4pXXuk>NAYO-_^9G+Zk;3Z705(V_{qAO-O6|$$BR5q9=by(FaBeu)eer8aO7? zikp`a=68d1(;@KGKhFkkcETBf_B3t52D;bq5c{!yHj(}2ilGvZVFjmmu`JzBZ}qyt zB`)jBi}Of_*Z468zxe#EVz#7pNQRmp{sfV)qHs`T3pouc>wjFZ+Y(J{aD8OL5J*xmn?d4JTDc5ti~_Umcz zdax86ZajwXxvnI5Fc~LgPh=hUSwh^peN@dV5t>}yGxO)IBY_uV`3`AZ4qD?X_KQs# zDY&qdsYn#YEt-!}=Zrs3(y$BSWXn;!FBjZ=oXMM8-+9e4L2&uf1ZqEW3yOx6X{Zs8 z6qTnkFQd=nf>m+o>Kl#4Er$p{gQ3q%-Pvn43twV`JjerbWH(t%XE~ zy|nr1U#Q@67k+3};vX(!Yc01n*ce4Q#*Pf}=}MzafgsZ*J)fx$(j}YtqTD{$j7Y7V zOLJqVW8AD(Hqc3$9J?$)PpMU7d{!0X7pQ~Hme1I>f_4S(157TD&Qk7oNh=yMnanJeQ9!@e=sme+27(=#nV^`802#Herj8 z@qVt`L?%6R#@)Hgsjv6|xD=$2EQ7;fo)=4NTob_XdkYQq2%tGjzroxPj&=0H4%Xr! z^6m0&k}252XqK9i)S9z6x=EVe2|7uvIR37(t{T$9wtWL@Ru<**Z&oa(~BBrXxg;-1dutZ;=~8MfnyM z6-sd#4~-~kY)b{_-LqUgXivaho$OAyjB0D7z(l=;6)P{mq4-7!|Gb<0>J=eVE*(c0 z9%k(hT?f&<>uKPtSO}h24UR?<^yO4>vgqR?>hog_eAMOY@9{j0ytRN7GRUf}xW!s< z8m2O>$M{p@7~ahs#P&*8`fIEoU8#Ev77_{IgcWQ?nl$YZQi9EaVnkk92+oh(fvRpr zSoU@Hf2}RSPGj{Nb+>uao#}wA?988OzIU{25tK| zzFnC+yZ)2_ecdyW9xF=0uyI{@jpl$`O9Q+5&V0JO;1roSQ<((3o=Mh<-epv6*2Ca2 zJGlFh2QOEj!#4BVyjgBs-`GWgj(=fD4k$Hm$~@!=1!JFAD1$C9v_Cg=5(`MnnJCho+52&Jq&Z+tAf17 zEq2Ncj&*gu0$1sGfyvIrL@;V8mp^Dt#T?F{e(QWXZ}c|oj@}P*#rIO#Z2|Q2jzAP< z8}VtxOmdD|Gvd}qQ6|fl9`G}w=c+u&gd>+&x2?#C8ce0)p0QAq6%Iw!NsRfl@fa-n z6RdMzV?93{j>t&y<+rm?KV>dP?^c3?@0?+l*;F=7Qyd>?xUh?hP7$Rr%i3p+aIz zulGj_d6qdX6bid-i}7QcEGgbzg(Vz&Y~Z5~xo`LrHu)4VRl9Yl{ncvnZKwkW%N(e5 zhak04@~3jasnGgjEyl{Mp-E2;kbO&lE)(MVwNB;KGc*ysR?p^Gq3)Dlt^)hBA7b51 zD{7c8hnH?=q0iyhXcA~jZU>&i#(7cHN6nV4Xl=%oOcowi*$K~Yzhpn?k0rC-O`-kt zEe>8;O)85SjO6raH=7QV3{8&xvF`$o7#znyE??t>ZW>H&l%a0h=5yZE4qTdY#+0O&4pU!HcIbi|E7)gh!7_-iM(soW^5qIxRLihO%xFHRrEe(Mvx*Ly7tWCfO;J9DKWs z$oF-i_CZ%j_&g5(xYa|&qyo^&@}pvEe7Iw&htaQn(8#k83)pAul%yZ*PW@8c;#`B8 z%{@GoZ!y$B{TlrBRU-#KbmQlq>-eGICi9EaN6!@Jn3Zp2K|hqh$B(d{O&6LU!d^~e=hZ4hH_m#^ zI?0SM>`otYncKs5Pa?E7)}X}2AUaekNn8a}$YG`zU$$yMF_+6Z%PAF> zpJ{~)t|H|33t7;6BLQL@!|!>N0=;}|8ofk+!&_THc&n*JPihnCK9m zr5S0rkAi1|M?j0yoQYa5CU;*?q>5A;TgOlI|UC=e`8sFK?xn78&wDlf0n z3X+blz#H~jL~kyG!JiG8BP*@RF@;WM(X+FRI4jE4?Fgx;5`h)^iOgF(i+ko=!OjFJ z(ow!2rNZxF^_(y4*s(D-iy=z;2s;IZ;7niM)y+s)J2bo_&vZ|30htUio# z8^XM$Wl(W!3f*RDNUj~^82*38lbto?SQ^2NA^!%19g&9!fhY{)QaL&cK0ukI5XoL{ zNS{xaqVKfVkxQG-!8n6H*e@DDy>&0J!iMGObFzd@K9dVOGxcfIta-F1+XydY-9n37 z3+Ve<1N?L@L#^tX0JcXygCCyX(XYo8PQOb<^q)v=xV89YJ8^Pmj0V}$b&9pQF$)u| z&p_--6_PQmL_+d9u#nTL_p3R=)jvvXdA2g$l&nt0o?M637oF%fPZn$L$79~GDxDq_ zOS01M;;)-(By!S9vQWzb_upb+#r4e4_A0d#k($Ei?>g#-%+(VY8{km-934cGdyC3m8TmDd6An12nm zqfD{mPUioBVWs;o?ifL#f4FA;$*_|6Z=RWdd;A|~T8WqZgMtV3aNp+C7 zmj&4c&g|Lo$-LugwLIrn9NWr8gt#xW1h?|f%!9Lfj5Vh(I_x%zc-@BD*pKk{e^P)7 zt{ZYg>IIu_z7!7LdxhUjJeYA=gUr$PJj-RGqTuOR3M0Np$?4u3q|cI}KO^Ny{MK=# z-RUTLgvHUE@dK>KfeiX~cP9R-+<+^dQ~{H`oBu`OFY6gT9a}v2u$oPW*y)~C*k^Kt z9aPM~;dRF#TFo5hs+~cJs5r}AzC#cmy&G4LF9bLD3KH#doE$QiMw^>F5I=v z2h%xkt(*mW&ou?KJEGt`7J^52CbTZ4%$D07Y@KThYD^cQdux{RUbSCC*Qx92_Qtmi z>1cw79*043>rduF@MQ3L>_LUTs)Nwj?bP;s7=Hgz&vV@*Mh$hQfvuY{_)8hUf@Lq+ zLcX)5iTQds#ASNURU%X){Su1z%G3L$2K2)8a5$J&jX!ism>D*%;JUmM?+B>k^CQlX z{*>zrpPLQ~eDhgXt}pLaZVAio9s$_{5nN8~BHDS5IDb5K9KN^=;$L}s(ST%EummecDGslbyTaqKzhV;|||^L|cG z#r1<7u!%d{=hZ_yF7Ip$e|y)udWW8Rxt|L`LU5C4c1y`DJe>liicV@ad85 z_-oUAhAi9x%XsCC_3a_H*6IwW8y6>s&YI#kQ%m$q4`APGy}|6p1MJ@pP1aqb0nc-F zg>qpX>>a7bYujaUo|YBdO!Gs9fL(k)-W*He=(nt9!Y$%HejK`{UB~o}1YX&eQf4?l ziCq#Q5UWGr1{e&{-MkcP|aEoe$B$DBvs1y^Oj|YLw2B_d57gS?_%=3 zZIJ(atOJzoxWm_b_6W0$(`pA7OrjYT&Aj1l@7QUFm1+2yOZ0SJIHb9JfY&Zr%yB7i zj9MhXFI{>7LrligMq4fmYiSRf$V`RWkaA`jvjVp&Nnr7IBeHHkVM)3V9$srsdQ&1v ze`*Z~jHsY-+&lJ&&k4TwKp{WXObup^KE3S zeWnFw+Xg}Fxdw#g_p{GFAiP{q$LSMoZNS-kU^1Z^JKEx)Iq; zPPJ_HN5EI74J^spFdDE+0?b{7sNt_TYQ#Q*N3w}Kl zGdmq++-IPR)(9S0rN|iDC(??R^Z$|&udO@{ouoEl&g4$GKPdqRz7vvKCdQmuZAf-H z-Y3FIX_iyP*Rok$j<>m2GcW64C%b#F4kP7O?vWK6)qP(4(on~vDN+|Y>Z<* z`EdOf=0@rgx4d)k(%~##E;xpIE5^{!7F8JUHHB#JmY@|PveaY4ZTP+EBD~g2!>+U> z`0-MLKCU6S_f0syFZqJ^WSaR0rcWT&Qd{Z%DWfpUT^Q1~M3PT$Ou%BQ36c8V!WfC_ z6vXjXcIZ)+h(3@XYfbe&aXI5(g{a6taqZDq0nVTM zoK&Wag^oD~phB~rv=o13rC*6aS&+fm4xD*5Ej_`w-15T2aIOOW zBqi{@$B3rhdj*rP+%z@zxBdk1G;e3VPl!Xgw@F;Te;V{^ zR-ll?erR}qlxc`eX7aC}D|M`1rLU%1FV67itr zPW1mU7M|bChP59i(-1Cm&h5ojMs$)Le9ex=-3d*2R7W0{2kmCab31q@^cemN9fVg?lzML>dJK!SjPfgmV~3I-Gf zbA-LB5XFp$SutT&%vn+NZ3XUq$2;@R%s(@4=70C}_w8M)yK7Zf*Q)C7RlTcsf}{Na zO||A~azB%*s$2s(?O&JmUq9-S#-7@e`h0!8XWfN-9gMGoxeB!x@^Z>@KkM}C%C+n0 z8!6Tn=-1uoI--AnIT>a>{d!n;+usPN{;lAzi+?5wIQF+2_Orhpb)Bx)r;~MhRxgX0 z{*%3ZCxm+YOq~`SBrB}f%Rco8|4yh=r?0>3wT7Id%vOHVZzQKDrz$tYJJ2g=!ffxr zARm7}S-F9%;h&cD^Ha-1t>)JA^D9@U%sTdfB{F6xFce^&K>vwjY9@UFsvbSH5w=DAuPUuz#yVu#4oSbz% z;=d8r+qLIUBbKGey7n~WhSk}jhD^it<$S&7cn41K^P1`Xb2O2YYb;ZG6&aM5ueId5 zX-uvj*6~@#W-aJ0!~f5)@1LyJ+nJ+*EF(+PYQf*W z{?(H@Gq3H{--ZCW?&jUidvpn&Qa{YrE)?YCf@ROcKX8h#e`qb8`u_hKKV(Joj3@be z1qJ<*oUx6Ov5WVt5O2R=A1`0y&PK+yKQ>U;zh8p&37#|IU#zWTP1b18ug4nv zcftG;!9P^|Z0&bp|EbnY==M`i|AOB9gS=#Df2qa)ZrcA(tHm#c|97fIZ<&hxaj*#X z@|*V8Q1L%;s2CR>{%ZoOTL#GeYxA2@?KD@vH2&MXSXV4}xNgl{pZ^Q~C4s*r@RtPs zlE7aQ_)7wRN#K8~1YDel+ROj)=GAg&UAGXb_XGUyANil!kNgn&Q^H-MF@lns0tH&Sl=GW!djIJ%O-xv5c{*QQLXVm8B&#Z<2uYA}0rGJ-~ zhHU5S=g=%Kr}@h-UAx2ecgOTkzjULY^>u#fdVg&_{Pn!M*80+HENXK<-Dfry^^&W9 zBK7%NSigT;{~+b%%zjnKE7U&O-gW5z8dQ||(0^j;7#aTJUrx?Qu9>P_vxvI;lw`g6 zS+Af_OYo=9{by2?k8JzvLayYe`}}W7w@$-;-ZR??=j(0urw;y1*0tc@ z{QdiS&!SFm>*@Wj$Ny%+|73`@a#Z-+IAA~W|15xdJ2z_mf5!V~t35T$T68ROCg}&j zbMrOH|KSz!a64tbl=+yZr>%hSTT1*;#R)rky%t($>9RvJWoo3@2cHgU!DAjZ#X_y_ zIBKdq&MVd7?u{Nm(2?Q%N-YJh>jFBDJW2OmmP60NBjU}O1cR@++!T8?J&&O-3vL_9MH&XJ=~m~ zD>}>^10lOd3SaK(qR;69h*jNEjpu<>n>_Px{?~Vv&MNp zBwT*ihn4jVAUrw;UZpBi(EByitzZZBn0cGFYa6q=>L5V5Yb1R-59U1oK^+sn!}=-h zIeh#f>g`D|``meYywp|Hyw{YK!`h>ksXRWr^+8x-tB*G@iCT?t;^`OF$UOSF(7SDz zFk_AyIxJMhJFIWnz=gz`{%v7mo$PnH>+?G?8 zm5a_N=kdo&Qf^ce#z_qyvZ2-rUU70h(#8Qeey$^Sx^gCVMB-Y`aR(K5>R$ zSV*~PP-~oBu8r#VwK>d9qiE=z1vuwrU)(jc7s)#xg0R!$utwn}y1(85)i@B<)pTuN zSbV^vWAoA9+YTO|ErrPV<#6qO5^i~6z%R3!a@6EPro#g;@?IWJtx<*hhrS5M1K!iD z;OX4KECKBAJAuljRp6W!#%=Hfd5<|p%Z@#PT?%`t(CahUjBwedI@+@K}zki z)cE$gm-KY8hUlkZAeqoDLwqMg`Q2@3R||NiLVk5h;Kja$6XzoFo!I}e9xEE z#iJWWp4K4~mu`ISvN^VVrHxzHC(!jFk^H9HHaPFP2`(JoM<+rq&?R$Aws2SDULM*I zcC9Zv5A8yuJWdxb@mNS1W77+|=_KN)c3F_IN?$72#n8jnI@H2O1>^j#!IoDg0vxr% zqZ%R5Y19pfTNX<#N(W)ur1fy-Z9CMf2&GeJ+GEWp6?UioVDNq@?Csi?6_h(;n<<;6 zmSffU*yUU_zT<}*n($YwZok%d%>}23mB!`Rfl)Mj=nC{OMtnIG-V1v)F~hGQxpIV~kes||3v z$t;xI9m`vW+@~#by?DaWrnIu>Q%T?GRdck_4x3FE=4Q{CEar_4}HmM9|N5AoS zXhS2hRks{=h|_^dxyHC@1k`y9-Chz8?@yb;tgjpB zN_9s*-QbkOcYhihPu~KAHw42O_CJc@3#KPYsz9|0E0hvC`9rFii396G4; zTsYVMyD-512i)0L2%oBZ@!(7ex0*Z^I(E598fRys5S)MkN3YP;RlE36#wLDsZkAv> z(+5A^&Zi!Fjp?C|F6Y{)Vu#gh_-h||$Zu+md*AfnJ1YHI9A*k;b3-xg^;N*GYWTdX zK0X_M2imL5!Uw8nNO{UkT>80!H22ZQeZ#$6y6 z^Rakj!9Z#!&7|b8)nF|h3uDLh6jlcmQhup64%`@v0U!Ia(Wxc0{Xi=i)nyhw->Hm6 zzK4WkdadC7bv^cOI-M=gG-nsP&Ak7I#3n^|taRXqAn5iu5JK`sfXnO}NEpx;Q_UOW z@Z~Q+Yx4kfnz@u;nI-Vn^ftU^+&M>}0`vJ_D+zAt$uhPWF>&2KvE8INpJ{?gupv6arQ}5Y3DZ+LVW<8pL zEjGkpZe}n(n6gQ@BV7)C^7K*7D4yoc8!MbqFy_?_3t(m8GguFIV7_w${@P0$F53)8 z$;}yHWRS*;D-Wo?eK(wrS#-m(ka<0O51W7S&jxZ~l zG3PjUO74lvny8X_)KWNUeuC^rr|^>rU9oy~2Y%b&2rg-#OMR-eseyGDz9BWT)je4% z+C*#FcIcEM4$C+MlIU12AN~ni<`ke+dds4QH#7OMwr+(x7 zHEIXjPW7g~p)8V9%XQj#2kHCt-*87a?Ck6r!?6(%ds@+}fZ4FS%O|w(g?1WZ`~rxM>R0;5goW zUJmOUPG<9n22{S`i*ROBk=R_*6$h@e=d;gFi0K_}fOC}@y(=~X@uU}a=KbKgtvznp zCWneW01JQQ!6}0swDWo|9KLt27+azxd>-zK{oNJt<*O=j?gfCHTQ*E-L%=+wA-&f! zL)EG4#R3&mzU~x3DPzKEMZgho+-r#YpY`Ld+e_ed#a9}swF5Suy33A-G;KSNSHcN$ zFH!89hUXjj)3uIwK~w%FCXG-nx_Rsc_}a9DM$g)E^psnW@bRG-nR|vyR;>VQoq=%8 z#1KtJ-owqsR#5ZpF{zvZyxcQ|XN<0drCrY9c`FT0^Ywr|D;L2P$rsA{p2>PcD#hHA zFtO@rU%VANnA1n6vew%*IPI{F*kQy8@Nn0}Tl+a^| z!@=<5bn0y?Vfi7-*tFeAj;gvPrdOJ=-uFCSRP+O9gnVb+ojo|QV^coa6WLGqFg<$k z7|O@?$4-tOSbRPPz4w|?>5z0%Z}44m^4w=hdb3lo-!+d?24#`U4CBIT&2aHaX8%I* zb1%A)>c*C~CMif*R{W5)Lin0Hl=Pgf5{H~)=1qcDk_TBX6!jn9Rc zVt1HyY5}>eI|c*Qvw8LsJ?`vYO4-$mY-T?(VK3+I+PGkoQCcfy-%IK7CtBI_i-ErmFR( zoc!s+{8by-L+_UGR{8{72Djnt*v=d-Kaw=P3nAxxJY9%t&Bio}E`@eOozt5Hyq|)} zR$Bz0z4Q2>(+SXNbC<>|DT4fneWYfhh!=LG2o)2Ci_eZY!CTY$w6Ll*E_^hCANP#n z=X!d4sh|TcKJCGiHPvzWIZLsZ$t8-^&0(MLyHGkxoyAqx$Zq#liqVwAXREE@LD(p$ zc{G$q?hHWRpyTKgbs1M~eU77C-(sOlAx~R8mbDj~^0%jNux!I>UN%{iGs72P-n^BZ z9E(M>w|<4)6VGDb@;p{|Q-bAP27;DsPCe-m1)DYe;noiwoVGNNos?tIZ}%;J7?r?w z{WtUCadFuFqdPiHvLk~Rm9%)9Nl~vIn`rCdE4*->20tzRf~UGgz`YHX&`>9bOK-Qd z?UNURS608^0K);o1z$(JYWWpO1Q-Z-J&0n9^CDlIW+Fw zxyYybCU+h0DkP^pBe@;DFg&1$jNe6I^@=DQV*Ly}>|=P zWVX!=AI!}cLT`2?tqlSAxX?iekKF`&`|2SZjH73naZ)WS7wX%83#R9nfxP>3VNQEv zjA_@GH+C_gjr!3rvmg$JypnKo(jJ?HZOiddo)-K#LO@R2p>J9-yc*UT2Ml!MalJ0l zu;?bV#L68KN)`zl=YOTR)IBg)#}Tz+vpKWm7ASb9P~ztlxX`dOYOPu)rp{5p!lDTJDSd(cy@8{e5bA2q++XKihhqHy;%{Kb1BPIcHy zk8hme_kC6iBaQdr*J(L0O#cV#q&~wA)s6Vg;oGon^BJLf*JL=_dkqEkI>9kEo4NRf z4-D1Sp&xpE*u_YX_RevkTQ9RnLFXQom7GVXi+RG<6Q2L zbZtjG*0z1T(2Ru*lPOE3P^#;<1D2d#4M%&a;)&x&VfJoSUUssEJl7qBHac%;Q^&?d z>y!dO?CuV4)7#R)4$r`Dcad;z>}2j(+<=ZoI>EmFv(Vyxj%eKbEoPj}0rdk*W%zqJ z@@hG}R&_+hH$+Bvu0vd#Bx>&ZgZxie@(qtJbZAwzXrQFXo6hbLe1`kszz)t(HYrQm zW0n>TDQ$~hd$oDksXlnRU=~lBy%Uy6^>~qfA$l!uYMa$KjtAbap_0e5dH#gXJT>Pk z_ti*Yb!~GzbbkaloZTGttETXaz+^$s*;7oJWz5c{)|hr@A?+&7BQN!xga_9Ys^%QP zP|Zm0F=LDLY1>`=cKKfFc;F0dYTKBd43>~W`YQUC;g7o8^s&3X4knDdDsH^kQ#Q_b zfZ>yuQtS4a;P#^nd-St}QgID0cU(&k?G{4QSqDgek2gyqwm|bXnUHZ>m9q2iP*PJR z+%&gXS~ZO!ZthZEnKF~%jS-|d?A0iY8xOrb8J=xtCJGfmFHb~dg%Ux3F z@Yb1oJ`bQvI{KVq;KDZ>1Y)-~Q+Y_n8_Au!E%8X$2z0i{6#`-}OTK@+BovOjON+J? z)8ji!DfXy7b~xXQN6X$fCSN;9b2sVHardKOb>I|@pP0eTzWU(h5O1i`b;Pj5AvoM1 z2#S^@fs$Pobng6!-+qXJ)a}RNyrB}*$op}2a!1^)dWF7RQe)G5xn!4gQ|L2uCu@H4 zMpuYJubb(DPD(7Al$!D7{r(tns!WpEXQAZEqor^r{uXZCmPa*})~Go&O=wYIi!ReU zQ|E5a$ld4=UD|&O!jf+Zicc!p!)UO0bdNXcgvO9zsSYI_%?0zz190O$5)SuQl&zDW z37?#kaQuv6=o5dH?DAW~WN3#^Rg-wj86CEY?m*v$HNvQ54=g|akeg1^uyt+zfh+Tl zaQ>X3JW1#*CQ3UN{m88Xi-(=yQ9>C9cHV_&(k|eqh%}r%WjTZdsoQogj7RzB-_Ufc z60X&qhSO}Fi;f!$MVs!v;eKn=`OcwX-1zhx_+e8D0dAe~qj8b&RzU)RGyO4l(J|q1 zZ^NQBX7f-#E1VylctDG$ti~Oyg78P=Sv==?3vL&V!+CdQW29FErA1ia7Sm<8%5|gA z7EbXBdWzrIj46s5`W70No@6(lu9)%sJ@~7r^Kp}lXx8KyBq%NfyEj+)V1g0Vj2Kq5 zbdE~Vx6Ua={da2=nQT0ZvHhE1iqAu~vVYBI#zfoZm+9Fa@HVgwu(Y$?-=V4Pn`7nR zyM9p7wOQr3_?w39SGgA)a<(b=iA==9JvF(3`zby&!_ju2nRSuD#VNK&Qygrq4{4zK z>RCm3F#$!+lN4+-ru4L(ceonemCLxMWoz5AMRuq)Y>2`AA${ar{w7$t7ED+YU1iLeR@3T&KSkdu6H>W!Wc*(+>8=*-AfX&K)`1MuG*q zMSr7350Ws>Vjed+*|4ZAG6(NAGX<=ziNXqp3w&maT9Hey3{ zJZf^3E=}r!r}Q*_7aN zr!Q}08GF7zOM1e}gUxtkWij<@Xd$ZT&&Pp59ocweUv9BU=EHcq zo(?=%PXbm#>npqIjQb`qY4;ieJ1i4Fn7oC9i3`!bLo8nHcL|Ie%@w=&Wr0IV8!Sud z#*O=z(>dL0q4C(2)H`iF+Gh;p6&jB4B~`YTzVelykN?o zSS4&6>LRYX^-+w^bElaKUOb}5a-MarQoOl&1}`|!fh_}Nh&xcCh`%8sIL-*$44<3e!n-WOM0)#iv*_R#U62dYa~@_*OZrpCiW)<$S~;x2@o1^afh-E*cb0Zx$vcY!rjemZA5PI5h4W&L!iP z(u_%i_@>-ceDXa;kVX!Zt~0XZofjv}x6Rowo(%w)2M3`>tTu!_Q!dTw_i( z`$4TP61VQT1yc@Lvj3r5s6#s_U|~MQt}Nu|F{2^D|1nN<(BdBfZ*Wq(^%&N%KwKZO zS$gSOBU`6M`S7IwT)tH$g^2_2@Uhp8c=N{7v@?1qRP0wT+JC77w{&^JO&!X)-L)i& z%TTkG``XfW_2}bxXH^Lr1mB^C6U=eRpv%z4R-Pn%2V?V#Gq~xA8i~c#Yhs^wws>QJ zBKx$rVhf5!|u!2?)-3N7H*$ z@#gT3wyLcZcKmKtG+X9esD{|XJ;cjKzs|{XydBS-6_}bE`4~e#x@MRd{$R} zIISbDDI3gk8~m}A&JQxn$)wb?_e6Q8Zo-PnK4M&aF?DGFO7L!^3D5g4;ZKjR65ZGV z*5{k@aks1VzD5UoI%#oPQ7BJL=qN168pnaz+Nc=bfU1H{&}T(s9-|+H$IR@6Gmniy z{lYb=ML#1hn4E$|v1!uA3zT^I?OwdXb~or`2Z)2ZAA)`Q9(??-tC*Os8$0zVP9rCVbi0g3?mE zvssV6JnO?iT6AARk_P>;Bv&Ty=tVGR!cO?MH-LxUOyF4)6?jHgF1yeA4z4k$1=lAv zP&mR_=%t@RlAv>nQ{{94p_jw>5QC8>mx7Krqt2mSdM^CaiL#DRy}DiI&@{ zVT8vqkjSl|xbW_<=SOGkFsU0ZnsQh)jIjl$`@6}YO(mUC-9;)Z`(m?~arEGj3V1D3 zVvCb85EQtEO62YEh-qt@H!@q?NIPM;ZV-&oDFdao3u({zC0MmvALAyh;1P@3V~h}t zL-t*fbQ)1b`L~+z*dvYk`nieZ;^K@Wd?y0<_A2yod;aTo1oq)y5#t zBzmu-3Z@wdi*F>t;Pel$Q0B*2H@E^?wQY?R4+6#M3)PV|mcmUXYhgp)8fw0D0=$b@ z2P>x-;V#Y2WIwzw=4RxObW9p$g}jlPKVAq5v8Gt;zKbTOw8kY_O58`$i4;v#M7zrV ze5m<1>Z1LIw2HMwXkH>&e0`SCHTgD`bv+CHU#}G2t@EInoeWW7Pg~Y;j-t}d_CoZQ zE#P{7y>PL(J-S{r#(;-o$-(wI9M6g1EgR)f`#>2Lmv!d*H$!k&3pdUilt=b`&f%$; zlXTs^7e7tN#)Ncx)UmLE)81X_OxQj+GrR}8CN7~XP2SSPZq2dz!;#|1i-2hkMv!II zfHap2?07MdYd%;quP&#XlZ?>Qb1e_apUp4*U&5fbn%H^LSR9(Bh4D7-u%~-B9Fa$2 z>uo#n*rH_7&tM`Z+|Z=wmo8E)+3>FY&*)=W7$vvbN&OqHrELu|dDg91tZ1|sea#kA zetIhoSg%YE%`b}9k3K=$g-al>r-=}MC|`1;|1#)mvy_HnFpY{Wk{(UUr(qX9Q8a%O zXSkVgvoi;2PPzs!k8^FZ zx87~S#}Ds>rI**kj^QhXmHT7q@T*m1cD*a#AFhFFzHM-1kACQ3oCU3{V`=%g=P=i* zrMR?f3Ujg+e(JsvEd>pX&~M94^D{)->>VUj6$tOvZ-ckPABk3-T2OV2BU|>I0PioC z2>IXCaD!SErT5mQjoZEH<~MtuqS1yH?SD?MHT2+GT0WeQ*QJ+^Vf?6J0bMF-!g+D& z*tJ3(hDSHzsNJ6YK5jCfJYpkcNWTlS+hqvyqc>1Syeb}Fs!S@&J<;f0Kk3D%y{V_X z9k=b{h*LwXaY!po=&(A9oSs`1t~h#^8WdUK#j`uWF2fwpHQ57O@*2YF>#7*(tc9Ld z4`q9PO*zd$Q4}>D@Ko$H*?wa%E-AZ1`LkMa;PNQJuiXF+*wYP^%5Q>Ny9r=d+KJ8` z??Bi3SHQ)CQt0#|5Z;|U1StkK;7}9~Gj=DC;;Ah(V){rPKcvEXRpK7D<@SDD&Gjiz3!PYI872hjQC=4kJm$(LeJ@~6)S=sxYGf!m}! zpkqs%@X{3B!lL*|hvRV6un5jgxJXGGG*QpsIxm*@;N4WpzC%_E8m7rud15HuuxyMC zrK$Wl>oM#PPvKJEa`O7JLafQv2Jc?$xHKq-)|Pa`g4QA)+p&g}gcuOV?#CwMD`A-1 zirzct2H=Xl>#3$mD9UBp^42Toh3zGp5NEIjpYAi1ygdJg^o)nmwhhh1gR`>8{c1JJ zuU$@w&x5dfUjkOPeNhY0lra-4m||d%!M_q0%pfd9*ctD7NXilGYp8h^KpIQl-ovIKI3u zY`wabR7N}_&yEo!pL+nRyUXE__R~?PQ%kHI@&qo=D}vOOEd;sIvBLM~FQECceej}@ z1CKE5k1ux~f>8^+3)?TugA)g~!EDh4B3FHZ&vzDq&c;-_)A$pqhTG!)vKEx|bqj@A zzZN5p+2G;*D}~kV*9*R%^iV!7fzs2O!pN4J#2FhDP{GZBA6**-K{YW#VcKmfeti=R z{XW2&$O=f1?Pbr*nNEXtnow^me=u1*0u~x?farCf#V0N=$in;pg_;gyhgqShR@I%a zF7wCIO@^d9;=Xic!8myP%!X~QY@jKxTk^~^H54|t0`5O_;;cRHaP^M8xFL2dsasaV z{qiAv_w6fEG<`|uTD_)6@p7WCRwkWo>d8x1>u`9l0@ydToWhGfz$uL(ywRmEE}rhZ~2a*K2?*!_bzbq(RyLpts&Sva4l7?oe$PsHiBpV5cF%_T|nIt{ASb*Vb03A zyr`Qf1QvY+y#o^L`ldPWmfH-6Eg9rPiv_nU-Dq^=R?;w^!CUhk+0)NO*m^Dxx~y5o z7m6PV<0iD^#w+D{?&bE__3jE-|HPPmX6kaUv=@*h+yCFvOq-5y4xebD&F#)vSZxU_Y%}Bz5-z#hw`pPXN9Wf zGdc3jCFqo<#+H_2g%O$7IQmdASd5y)HA7VJz}hlNk>e^T9lMwEZid0^*A00=*=%0& z{yN2B0>5$Uh#j3b(xalb)XHQXZCUFNLl5h4z`_`ISMJ4A4HvV|v>MT4mV@YIvYZx} zNN7QWqz4eKe^+%On(U)EtH*1#6+z?4~%dtpRHdStojK zH|HaFno7EvuI7GWXW;cQOTlu{SZ+To6nZ=#OCQ6U;o#f}r1)(u?UuB{4fe)p{k9cv z4RfZXo|@>I%^%F%)_7PAnZ7Zy&cvH!zEFI?GeK8A!mfutK$mfEDgII}y}z@DRu=TY zgH>H%$L`+z?z$@LT*`!lXD`FGnTZ&aCG+vUaNq{do>2Vu)8gSX*;F0vLZz=G$Y4@C zPMdcG8jNXz<;&ghlk<7JH=#)AAoJ(5g$`f0{vZtO<;;s4YQUlKQ!yyuGYlylg1+ma?6Zjix34A7oC*yfz|AL#+=XUybz|GCDOHePZ5e%;*HVA3&-en#O*&Ci&YU# z#G3>C#U!UFVa_B|j2Yd9zfIUd<)3$hpP_+lFDRN)Ep|{#@fiA4PUI`WU8&Jyf+1d^ zoS(FTLzNqH63>CEH49+u#2rGuWjoe0o{wjm`r=2k(E{FT$yWlxNhPKS8nj)>v$V>n zJZ_w@X{0BZk8)$JZ|bzW^;AgDeoN{b+Ebt06tJ3f5&UOekg9kQwSN=Gkz@3siFG0` zof}9!yJT@?XFE_Fr!3@*9fK!xZxwzqlg*dz71YVUgx{)#puT+t-JhukF)od`yM9Y9 zYB-S%eXn8I*zKf|7|W|p6k!up8?L&eBwY2510M|)p|MsTxON(Z`ir+q)}+Sb*NyYB zd+acr`errsp1lqGym#V{gJU^muWU_Gvz(8e(qqGRs!&n!N^Im|Oaq7N;OY?#=>@9b z&4V3rYh@?AZ91Ks$b2NdQ}1AV{h@I7-2h&k;l%yd*>DrbNobLsz|VT!l*W~&@L5j_ z>`+!suan+G>zRfaR^!Yb@5*U&YBWwCH(Y#rDUzMy--^ns4B52LGhtcRXyM12WmJ;Y ziq)pB5M0L3;)$0sIW;YoUn-c>^zo*!d7!7XX1xk5h}FUnp;Fq_Zauo~l|zRsDm+|u zJk@+D;ZqK>cbIkESr z&>BX^MlT@iZMr<6VLwzl*%I^OdO(Qo197{1KJ~P|OWSA3-Vwj~qVK0yU}2&R``3ku zeS*>v?s($jOg~znwF)D{4B1i$6a&Yf5Sf>u?J`3?bEg+OjC(K5af_tV z4+kM&vK21$e?f~1H&OSQ9yImhY3ML`5su!mfu6lRUU+#(6^$HxTpV_6Fut~MhlRtY z;Oi~-A$Elk$Dg=B_wHG8iwM=iJF%H$_*6nk$)R*S3^`-DHg#{;5AXO-qhX%gVeI52 zYTeu#1A7b+?-i+HpxjF^JgvZYc3F#N+5>pWlwQ#2rKM!ez)`}N%lk-g{$SKvA3;a% zXHyDBOIwsh@%8v%xb=P!TzYB?pM$N$q=Bk5yP_?>m!5&D+<8)i^HbsVOik{1GLQ_T zpNm$Xx6)C0TmHN&1)}ym6dSkyPP!E=x!SOb+D^O#0Xz0kdWIeL3&;j59cR{DJ&vj~ zbTDUgFTDMvJHL27SiBbWK)U8qbBuZF1V^-^;C4_PITg8y`Xkyl9Rlxg`rjJVbR%0_#V5KhNN1cUDY3aDlc@C>Dfn0+xPgPq%U_g{&+hy|7%V#!EXMt7*e)J~U*k4a&tdPVnk;#p-qO&k739|Je}Ek$VYm9 zy(@;~Yy&%KbK!ESFQkWS;N;P3C?X{Q8YERvL+!5+zV));uBX0l!P5ke!Ppyi4LN)FuvPvTAq0dB(}-tZRnl=x#rX>b?>0ZAZQRyE`Jz+Q zYIj4>>9S1Fy=4xQT3VuCK!G@aXr|wuC+*^66tZeR_1v^Y`u*)SvZ^Vf z8Bd*PAnmG;8xWArc{di5-?%oKr?Dv7PRhIPO_NF|hx38$CGKpT@ z_U4f%UxCA=4)kgDQkvjnENPSNj<<&CaI;e_@ugM)rEE&0qctr#%M7^6HXIULj^)u4 zDW5q;%AI35HgsgFq4sR8#~Y0b}+6Dc!(C!JfW&S*3S&uj02iPtt$ zM4|@g*{6|begn44m<;`1JO(eLDoKeniO$YjL0oW3crn-y=Z%qy@9j%yTtOT^$~;Y7 z+goGop*g(maVT9cox&dj?XlCUMO1@GLNU>lnyV$4Q0oELeUMw!o~zIt78 zc(W+Md07mc3sB)_u8J`0OBq~BxkoF+@!0CE4z@O2z#6Z!$ZEm_T<~BP?VVi(+CWfa zZvfYiltb&)D*U>cHEuiP2)TC$z=Pe-q3Pi?{(M6dJ65#jwoM0M;>&LMC8a+W#tz0N z7=uA`Wqa&<9B{tA3NP_?L+8G+y*m%MOtA$cIr6z5`Jbg$=VQ{DBDl_a?cZETg+w{S4Ar( zCyGO8Bss@r(CYSP+~$XXyNzt{?86^ab7Ucz=T2fRE!l5w^4@`M-{yF)$qS)t`C2+S zYBeeJoXYBPsqmvGng}5&qxq$6xLJ_e$XR7|HqwWw9#X(af?lLF;1}|D&<&^)bD_ z$D;pRVz7VmSa0|BvDfvmj?X_vVNdARwLYe^_O#&oUi}^Z(k5P?``#B8d~ya=r*ovXd$br5o&`tbX9C{Kgz39ZioStUp<%W*+*<4)Y@Ikj z*n4jlm`*UJQzcrWR+czwp&EK!}_-t?uy<;UT~au+cteloN#KP+xK_f;?+t;E}U z7E#1}b?7m5sj#xYCs%d70&Z1n;HvQ^NPRA0r~Sv_q@o3{q2r?WVr4w9&;mo!cEf`$ zIW%aMr}X;)HI8k50!qT)3w(kl2KD;3SP3cy;Sd;#3^k* zu)PE4WZS@-Ys&CoUj#}9eSvYuI-_etSGwJ?FH*anWZ&!z$PXLICpR0DiRBjRkbFt% z>AVdLwOT;GEfa*h_mlE7aQ_)7wR zN#LJH0>8hf7}a%sa@{(#UK0P+XSwXFTmRO-2mQVtuIJ+~_(uu+ewNGN>3^*MJy-v} zu&K_U@q7J0YyKbKQ~#^{U}m1RGX9_K2m7=4PwSl8UexQ;KdavSv-bPit{4pP~4lQI~XYUGzP~8XcMlMCTDC%I~^HsET#!+9=g$5l+gm?ZTn1wZmVNs2E+R{jTx)jgdZ^Bj&2BA?v zcidVYie^)l=vn6*;@3rcDIi4)hi(~%!v;JjgRjZ3Xj&Hg`1b&Z(AKzkU{~t8X$O3{ z@rW!oPlZOC!$E7p1E{=l3M*Wia7mdN^_*?RPZG>|kiRb44(Ud-oK}kVufwpn!5+%@ zzeTQ*r^s(t1ZYolCvW*i!oIlOG~VAHmo-}h1HEHt=&4eOANLuwl{Zk&50RV`Ujr#V zC!l=jOHk`7$0gp?;=8=3RBalG6+?>1X<}12JAE{oOo^rHLlxlPSqmhJ;WmOBtMulqEoC4J^@Nv;_wd?; zQ_$V^Iu$ihg(;0wrBTi0Fl%C>;8^mWHdOiJu)RZZg?%#==N+KDffuRYW^dXgFFRAH zsD_;OhvL?`uj%TgJlGpM8CS$6vCEMiV!F){Qq`J>-`1~1i`%Z^)Up9!KBhl^DSiTp za=@D1*3sO?ws><#nXtrxD9Yj~?f-U!>_ks2KB2`LU2=rjnYYAv&jDn#Nt-RNrNh~W zrj&m75#-ogV5^{UsO>I0Qz{?>L%K0#r!D5Ur%nkL_Y3L4pv638?n>UXbPPLLDDgL^ z9`GR7Tg;C)5_^VN!1i}nA=XNsKj=oI`TJ(zH*pAcI9O$KX8v*-ptlpI2D}kow$z~8 z%d_d_pd;{ReF%*TwZgK*1F&oN1tHsQI5+O0C#+7pKvUeO!;Gz;p&;ffc^U46?Fr|= ztIs?VIw*t9mz`7*-;nhW&J&E1#*}{uX`M`C zTI;~|%M#34sUq93-bj)G?ilhg7IIBjNw;mB#yPS$I>)D4{K;q#8M-CWv0)ea1|EkO zkDt?_@?+Ay+ghXb7&A2Uv%%&?M$ml54pLGoN887@VZ$4LTD`ZCB-v~&cY2skmCa08 zd)jk4(dG#Zy&HkjW?p!D#5nA=`3^M+o`#JUpXaR4aok{CW4x6Xh?%dZq1pLyvNILZ z@N~KZdoGN_{KMB_!z5X}=@dV7FPTSIR;#n?#tVhfr;R8{=3kpzvjPj_TVZI(JUV&h z0UdIgDrjHb2BosC>Vz#KfA-46B~yJ+M?H?u9In9D83QDhN&kl@xiw3AWnWpAEF}oU~EItyGph<8q%CMKbRyN zi}J~BXf|c_Jx#s`{lGWT5G^N(bV#lh7#AkOq9r0P_IV~+_uR<)CMCkK%u13jN)xJE z+=cGWP1yU|IG&{51HUgTCvG;6TlpC}qG*N?{!&WUbhx5hJgO>1 z(`R87?0OVVdsgj)n5ZUrs$jNg*y}1?AE}3pWoI%@xiDaKjxOJBWmkQD14RZq?8`+E7FS{a?r;p?NzJ~=D+3!=`bSF~$z;kqA zs7PfyUO}hZi6n8q21{gd%l^3&V8R4z-Y+=tloCxGgq_$Sy#}ryNCw?a=3JoM5O>B# z@}pO;Xi?ruE=+$z50fpqU%>=!rzVd<<@X?>w>8IA_Ms!okBHO1C4rjyM|z^O9CnO4 zL=8N;l0w&k-1g-z>iI1ZzP<~l()Jr9pZXjZ&&su>%x(!V;QmJPQ0N1Rt1}@YcP)oq zkYh8;*B~5oq#Gl$F-BC!P9=J1vqFOA!IN0etd%fYF&!KhcL*)SEbIGp!*dgd&TPO_Bj1XCF(&NZ$qWt0Wnk9k z6x7LWj(dA1;`;-83J>?&3Tm%a$W(VSyo$;twM+6eSK1o8NL%7Dom?6{eSo;ub(UmL zffbJNG2olZE#Y>HK(?$rOPYPXQSU|%E`#wfxWa&aqM~`Bn>y~7zYKjJKA;0ngQfkY z&*4^76Z&v%5gfSQ5W@zPiCx}%g4vxo$QzVI@0Rw&fj8SzXm}8-9QH)VW$x^4VgO-L zw@G8Z9bTUHS`5F*g5}ex^uC!YIJ>W8HM`B?)+h;OC-=iqBNagT>Rk#PwipHnHN{!Y z?!s5K0*U9`k=%5NGIV}C9s(3^iuamzV7sOMwD{U+ai(xUjPCNk+B?snEW&0@69ps- ziUbic5Cj1UBJXsgm=F-bi~&?oP(aKHQKA9@0)mQJL_kqQK}DHv6Dnp=F`!^V%sHT7 z*s1-__v1UK>g=hl-KwqK{q@$=Og-<+GgCcJ_w;?;&0@^_R{Clk0Bf}qg|71}NMY3` zdYc}G$)X=E$uno=+1b4HO(9iAcdgpfG#yrbRN&4pt6{{wC&J8choEqNE;nx*i`mB( zSB*2$;JtpcQMutexX%kflaa|Fuecc1bTUx|dZ1eRbJ?myKh&$Mlc`)WrB3+3qG>;NgnRH6uA$2hiZk6>^$tAbb9*Rs4D2 zA=G_BUZXyaws_CQlx;O|=A#}dJWgV*4f?d$vmbqHdqr;Lf2q6SZLrNVWW&}L`dynz zW#6|62h2W_g@qM%$kzq6j&~?=eHXlQBv#T1TXD7Ccy{QjPWx}G@`y!dxU|;_q5X(p zj(u`pR+X=ZQ-eHkkgf&?ce3QwR|nu1qaR?tv;+218IJQ_=;7Gw!_m_)87AC7j;-ki zx5|vr%REj{nUxC_r-rig(aoSAT1j~WlJIM)C4QQsONw2$iLT~{WCyLBX=?BS*`nB` z)LQeFQlG!4jY}%Xd)opGU3V4CyyYQsoD}opC0^mzRB&x2ji%joT{+`4zE2`wRD&R zCO-+I$_k5z~P*xs)hRZgw998sHpK0OpEzQQOk$;F@V@7k7#AqzKAA;5&CI0EyT=E$-fDVm(MsHuv{oiBPSc*p zA4^Y)XO4}8{f#LwS?2=f*3Uvs`wP@_ZV1k+83QA}_o0^qJg`qerWl#+4F$GsFt%U? zq+f`}Lbdy(*IggGpWX+*A5G(*UMHaEemPE<(nf|otLg8MC^9}{D6Gdm=;+-6_XYdG zr0HFGTp036Ou0_#+xMwD2Nw&K`N3XEOL23NXz?_eoiyEWrT0rw zB_ta@YqY`dgW>%4_Y{_ET0}P;*I`?ytr#0x4|@9A7`FBWOuG4-9;}qHn9+k$0xj{l zjTy^jr=2k(LJqAlJ z0My*E!9c4bYUsPIO8L%y8s4~G+#k>#b28sj$4Ohry{j?&E+N=^_84{fZGov}yJ+oK z3;4a+4=2qQaGDcQsP7z<&I@mYxQjr$^Qy2#rQuV&=>lgU$G2WQvgW z;w*TrlC+{Ks`TzyJI;Jm1Jjy5QP!;jN}lD81-;EV#4wpB8s4U@k%Z_ZxW!pp9m!V_aH1h6dgC*zZ@p~e4z?0dJN^gO*(Xc)T&tfSI+ z-^hjRZ&iwaeAQ6Zc^Kex6C4y$$zRjVuwrZ%m=QG$Uo3qBy%#2Mgt{NEkMrOm4}MXX z7!~qS`a!Bc>cL`PEfj3Y5JuGPuL>?u#6DU2ta{Z4J4aU2**h!-hZ$q}p`A3%IhY6A zYB3#5hd&CQO!>Luz{N(~7+wewCH;kH1tUHi-j@$6O=SDd0o3_d3UwE>xLHdJ+_IIx zKIt;O(B3R_S5?I|IeIwJ;5Cf>xsW?99V2#{q|Nu<7@+mvbM$Ce6CF{V38xpl0hfGJ z9_(98EB0-w+FL(CHZJn5Sl{T)i}#!&CGQ2;yJtG6YrA5w<4OoB*-a&K7a?YY0uQ^P zKqi;A;un|BT=04{Dw#V<+~;2CD}i@EeF?&X!>?&laW@j2+QH$?J&yg^54(5T zLCNZuXmCGWlzTgahAO94nfBcR2@R=Glien(tWw0pb*_}7-G}yu6u_^#Wz^@(Sz+V% zc`$g6q&>Q2$A{t{is!Zz!+^99*6K74t|bOQ!iWt}u)&hf`^@BT2Tf_xD_7aPs$jJI z*$n-<6@Y7-1%A0V11I%u5|@e|qRdmD{tOz15A4Qc&sq%{HvFsDIU<$xp1uXe3zfpb zksW#N)cf#xi!#4HnuD^r8m#xj1GgPN2UZ%lIiHMh)l46DT>2I~>z`KD$5`;(q=D$) zPe!pF9e8NB?LtjIXSk|6itCcpc-GXzG}yIBR+D}e+z$T*+4h903eN`UDe<8nL|i5t ztso55na`eS1~^Y=FGOhlfL9iuDDV4foYLY%J?$?;+A2$0*)Rn^++i>(7>NO!^Tl7o zt6;3eQTYC{6%x`k(RBX|e%QH`LY$3+6OE;i7@dmKCMki-+0&4r&_wi3hZVbipr@Kq zw1*4HK3D+1?P2`^y;we z>V-Pd|Ir2bvE7b~D`dE$CX8b`G?VIeNm~$k5qdTaVaGL_`FiLM{xV*J3)Xbv?aubB zqrDU6`0RrdkIsReY#@1>_ZMe`U4sn^lzHU(S==_#4z6@KNkfev)5nSDVbH=HF(|LI z@GPj4P}EHa-_)HF)n<`UI@O=+O)m;l&5sJDW@}M%#A4cz?!kkyXJeY8W>xBea?m$% z=Ia4xVDS(Ew=bJZW(udoS$}%*x%ZVa1O2OT-!7b!6ncryQp~oRGnrq`%z|$B2f(jv z9ZH+ug?dQ&LHw*n7?e>Y{Ay{3F4d{<&NczsXfJe5D;5G=u8Rkidt=Mm?l`$i6Ku5Y zQl;@ui+dk9CeA1e24znLTBP@x{9h{bp;|XkEomd)#_rherz($Icbk^a9z-P(^Eo_8 zjujK?g&2o5C!Q?m&!}chUvA0aV2OFtl4QYQa-U(zHGO;rz1Z_)4fN zEz{P(heH)PBJeR;S{{PAEdoCc{s^;I0EYAqr;z(Ig?G|5ytGfEYi365mgLRHJ`Q5F zq5gu*@;B6c{7l+?Dxhi0Gmv|biZAvCk=Z;QvE30}yk9keoA-?2Z_&@lqa=w|kDCI? zPPWk9JyA%LrQmiWTbj2;6+SO90`uO!xXVwAyIaSI^*<(%`C&FDE#RX#A70z+56N$PWJOc>w8mi@=bewGI2#!?uCco zXFiZe2lNG>9?ON}mR_*w*Kcy{_)G{b9>R0`C35sEQ;t#@58X3v(u;)OvH|zA-Lh|` z!podXbo1O;Va|waw9fK{IMqwWTPnAJuj~(<^S?x;k)`M^I&-0xB^taQ$ae~iq2k9N zR=2(@q=r1CMxP80j-Je3u_86dx?z8{lq%8QjBV~+2K%s=!eA4-s+TEgknz}z|6cOp z_2o&ZKSWt}rd$o{eW&A2Ql;X7;ruPe4!_EsYMfw$0kM5~RI;s#nIQ9m#4j;smzXzei4ON0gs&GkiZ&Q++bhjRCxjwRraHX1cd*D8@YR$$vvH(nhs5n$s-D z_fLh(4$alBdhkPyH|5QH9xZ`zwt%TxF?7dG!DtmDmi|^d#oo*=?}OxdV=s-4#=eeR<=7 zp;(a`LPsor!U1h0&vHBJSz8R#KX%5gca<@I@*H08;lnrI+p*Z*1i>VlpA7#(xl%nW zPvZ4F)?N);muo-=MF&3B$BfG|llX^c2^6SH{eUAR-pwx`aBHa+VrJZd)0dayhfnR$ zD*L{8c=|nBH)^`f*SR--mYB?Y8`W{~c|VSnxU83Lu86BP>alii1WuLovgW;HxP04i zY?$$iG#@!YSfveVHavyy;ZC^J^u4(LfCGP6C*ZPolCHw7Qn0M~2@{`HLdU2{_);^I z61rzVNm_rtJ#iw`NAIDp1*tIXb+$O+oF!V^cuhl|9VAunBUKaS?a?H)j0&W+kM@!7 zqJ>U6o|j*Sk;!wRpY9-jruRwQIoOSJ)}7#?J%_Q{#mTT?TpW0v?Zao!t8<|+1$Mvc zPD@UBpoS7lWTK8t-=H9nCp4ge5>+`&gP6W#J1d74#!Hu?GjQhSuaeT{Lr z_W2QdWXGe&HQ=wb7&Qj9=fwLr#lYGLP?7bD_U!A9kyAg2 z&!ikAHC5LTuI*Zwqa}dRGhG3 z7mm8sfyQ5x^o-m5!1D2L8Y5MzR5E1H7;BEBily9pU?g6%kHhhQb@<`?OZuAaWmZus-)*$_MG^m z9|wgU7Ct-ohht`vFG)pv4)41hlukF&i)CwR*#{R{kXk$}Puq&`-aVuq37c^HlM0$U zQic`L@5skF1QHfsp#ifylEdcdd}GB{INEpywDpXuhAioeyQd|PVp}SvFRcZq7XqGn zt;w@~IMULc1Fq> z5oeE*tH(KN*&8pKL^?@v@1=N^*U_N*BSwy@Zwvggp~QbpMkt1l-rhkoY{ zXoS7@;zg5E}UaIJ>oWX(lJIQ89 zU;0@;4C}KaDX+&HIzN1sV08Q)oKCXl5Su%0yT66thZ-yFn0S_yo0{o&h$pAiwN};j z*JBr+e!PBP-**LiacMdb=_Up@p%vE1uQQ`u&cCkV8)!E>IU3lK!AdVlMfQ5SQ zto*BzlDf`h&;7yRakw)^-m+&ei5X>f{~?s-5Y?F)!K6|sKV$pFZAi}gc2)nIT6FLv-0oe>s1(x=p(m77AT2 z{(|VM{qcoG4^lD-!QRIb(59(X$ThzteyO=h>Uuh~vbO;qxU&oAR{RF}W#zEAT#o%u zHwon%5Ovm#gHi(ndYEEM1-hd-dFn*I-cTp-N)POwlZZjJ*C^tN1x{>`!>fZY^Aw}a z?7PViZT-Y$&_gPE}%Z4(Y>m+hwC$b$dMdFe4qaa&r&?>GVm)KZzIr-tZlIL4Ec)9}0TD!67 z=9APjr4VYy4@A$jDU`jwhExu&qd8lf$nr-!_S&6@AF^6y?WLOE)OT*;o2_+1L-*ly zab!I$PjV)Q!TP+%VlMl+R8ze{E9e*Q6Yaj|g4&i|I6~)dRiJYYRPD;Cdbwi+AAazH zzT6L^5R2F1n(4!NW#4itmd)Vow6~;DFW|cTL}6pJ0-V>}4cDUEiB-7{c*0Me>Q6P0 zzMd~VPSN0z3lG6s`^8eeJ_n9J>co!SW9YcqXR2)R~Ax$ zDEBP9f9H z_bh#KK}?<+&3}u}V)eTXKxGxepauoJzpjn$I@)8`j(e*5wnxy^UL<&mHSk{%60>G8L&$jw8@tHINP!Pz0JhM51>Nwgji#-M?5@t7^EbH(s5w~xIWjB*k(oG zSXtv{SNdG|n74**t<-_)h9q!SKS%bvCCe9wdK#|%6EvEaz9e7Ib&U7!+1TTAJV(p|q;C0bgHc~ggOVRzG!t=8- zp@+gAbdWFSds<#(=-Q9h-myl7uq;x&WQ(UyT4DOIyOcA{4BfXW^2*_ws9F~Yb<1|r z=;!)a)EElY7|MMjb9kHy!v&2LR$hHsXy;x*xoQt+)DvA+`qdr()@gG65Cz$7St`{I zj-ci#d#OU{3=FT_4%$r?Tyi4`onsD&!M{>5EHV=v$2^AKJz{xPX$QQQK7sGO+RC;5 z*P&XsP}nm6BG^r+0QrRHJ!S4*p4tdCj;GTxE0#-s~~NlEP#`?%p)qA=Rjc*7|XpcPjrf+$V~==L%t4 z?a(k!iH7~UAu&z#FfqdgCqA~O-jWYiylYo3zc-!yjt1f8>zcfEiH3k57=Pem7R!{~Chh-B_n>AuJ79&cE*5 zrlvS;+!StwYUPH!x+q=BR~}Mv))878PB5r`IlcH(M`of2Iv!Xn>e;=l%FmdLI}-uA zd0E2obSHlEeGKfpW{QrrUeGFelZ`JM#f#RxrR@QGARtT>m##bxgUz+Dvu^+_c0TG_ zqPO+L_{)o6$x%JNWS>%X#C07g?YTs9zchKXXM5gw>$uRoz>;@5X3_kZBs^>Gg}vVP z5p=H}5x30N$w>y$u7}2ax{z42l|BE-EzcgNVS* zfOoX7U$4Dtz!(7<#WR$LxMiQnf!^5=6xyt*z* zb|=u^`y>paOnSKQF_p&-LLU>armcF@*I#MeEq3ewKHG>XAg6M3&}bhD$Wo-2Tp*g8D)IN?JT`{ zaTk<}YO5Z%)5Z(c*Jy-k9G^Z8Cf6wmj!*mX-hx?}UB7|G zPMX3mey4)+3N3cBGT@WO!Q?)7Hrku_WUbj5RXM{i3jWRwr1H2U&X|)ap8W*6f@-ydlq?iGvn!}29nI%g>w8Wsb_=|+_Q?ss58d+J3$*W=bQ56_+@xV z$Aq7^>yD?dHZp+C`|fzSiHSV19#-;(OJ86nxQ@lJbF7}xP}@Ys2M04_IKkBmpmym z;{%D_7eL)29tORSgt%-=()i+!GXus87aosg(`UtaY)Kt#95DfZwa}-SZPDz|dQKSd=`@`%B6vAF5>uYM zmV96~|OX z*I5jXjo{thbz+zlcjL|oE4Y+b z9X5rU%R+>k=cMs!=LxZ%ws`)e4`s|9h||L>h4m*#;Ptpov|c+It>p|U+58>s9ohy5 zzv+_f_z78qRaYV5)B-ZFOozI?qnRb{SNeNH_*-Mj`!I(Sor86S^VzJKg+A=gfNpfgd?79j^jtKH1M>qQk8z! z7Wy7OkY9{5rL^XBLpW2 zbv*v=YY_kKYDh8H-_rNsRAHE32Io!j#6A;pMbE6R5-+|{+#_6r#OaFA%lWjJb)YBO zTr}pCV^cYE<}7}q(hqZ9Ovmw_-T8%AET4b-roVfU4leH+$Pue8vC-HRXRUL=^Si9L zyq_sHZ6C%8S=pfU)e!&YeHR5yf2>}AN(eQnl^I8L1?No$Y}DEd--O0sN5dkCC!~*e z>icqsCwe?x3Gj?$s1_2CKwExVN#|`$M^5aa3kN=vVwYULrWT0n6s3OMKdY(3lHWqE z%ned#0mW5x#b1T7jxTiJKQGew z1*L;xnWQ5RTT63Q&O)SH9GWjlpzSC9u=6@C-f_y8SH`WRe%*?=q+XRDhD^uw#CqDL zt&UEkH}Y&}$uli(9e2!FP0tGycw~nZ@lM+xSZHZbbx5fT%3jTb51|D@ri}qtj$v{8 zd2613s6Do7Z58G;4dOaWMYJD$OSmpK4qLYsi#m%s^M|9s7*i+37fmC)FteF5R!*k; zhM~MSTo<<(g>nCd85B+Pg;b{@c>eT4=-=%U2|-m<+BykoaUy!jk4E=tgR!Oc2b~^y z9lz&KM&ZY9&MDL2{C72U^X4vi>hOvT0(wy4_1jeF=fL$9L0r@?6?b%6$ECXmaG#yQ zc(bM%Mulyl32R-^V`w8KES-i!Q(lqc^4(C`a*FKghU57dKUx^RoQi@ZZ?`%Dx@Zt2 z|T%o@W}m(1qI5d`hHkKB^^0>%xErwdE{ak1(?h|^ucT~qBje`6@OmV|(HP7$m+ zki`{O+6$$B+hJzRaf(x^g;8}I#r{>-$yV(zMXz_knyo$(cfc6m70u*>2d~lVO^MJ) z&y(-$+=iyBgD}rYo9uEtc>R+s_%&P)?B6fJFO814xzk(m>E%I**^ z=gmb&?^pT73}@v5FNKHInKZ;Nn}QG62e-(`IAOdz=QJ_DED3Sc`-9e?`{M_Wg2=#j3DQ+`T)6&aPZ?_1r8b6^$`qYz;gnppdu!mx9kEyg;Oh1DxvX5Pn1hFWVw#tXQ zSG-JDB)-=Ti!Pwh&`e%`yoKKF`hfSXd8n!XOZ<=8JDj*(aRhic}Z3@f#N)6D$) z?f-eEmFm8K45{=lGPwW9vHpf$|Np4}3ufRSnqhgl zf8PJZf777-Q)Bk;wQK(uT=M^xOZfNN>zbnf{BQm_->Uil`EmcR?fsAO`(L%!|BT!J z{QaMg*BaCQF}FSbWs3h}yk7b*`~UyO|JgIp{pL>eo2-jbHwN*U0e;wXet(|Tya8@r zx1p}tr7-H18Y%=yH8fAD-&pdoQC1kr^UO}bprhkyssA8)@r#AmDVbuQaob^HnV zI-}aDZoIiUfTrI~7X0m8XwNb!A23qHq}4t7;@J*-x3z-YuX%y%(JobXZSmOSNFy0b zsMEOI29&LsB0PXyv|(uxypno{7HK>cuE%#`_i8)%q7Vk!12ed^?i#G}?F|)^Bv0gz zHoVl;URbenG;NJB7uK{Z5q29&{q`od7&^_B`XmgaenEFh&RY7ucWn=quM80DPKH!j zwom7sUky)ix2bT)*V)S63 z{Ttch$}kGQ>%%LRy)g85J8YBIpk_;5;j_YKa`rd?JLlzaL0?^7aNmPH917UI;h^N3 zAoW8lE8~dyGEA%Pgc}!iVF_95wlF*aZU=pY!09@a9`k`(Y?CF?t1k9PKTSKv|AO}R zXR4;yOCEar1ipE$mRz@Y#plv`_JIFyVTx39&i&F3lO-Qjm-h`s?Um`m7dNinJBDV; zd$IZ+Z=7@Q1ocVs#mLe&Iv%8s1@(vU`}AMb`O+w!AfG8J=SD%-AW55&h@_qDOWEz+ zxrfxR`Ya-jjX&$KuVoM3ZPOq$-PA{`>zl~kH4CQfO_!xU)j6qpv>!eycVM~Db-d7K zJ|B3R1X?!35oTA@%#(_^=HXSmqJLRjzUvR|`sB!6>@-9byBcv!wT*DKVgqz~A?59F z4fvMiFE?!cTG9PTw&-!$9w+N=r_lp4VS(vb*^zieFJT*&-*vzlqa_{l6g~VfO_^8p ztRV4800&yM(b|q9d8<5gu37$mUP?K$l6Kd6|>4< zl>8GI&^#YrC|a<}95aYD?SlhHZK`rf5pm!U9elc@Bb-lb$9tr272oV653>b=cx;0; ztZ=#}TL0ZGXf$=l3lU>cZqY4Z^DpAwf;P$LP@h8?iu6E zidii*Z|*OO_tkZ9QIR@%qneZbi&og_P26cgY{84x#yt=cEOh%7`Kw}x^zcdrY z!JlM(BQ)`cFo>0I#j?)KPFR~aTWI^_!)E&{=x<7z*e(CC%wR(=%;4!{J?{aDZ*r;H zMSu-QHd5ivEu?Fv13vP5z#(TZOyym8L#w!|FshllNIo*8xtruS{-q-EB{Wr&cw~_t z>dTb5cI6}4rM9lnYy2g;RTvBMXYJ|x-#@ZbF6~go;Q@3%BF_n(GR1AymDKJ2TM8*s z#;Fs0F!+3vIO0w*G<9qS_itCJbB;2qMGOR=qaBzV7s0&s>v_kvjTBRNfb|!biM9{h z@hHAcl|M77JW>-5RT|Or4NJt{19u47Rw|TebPv6T`@=kk!*DM2C2TI-L@GI2T&FUC z4#&Ku=-bIq7XK3buBMUFPQTK#4n5ND4bS^_Ao=|{+$5h{P8h6yM2*im$1 z&F79VxYmky{4M0KTdurX?f+I2qHw}dVozrr7%w?Db}^g66T8?n~aj(gV_qxE`yunRs%@hkEv zOz$ID%R({geHrZ2`9(uE+rePvC`m*AlX50#a9)}!t$1(Cr|Rzsr(P}+6_Q#(>4-7; zFW*2bUpw-M+skoUgf5h-t;K=!jzd)U!+fr-5HyDLCX*#!XvZm4x+6BxZPQc=)U&|g zgVq={IF;v~QYNGu;|76NO zGxRZb!cOYB%|$Ri>cThfw?bRHTpHgOF-6^rjx7$xtDjZ)o0+7moM8tm3<@a8kNCd< DG}hSA diff --git a/bots/models/1800_Dweller_model.h5 b/bots/models/1800_Dweller_model.h5 new file mode 100644 index 0000000000000000000000000000000000000000..d4021f11576068311e9c0b0dd9852b6c3c195ce1 GIT binary patch literal 45580 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 literal 0 HcmV?d00001 diff --git a/bots/models/3000_Dweller_model.h5 b/bots/models/3000_Dweller_model.h5 new file mode 100644 index 0000000000000000000000000000000000000000..53699b26318744ea2421f3bc323a9d5c06f78e9b GIT binary patch literal 45580 zcmeFa30#g{*C^gRDpXP#N~NTUgw(axE%Q8O%#bt?4OE6qrJ_hwM43VqB1)#Z*1986 zW)d>bnG2bxb5p(VdA#3yp6~mA=bZ2RpZD3nU-!E9-s@U>?RBj^t-aT7X`ddwv^0z~ zr+Xcp4H1DAjsRt z-($9q-{dKwA+p4Jz3f_#@E?SY>-6<^y>1}aN7hz;($|*LlT(wM<`e80;xWr7IK(d~ zP?l~eEBI$i`uSJOL#^i4^YbfKr_4Xo8pw66qo?+Z-Xu@2X+DA8e@f?9!>yz9Qxt#a zOY0Y%T6uT{1^W6;mSz7by(|?OQXRe8Ci=(z;3tirL0*RRlkfWPP~WaU{(N5+uGIp$ zKWo>0n%5%M)2VyyFYqrSf#2J;NnO1+*XdEc7`%M~LwsbBU(lm{9dxK`TXJ$v^@#sY zSl_NE{%pju5K&iN1Gyn}?XZDN!wuy8J;Qv0Jpw%ge17&Oa&o#drB{_fdHLFwTsMr# z)x$bI>)5OX4l?}z9qs!ktM%=ykD)9g3sY*r-+tv~-2YqcGNDB+O2XeTYae=dA3We! zP3oF?ZLR*+1;{zrIoLVchWgfbv$YciIk`~T_XrC1^$(g|OQ*j6zxoeZ(mYcyf6tJR zUy?I*HZgVcnK9ERFx1b}-_*v$w6;HzrOz|{DcYY1A%8&lCH4?m`q|AfXb zasSK<4fga4^ql1XlX7VAOdna&B+pQ)&N5rv83`KAyq9kV1SsCi!{( z#H%YyHW&oTMj=1h+p-G#&GiYE<^5if-u^+sL7^i8{d|Lh1AePeh>wrA?3G&f{*ki< z3w~BeR^*=);qDV06!IJCf2ig!Vs#t``%Iqc?-~40I3Cb`z%Qx%PhZc!y^PIvcI{;R z_&dlR+uOCP4ei@^a_ZEsOJ_$P+jgD*&hH-!sH@*E!TN=UdHkEXb*#w>4f*w1L;o(A zUn2O2jGv|bF6=+m8jtor<@9gp%|FOXhW3|Q{LfAM|7o@OrSShjwdf*Kkw118p`L+L z{^~0JJ9ZW07cBTSfYnU{7RCK?VtH|cIkS1Z9V+;z3pplY0m9xV?WJj&h6?YSN}!o z)unA)#hiu zfHV(9|8BznVu-bJRQOvz&|}p9S^)L!+@$6I8t-2%_lkucY|OLd)+UB5 z1UYcjurL^y(vLUHzD=XjwYkr}C>o>X$II_u=hV!(Fwtr_PTdnp*Zhvdh(vE((qBD) zho%;;czqF)8WxiKgaADG#hQ1`p2glp%fQ|~gi?CTbJX*-pk3LYf}Oq!g+EGQgv~K5 zh#AO+dB;c`d5yxp@1p7Bn_&yDYH*u$f>aG$g|p_(+41>z7snHp;^xw`6s)-c9-j`t z;dx{Ecm^Q!NnpFV?+`CGKKWy3h zjtLInPSEB1JW@XshWbVQ#oXvMLTCTM;^Cpz`ThxWxTdUx_UK*$E&Dyx6u4YTjfS+uDp)i`lS})>(_-UD?4hX(pPjYE&c!dtb!#3q6}F4} z60cI*%)LUC-$hb0>qxI$bLdUGLu72d5@M{M(Z`fA!sLkkbm_DfmM=hT=+&MZEik1_ zk86})(^zQtS`MZ+T183+bl7C{kAkcAmc04<42T=8A&y@(8Fv^f@bcNJyrMdaUeBFF zFsrGs_D)0TBUKxoA+`cTZDUF<31QC(sT{69l=|M4a9PYazB9xM*SA>c}f26SLUBh1P$$3}yb;DNOTN4;Ey&mVQAg%^)v zdB|ZXxwfz1v@>G=Q7@R-8V%EI_>1%JcvBv zk8no19kzE+f|H6f#4kc3Z;g!>6b~EV2e;`IJXj5X#P;HxQ)@U>FNdC`MbUsK0xplM z5uDHY(rjxhe%v?^ryhz&Dzn6np-QayR8Aa}kOc`n${}#>QjiOK1`}Q)hd5`_cC7&F z+j~8KdC-DStsDf#7RTtm(=G7nvX}>+kVhe-D<)^TqGVYql)qd`r(VS1z%3f+zgLen zPi~{^f-mBItyuK%n2)X7cHmn@@m%raqVUY_0(vw|6t5XA6mAb`18ti>Cfk9}giaS! z`H}ipN^a8{-4a}3f8!yXSsH~a&2?~1vnoh`Y)Of+>TowK86UQ{M1R98P;n+54`^*c z*jP?`mcJ65UK#M0zhm{g@8dHG;051BoZGah|} zb4DF$m6{e8`zr8+iCuX9%E$0>p)F3&_eZ^+4ph0o0h;^zIVULTL4 zC?$QIGd63fA7E z?!7KT(AWVi_zdAsDq5(OwTM62d*U|nuvq-G3tm-DXGI<(zFw(^?N5ZT+=_>^`PMM* z^S(9SkUH@)uTn~VX2Wg|H^bU~JLvtrdyqg8{O-YO3>Du~*Mae{+6TEo!+|XC-B^iU7-u(@V~e#h^O7PK1*UPI6jP{Zu0}2I&%wKXgL(YyIPzI?8ZHl6%}>N7 zxIQKgkI47McgDl1X_CG;wpB9SjaMl7c91x0*YliTu@zpp~;Wq5p;fr@|iqIfST__yc4%<&~ z;nfX1upsU*7(3Zww^!Ezrp>_Z*OLYF{M~TGHc5DNAsE-KUoJG;HG{I-w#OlFCveKd z6gp|1z<2$hi|Q$%^lpe2x}ym<-mSvd@7Zz6bR~Xzg<(NIFHneEhVw07iQZGHNita- z(?*Y_4vU8I?Skj9!*3Y(&UpvH^B*56FCQ#AW%UtTOn(5nt6uVg5UIGtyp5og*B5iQ z#PE}_1F+O?D`n4!C+YA=?7zD&w|*)we1}oAdN+}p>KsHz9lHQf3u*p?d%Fs}f`#BBAKS?I}qpMiM`XsNuRE=|L?qSlU z=F+xVhLY`fiK~)rrT%8Q{CS;{#B|OQ9^fWH(`E9~w$8ffetQ|5>bx7qes3nxJ)TGAMbb2YiF^VH=^Ow~4vJI~|8_pMYwZZW}(x9)A zGS0noUO1Ak%&ApfLFrCwHgjn#L{=~@yA{fAi<1T2AQj#-B96*C4x?{w_AYlf4&%$; zClyx&)<@YWM8nx29#YnpS?&1a-rp+irW$3St1K5WrU z!0OX2IbHcV<;~UR!=f+8S!|-gW#!cS+#Rq}-p)JSma*D1BMu)k0KopcI67>xFd^jt zZ+~scLn8Llu|gfLY81!q&bAdJ&KUDe_kOr1ax6;=w9x-k9KJKs#}gg2@b%SB*szxY z&+Ge)gq4pdNy~xOH;d#|dJDn{0R1?#SVbZHmF6=04eat)OG3!+3nN=2Rk^Nd@XZfEj)t;mVQiaB#;K z&UW;HX-5KZQ+7H{IB-X7Jnx?1kv9~oQjNKL!Veewvt5Nl1I=M!`Un^$7r_2bDPrlS zsg!p<9-7_O=ENB-anM6Y*zY@8(0)G>)n)Tc#jlb{9|$A+}C2L@fI4A zd`ld@N0E0MG+;^JGI-~_hG!g@z`X`qa+U5%QtN4pD|`E(SI1?14!Yy&)W$gW%0PO) zbsUS2M&Y}GDdN!7{v7Y#iZ2?Kipf{bkaqDA@xf6E1txalz*ef9Mmq<(uWf?1AQZ zxH>_Q?(Btwv>dVTwwLfeX$AD3teHM*h?t`CUf%{6!F z6;46l_qi^U+C;#^qa!${qlAwfP85dZeghA~R>G6_6JYqqn*0uJ_fem3Wwd^5M8W&5 zlPJ$=CN|4$M3SC^3ybMK5hVOMt^3r(FN>(W)aqWVQ?#Lz{>Y#v-A3S;NL8jPo?Wgd%g(c zkDjT{pMA2RVBb+1V9{G>o-`@{RdhL5bQ{3me3YT(p&oqK$_>-|91>nyI`FtQ#oQzR zJGgFrhNH{$FiKh?_!(Rjn>^i2?hUt)XJQAIb1w&zj#p{buG`$(NF7`FM6r>6B;AWy z&fSbw!>XZa{4z_2k0(y$?lW)EzV?Z@tC1#kwpj_?Byv#Gy@C#EUcy;#KDx|GwP$mi z&0x5SX~&Q*T+)6z&0V2^ufKS}(VRjtdEG%OoN%0%r+kBeiXr&o8<{Hx@jn4|goUuG|@=NqsO2Dk#Br7G3%@4XuS7${T10 z*~MlBZRRy%x2mN$^2lYnF>E8vUEGByIi$dawew->c@K(?|3R@w^Mv%{E5Xe42rZtK zBd)!z%0pkggDd$dSZ@7EnDEYz9)7ap>g-eux;<1V`{6bj}u_) zzz_s;Z*V-_5Z-Pwf?hgZI9ahDm0RwoXdule2F3CQ_ORCi+ z>33ssa%VY;_wkU*^*oC0QVwAEBnye=ohPKMTE?E0-gwh+A2v^IBi;1Wi!Bz&N%;G0 zSXz1uzWH8e<##P`Z$JrFl@oeNL5dd-vv2O5f+)L4oSN8DVl}ue8^vl%T^D{8f|RGS z)4BeV?U&+c(yg6%-|`}FU0%pVU$XhD_Ib`9pAAt>nn?~BUBzpwrU~zJrm)_OOdPq` zoD)a5qpIo$ELge{PZTxbk~T%yE^8xQX=P7J>o)Nji?D*YkFhXkM@v>26o48QojB`h zCKU}`iw~t+vEy|s)EuyYq|w2gRGkc7*&mz@wB0aDK1jH+xe%TYT0!@;x4~;^EPtAs zBu0mK!3&#q!`-wZu8M5K1HYdKpThm<7@xosLM{kBo7m&_3&G;(H=WVofg9gevtf@p zCfx80@Rxz=*vN4czPrw(UTjAr&3D86*Ohel+Iy;WS;${+#tZI&BIs??g-1_BIH@1b zmVRwf-*ymstm(q@G{>N%aRyX$RK~`^W~6uJEqNE6g_9S)LGYeg6muh2^w^9jXQ@k@ z*QdkLd-iDVS}No(Tn6SxI)b8`HdV$M;~NKCwmSC>MB@!&xmycyX{(XgJ@zUr@p>kn zdbS_dJkw&$uswA0#T7E1c?i~_FC;xU2zzEvXE@=B;a8i95h)#AsunGQiPPIr)$VB& zp}LZ$B(CL7-(sM>WDq8VZHJZPGrh-!zGr~ zRB8p`#tpc`{Ah~4wG%4tFCyoUL#flbIiU8$kz2Mr$cM{^VcyFi_HW?M%?GK0d}}8h zB!8bB56{A_2lT);I09C^GLsZ3*hw!&N8nefGj>_x%D(S{;p;h7Nl@lpw3^aT@x?!6Gze0#Fnrlyjx*8(RioaeRO7qX&KGrpR)A5S#Y6^91H)dbrqnA?!X^)G% zzj8h6gm>g4a=m!?$`Enkz}0LaTc0M`sY}m=nbAaFZSMNjM*2zZ9p6_9Nd))Wv<1|QKI3b{R*+|GAx)Hf zAb99Bm998423GHgWbZX=_Wo*x9wjk-9BIxk89OSGHq9gfEfB<|u?X^}y))VHgh^kLg4c=fZhbab`^9eIb8 z953+eP}Q!v8$Bi2HZLVjRFx$M->jE(o>e0~T@fy+emhi}Ix|Uf^PZE$*vX)9?i;%{tFR?rU}pFBl*#nSYFrlx0dYLa(t$!yys_i zNi5&2h{EPIqt%zwrG6PI(u~Q9bYH)b)Ok@uNvBFDZsjv76ZJE-i&Ny}Pdc+oDtwxOE**KWt}A$R#n*bBiQ=-ehwHsMp|%u7!O`r!tSLVShv|0 zirbjS9`p63J9g|B?9w*nd+52dj`wh`Rw@Dun-JI;c2iUyJxd&V;I;6;?R|mKZaeDq zE{T_(XJ=vWOHq>EcJnr+i(r1$U@1zzy4P($yca7?&3h z%KO*zw&R_+(mjPQb-6?XQuD+xrF598uPo`d{41V1*o6FJT4TWI_4s2?B4o_`0Ou~8j*`+i5cBK`6KK+`qjSD!S_fj0yegnsi zc?aVM>Y&*?CE7S%jbC;=4?B~KSSw{LhknX;dDXnLWM23O3|b;$>yU9!?wpIk`qupA z=yP_MyBc?lZ;LHA_Cl{7C1Ss~{^&Ju28ZPh<+cthxU~E*FH=d!IrCabiu_zjX>pay z9GNZXxplHwG-fkJyqO}s{|JS&993z?wcF@YXo{C4t)vuDgDW-rV1tig=($EovZMNd z%fJYC?0KsXPD$y+E|R_o-+D>b?bN~(L(j8cNkhrWixFs1(~Y&l4bk9$q6Ei$LF~L3 z_bzu9o&CQQjNYm!4S#Gd4Qu%o=Rb+Tb}uU-(e4v{&sCMSow%LUjx~|!&eP?oa;}or zGuQFR2qnp!J{w``!g6*>YAscp*dFhE3X+Ul*a;(|PxAd(FX^pAtNG-qR^+U2jGISa zV56wb{3R8ocOI!o2AiwkKHSOKCw^e``EPjrupPG3cue8ChHTev3V56~0_SBlr1df$ zQcTk+NctVRtZq-ODzDJEofi09e-&h{@F|eUZ{vC1C*eIEg7VIKnDJbZy|0?$nPqRq zo~14@sNq659(DtgC+hNi=TtHeJ1HLT8O$@=H^#@F4xm4+gHSwMg}?VzK>L@+aA~vt zxGdfXE!4X64$%~)Dk{S8F=gV$YGrJFvzYeAjlyH*01*>j`Cahn)i_ohoX_%!w`oL1KX^Cx8D#g!6(p)_$@;dO@XicT zVY)sHzkG?_?C}yc=2qt?E>DLt^`SgBq}s)Ofg8tqSmD=Q@5o~A3+nVK8HSIT&I>l# zv+7=LoE*AB=>5hK9w$e`)D6*mukj`NQn7-YeszKhU4~q(JrL8&jVD-Z;p0h8klr%I zMefK)l0XThKmA76mB&NK#&jrN5+)p~3gLTMhe)&B2yZlLhY?G5!y>b%bmf^LT1+1Y z)!kAFpI6fT!B@qYn10-S$~-*1F_D(eybH(lLU413t8n*363iZ1g2_3($iC-MUcN#H zJ+5Zs+L62IW4A(Tpb^Ofh9rukrJner;Tf7(u|yblU=^!3KMglL_rdDoG8%JnBlXQq zqkN@A4!acr9esz3HjgLp=I2oWs;hYHn^+21)r;d>y@l%h!8|RxBNdgEiCeVi<6CJS z>?qUbk5gOm`?cA$V#gd*Tb)GnhghSg!$@A;n-7dg8>U524MoVeINC2S&wiG=H(D@clA? z@=^&+@_hiaZCmr4jjt(xgBAuw^@9-k5WH*IkXv3d6{EMerBBud*jBM8@5qS5$uR+V z=}bqEmS2S2uliU#ZLrWodRH`AcUPQR7R*fyhY2lJn?dyX7T9*BDJ$kS#i-k|Iq7r*0v@>a!=yzTydgJ3xK%R}Mt2_z z$B)Ouc%OApvB?2WnMcyFC1ue0Vqfg}M4uZT^2Urf0Xh$SU+}h_I_@ke0u!rvmoUdb z2zqluc;UAl=GLr)9fpO%Yn>Y~(#ILM9#i0@J6quy-Lo+K{CJn)*~WsKR!1D-kpXUr zBT?eg1GEkq)7yk5aA0W*dIp!^>U=AzId`0-n|;L+P7*JFDWnI%w?O?-C_Tw86>nB< zqV59~$Ti3UI%T(n3=K!xFWUpjvA;-77Tdv;_Mvd|-a=73;+=4GP=9`^+(j57So+Iec)ST0_=Ae@F>adwS%l-f!Uz>zGj|8%b6|r9vC%CO_ zz!t@e(Q${SMCJT*m>G7Gn*}O!u+?MGy=BXvIw#Py(@F4Hp)nqu=EVEM&!D7hI5)B0 z!rwKekgZ#+%G%0r8 zhsOtOMP8DMnYX^d(c>GamHr+KZu%T7a@&)ukv$K#I8V<$3NUu;YA~1W^-iCe#=|po zDLmp9*qnMVcw3()y{gk7=$(K~cjBSf_I#n&=Dwg4^gt*XR-l9z;|BrW;5h9jT&GMCe~_eGnAgVEE#9_QVhN0}}2VQYymSqcs~ zF+maMPSwSJ&<^^fZ|B#&oM=I0C$Jdy1AaUj%}Zo9&DR(0aOiMbJ{epN7pG~_P4%tf z+rvxI%zGoW7~GZM@-Q5FZzOcc8bAMEvm0h;m9w2?=M-c4U4mVGKPAfheg684X zLiy!M5S6@=&Sz|-l997GsL=wFzcmaBig(kTAlW|8VoNrhya-l3*@?M|xs=#bn{R*b zKrx-SLE~}LF(G%gsFqnm2B!{C>XGAJt_?IM@4YWbTP~1CmM_9My<^C%Sk#fdEt}x9 zL&elMY%#hGYby>-6i`V)jf*Q}<9NrD6rFa3+&wMvN3?`Z64Z{k2Y;fAoy}olFQ&;& zZTV2-1RgtQ7@nK_oIECsfy0;6(I)&ctXL5sxsiQPygOkHt$$~Lnu*z*l52! za|3>H<|bst+{Xul2J;AOKeVkl4rQ`+z=*jwG51CR%#KP&!>&=dx!rTby}NP7 zHjNd{9v4JJ8cEJJ>LeMltrGX&7zOisALO@w(WGH2Qm5-7?Am27-uL{#rh#|FU{ee1 z)qe=5SLd_CvqZrwArUoiB;%S?IjQU7?`(Y=xzU#lF7Y?v1?SzxP^Xa~ncPcyxxz@| z7kQCJmS17LJ6_n-~L8n(epl0ON-Z*|U3FSmb^kLY)ePThmw3y06PX zCG`e8lkFevPV^CddlbT_Q6bP;wnok9*N_!n&N9vGkr8Q9ubR4$M(a< zg0IkEaXKzts3f*(HkG^VYAl*uZor-QAAoCeV{q#N1uUJ?R`@brpLco5_P9xj+`sM>sv4y{@~1 zjsF=cFVKYPr<8EjGAp5*2@50Moa2xgjd4WxiQLKJJ~VVNOHwghbYsN=i4AE4!iM7XW`1UGv`@GjZ-i!UN@ zhQ>I!^lS%&Ty8Js4z*{PdjrNdpDK)aG?gzpYf;tSH{fbkM7G(>agnL2IM!}0yP7Y@ z(@D(`d}6umbQ%?XZiWx11_{1#?KxrM5}we%H*U+_#va@H@y*@K;evV&MQTmrlU-iJ zxYe0_Gbb1~+*r)Y%DYij&wxvnt=Yz08xJ;%MvpCi7!uh=oYt|7E_^?LU)C+gUh~G_ z%8mBieeEfjGW!ZHxz>uR4J>&_-&9;R^Ei#qnoC@{m6CRyq}%=U;bDg|(3sYo&kY?4 z4x`E`=2$Q_`jAMcuYCY5>q0pEVk=JVVTt_yE9h#R;;?BgvB~~@oN+oz7?<(XW$4~4 z{IG5$HMMf*`_|r~-^wWPagO9-t!cbvfk{aAO2Z%@UbQ~ zTJH?UobQqD7j3>0_d&1iko>9t)5wLBD9cy~rrN+i3 zLdwG(V!&qwq3pf|cx}ugv#9A{@R{Il_71)i)1GZCRdIsl4#<3YoT>e<7ryjoG)pF@IxKnjQs=- zZ+6qE@Cb<4Afc(kd`v9rkEgyi$4>D}amXoEdUPNSC$Eji@e9<1qB#*f0d5L$KAq6r zmg(J_R5UxXkuT@Oz=+~>a<>R2l~@5CMyT_$j+J!p`F0xqp@2S(AI~?AZ{Q<0z1ef{ za#T%Og{pg(6(m}Rt{3ddz0j_aLo>Qai+U$&&ZxDR*eIPi-*8JLYX%%)25l(>G0x3 znV@@SD{zystZBIdt@>HRY^`3n?a?B(S=t>-pKhVM?$s`H%}&9l#RJ&JO%6|9>cF9K zI-u}yE=PETqE_Bhm*P|Anyrod$<`1elHYB@GMb__!;yO=lRI$^+*=a*@ zQA#t^?y#BfmW>szY`F&=^5Xg6sPkknqMC=a4<+BOGM!v0v%7w=g2OjjvcZ{#+@xHS z?V1}x@riiqWZ6lu)*FVV$A?3~)lgXb-idmLyKwNDe9CiZ#68Z$!jlR!9Ns4#_SrS$ zF5ULwq}(HzxULb;nf!w+7v-_!KL^R?{$`7A)57jk3;d(t2r;LJ)HIc%{ayQ|#o(XCy^risGM`1#vIbzQ% zqxsY9NU|ONNT>?9g&dM@P++dtZvp!i1m#^BfXMZKs zJl+_!BD003dV@$Q@4RrO=qOaHb!Ek{RD3>vm5YY|YZ_zc%=gCh!|mD$bV$j7`b2eu zNkz`WvO$N0AB|g3?>=Ygn1&DUsw#v52}?0|rYUz&Fem?Uqd9xpZQ(&Y^O3fOnDt|w zSaW766n(Z~-80#I#d#nFT)*Km;)fM3u}bIj`|pazUj}0Pj2QBt1-x8$9Xm8!3-O;m zg5JPJ*l4&Ks&$XV%}-VcK8q}HQ+|8QY+3=`!$lZ0$O@Mo%Z2#fJ-IY>0dz3h4$4_U z&|=FnnSI_1_ia|i?1ynM>h(V8zB>rFeDc8;VN*DKsRep$ZHASt=M|_HE#iGgGQh=P z4O)8W^Gu(m@V;^%bqzY&*^C>xEbe%pW_F*(pN)gi?bB^x{!&AZH)+8|Tf4xS-U@u{ z)jV#iah9N;Azrky$Id6#uwNTnTryjS&k0ROldn!AF4sOudq!1}vdIXn$QaFCOH$FNY6ZDn)`nqi z^|`Z|FKb&DQQGV=_~h|vnlMURuo&0~dQ4v=l;l1EGui&rL9J2f=w;~qJ)*cEF1aPl zS(HVm`2d}=(B{*b`{_ofRq*YbGB5aH%|E=2`K((j9B+A=x>eioySY;-Xh0x;_jo6? z3eaJ%+0nE~Z#kP+j-~UBtU;|*k-vqz^W3trFek4oo)G={e(Gc#o8`hCFJ1-jCq8^z zOInbwnn=N+t{jk=DQ?yHNE3!PAphb`lsm2!7xlY9S(X8CZACxQh|UK0dljO5sy=9b zZ_OodA5!~Pp9M$h17W)TEZoi4=+>&Ow8Cu}yF%8{IC@5J;tjapvl5uQs}kf( zBy7CmHeAhIEGXLJY0%n)#yqwKt` zzH{8{H1N>&WedjSFn!N9NgWYE5E5!(%F*- z;JAY9>`$?e>~w(w4$$mJ(TfiWn>S7@Xj$cqH%}*mrG7U!K6Q3*Urz6I1pq+AK^{H=_cXt$SeyTg=(Inj&N3 z=}XU{v|#irnsoX)tpDB!d_%KgYxYE;s@-y-(qR?NQr}9_u_qyYMmsolVgMBWutv}C ziKKVX)ajc`F*rq63kn%=)F?a^=6r1_#tv!*)^b;2NW@lQ0Jujxo!JMpCPzZ%xC5}cqb|(a>j!8o_Y2ZYE#Y~Em&^Q0oBYlR#!%#aOdQpxHROHWARPDq z4Bfn(*`xPmajHitNV3XA_jbErbI34w9JU3Y7WtxdmjR6G^Ge*c#uEFts}juQZD9M5 zZs<647Hyr~iktOGfQ~B#2(#|M<4Xf*Nte42VE8uFTpW+^F+=bC zKz^*(OSV?dCQV+B*L9k4PxJnuW!xDTwSPn3Yj(nTe=FRuXD^vYl?qmU6RE=E2aM5G z#>>r)P{)naF|zm#Ty*sZx1%oLEL|xqS61Od+eRGwy&LL(ZN?+S4y-yNRh(zMmIs>6 zz^;`|VXj;<_d8x$uqRb!-}kscdI$0-_v=X9S=yePR%+nrAH|gYYzs^zRaR>98TySH z#7Vwq=t9FXs_w9hZslcxft-@?(!qpZfByz6Jo~Vn`!zD&s}D_Pr$WfY`|!AAI=pq> zEDo)F2zrB;irqIj!}8g)3+8Vhj`t-i1Zl7~uYb5(+}vw9+I|=Xy&kv3T$5$s*+q>k zMoq*kS?(@fekh^F5H;RWXe6BX-$=XX3`QGk2`w5d(mumwpyuhvT2V&0@Qyrs=M2WK zgVMy5J5#xV=VUxA-Gldg*iqG*cVyH$j7B6zf!XLWkhbUzDAeqLu)q#nbp@$Q=0-Yc zA08k8FI`fS)#e0BzL<2pUc`5O{AbR=AEJ=bjyScCI6D z+TqNNBbsxQQU$R^WP3PKpaqkxbVU8TO5pM6m{@E$0iLxj6{Mm*e_U8aiY2<7___c> z!WFq;I}I|gu;j(NVo7`M05~sJLDE`t4jDd*wy%E#POl1}ZFyU2<)TezwjH7FTC;e` z?Hu?=AIVzpzKOVn zA4&1ojirCTi}3$;J^m{1zg7aj`$*P%D2sKz;q~18@@AIZ30m*N_@DJ-hYm7q&-x`+A?w+S`KbYxQ^dkNwO4Eg$S2LA6}`|HB9S=D1pJ zd(`zCf7ZV!`PJgr`)2-K;(tB;D@fp8n!gQ1C0l_7UrIPPkJXF$<~uk zT)ISD5*plS07K4hqe`2-VyjsUa>q81_x^M+YqN~HPiQF^RCI7jqy1Uq} zpHF+=H33Jh>7X=bCoRqW3bQlrlhJ2)`Z)Y7x$as?doE>($~|rhHSGe014hxp`kk^h zQdSaa>RqK*G2aVR#s))F#}4Sz@fNMqok+b`nTQTxAkHm{p!8W$MD| zYDQx4>z;4|6eKwb7a*hjn3!|SLF%4f166YErOO(WOaDw4{>uML0)I*1FA4l5fqxwd z{Ju^xsjIqo-8{5j691>~a>=Wk|JJXAexDE5^YIt_qXd4x%VogSKj!})t6wi{tFveP zp8u~J|HpOe|0z3In~AkD{_kxE`?K|@)Arh0)a%o~s^0vo*8BHyqu#!?;kP>tYwbpV z|6ezK{*wZ$w{QJ^hvNSp`OECcjeU3;dS_Za-G2s$c`b1%v&@Cyh|BaNN_NJ2xe=|u&rmw( z5UqMFz{Vtb3>q>{9R5Ke}y*btEh5v zXHd(sBEO2$^x$LzaoU`|)THPjb=TYuLANu->6;C4?94J@(CrT}YFJwitaK2*u8+kW z+xeV+?i?iTlCbqxxq>aZ(PF6Gc0r?X3dB@DgC6aNVa;$0+U2B!`?gJhW!$NtshJeY z_W6^kY#&KFZFPHR;g_2dI1EOsDN|@=+tqytaqF z?=XRbZw}G%N9)P-{04fH=?^LkW#{nnrgC_RI#;C`;!Fc)G}&^DmIbU8Ro}c4Kkb_h zU*%P(K<2ZxU~&YP%~M6}bBv%-7TkLz?^3P##JTzA2w}JC7V_`bxk4|N zHbw7;J=TKgeEksVuO-047vRJNcZ@W#gQU%Jpd2x{z*(g+OmgjoC(NSZR<~@SY*aH$ z)o_D=;2r2Ze-%01d@Af)Ci7F!O^5iNOR;xKI~+SAg~xX7NkKvS(vB-uh|(>xySsj< zA*@e?!OgeOaaC2U$xNUgn=ey##xc?G@l6>0y#?y^NugO8qjAGx7yKcbai07Tygj8e zPyMWgE=@DgwMP!usj=xs_rg>R9a$>Vq%Q zwem&c)+rB#(#%BKR8m2q57Whm*G@w3-I^je-{rY82lAVK8rU`cJ;L5;S?E&9bWi;GkxuOAn6?6yN)isN>%Rn%f?vs=MYq zZummJ)gcn}lJqgwY^r$vYXa%_GvP_^-isfe+w=amdq8hQ8ns{kkTNuf(J0-8ILBll zHfg$1P*-W{QqVq$);CdPJKyu-Fj@P5_AQ*w7Tu+14$%OE4Dplc626?-7uT9=!^veW zF{05ScwqI3W;fU2C5Jp|q?0o$rK_;MLK^s1g%q?NxdU``%DTLo(*qJEQ^BlDis03x z7n)X9!OU&Vux3RwYQ1m|^m(t()j|pN>5(FU%zyFc9VXx227~Dxa|}4PiflXehmRxO z!1m}-xDK*=TZ+HXgiHCfH6j6erZhmu#Y4q3&0Dl^ehzJz`v%^|8-YSeI-R+02~F+2 zNM~Ud+;PpLA#(@G?rk{?BTo(yV$;Sz_nf8_EISYSH2Wi6JrTnJ=c8Co&l~T%Y!P}? znen;CCa}V_kS@ho(U3`wbo+aW%c`ZutdX=zGe3n)+SZK$2~Sm?~{St%rZ3p^p}cAxTfc|8gqdb(Q)3Pu#>?K79wC zKNN6}_P2cV?;2F)YQ-IfC5rBajd)LDjaWF}mUojELHI^RD(UznDDj>aTEf}^Wl zX}z(%*jQ&dX!mIcANk4hef!w2WSKiokt&38plR{*GGduJ=R&f66H?r>(MY1bwFgqh1 z9drv}!H4Ezi$+f5wA2kESL(Wa$xEgC?e0*QoX>Q`Mho8yY4m-UHEi8vL$0wT%#*(X zlbc9s|HQ}iwZmv!|3BJ$^QaoX_u)ScG>@b~qCpyDjyn6=h9pyxDIt;}m3m7^h~`u( zl}4eWloBZ#&V6lE6eUCsjkr>$}$P`Rkl}Sm)el zpLOqh?`vPL*Ohw~hPGb8S?3<2$sj_z&pqzQlP3_>r;kN0FNv`D6`qmwMF|K*Yn55} z;<^<+F&Yp)w~@y^V`_(OFbG`dY$4Gjv@=^}bSaQ*ZqS{h`5WBIuH38Q@|`$d|D zHiy9R;iu5`kRxm!7{k;T4GQ^uDq_>+fM2I?V$-cmQSi-4c;Qp2a2L{>ay8EG^0= zE6iroVyehO`*7Mn)*NEGEy(lP8*!eU6U*A2j)K&QC{k90BP84fJB$6`o{0*x+owUz zii9BB@4?MD9Zy37f|=z0J&>6l21TPTQE$ORk}&oMoIavR+xxEIX{S^8>BA7G<77uA zi_~b&($mF`dX==#n>$y&RW>^0krVtOFeG`hF(7&933^Ap#xIv8>EaXfQ8ZWmZYx)dDk%AtxPf#oK}By{{d7*h@7G`gn#}>{##>Lw#Vv7xb3Vs{hg-y=! z_vZ<8mXo2=Zt~vE#8CFO^ErrmiZVOVWa!%~%GMaTfdle`HR@U>lswm3=P5pF1wnS#wWQ!;xNG zt(zHmbK}^q`SJAVy`zwnv>i^`94585q~UQ_A~(q`8zN#Z!o!q9XnQ7^G+A5oj!$J4 zROm^hVl%OBSOd`wd5-%!Q^C_QPUzaRhCWfa4eOp6vNdb}VASoepzQEoI2d5UF5LHH zlgjtvs>3EME2f+2@BE5cgOD z9zFDCCW*52*@swg{20Mj3yy=`n^$1hqCkym#;|zFyF^(l6&8P?O#ZqUOx7O3xtuPA zJs#rBY;zpk6SJX-11(Vf_dPbetF(BsITKo)9|^~Ah!76tc%ts|k?ik~EX-c8i<>@o zJS%xsLw-c1!Oqp%bbaeg8op~P4JlA(F4aIK*9UXI+sZI)b|6hXIE87)8{-!-MHbO$ z#nj%ElWXfKZs`_d4eslB zRb2V;9XN~(B4wRTf&<@9V9rKo_BTKoKWC=_EYX9p3KVaT7)v7_e-=a>ieLvS?{MS2 zLh$00Phct14woK`r~bR;;PIo&khW+w{_Hn7> zep#d`oZ;Lm8IYDZuBc1^>(*2dku^Esm9mU&U3i&Wayt#hC-vc&Bel5Q=LFpOb_`A^ zC&Dr%b%AJcJ(2yehGn%Iz`MMoFhwj5{kCs`?);sc-){+atFf6J5POO)@q4++S4G*l zT@}zd#hLm~N~k$7Xb4^^uXh&sUzs z{Sjr7N37`#%?!Q|okr*S&7ilKB5B?rpt4?Ph1FT}Apg~U+`qOI^4IMnsd8(n#;PXJ zsu5+Hm5OM;dn9hTSOd-ZCahtZ936Kw1EtQ_VYZqAwI3GCsf&$dja4<=e$_gCZz_~~&nSKg<|x^HIiJhC}z zEOmqxs+ufEyB3W0%*16X3glT;Ja>Ed8TM<~K6=+mmY%8A<)2+cAa1OH0r%J7b5}K5 z$LHj?_ZTzLbvyB{>kTaF%>~nM1t3DcW^iekR%rVNfMbVjy8u5%n z0-Jk(1icWxfvLxxqsg5WOyYq8QyQhphFpeWDbLJIvMMBJCQM|OMbT8_W0+uMyXu^* z)-`nh^V?8epMc-Oi@2+8rQFfmQnY8`dfpLug7xG);${`S!X2Iqsn)_ZEI(;1t@6#M zYmd*Q4Nm?vnQdYR>tCaHY$2sjv?yl~L?hk5aaNHfu)pRI?Rgd;tT=WFZs#As+KW?Z z(L@opbb%i%>zvFMgzsY^oeqK@_NH;A^M3279XaI>in98K#H zPUsj%E$@3#vESktY3?uda;)b{9tcUs6ALzYbBMh7)&egxpWxvc4H)S;nP`G?RAxfO&NU7 z49|ZIwM*eXleL_{*_3YWmY`cgcjJvcqu|b$evEzo5AUd>&u3b zcjMWIy5Vfv*wvW!Pa%!@?a$^Fp5?9vjmGUUt<+O5gS3aA#BSTYSZ1q&^3wWn_s%(p zRPco|vj({BKbJaf9K-xx%w&q%8Z_Rrl+I2032Ha4@_s2=<@@stx{=Gq{5Af-yaCoVve#(j|vziUd&>mEAe1_F}b(VnL1ejwe-t?(r0aO zgxauh>*F-Yq!SnC@MGZd*_7@2jR$|r(AWp}ahi%f#f}!RwLgJfibL4qw}if>yhS@m zjm9Z&g3HCH;M;aSGwXhUFz>wsL=Jdj(Ab-hqOzH;RZ*cMdKNH;j(n{1mnDmv>xrIw z7`JL(Ebe;C;hwj>B>LxJc;YsPH3fTfW-XR@zs;WRNRtqVJ-LG$c9}9L%)wxtR`|zR z2pgW+!)7|126+AuUV7094%xwIy~>Iyxt7D&)mOOk@Nl-@EEz{F8V7dbyt}B?h6}g& z3<`OvxZmj)R81S=S;8Jr{2I=T4(`V00UMAOk7hT_8)1z`I-K784fEx<(ms<1uyI=% zNtXzRT`L-3#rjZuX(-EH52#bW$2}lj`y9f;G#EExBzL=QHHE{YXokvHE?07hY@W6Y zO0Vw#t@CG~@wfr2(BWg}C2{z8oIU8v8?#@Y^>9}7HP@0_NupIeuqJm2HNQ0v-_Lgd z)l^lQybRb9BMsVoXgunLgo5P;hJRxWsPTmudT^2{uy@}DBL)Xy?D#S;chkVUzC7Hr zb|YNe(~eu}(gkvgp;%aLikJHT!iRJjHsxh5K3i-{YkZR6fW8ns=4QZwpZu71buOAV z@)GBwm9)n#n(RMu0VC`vEjlBEF%KVLwv95=8yJsf7u2AqY8;k~Qlo)jVF0WEmja!7F7G>V*1NkbXOI;hQAN5ujpn8t2XY~}r& zH|q@9-JYu;TfGf-n0!HBg*5!DsLlM|lyI4L+h}Q(BUKWJuoWF~cugsp+}WBdaEcho z8Zxe7b6qAb4t8fxU^Ixtz5~JBZ?JC9dpxps3~MqRgyvFv>ic~H+iDdiNOSPTnKkpc z>&m}L$;mlvH1Bo|dG`iNH*jd_)6Dr~RYPzXKymw9Qe=LSlx^9IE0p*;7@reS&CH1D zcAbQd8BPGBdmuMgpFLzPpe?0}B~7P5pnA;wYieW1i-7=;XFKa+_9=Q*P;CRecGot_R{|=Mc_o=LNJW52YJapMp=HmBm24 zGu1Ij0Vjbfy;X1wbS_RNO6j8Pk$gKbYE_1|7qcPct^-rf)S#PtgUYV;T!Bit$+*8R z0o2CthGp`U4E{7A-`9z=Ma@@H=T8Ye?-s#!ZT(AgSD$2krHxQUYh+1IHj)1Bx>d{U8MmQ>}5h5@(7*jb`NAv zI>OpFGIV6#Qg$fy3GB^EM=kvZVaR)aEaRF&v5@!59Bn4kv%KMSEb@9S6ualwZnZ`McfJvKyQu7t1}RS~*8 z_Y|@>*Vw4_H}El8f-aXjAnHpKxpVF-N}~LY#pAyVo3?ku+<*Zt-c;nqgMPq!iuXuu z+%>p#UkXmj@+JM{aD63S{Zp(5t_qQ0t~SHXiN7O$J}c!8Hfz>x1eLHmV$V zbcoXV?Z(vSb{gmJmIxhRGQrkq47j%_!-*~*n$l~Co=RfOoYsSHeI8d8I*f)MzYo14 zYEXGM8t-p3fb{d4Y{leBFs%Lqm-pc*+)2-1N#hHN!REzui5!MY&e|!bT((_HV)$5X?gfjz8p5( z>*0M;JYD#BB=X^7Hlj2XI*%uC)b<|oqaAK(^D)S77Ns_FS8)kb1sY@zt1EnINmCM+ z{Oc5YCb?sdgPvM!4VH2ipvv;ich!AxCi|mh3Kvlg-6YvidBE;`#Rr zt=>3iaS3g zdDI+4U8TTeGX;_mNNuCuaV7;oLtT|{QEL|KUibjIV;&&Y(5HV3obYANdUDrHhPlig z#4t})h}&Doo%qww60V3vb=zsGwm^X`dK(PWOs-PZR2{tdlxMva6@`nt zuA`dVa2oBe2XS?O@WB4V?82-bOnv`@m>m~ES-rDN>;nJ%x{-y~y;rl?zcOs+-V(0v zSUqe@I7Ls67UvQ#7(w6QDA>LKAEq^HKO4OwP}o0Fmz{T(p*1$rxY5CwIF#h#Ww&5@ z<>DVq9xXxlEj$JLvj#}q)XB_;M~bB~e}KTM28yaD(Ce?Baz*dGa9ouK6s`@Y`U=*p zmWu#!iw9h3`!&92mV@W=u|z@V2br7j!eXlISGXO00kmZ!KUN}^cX1_d6Z=*bu&~~7@4+@z|xiu?kKf=4s&X6BL z-a>9tIJzYalA%YFVZ_~R80|ZY3!L;72lzSP-wEn4QY;q2e6|qz1vBWfDUaat)D>vt zx{OA&29nG}T7t88gK*l!2N)ph!Sozd*^0d7OiAUm#oNtQg7Bb!NU3-jwmpag@vlSp zC%OtNvQi-OxDof(q7l@djAq75ha*#y#P_;WQPg8G@6LFRb(b=UZ%YIy$n#^?ONnSb zaw=Xh(dDvQuM1WEOD(RSJqo4%9eB`bDO>3tgONrq%qZ#`22YBIEfHeOQYR1cr%S=$ zT%e!V<&CQ3no?vOxd&9 zW9X}u3vno@9+e)Ia#I?o(zNrT^zlbYcqVkmINe%okpp(aSDYDtzr=2?oIrgB+M)SE z99*k?3di;JS)8pLyBVYg)>nMN`Yi#6!<0^TJ7^@SgOI#|4A9N=`REn z&V(wqfWpmPB=@T%$ePPiwcC?f*0Kel*yPT>_=vC~yLxJ|C6d~meGMybxU;l9n=r8; z8z)Y@j-wsNVft1lW_tJ*-gv!+J;_qWc(HmckgCPjyk`(SQ69hWF6s4I!_e_&IG!3V zDm> zACL{cOe9DtO-Y`>(gLpwOgF#9m<^{u@wqH5{qDiCLpzCu(;=3Q zWc!MTv8p&*CKqD{9_A8srRZ!HYgB_tez7=XS2esmun;4+S3_X$3>tD~buaO++NX6>N{ zTZ-&ZqC%WSH4Q7j=B&ZGJchyed!x`SpN~Cu8M1W_eYh?DJn=|f$xTU0L60@_~p)IrtT_5R~|Ix>o9S6 z`{WTE9WTwglsv1FPU3ox){{YnkF%luHD4>>Iu>R>0U43k zFzL`F+?8)mD}(w4o8=eaT#s|`>%wsi`FITS`*KKZ@_JfrU<=ukEns3^5O-M8ohnGU z;}5GiGWy*+bUv;FpTC6ChdP5?TmDOuy8Hl5I3^GMV}~G1hcHKtFgUUBDf*lP>ab27 zjrp~i)C2yU^sIfP=qv9&`ZSkS`st9l7FsO8`6Yz9dzLSgx1bw>(m`6KA2fbwF~_cI zwpX?c2OoEHtW)m)gc&NQ$~(kOv1|{s+`=-(d#7qUqU#3-TfFMzf7a`u}UaA%Lb-oYJ--%3Nsm_2^+FDk*D68 z^kBzCp^o`pJo_sXdeYKi+nP|?Tc*J@RxQU9hhJdxh|9dQ<~Zi*3FydiqRi#s5gMBB z$ec6PKrD0t6RygJrl=Hp-sU%i@cBpIo(SkKj{tVAqnc}u*-H%q0yr{oiH;FYrLo@c zaOgB27hPOV^fk5#W@rU5(>JHNrJ(^ZVb)nRSG*&Pn$}4kOfcnr(yrj<9*j@At?~H9 zpO~Mi3JY96lh?ZkVO_rt6a5lJORx2UyLcNoZ<)&6+x%JZ(_q+kM3h+@M6>f-Q_#XU zkkqNSlC5^1F=WOK9K8v+&8y|n`p#*bl%mgW9Fn9pXLG@rkGC%UeFr3Yex6i_Q|E9= ztmG2u$Z!APhn}&lFWVJfZFvDF(rchmcMS_!C=X$4s@cx~$~^7&!sh}bFs5OkGhUxI zC2ymF`^zBV^IH0J?H$~y?7*hET&DJq&VXo}5nefy&b_qW zOpFj=+d^fj%ktx}B89I&R3Mo{sNCOGi;E6S%uL0i{e z_B7mz&#(FkvCc`TdpaCLD%AMrK@S`nNW$g^m$*-DVszyA`f|$}UnaUpjy9L?gAY4& zs78=I^4=AU+N#5pHU5&p$S-Kzwt%*cP@!{iI@&LgXEVLMC`r4I9tMs~BVrBaZIkAr zyUqv_bk<>CWFfd;aiL+4dvSisA`lsGk2kM};>EQwd`*t8&|B*Qt?laI?>vzvHP?aN ztuD;k>5JroZG7&}TeS(0KjS`U^!^h3mY1cTBFV5(c^K8) zHJ;wOs?FwG-zNe$hTCedFs}+3E<93>Y5cjxuU|)T+>W;W) zvl9K}+eYLX$8!1;zX;L|71&I_2F&-qgg?`NagiDc*qGr0D}LKDGxaRcTs@ZU&tF8( zg*KBzo1Lih2XB~^5Q}drg&1*1xqNt}hCucGGLSmhip#{;A{W7r5myDXQ*Zmp#<60w zH~T(kFZu{Rml?2c-(;YZUne@uugPqTX(o?C=5Z74#o6S-Z0Jfcg0&;XSc|eD_oGme z-R8Y5KYc9e(Pm|w-OGD7j`9vhdk4)>*D5ItHT%R_AGR7B(V)%3cnXC12UM4%cR|98+RGZ#KiP^b_+mXsMkc}B+iM|I z?-nU2O@<9G>#+A`I0!6XkZOZqJl=YS{q?&9@e3xhSEY!{lYNQRlsGc^w*q!s7}5zp zcd-m>OO~KA0?Lp2fvVj@R7y(#wMFSc8?8Nl$8>VU)RZfaP?uU=SI+k-p6?F(KzhvD`qWcGw@G$6nomQ$(F4fOB-*z z!bO3exPKf&t5_Xo@B7DM!8Ag|eJAGsm0u)bDMGh`)HIYcnnPsOG%3D zeCiM!jnl4auu*wWI5{~t+$ViYfEEg@Y-gWvm(&aFKPL$b2W1S1`iAZC2lCQw;O?jx@HAprY8j|!Wdo1MFOHiki z6*%W<6OKEkL~?BPnZC_caCTh-?rHC!d8#jd_>swNYmJAT7KETyTZkH*1c&6~(f*Ye z^p#GAWukNG3AZ5F`04?qTst9HemffMkMZ^Jwwz}(ex-n2fg-3ZNn&Sx#OULvA(+g@ z(Cn%5RBc!QesV_e;+-{yuMyO4CI~0m{Kn5CKfvETaop$lq3Z_r!Fai5I%j_-5qsr6 z3jSQVf$gtCaXvl80tOb*Gv~g;!6m_%_r?xm`-ejjpRb|*TZPqKc*;!}77dr2#dmj;`E<_4MQq4GkYg~j_22>$~MyIjM2;>DT2m` zWs_M>W0@Q1u=A^Du+aXcFrI0noo^J;$te=-ZE}Fo^L(*GDH+d6#WHmbMT?rL#c(cc zAJ;jJcSQS1(_sY;v?f{ycFwsrTl}dAc{C~#R_@wJ+Pn%lentoNg(gh$@k&Tb*X8R_ zDKh=C-K_oL1!KSnfZZChy(C8Z8ak{ycFu=R+EnU;av_ooa({hkCLoU5K^w z7cip~H5PcwkO_1?V!%9xBlgc>mR;|#*v*{9@$Ubx+om(8slD)ZX*8WU(9OH#wcv(S zJHE5shAkDnU^!zzJH1Q;Fmb+{!9I(q$gK<~I@~#yhe3SALVo+0JOeKMU?}abhcL7jeY+8L>&6 zBdD2SMjD4@LeRMpbefYCrq9{J4E2k_d%7<7B+H7HPd-mr?mT*N_*tRS`cC3qtHAt} zZP}#NN^IOcLWp!4$-5ARvZC_r$Vx++)uG5f|2fAEe6%ISvy8#;Y&FhaIgZ6f9E6p= z5=25)1PAZRk*42s=)sQx<>zxpL6G%Vaw;SNbmtG}$Vo$bMkE%`?|%VJw{qcIj2_+M z9D=VhQaPXc8MJ-fR1D1Wr7slyiBz|dh4H4Hw4rhs+5P4sZo2yyhsreI#Jm&m_P!?` z7S~0yv!mIINs=^kT1)&RDVJJ--AO7l?J@=g^-8XR_H9K0*Rcw-G z!;VA|^#cEwu-GnuiEId?E&RAUQ{y@S=M-Gn_;!%!q?CE9No~fByf=6trefi$L%)o>7)V8RG3fA7Bxa&ZX{NmJA(21`_X;k zWIFhJGCjX^1?Q8y4;P&~1xae5%ugkV&QF{O<(BJc>&76g)rdla(UMefG?MFB=g8dt z%?TdKRW(YEA{#9CKuPD=p}ncYpEOk&i?r zeLWl3ah!-uQDuelqu4e)4NeEu;9+}BqcJ#mY-~W-l{&&Cq@7MqR{#tg+ zzuH#sKQ!@w?XM5~hvWZu_4XCr1 zD&5^52wuL2IG^j17{4X}Ebh$2tWCLSR`7_s>7FgrvexA$P4+@JcO85=ClA6$nV|5g z0QKDY+6~|=oMjtY9^H{6966?%xP0D&4r$@A!22@ZQXVc`JNY40oLW_G7l^QOTNv%` zeN7dX+Ok>IJ>Wd^IhZ(yBd0! zTI|;BHDq-B3qe9!KSTpIy-tCjYZ|ej_#lypE8&i($uhkq zvO=4rEQ}V6Wx^&2=-+aY9Qiy=puXh2@cle7ux$Z`9-_F`I0wCUmI>zN#Gu2+J7|(F z4{O|12)W|ViC$0R>nX^gc9{To_;|yY5%byQ%l9zRN`{?PS7rI^mc^S_CTuZCL;2z! zZhQPN7PvhZ=3g-;hm4=0xBC$JeCROO_}v3zq{b3^qiwimMi4!0x{*ayPG!#TB$?TY zBpfKIf~ulR)Ys4e>V|KkA?}B0e%W(wQ=~k4O`ilyM`T0Bf-30e$Eimud^m~F>txx7 z2!+a}v2}5~N>w4C6a{ zx!ZSph~)LD@a)bni~WPeEWeTG(sC=v^f!+&4nH?U>!?$*ZkyUhD7k=j#x16OXd6m`?>Lz z)6nIcs4(;u2wP^>Vp1N5?@BikooVZYJ5*0Wk(;%EERrH$@~(4+M6) zBYGb;<(R{-q8REMd5^0sJIPg$U=Y`8$ESOIiQhy`+$Rt$I6?Gj#mk;k1dRb~>WE12fZkI?<=l;GEu5RK~nVl4PcbCVc$+O86i{9MeyqW`l=B@sb12*Xc6y zL8Fm4jOMvwvk2^bYK|@!9EgVQeZls>d@U^lRiRd@CtMBA$L{1eTzrQM-hN{V!k5!v znZ_*IZGIjfUR+96iKdXBQ-jDXGf8gx(+qahzyP1un&aB+DXdJY2_*W)Q8zCIHvB+1 z*9cwZn{7A3!Z2J(@zo?=C-mOrR5RP8!9ii=@5&kVOB#O>i(5WbbIowsEX1E)x z#^0yol7GV1H=EJc#SLu)B51{Xc=z9F5(N6_@)^;LZB_RG2e)AE0gXmis~hmaMh64^ z%&7VB{pG`&c0%={R(eOXkZhjUi3;{ZWYxWReA_S=b3GlQ^zAwFnKQt-Ru1gKxb2wq zS08$Qx{%A`Kf_BGB~;iS&g`-q%6Fw@lUFh|=vp`l-4q4{Q{?<$hS)0R(fyVClKdFd zub4pY;l1#~|14c+)fSKG{SD7SoM8cC!f)b7=h+F%T#v)8Fz& z!vG5F>4EE-c=j6plJnYG?D z79u$oW*#s=s(p@r+v5VycFu+ulM?B~35&p=mB6Tf#u1&V!DR2S3iE0gOIW;hHq_~_ z;Maziv)n=%_OdS*p7D0_*m+X4#-fi*|Jeni=?QS<*m$UKn#&i7mBkhN)4*3+9S?pj z;nLsqa&FyL)F@#a5or|#3%5f|M4$-chG}BK+EQF$*9Pup8G@{a7s7TM5lsDJhR2>u zqSX8{&Lk5^bwC#MsGKKnx+RIZVJrzLeJ-%AD1++{O{n1UdA#{xKeuh7Bz)pIK&^Ak zeEH>JY}29T;3oHqREE9*uhssrDjmFcs4g~K@Djsy+uTM9$cGnZTw#*y;2H+W%!4%kG-;rAbXEMwShcJIms ze0y&X>t1uQeD zs8O0HX^=Eiy;tGB-(UB0zrW}CKkxfK&;PxD`}1+Fvxl?J+TXL*-utX`))w#T?9#D= zRtJfnNnTz;MndJ+VcXA-)}(m2rKBz2RzJ1%K(dv_wbETuEeDbkauPr5y0n(7wDQ-J zZYk)}dg9p8g9b^6Tek6Uqphd?je-2%3jR9yS3~NLR~^$VzytX&phw>exdUM zg6D|KyNWOT(~^GvwaCz-xoz_N%C#!<&oV^`$5wvwzxet3Oq=aDXZoM=`DM7Re11al zcey(L;?si1wBR}Z0W-waf68yKoVZadzZMhy<9P6s$Im1wZuC>`w)@a#*Pnl$FHW~w zh{T`SwX1eZ!!|yxr~O6#MG*MiuJu~`oztpEZ7@vtn={W(ocTq)`?gZ6R@;)0uxo4h z@1$*ZJ@uy%i_?nM>nTc%Y_&s0v4(e%2=rOx7wSF7C&=&TXd)q@CRX}(Vk#-wV#%%3 zm_!?Gm9tgM7GfoC|G&e&e~Q{>XRckv8F8A~LjLwEDVF};DPRL zzk1SY<}JPY+YlgOWnpE}uXmV#+c4X*P>_%a6W@>EQ2)T-1ucBq`u}VE5En%lObhgx zH}4m61`c`#WBlfZ`^^ap@Ch_9*E47tkHqB>20x+w*jx1B6* zFgkKVdC*!Tw)LyFvrg)^jD*Ke%`(T zK0n*FUQ0X~%n{E*0phd89S&IR7b>p%y(5DIgF}PE#?1-v4-O6btwZzt{HBXfX%X)q zC0n}mXNSa>{F6&~`h^D1`;GNKbn_RpR*6IXW`qa&g#HtW-TJ!yLgjzDdx3q$Vp>{Q ziscEk5+C-puxv?v``XyqSlZk6^XqMC`*(T&c!Adb{Q@>1Y?1fBS=%a__@eWE-PW+b z1M>@lf2jC*wco-1Q?2pt`xB>sLvQ{8FLATK)Z%|O?f<9M;+Mkz2i3w}tRjCLEW&)| z%=~Mp`0qGWOkTS5*96wO43PL|^P6nTG}pE?{@c9RS}bv_bGz+VXbg}`43 z{Dr_@2>gY>e^&&?jBt0B{N>GSk|82kP zpZQbY>bD^A*K+i~S|k2zuK&9~wM~oOcKf3|zg%VFqBc8s{bTiiIM*_cNdN8m=<-h| zsW`RqKiKN8yxb~Bn_Oc({@89wYksq5OL^OSf#xZHZ09w*CBG!7h5o|+?${E zQc^7pfBM{iCTYnPM!yauPW^PB|1GJuYS_Rse_p#yFWc^y zNB5S?E!1zJe>P6r8Md_hYn*Pu;a~0d_i*{Zi~{C?Nte>dZQv4$-;O8spdaGvnL2B6K(^>qK&?f%tjzjcj*0mI9bCqjxi=-l>_7Q`?E71n_ zlfXKcEpL*c_)irqchYCbeVqkwOm491%2Aw6dN+FOJ%PLF6wNyCkRe$;ZB($#!N3)Y zROT*6dwZ+}^$Yb7n=}-Y_Qv6eVKQ)k&`UnC){~d-qlRfR<1pj+9T;XLL(lgc(uN-W z@YTFkutweSS;2M$Rfqi4f{LsznHM<$YdvIQwBoq+iPG0ZN@m(JH{gWvh< z;5g>Jz+tpKlpDst_!tG0iZI5lpX!-m{%QVs@_c-rznhz~sw3Q3ZqBQ$9mPbc75v^I z>a@O09+o+jus-iDapMPC(U7Jy{FML`Smbhr_g9SPRE!f@)6P<`9H)j^(>l?cy#DN- zngtE%*2rxNyUrJG_{tx9ZbvTF^_ z5M1;06TeY^0&BOrf$cl72c=IYqmuD9P`X>rzRh=IYQy(J`y7+9#KWaQm|60h=2 z$;x=}M?O2%HJV=LJ!i7_`rxrIl4O#u2-C6`(4bwR{HNeiIC+2#UJ3Lpm3Dt&zhG_> z?lJAg90vtaNm>RA>?{LCyED)sB@8!ts*#KPcG{YE6q@QQal_4H?DIQa_+q~k2J7zS zRT`GEHKu0NbL?X_H!BwBhb==3uSRy_R+Au>e*$Cf$YZ-M3*bc2P8Pw;@b1S1{B|Y) z%szL)K;v`RbB2TG!;p$pu&(H=vSuaw^8)^g>B99-Ag zDj0Gq!Qs_*2d1a@gKdcK#Ln1fuv)i5?D_sRFOt^9A;)zn)GZrGZ#9nKC9p*EGWIPR zN&OT2$);v7KA&y|J02**f_3X?`ryt~ZruUb=Bz;l6LYkO_H1d=98Pz5JSIO_gqr(0 zGFA6pxFzQuEYglfseIzQPm0Ag8IAm+?*il+OX$lG8G7(Gk1N(lfT~4fd)Cpct4H(kWGFi1}LgYW`jM2w7f?Qj0`Toaj#yMJ^Im0aDGn)jmuvE z(FgXT$T^-X)sJUAPX#h<2}#_~r%~_0GjWjXHe6Y}iBiV+vh`8BxjRb+;VRF?l(cyw zJ2AHgCU-hU&6gU{<@|m$zbL?i7A0I{Vjfel$l@l<_ri^btZ~RS7aDp}g{~wfkj$eC z)UZfK#LXCtiS3+eM(J7HT`r*502xt_RqavpZWA1i{=h1~j>N#};W(^eE{&e|7P`MF z;7I)#nGf1Q*&AfgGq@u>U(ieF?0XLi&Z&^(BN;Hmheu;=N%NZ)iw_Sct&yQzmyMcCx@!`29I~5Lp6y2ZeQMc>lx=jP?i5sxIso@a zq@s82BZrFJK6GL96}T2Tn@m*ZQ>b(ntY$ziXFH*>UIfo}37Fw)8_;(Wpn=y}8oW1& z-Pafim3gjsxOxh`n;wMs1Fo@wAxX@4*$Rw4wvm4Lz2fUP+Oni4N0{_nd(xQef}2hx z)6(@W*#FsVTIq;5(!zn+_crEUZn?m9;5*{u(*pk6)N}}P4Z}5S0Ecq3;Xb@bVacRlq*0#j9Qy~ZRHP{{^4(Sfi&Xcr4t1&Qj;IGpjLU~erXiaCHml5DeF|SD3MqS6ysg6a7CCi)!R#qW&@D*+$zndc|`OF9A zm3)pn9lL_Z%Z@OA;v_Q6oKK3bEA5iphf>7wLG*S*7xca+r1e$qIKwTPdX6d+%xRZ| zAEk}(yT?$xvwSHw(>1o_X=hrtdK#0OQNzZp>qbpJ^GU6L4m|&;M2R!*vo0!A*x@rV z;B%!bE$~>wpUl<3?vDnc$08NsB`IzGRn-+(>-ZKEnv21tdlI@f?O|tf_A#4l%EGzn zgJ_~RhmEcoIAx-|@acV9(aQ{N(Xo!YqMkBhy9~*r^SYeie2O>OoGvEcEIHAbQQ9Ii z=>)d(TQzRw4p3hGR`x!>y@*oYU{r8Bw$a^|(w-QK__SX1{!n{S%Bz#uacwQ;jJiq} zrWgzDdu8Czqg!FV-xtzyH9~&$I(*u-gl;=(iA+`;q>r^~IN$a)6*VP5D?9X# z-Gq+nF%;^Zjjq;4ILgF?ebF0A@mo3c8{`5{<_@7sO^#|@d$X0RbZO|^2W3G=Qn|i2 zy(sqXBNnJ&#v7hU<9v!X(0L0JS~tr=Fw*rLs21knll!W)V#apv#M7go=`F*0?3JSF z6^sVe>A;!y9oYU-ZPY8zhVTWln7j2D7(~ZG&)AW$#BLRL)G`%1P8&&IMU8Ow(F__C zvxY5}0a{Y6g?h!kXyr~Jb9C^)xucersm8B@vgn>nMl*)eRlb64?j6n=Vqm4L4Y~}A zE0a-L%3!DX86-x5zVuV(ZX92U_iAjwW1@ncW}xqn)fM(TeF==CI^X zUB&Bf`JZ`OBHZFX|oM0oLiyvB)p+ z+_%$g2lX-JuCRpDk6A-;F`3})Ka?FiwTe_-q~KW%&#p(j<_A4bzytNp z7%e0R=;BDQnFsgJU zA5(CeRbH%S#1lH#Dz!xKPp?dRKcIAZlxqI7Q_}Y7#!)l`>SPh00pZrnqR9c2#yvPCO_)F0i zK{OrTCx@LCo7fr2Lu}^iOX$S(ar$jDws?mITansPxO=L#$V=-EFY)Xwi#an?^tStc zjC;R_QjNcm@!$!f9VZvlJJrrY`{$=P+wZ;U=Hw{RxJ9zUXKtN^uQq{j@RJi1GUpIw z+}MY~(hYdI!BlkSoHXq@_6mK6DqwZ{EqqLaG)=4Dhn*j7!(qcG;o@hMhhF7KQafk<2d9-COywuO93>60+UK8C9j$L zHsTRZdY_FAA9DEt;j&aZ_YjO3mPTXci!fp62mDf<2dU#$Q-@4tVK1vFc4OZtN-nrf z?b9|0V%0mL|N5@r5AO)(Gwo3V@N{3n~8gHSpKyi`~4}VX)Q?_U?8Pz3rS# zej&Q_v}7CgiOa_^(d$@x!e=%!JCcr!8j0cSi&@R-jZC?sKYrEw2Kzp0lBr@LSSf2! zjY1ABPZh6yKV71Bb)jVH-wz+3d&VX|X{O~J&*I)2R+OG_j=i2PExbS9R8-qJ1K+r9 z!N#JA1aa-jsLUEE6GM^Z zlA;F_Ua|+mP5hUN&uCk7lAV`6j8&$+MRq`FZJ&$JcO-IQHMM2ini|R??e3uDycDwT zGDwu4Z%YoHm7tH+dNyusB@SOY9&JbT#m=r5=w^cfzME8tcas%G5eIId+LNAWw$g;@ znP`cQPJYSPCRz%YKV_t!?F+1cClk|r8r`oanX5QZe|-%&RkDdTylr4h8eUTSZECDh zPLf<6n~ClQTqE6Xu_Soji*%l=i7xjXCd%O%?e>$v)TPl>CftoqU$5bST~nEa%SL(~ zI)hG~N`j$rQonms&(^oP}>m+oM?61R_x6VpWN zR*Kg^`<;XX7tRry7q7r`)BC}YxG|!*8y|6Smq$2u#1lO8qKO;=SCWeMR@64!OTOcL z$ZA!4m~w8JsE!{e3@&*reDU31$dz^wrkpJl9eGqPynOgPseV!cm5+~vYTvhu7Vlgq z%JAVt?oN+U6z3qCK6)w+^34?$r!Xq7RdgKU9we-btQU?wUx(f7cL~48G>f)%ULv$K zcNV2KZWJ!A?j_tQp?gebruMPpvu0w5?tNkM!(~_;5ie?m@HM2nUnDrOgWWN+e4}T1Aisqwnjv_o-cLEclJK-ZaUy+K)3)Krpf&CbL(E*MA zqWZ8rRQI}ow%G$kw+@C=MXdnGf0Pr&uAU^EowEq1tt+FQ)?GzcH(#R1^6@BO-`IqA=E#cj zBCk=+27%~qXHAqF>?d4zXB)2Gz8y0TD+yDMCZpHdN!Y2ft0-hwdr`;ymw59;9@&fB zMbTVuI>3(7LFG~O@#uQ^aKDO7Bo#zQqZhNQW1n)euXfV@&{P^9YmSCrG%?_CCcmUc z3Jg3d;i-uQU$QzM?sGTj?W!DH(k>rdoVw7Y84EGP+gvnWG@d3N{0tuJq_9Xo2Jb9g zK{>ajFfO1QIK@ke`aj!5YPNeZ-rA7fXIYbJcrDnUSxj#I-LcSm9Sb!Yh^fmviS|hq zvBRtEad*vPW)Zy+AFn>fO+4^`EWSrkyksWb8r7X*?Yo1mi7WR)(m*)ihmtV?GV&ti`n&k*t5kcuyu>#HTc|NatdA1}aZV{F;! zdP2$CZ0hZjfp+7i(dc6U7F}D-1j3(C1&}DgFQaX!YJV-Yd%hjJ$>*Z0=@JYVIm7;2skrQpA*G#4q}qHBa#d(2`uw^U zbvJ1XZ4|PZx7a5U(A1ZHywzfAlV;JDh$vCL@@&>GTUA6O41|pzy5SnFF(O?_DPbjx z#SXqZu>U|AVXa{%NSqJD8$PR1qo*OAG7yiCYl4K+`#2!0tD%>TorE1V($ONXJKamY z0Nb0?g(=VLaP^6uI5Dc8DV}@E&-tPu8nRGdRGuI!Tr_kdzH@a%_l#0@@2R9nYV{AM z@TQmW&}AU=CMV%l7)i&bG~t;{3B0#y8@Ua$7DaURz=uxDg%fY+W7W$eq*FUzG|g`! zNz5{b$3DBzWuLUDJa!9pvza2I4_$;Bb+%YP&6hOPw1sECs|q`Rm%{Z^tXc049@L@w zt3Z3z7^MVueNzseiH3exvd;`#*U6F3sgi$1`# zL1SQSr>QKkM4!9=g+tq8Gx;xyUzv9$;~gqw`2DY@0gjzU^WPyj4Gt#*;a8Y0agD_& zzh-B3tl;&6DWoNhRA5sD8+gky>+TZ)?7ZMX{R;BwC1Nww;;6^97`U$#38B8%K{|2( z9lBzOSL=Jg`oTubY`zS2Qm=+f-)q@aiNWx_Bo8DyFJZlFmXk_N6gz+FEetet#oN0t zg2UU5Z0r4~m|%XOS1h_*L-owhp9pei$ls`pO2}lfX67Gtt(m5T<-;2RgA; zm}}_7xxG6^^1Lc;n3;}uwsoMybDy|xFUsh=y^!_3F%KV>$FQkW-!s&RpabDc(eVOt zlT)L(h)ZVda#UAt(x7cLa*H|?eXK5<*?9q>QVi(s_N7hF3Zdde6kVD$2?G@LXzIr` zEF`KAyXu;P>nCo9d0WlN{(5g3xjUHoB}L+qfxB4T^<7}mQI-scs?nbJuV8kC4Evzz zfN>3bv1oEAesO;Z%#Iv=!| zL!&`!$bM-w%1+yYH%A`j%56R2k(Q;{&+5bcfAD+6L061Rg}%dYn?*bsH{cgH}yEDe)}oE>HP)X@1Yw05XGTE z95LnaCvbLc9z5wO4{puc+z}Odw6-1w&N~dqXqE!ZJNF(2C^fNB6C-edlmf4&B*6)$ zm}8aBC+@967H8AvCD*gk9HvfMDTw`k8q7L;j{W48c$z!SF_CPYgyggN2KnwmzwgA;yZ}J z1K!be;QS>@3rpf&YA2G-%}ne(_&pBq9|#%!h+GRVu`b;|L*^wZ8r(&XqSaSGQmGd1 zZJtQgDG%{pLL_y%w3qCBZZf4i8*sg{0X{6MVncSMuxlgR<5QC=&ino%dcS;|c>QZm zFFkf)>5JWDb?+cEmoLNxZ!+*jlJR`dB}n!D#=300%KQ#>qQ@~J z&P+#$vDlA-rlpfrS2H@-w;a~Qo8W5BoEaZT<)S+L;AG`abLZmU@kK*ULWkg7zF&WT zS`e@W9&J^G+m`w;=*4s{J3kE?mM4Sx`JQ-Z!ZgIq;k3EC6SU1{!2CoA^UI z=&-E^Q=4psv$6T{vj3VRVDZO=o+{r;-TlI$I$u0QMT#uDwfpTnL1=?gJ;iC z5EPxrCY)+t_HDBtzwdh~93Q1X3qCx7)x+c2!DKJY7(Si6O4Fe4_ByzFPZ4!}(pioA zcGyx8&o0>%F+E#J${0SIlKULz{6@s^GS*XQLwSl|eIIA&yFLp#80;nIVZ9-z`!yz~ zIhtKG)x^o~Pr|rr6~1HdOsI(lobGale?QtQkRdj=t32 zW-qI$+6B3ConS^~Bk%4lgC%!OaQxMyeBTKZam0CNrZd78r$tn-(LyIOt#9V|BL~@# z5N`dXs$oOt`wVC;NEAn7MT?W2-C!n45<$Ez$4Gu7s?F0QGz zk9Z0k7B0f_&J&rGj0fpAjAG`8`T@OB#3wb!`G)Ts*^Px)*~kd-SZQ{LlMS|FO{)je z`vcL~Ja{{GG-qalW#u|UyZrS z!l#IRd^^YB_v1*~@490=CrLx!d*egrm)wU^XRI3o6j+@E(L)Sq$+>j)T=^^5jOsww z`gn=QFGad}Cd*-JbRRbSpbDuM+tOu!cf6%u!Msj}Vob^pRLxBWm;C9%ae)VU%Z&x} zVOTOI`522%rg+lp(bAA+7*4C+cna2!+>aAam(if3OK?E9HF%+&8yos#B3ih`;%;ee zVZ67raF<;YPMXp~*t4=2d#1hPMOkn8^%5RJxybp#vF}7^dtQ~gf5{>15u@0}i_f@* zv|5@gbs4SJ4HjMQ;e?la-asww`NRb^QCdJDgu*=7(U`vJ;+LI;x>nw3lsw%mL;Ta1f|5WsBkryJk@Jh#%DQ_S-BEZ z{1-!q7cu>}Xq{XJmlCSZvU%j|pJ%fvZiZAB z9zw6gKJTq5)u3?S3kP@d;T~R(fqsv5@Y=VXFmOv9+Ypk*SZ7!Drrx!b9`)!7cv0gPcM-ZS_{i&3#wWfxDgX zn9!Z9bS8uONN4I^(w<)t{GIpMDE>y^kv2({n$TXaI?iZL5L5O##^OtBA=`Z%F5qhU zzQtO2vGE*g%z46g?{}u`xOLdC|4ep3dkGZ8?F2`Ue3s;>fHS+Ou}+gx>GS-LWzL0$ zIKZzfc^sdPl2!R|?!5!Oi#me0BZ}bk3MbOMcAcF+5rC?RXIb%VU6L@~MmdsQaoX9n zRN`(<){4(S!s9J(N~c(iVlC*}=90v^A`DzCq<6twp{fksa^a6|-_q;c^32()+lAA8eI|8$Y`foEXh|k4$23 zti##q?Q-npt3qJU`%{RG7fggloZY?l;`eSrf=eYzI6^cG)^?hKL47>I_*M_h%1)*I zmG$6lBA#E$y>R{$XE-$a5N-|hyt~nBG7YouqUF}asG?@zb=uz$P378SO8b^0{43~0lK={e;?6QJCT3IY))A|g6L#b{o zb?5^4VeF3SSzp*%KLwhxW(8{3bi~n8H`uE^vN$t(J&1Prz|4KF_~?-WL`bUBM6nlF z$J-d@>TH1SyXsh;%OrNAI-D&&(g0GCF8HSrV z&4h8zWi;YMD#)a`P(`CDlUSNkHfKx@?b|7Z2YaT0)oXcXviB`6-MT#Xk7xfZwVW_}$l>q?|TlkFiL$Sc4fjmd2;134&g%B9AR2NNe^K&g5(s zd*yooB%W2XVXpGDGxi-z>Y>k`&znhe%x*KQ>0)2rUQ28zup;Mc4Gb>z?=FGu-WHX`M(PS0BV3``Cjr7o8dIdkRxF-An)805Nc|nf z-=I7O%p4NMx;3Y>W1kKHei_2rdBwsOp&7g`QlJjgeW~*7WEj(M1V4=EM$(;Uv25iD zbSNbg6!XhSXPX7uoJ#!piQ}-{IDU1qV+F^RQG_WsL>P*Kj z9df8gzhX#!bPn!4u7s$ejc~%!6Xos@?9bZ|YTF|qGD{x^rzYd-#$8mUo(LVnoN=kI z1mAAlI+7V~0^LKxkn)c*NwH7=na)%8req(#$I26y9|#ewT=$aAKI4RH^_qC~AxBTo zJ!J6NfLUwzWNM=&XeXyYOM+sdPPP|nUY$c<6-MJkr_m(r(1RBA{0K%>D(K{q%S4(D ztos0UR(-9CNhhrr=$;QjhcPqow6L1(*|-rB5830wM^P;G^Bh``q)t{d-?Q~uO-xNN znfuzl2->?8p|bS@_+m7S>$RjCDy8^S!Ir5sD6KCS5G(#xG^romQa;MNYdYdKrwKGO zHxq@y>Qu2ZgIf|jgElq9QR9m=cA?oBeV*7-!Ga7Z93p=ATltJT<k%HLNox5sy2(Xar#DYpNBk;zn?_kg>k7lvxXrMS*p z5?F$NXKD_Pf?k#vxwHAbsLCb`O!sMHhYe1G#82J8xr;piRB43x8?`8G&{xNKJPi%nf2ay zXo?QsXGtzt?dVRo>kMh&VMjRsup32(hp<3pJ>31mg;$+c%jOU5OO`iBm#vmfgX&&4 zc`e%+WFOTP@?yPVW4t`?vg!;dEj|Ztv$XKcNPFye@(5o)YBFVgk;QHU_Q12IT$VY- zh?x)7W=@Lhn9ZZfc)74WJzMjQOaG(^?kV>K>qAZ0r+5kUke8&;(!FK*8x`0Lx3z+X z)Y+_VnmYFI9|Rc&;`PWqFD7+XyymJNL&npdv&a1k;NUu44;cuQfnjW-wR z$#WUwRk2+`4AT!h&fU&VXQm$4z%I=akL^ffc{eR!^7tYA#+o3UQzHwzjd*@QYBz3a zuNc@c?FocU%7(5-Tv+>+JDBnSd%mam-gm!nf<@QeWW)11G9|lS?4;N>AC7L1^OY;@ zxROkMUD#&$(8r&toZBeqB=wQ?3-7`rRXdCH^JA0o zc2*X=3_i#iPkh8A*PHXVzB|*~lys2QN`xEc7a+S^yuj%oV?L*(*a6thj^_1*2FtZD zT$IddrN)4(&mflVlnTrDJQd9Azfa)4{t7$0AO&*Q9%Stj-*H7JKf~3pE4dzuTljAe z#+6MivE%gm&1V_O2~f+{vfI^T;CR?2&fIfUna!dX5cD*U?Hk*b`(_ab0-+2O>BaM# zotKuazB^5@Tu=x-g_HQrA6IgjPjB;H(&Gf@pGUHz1xp}HyFI_E@F|>nyB(GdixO10 z7c<|~t8DS1dxFm!oOsXXG0f}c6y`4U;s!)G!~G+jz{9%{0v1OzpSl>nXu1yDd(o0R zTss+LrXmdglE$xecnE4TA?#Ga4emrrHVnVBi{+@R@!w~h=7aUtGZG?;-$VIT3o6*s~1b8T;Yh+9Z9?fW~co&1x@N!^)o9 z9L_Yx@+lL?(smmqvQKPJW8-IY!alUlA5I_fNd<&GD3STOEg5tmQ_JxXAi$o(|Hcy(wPWfaYpe zv0SH8*wEO!bb0sBE~iH$yMhdwf%SYr9udcPVHvTo}}X$om^)1eMDJ9`~%2X zD@&nUXW^L-^`P(46%Wqw=4IuhX@Jjgyl=1A<+is| zfGBaC!5E`x7WVudb2^(1`D?E*o1p>hLBj;%H$P(eOLUJ`j~u4EWu$*Kolf>YVz zHR$~He3wQq{`=QUYPy!0$1VZ4t_RYixL%bibmR z#e0Ib#W4P7W7*qcdVh~a|M$dT|CF)K?%QIo+i0tte~iNR?%Ss=rn6}Zv5H!A`{TkzAZNM?}-0(^sj)xKbxoCx9%y?Hc$N- z7Iq$;sp;(x{_&CGvS)AZf`k1<&fKDc`ByiAUvL))TtN^mUh52aSiw#^mvVBW`$6*U zhv0WBk275VkUeD=;jF#_?;w)mJ~luRAgPD=+TNMK&G%Airni>>nvs+0w(4zQ z#gXfn%D5F}9eS#>NckzuD)k`j486?yuFgf7uODI0l^vutqKyBrVkJgx---5}rCE>B zZj3k5V@8$|q7!2$;H0`}SkHaoHocG%g$Z(5o}4lEk?t(8d7{JR3N>lt^_j>5PokQM zDR22>C!hbYnUy)7=F;P`(6OY9JatX+`Is2&<620;tCr)+05kmFWI&_doPme7?Q#8_ z9BMyn3xpiGKuv*iY?Z@@vNIobNq+cE*jTB>(|frTwyuBMo`Zg054Xwj7yTmwzwhPZ zHtUb|zvtSX7q+$fGk&lCSIz(9bL#&oKbYy%7L5OU`@#O~`O|KDOE22=>0ecE{#E<^ z`@GTS-`f1!o`x-cqrd;J8`u9NU~T@b-}g}b-{ar1`pv&(_3!X+{o8x$b;)b#X#UTC zs3lInZ$l}MPqQ)(0bn)52 z#x97Wc9rj7N5&&|bA~Nw553CLYaepWn+y2d_wSgUq6v*wmWA?i6$}->+clEzg7LHZ zB9^kcDj58md%($L)*LHB&~XO^4KmY4tfKFwN2US>8oJ#jGN${_<)OGoygS7 z50aPE^RbyL`R#SyIM5xS?8j`fdi|W0Ej-FhJ>PH|&9W$YbUW)+@`V@fu3~&eIPRDb zz}`0AWv47OaZs2mb=y(^n%3vpff0_l%vk*Hcybjh3M_;xKUR|bxIkLqmw?JWjWN%` zn(ckC9iqFvX4{6pV|iQM_yJ{ZY*~I699UY!&W^RiAdJR`R~zBkxfEEpwveeAS!0&f zJe)SwJiiMH-BK? zw!h^&M7d#swH%`67}z`E6x-$>g{mW~*r}1506iwq(^Vnx*q}c%Yh1;zKI6d#iuc0U za;yVNs5!FDV-xsQsWvqBn;LA+SD7;&%snE2JwD}y z4uL!Qox&cVwM34ztQtY{>UF+o-F5aQaX8$r*M_H}-S9dt8gDK)BQLX;@OrEoZ5R>H z`i`xG-3tijsVh@_z(eK|y$ritt>TT_-)GP5gPD1#Jo|QI9CDw{xO3a9LHXhY_|#R7 zE{_(V^Hg0>(#_*uh+{C{CBbV=QF?ojYNV+jDoox9Al1_QgGrA3uXlsJO@1I#@9)S3}4hCW~j&E;8Lr zRqPe1hxX?*Na*B+sXa94T~i#yCTEKG4j9aAhCgMsd#A&Mb3DJ%dRN)~&%H5wp8;xQ zKNnniRz=GlB)LKt6$rVW&OC?ea{c9t!6w<06&0Rfr|z4wm&0@6k>LT8x}+25 zZucBmqa7<9HUYZD-eb!x;~?#965W}U$m)lj;!T?3Ve;I1nE9qN_{L_llpjyo_vMn9 z>-qu?boPrdX_?uV%TWv|J9gu2zG(i9h##?=rSHTAsQqT;}I`%FvW02g)Lsyyj&z_k;WU zT2`pGpEfK4OX-mPcj75bo7q847* zs|mT&f56P3I%ew71;0G6<4aR7b5CC?;HA(q=$ul?B}#RmQ?fqf=lPyH6S-Kx=hztpEk;xE?~?!!FpkKY?LWBg(<jG0?hc7!(%VMRU8aB_n4{B-w^Vxa^(~zK{yT z^9kkj(d7`9@^K3>zWEkrns?Fo$}S`yXTkhTKjP!-fsLZcSikf;Z)3FtnXBgyIthkk zf4~CVa`ioUp8JS1zji}wk|dQ{Fo5UAtbn40yV(wtTfCl|>M;532YhH7z=A?EuuyOv zi^s__8SiP#bgC!GSX9fG+?5S0#By;kv4Z`uxeLZhXKCkh9Xg>(hdkeC2ma?a5+|ns zakc<$bp+RFw4xXQ+j_16b7Py)q2(ny z3yHwKE34@ET`g$0rVJX_T7gz|cFE?}P|{>{h~;ZU!?D7%U|m~6mae!7>(*6)>@x*& z%=j{fZ1%>p4&zaDf(p4mMS^TyuPiyVSd@fVJY(Od*J8s*2X^jq9f}_F$EDvr*@O6YJoA1( z)Y{DC3c?@aaS<`lO$kMd%ong>y&_q7q93e(T|l2q54QSbH>9Smr_HAfz$h&MXJskD z>BMXrE}F#u*v;^g(-6(#WYv3pS2g!>}?nad$*G}6UB({;l1p#g%lBsHO1K#*03PqsX(tMOzdkd z>D7xsHuYPu39UA8f6*J<6gZC^kTb-cv)<6}3LD|x;pJraTtgyx;RZ?HV$8PDHuO0< z4Cmql@R5NG`DyfyPFIv5Bs<2RmxG z1D;0gvuOiZZf%EyoBY|5gMR>DpMf&>CX6--CKuM`^2}2{!$xI&+VkoyDt3Osrsi&1 zRQ3#7jUR!sPYSF(R0d-+g-LwBKD3s^LbuZjoS-Ak;txCE(9t;Db5j$$eIuyQkwInV;C4_^VdOoR=EFDBv+S=>A|Z&n}B$YTe_Lde9uFg@un+Fh9dLoMA< zrgnyXees*x#l_H3*8=%Xk%9Q=dI5y?ZYKr$Bgx#M8r-+2flIzt2VKw7pp0LDtAm2E zLb4oR3~9r{*hMh#TA3M?%i!qS&YZN$1K9d;D%lZYPI4cNXTpJ=WOP*>x40kC>eWdy zx_u&3ENz-^%Re)u+_X?ZSna~@CS~GZRttISHv$5q2GE|cl>8}u z1gGX$(TtG4C~x$ZlW=R{y6_Wtis&+@U80=7*K5r5Nwtn&{SN=0-^UY|6UVK6l~Cz_ zo>)n=VDdd#>`7e?ZchVXgx`BSs&Ew){kk*%Jr=9ZwI%d_Zjb44qKOjcS@6L>m~ zO`q$EGW~BrGIJU;IX{~D4i&?Uz$+|x(p8e@YD1g{EXn8)OCo#!5)@C*hf?`<>`c;1 z*t}@Sdg_HKq~1-2SWle6zV*anj9WVzFMkFV>T{Tz3XgbXe4`H!3b7LXG%(J0q3&Il ztfICVw`kOp$HRd{>AO0AtxY7HimW0-2GhwvZ5y0Dd>w;hMljXxiMS_b1L^Vh!lG0k z9G)r8h9rOB+zWzpw2l}tg*6g0-&0SBU13fJ?B+6$eHYm}q!7K_2}HgHu)g9Q zZqpUaa;&j4c|^?oBetHkQ0EpSwD39Zk5OB+%~G3(Qj zBxw3R=rkWQGtbP1c$vNi$J?Q(IBG9FIZg^c^(d2+HeF_ODVjCzJd6_d%_wX$lbD&# zWl9Elkl^Z14qmY%ZMVHiT+Mto-Yb`yOid;CK20It+CoUNS&H?nU)#X-l_OD%kb{&m zKUj1=7sK|hAtO5EneVuK@UA$_EYerA#C7W+KGA~=dEUYsJH6p!%vBh1Z8}|C-Umau zhw&*t1$6lm)ccb((Kx(>Jjf2GRS(CY-0WLWF>L}?^1B7=G#N;~v<9B~-ozv>fZH3r zg_Vcq!t|&+;IZsDO#VEIWVM}!^G_eb(I>^2HqS{gF2BT`Qx%E)qh}y>iw`S**g;yi zBb(6RSE7|AF!EO_gShQTvh!de{#i1WghrX6o>vIZ%=-pdhTo6TZ9>wO=zK`RRp_F~Xf#=$+=z+v3QE{ng0||3vcE%aj!TN@WK{rZOLUH|)wP zWNi_0#NFPQEDn|jk>Md6H8O$x9#kw1H~T>s9t~$xQ>Vg!XdY8Fe}Q)2T}joBWklzI z19_-7g5-L+aRpABnB|yL#BA(qlwZFI){QA8CDS@_sx5_b$Ezr_a0?k5sRrtGF#PTnE*z<;-N()7|oAMYkPvD)g@g##G4?(>p3J2Q9 zv6JP|@TYwQTkSChRmc6t?92hWsi2crd-n?59kOLITfSh4E$T9{6LyJhpgJ2m1hvnJg#R@ceN21tV4V%wvuzf)c%?lHw!eX1 z0dHWjh9B%aZ^nGy>cWGtE{uIUz#Y_#=a=0thP~UyvfE9c@OZ-rNShzQ9&2TTTArVP zlX?dKnC>J$#M)s>xh$LOcmhPuzlWTlgP5EWLxVbhfzZ!B*s`)3`hF^~@8i>GnPoG` zX6X>E4-%-|62_INz5=IRXX*MX1mDg(Xdyin+a}LOp@F3!C0N6L5xxWKW@g}dU0b}o z3q#-4Zvs#?p8Xor+8C3rTV!>0b!CStvtaAsB*T$Fr>!E!tjKgX4%&f$Rj6a~I9 zUm@Y~8#rZWgu2Gs%#V~)-2y2V?s|&us}VsNcUkJ7H;Sa|tFUA4672G5e-fp>1@u;f)f&|T2yP0j=kV*|C?xKXi zzqDSEVe!4B5syX1!@(;dq;z8*UU!~Lvt?6Y>7)QuKNrCtdE*!NDa!}Fn;r2O?;P4q zYKLP7b;w$;PBi~|jXID2PET+BjnnNUxenqc+ zm77TM4k;E~Kbm_sP6ewjU!s~v?cu|09vit~3t8-a5sGFjV2t)<{*?vdM4f!*F5OUr z>6M+-#K#6hB&ikqP*BI*y*d_C zC9k7myTChr!-AdJD$2%0>tNJNEp}7uDb$@A!F=0{$nz1~`062r+&wlKwhtlBbjw7O z`^so$7LLvj)5yhe8Pat(iCg@^pA_vGpi?JT!BGQYe%_mzT=Gg$rnWr_L{(B?@~{=e z3`}Jj^%IDWyAUrz=n8OiQczAT5l-AZO{?pqXh7E+&V1c-e0?Dnotz4ZoqGri6!6N3 zwjVnpy$V?R5KR$p1=g{M-99^&JW*F-YnJt)*Cq?nK5Y~!wzXyVHrtUqQoTsu-G=AZ z>u`O{YVi3hNs8^yaP4I4DZLEPR#GIdg||VH`v|7pA`70v zFQECRDB0&ULMdeK5DccUNaa!Q#BVdB1H*xD6LWxy+6owgWL#z1f zSR(5}pBM;yx0>VWsAF}wYvWTW5P0BauD!*mgM%RP_%1kkK8E|=xo}jW4xBRDF(EjL zmiNtvF|{YS;~#Fpn#bPodHYhZI6IvU9hc?&|H!b}p||N;`*Pl{WqTn+^8_rk>Ftw^vHAzw;hbNi7`p zu>j`zkt5rW!FivX-0U~%MD6lPF2`7eEj$)SS8dPa9gwzwh{`_dSSJPf{qYcL+`!v@ zluz}YoJr<^b=WVrpFOxciQHUZLWGng*y7wB_{A>;4L>N7;omMOYiU7s7p;bUrOEiU zTp84Qaxia@L5*%Bn7oUCU{!&4cbYEqtXP9>itE8EONvad{erS%bs4`V7RhZR)ONcD zQRNZr%u-|4l5NO>o4v`w5l&FkGzFS(9fx|^GqCVU1PK|P2sawWljLAOC=lFN=#axwB+;EkcFS@TYLh|(_w`r;@+4XGeIDl_G1i>eO<0b^v$QiC$&xBJ+lrMkB#T*W=XQATV&Ad*jYB1C`Q(J zC_&Zfs1m~$%W=7FJ`Vk0=&rhqWT*eeSyR=>tfrq3z4#G)SGmMb(MqH4`|Du2lz_E= zwg+a{1j1r@O)RhU{Y0GYXM6edSmaT@I-VM$s$?MR+aI~_aF@?9go znyY~GV-|svdo-D(e1sphV-~B0a9Az#ntMEH6`Ht2qUu&zl3Klx^dJ69cXXWQrmqlY z)1qaVhZc`Le&ENZpP(>uc^L>lhyewWGmvenkNPiPU`g>h{Pv@Q3;7ev#SMv)%{kI6 zVVxhG^$3Gm8!yA|8*!Ze1#zzldvO_Rwbna{LhaUAIP z#)4>>6I(1~gugFc!TsEKGJSdg*Zs>wKuNj=>C>N++r`4n?e}i(iMk{zNM~~|H`PP# z)_Ls57q@h-WsXpBI+(3a-2`V}(KY;8Lm$yFzAh#a$NA zf4mZPYLG66rmj^gz`f9BC)rGU~+=a&zQ*nx~9NR!%(9k&?OPJcvnZAyWojiE;ISPN)eF49YmB?AXrbm0OLP^;zoN{q5aT#%qP8yg+)@^u& z%3TYYpO`J%zNP{%E;e8lA3yQ(r$6K#g!y8e&LX@MoPhlX0ibvykf~gZLbDBd@M^pi zF;agI=?i68(10#W)oMe(Y0C(2c{n$DRW|6@rGlOGR#>uTF?mr&QRj&^*{*kj&2P0w z@xdw#uvkx)K3f7!e?npLnjK6;bPk)^t4~bwC!>6G7mnq1qiAXl*A_j*rOO^?8qbbE ztg|VnB=?qAGx{3;uft`$c0L^LO_Ra(TZi$n{{viKnt%re`6yd58`jpWfkny&#CY-} zUS8f;TmF^z4r3GNuahsG4iJBHwOsl@!cpBRSGvtBa6%2Mp$oWWA;?5Istl6kgS!H7|O& z^Nv6^zq!f<%=rNQ+kKhJ*%(;m*oj+~E+D%G^tDDDu<4bR(JaDPK8nYhxG&EX&C zA3v$Wd{rC3Lq#8=E9Q~AMk*ysx;BD#|9vcyXkoGEv++;J35*e!Vj+F;_-ot%w$GMg z9c}`hj-op4JmwD@vQ5EP=NNbES`f!yHjA;Nt=rTp=Y8r4xAj#_AW|<@xlvn$C1bMgjzd_`!&($e_Fx&tQ=j|;KGdVr;wcU z&tZLu3NgHF!At~9^zR`t5G3&p4;??r(haVl#>`+?=-|VpKCQu?7Z0#=$V5=TjOGp% zTA^X@5YnyJ!L;E$)S6k4;cZI!m~3ninHc0*^%bTVbS4lB*%Smmml zWb^g;aNJ)EM^sj^uUBFF?#j)%~Ig+RbI&k+Y=H$;L zDoz{7>d}VW9nsyGE^SXvS6i~bd23i!_z&!<&4QTFgETK75N|dK=F>^*N&J^PSQupi zAI>@AXptn0HR`|;*SW+o_zZL|ONL$ZzksTcHR%|%V4rM)@sYYeH@~rvt-3M;4F!DI zgqJ?-;Mmb*erE{yTZ-WMxhqItV-b$st_Afz3as=+Att1J=iX%e!56Z}QRdt?@cy=( z1PXcMVE+a#=A0p`3<#wUExNgN@?gXf5`vd{Yg-P$1ZqyWrczS(*V9kwGRv$ka z{PX45hqu+-ft^QDY2qZZ)_oah#LQr`9vQO+e{X2e+sL-;lO`gsj^V0fm)KL~->AJ( zhIM#m!0P2akoUlpjhtCXoF|VbvtJq!(%a2-v>9W=tZJBcDu=gLt_T0NOY+5)CbRHo zttj_C0>>VngiADEqRi)|@Q99LOA>V;sLz1?-Z7hOm6C_edFDjMFA%O`H9o!k4X-Kw z;1+4B!@3hQp#4o2ZfdGStX;>h51X=E2c%&fp)g{sI%e;3B9_FRc~ysS{+CCQ6bWUv zYT1pFU7Ar;tVqBVTG$7JVu>{G_8l~Ja-yMWeyrlo6?`3TOe)$0T9rgiW@Tu@PRua} zAsaPv`$H-3=#(im`sEfD^5S>NJEda!_o)GQ_HYnft58R|#pU=}!i(;4UPHRYw7E)X z;j+Ta@WEsaqIcO0eRitz|90;KxGE2M8_&={e@W(RBgX30CbP0}?obeH%^t7qg_bXg zwAQ)+XJ0F!WY8P6`0Lq?Mhh6TmIt4+pHZebi&TD_4TpR$!@IZfuxzm&UfC?oPD^>B zT6`(SiJOrt0+#mI18p?TU!QrU?EwD%Aa0koDIHnv4sR#qb8(>yF=7@2Nk3JT{2GGP zU?jP-HTVgw zb<5ynSPuO<&;(C3C2RhRC=#$SOfC3Ob7`eh@uJz!i;R2jMpH9?m6 zZHy)7z;~uVb_CeI2EOOu0-j^MtlM_G<` z2C*2FWRGsXqw5G)wf*BnWJ38n?~H89)#|r1=^?1 z87y0NI>x(f!*O9l#ibVKQ3on8%5*1uuq)%Ii@Fmb3sI<-Hei1yoZ)F%e8y*nmDF+7 zXyy)i{Q9SBQ2m4}G`EJb)%Ja8n`nw(=Bg3x9$U6cJs7&z3XvP@G->#?77B)1tZ;7? z*FV}1RAVHW_17@?cHEH|G@C$J`djevm`uKDeT1ds19{8FE2H2Ck^8HvaGd`<_?gy; z`tBFl%Dc8;{p>z954l+4xOY9;f0BoV2PTl|UYC$aB3^S3rJ>DPXg%!@*Bu}P<~CjM z@qrHCx-*>HELI2F_u`;*kt}SetAdMUKIW?E;DMrb#nlI_$kbVxu>VCDOjzB<{oQvB zc#7`KUGyx|D@=l`hr)SZO^z__B?Y z*eTDex%(W-T841#V@Wpan?K2EsKygQeq?2w4t@8$7E?BSKyk6(*jqM>msTsrcOW{@ zZy85N|MG`dRzgfKFCCS&1KFKqN$&am-=NlU3#H91rlRhxZb2+tND^8YY zZ^t2#>o|GQQP61k0lRhA<4&QIIC!80^sUC!c@sRSRrMG)G@Y2X-y>0cdFD z;i9Vs#LMq1_svv`#L1@e8V3C6(@*a)dg?S*JEj~X_J`2G=o>JKo#d+GCD_ts``|*3 z1{1Cx2frfU^CQnBaNC=UxnC{|+4;gR)Ye4><4ylkVfGf9xSJ4E(Zy}HNaOFF5CgJ% zga!LC=dn3XnP^Hbf}q2~B>lS>E{#+szG#NS)nQPtGLC$*yoIyVOGxYPBF;rW9UZp$ z6XzCj>^K+1|FB7c=|$FX&&2M+qDNQh9>XLocb>r}gjtfGhwNDAp|z~j))*Ie3&T6N ziC}ai64y5z$A%rsWDy%j4yd>D?>c-%-va^AB%x7!tssR8jpgGsuhyb6iTB*6ju+_d zohhhW`{RZelSssnJaY=E$9bRiX_kQN>Yi*$jgnjOT4p1!s!D_!KQ@6}t?N)}9%`-W zn~t6CdIzJIo#Prk#mMWp6|}2E9G$Dwq57Z(=vwO# z=c7BwSo7b|{yiFpD=CKWPsGz6rbI;Al{{U21U01utgd?=n77e~T|GUQcp86z^f7-R zP~!xC>WZXe49|c_vVh58<-*cR^NE)4D~za>0{h_tnmKS9XG{$d)bLN^qXsm4kG~lL&UN`4qbxFp^|kUrk>1KPK;wS+m4F!Q^{U1idf%1)ZC|K>vU} ztBe(7Cao@l+ec#IPEIOT=^8Ni6m`<6o{NDeZb8$}h45aDV%D`$EK8vQ)3!!CZt@CnrVq`;hy9|y^FZCGig&~cK)19 zCtvyijVC9OY5bGu{?rF*M{1+L(W z=WNCCs#jqkVGNaXI7{CbO~yk>zBDFDf_M3VFF7?<2Oo8bqIJ(4Txc;Jgf0C`N@g2y zljlCAD;1kL%ZG7<>$Ss3^J%=pHA?W7oWn0MlshgKiF?Q<9L_9&s<(0EO=2$nc&rk# zJhN!S^K_n4+#GJ~(H72NO8^#Zr)Y6hjwKa6X03K%a4z|jz>7MO6IpYOujJx_$LB7= z8Y4TlwYh@n_MPUI?7c|4o9}UnUD3F^VHMp|Z^B(nI6|Mz6o9&&?!l_%KjBYC9L#RN zYh4v?NYg-`4yGx9jPyiK^Zh029Gk)NU?rNUtj58M5!`;$PVg~G;DsOgNwYpTS-Z3? zg~eXq`929x=$fc&g1T@#ek!QseV#Ur|KQ3hw0(IwyGr>tewHimFh{V44z7h%mw15ja;0*T{`@Kt6yvimDbyxx4}B#gwl_&#l- z)bN13);!IPRCj=i-_^YSO;Io^O@-eZt_IqLp|rz20`KVMVETo2^5t?3JY9Vd|19#y ze&6HtmEsQ@>64qOYgBztypLsor|4@tsLjr%@tw?z1&|7Y7drk;~zYMq=IfwxQixhn!>HLAl9+|1WtTy58j5=oZE;j93_>?ISIIW z>fL^v|BwR5iJoMwZ7bkFksVobVKp21#D!$3yy8r4FOtgC-z6D6mB3cL1F!BG^vj=3 zsO5eFE9ZQMLp$g3ss_ga+x3)J{?G{BdM1&&O$w;tRD})!@@$`PCCpuYk3Mv|K<o_$4)y(E0?*l;yt~{i$4wJ zO?6!1T0w5hmzCW5oxi|y)?r9JX%TXDaUE57VqXV=ic^2fpuHkKwmWxGagC z+~csjocZnXygTeYJ=1ZAOAoLGX>mJp+;SHls(Hvs*6l^NnVMYm*=^i4ol_W}BBiMb>Oj^+iJ9yxoN)Ont+V!oYcZX$cJL2>&ck|I?xBS3 z+K=FlK$BCr${e&GtMlCVtfb+uhhSOsQaJG&IiH>18NgrVpi}YEaWYPoSfVp_BIc^V;mLa~Tsh!QoMF;J*QI CDL9`1 literal 0 HcmV?d00001 diff --git a/bots/models/600_Dweller_model.h5 b/bots/models/600_Dweller_model.h5 index b4108b7a399c8aa42a9d2469b69936c313fe4980..67a35836f6cb6a98068f4137a3bcc3f4d5a8f8e6 100644 GIT binary patch literal 45580 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 OO$hsRN0|Ct8~+P%fu+g- literal 45580 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

0=;JJhT2B(oC)DcV?9L@1m!yb6 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 Date: Fri, 30 Aug 2019 20:18:22 +0100 Subject: [PATCH 63/76] Delete models Why am I commiting them? --- bots/learner/learner.py | 13 +++++++------ bots/models/1200_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/1800_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/2400_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/3000_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/3480_Dweller_model_old.h5 | Bin 45580 -> 0 bytes bots/models/3601_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/3602_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/models/600_Dweller_model.h5 | Bin 45580 -> 0 bytes bots/runner/runner.py | 2 +- 10 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 bots/models/1200_Dweller_model.h5 delete mode 100644 bots/models/1800_Dweller_model.h5 delete mode 100644 bots/models/2400_Dweller_model.h5 delete mode 100644 bots/models/3000_Dweller_model.h5 delete mode 100644 bots/models/3480_Dweller_model_old.h5 delete mode 100644 bots/models/3601_Dweller_model.h5 delete mode 100644 bots/models/3602_Dweller_model.h5 delete mode 100644 bots/models/600_Dweller_model.h5 diff --git a/bots/learner/learner.py b/bots/learner/learner.py index c27fe32..14ccf97 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -24,9 +24,10 @@ def initialize_agent(self): self.state_set = False # Variables - self.epochs = 20 - self.steps_used = 0.25 - self.training_steps = 10 + self.epochs = 30 + self.steps_used = None + self.training_steps = None + self.update_training_params() self.play_on_own = False self.save_time = 600 @@ -148,6 +149,6 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.get_ball_prediction_struct = self.get_ball_prediction_struct self.teacher.send_quick_chat = self.send_quick_chat - def update_training_params(self, time: float): - self.training_steps = min(500, max(5, time // 5)) - self.steps_used = max(0.15, 1 / max(1, time / 300)) + def update_training_params(self, time: float = 0): + self.training_steps = min(400, max(10, time // 5)) + self.steps_used = max(0.1, 1 / max(1, time / 250)) diff --git a/bots/models/1200_Dweller_model.h5 b/bots/models/1200_Dweller_model.h5 deleted file mode 100644 index 1364be782946917c9dc0646dffb8e633ac1e8041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45580 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 diff --git a/bots/models/3000_Dweller_model.h5 b/bots/models/3000_Dweller_model.h5 deleted file mode 100644 index 53699b26318744ea2421f3bc323a9d5c06f78e9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45580 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

*7abqsm5fP-|vfhYcbp95SqH$`wgwLMlirx`Um| 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�-8-KR%6sHz~L2 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 br68{}&RomNjPse=%exF7&M%fqGy6XPKbbcI diff --git a/bots/models/3602_Dweller_model.h5 b/bots/models/3602_Dweller_model.h5 deleted file mode 100644 index 762155cc30cf20e27dbccfa06c494ed63a378225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45580 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 CDL9`1 diff --git a/bots/models/600_Dweller_model.h5 b/bots/models/600_Dweller_model.h5 deleted file mode 100644 index 67a35836f6cb6a98068f4137a3bcc3f4d5a8f8e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45580 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 OO$hsRN0|Ct8~+P%fu+g- diff --git a/bots/runner/runner.py b/bots/runner/runner.py index 27a2dbd..8c21ec7 100644 --- a/bots/runner/runner.py +++ b/bots/runner/runner.py @@ -21,7 +21,7 @@ def initialize_agent(self): from tensorflow.keras import layers # Network - model_name = '3480_Dweller_model_old.h5' + model_name = '3602_Dweller_model.h5' self.model = tf.keras.models.load_model(model_path + model_name) print('[' + self.name + '] Loaded model: ' + str(model_path + model_name).replace('\\', '/')) From 9dce6756b6998df931d79559ac66f0e7386b3536 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 30 Aug 2019 20:19:19 +0100 Subject: [PATCH 64/76] Create .gitignore --- bots/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 bots/.gitignore diff --git a/bots/.gitignore b/bots/.gitignore new file mode 100644 index 0000000..6ea8874 --- /dev/null +++ b/bots/.gitignore @@ -0,0 +1 @@ +models/ \ No newline at end of file From d7dd40513c2d5259ea8fe1fd00f2981f4d6f16f4 Mon Sep 17 00:00:00 2001 From: Robbie Date: Fri, 30 Aug 2019 21:54:31 +0100 Subject: [PATCH 65/76] Try not using the opponent as data, slow the game a little And of course mess with the learning --- bots/learner/learner.py | 8 +++---- bots/utility/collect_data.py | 41 ++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 14ccf97..9b7a816 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -12,7 +12,7 @@ from utility.dummy_renderer import DummyRenderer -game_speed = 3 +game_speed = 1.8 dummy_render = False @@ -24,7 +24,7 @@ def initialize_agent(self): self.state_set = False # Variables - self.epochs = 30 + self.epochs = 20 self.steps_used = None self.training_steps = None self.update_training_params() @@ -150,5 +150,5 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float = 0): - self.training_steps = min(400, max(10, time // 5)) - self.steps_used = max(0.1, 1 / max(1, time / 250)) + self.training_steps = min(600, max(10, time)) + self.steps_used = max(0.1, 1 / max(1, time / 300)) diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 2832bc7..48c6fca 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -40,7 +40,9 @@ from .utility import * -data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 7) * 2 + 3) +opponent_data = False + +data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 7) * (2 if opponent_data else 1) + 3) car_data_size = 19 label_size = 9 @@ -78,7 +80,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): # Cars my_car = packet.game_cars[index] - enemy_car = get_enemy_car(index, packet) + enemy_car = (get_enemy_car(index, packet) if opponent_data else None) for i, car in enumerate([my_car, enemy_car]): if not car: continue car_position = Vec3(car.physics.location) / pitch_side_uu @@ -109,33 +111,36 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data[34 + i * car_data_size] = ang_vel.z # Misc - data[54] = (1 if packet.game_info.is_kickoff_pause else -1) - data[55] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) - data[56] = (1 if packet.game_info.is_round_active else -1) + data[54 - (0 if opponent_data else car_data_size)] = (1 if packet.game_info.is_kickoff_pause else -1) + data[55 - (0 if opponent_data else car_data_size)] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) + data[56 - (0 if opponent_data else car_data_size)] = (1 if packet.game_info.is_round_active else -1) return data -def format_labels(controls: SimpleControllerState, car: PlayerInfo, remove_noise: bool = False): +def format_labels(controls: SimpleControllerState, car: PlayerInfo, mask: bool = False): labels = np.zeros(shape = label_size) # Blank labels - if remove_noise: + if mask: labels[0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) - air: bool = (not car.has_wheel_contact or controls.jump) + air: bool = (not car.has_wheel_contact or (controls.jump and not car.double_jumped)) + labels[1] = (clamp11(controls.steer) if not air else 0) labels[2] = (clamp11(controls.pitch) if air else 0) labels[3] = (clamp11(controls.yaw) if air else 0) labels[4] = (clamp11(controls.roll) if air else 0) - labels[6] = (1 if controls.boost and car.boost >= 1 else 0) + labels[5] = (1 if controls.jump and (air or not car.double_jumped) else -1) + labels[6] = (1 if controls.boost and car.boost >= 1 else -1) + labels[7] = (1 if controls.handbrake and not air else -1) else: labels[0] = clamp11(controls.throttle) + labels[1] = clamp11(controls.steer) labels[2] = clamp11(controls.pitch) labels[3] = clamp11(controls.yaw) labels[4] = clamp11(controls.roll) - labels[6] = (1 if controls.boost else 0) - - labels[1] = clamp11(controls.steer) - labels[5] = (1 if controls.jump else -1) - labels[7] = (1 if controls.handbrake else -1) + labels[5] = (1 if controls.jump else -1) + labels[6] = (1 if controls.boost else -1) + labels[7] = (1 if controls.handbrake else -1) + labels[8] = (1 if hasattr(controls, 'use_item') and controls.use_item else -1) return labels @@ -148,10 +153,10 @@ def from_labels(labels) -> SimpleControllerState: controls.pitch = clamp11(labels[2]) controls.yaw = clamp11(labels[3]) controls.roll = clamp11(labels[4]) - controls.jump = (labels[5] > 0.5) - controls.boost = (labels[6] > 0.5) - controls.handbrake = (labels[7] > 0.5) - controls.use_item = (labels[8] > 0.5) + controls.jump = (labels[5] > 0) + controls.boost = (labels[6] > 0) + controls.handbrake = (labels[7] > 0) + controls.use_item = (labels[8] > 0) return controls From 10a5ecbfa4fc151d5bdcf1f99b96332263bc328a Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 5 Sep 2019 18:34:07 +0100 Subject: [PATCH 66/76] MAE model --- bots/learner/learner.py | 4 ++-- bots/runner/runner.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 9b7a816..2c5591c 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -12,7 +12,7 @@ from utility.dummy_renderer import DummyRenderer -game_speed = 1.8 +game_speed = 1.5 dummy_render = False @@ -59,7 +59,7 @@ def initialize_agent(self): layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ layers.Dense(label_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) self.model.compile(optimizer = tf.train.AdamOptimizer(0.001),\ - loss = 'mse') + loss = 'mae') def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] diff --git a/bots/runner/runner.py b/bots/runner/runner.py index 8c21ec7..a8a7682 100644 --- a/bots/runner/runner.py +++ b/bots/runner/runner.py @@ -21,7 +21,7 @@ def initialize_agent(self): from tensorflow.keras import layers # Network - model_name = '3602_Dweller_model.h5' + model_name = '25230_Dweller_MAE.h5' self.model = tf.keras.models.load_model(model_path + model_name) print('[' + self.name + '] Loaded model: ' + str(model_path + model_name).replace('\\', '/')) From c0f9f512c63e24b1eb23dd65bfbaae480b456ee0 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 5 Sep 2019 20:22:47 +0100 Subject: [PATCH 67/76] MSE + MAE setup And remove "play on own" in the Learner, that's Runner's job! --- bots/learner/learner.py | 41 +++++++++++++------------- bots/utility/collect_data.py | 57 ++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 50 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 2c5591c..ee9773d 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -28,7 +28,6 @@ def initialize_agent(self): self.steps_used = None self.training_steps = None self.update_training_params() - self.play_on_own = False self.save_time = 600 # Data and labels @@ -54,12 +53,13 @@ def initialize_agent(self): # Network regularisation_rate = 0.0000001 - self.model = tf.keras.Sequential([\ - layers.Dense(data_size, activation = 'linear', input_shape = (data_size,), kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate)),\ - layers.Dense(label_size, activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))]) - self.model.compile(optimizer = tf.train.AdamOptimizer(0.001),\ - loss = 'mae') + inputs = layers.Input(shape = (data_size,)) + x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(inputs) + x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) + output_one = layers.Dense(label_size[0], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) + output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) + self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two]) + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.001), loss = ['mse', 'mae']) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -81,21 +81,18 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: labels = None # Get the labels - if not self.play_on_own: - self.reset_teacher_functions() - teacher_output = self.teacher.get_output(packet) - labels = format_labels(teacher_output, car) - - self.gathered_data.append(data) - self.gathered_labels.append(labels) + self.reset_teacher_functions() + teacher_output = self.teacher.get_output(packet) + labels = format_labels(teacher_output, car) + self.gathered_data.append(data) + self.gathered_labels.append(labels) # Get our own predicted output - output = self.model.predict(data.reshape((1, data_size)))[0] + output = self.model.predict(data.reshape((1, data_size))) # Train self.renderer.begin_rendering('Status') - if len(self.gathered_data) >= self.training_steps\ - and not self.play_on_own: + if len(self.gathered_data) >= self.training_steps: self.renderer.draw_string_2d(10, 10 + 100 * self.index, 2, 2, 'Training', self.renderer.team_color(car.team, True)) self.renderer.end_rendering() @@ -106,7 +103,9 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: # Begin training steps = int(self.training_steps * self.steps_used) - self.train(data[:steps], labels[:steps]) + #self.train(data[:steps], labels[:steps]) + labels_to_use = [[x[0] for x in labels[:steps]], [x[1] for x in labels[:steps]]] + self.train([data[:steps]], labels_to_use) self.gathered_data.clear() self.gathered_labels.clear() @@ -119,15 +118,15 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.renderer.end_rendering() # Save model - if not self.play_on_own and time - self.last_save > self.save_time: + if time - self.last_save > self.save_time: self.last_save = time self.save() - + self.controller_state = from_labels(output) return self.controller_state def train(self, data, labels): - self.model.fit([data], [labels], epochs = self.epochs) + self.model.fit(data, labels, epochs = self.epochs) def save(self): try: diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 48c6fca..e6a93be 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -44,7 +44,7 @@ data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 7) * (2 if opponent_data else 1) + 3) car_data_size = 19 -label_size = 9 +label_size = (5, 3) def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): @@ -119,44 +119,43 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): def format_labels(controls: SimpleControllerState, car: PlayerInfo, mask: bool = False): - labels = np.zeros(shape = label_size) # Blank labels + labels = np.array([np.zeros(label_size[0]), np.zeros(label_size[1])]) # Blank labels if mask: - labels[0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) + labels[0][0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) air: bool = (not car.has_wheel_contact or (controls.jump and not car.double_jumped)) - labels[1] = (clamp11(controls.steer) if not air else 0) - labels[2] = (clamp11(controls.pitch) if air else 0) - labels[3] = (clamp11(controls.yaw) if air else 0) - labels[4] = (clamp11(controls.roll) if air else 0) - labels[5] = (1 if controls.jump and (air or not car.double_jumped) else -1) - labels[6] = (1 if controls.boost and car.boost >= 1 else -1) - labels[7] = (1 if controls.handbrake and not air else -1) + labels[0][1] = (clamp11(controls.steer) if not air else 0) + labels[0][2] = (clamp11(controls.pitch) if air else 0) + labels[0][3] = (clamp11(controls.yaw) if air else 0) + labels[0][4] = (clamp11(controls.roll) if air else 0) + labels[1][0] = (1 if controls.jump and (air or not car.double_jumped) else -1) + labels[1][1] = (1 if controls.boost and car.boost >= 1 else -1) + labels[1][2] = (1 if controls.handbrake and not air else -1) else: - labels[0] = clamp11(controls.throttle) - labels[1] = clamp11(controls.steer) - labels[2] = clamp11(controls.pitch) - labels[3] = clamp11(controls.yaw) - labels[4] = clamp11(controls.roll) - labels[5] = (1 if controls.jump else -1) - labels[6] = (1 if controls.boost else -1) - labels[7] = (1 if controls.handbrake else -1) - - labels[8] = (1 if hasattr(controls, 'use_item') and controls.use_item else -1) + labels[0][0] = clamp11(controls.throttle) + labels[0][1] = clamp11(controls.steer) + labels[0][2] = clamp11(controls.pitch) + labels[0][3] = clamp11(controls.yaw) + labels[0][4] = clamp11(controls.roll) + labels[1][0] = (1 if controls.jump else -1) + labels[1][1] = (1 if controls.boost else -1) + labels[1][2] = (1 if controls.handbrake else -1) return labels def from_labels(labels) -> SimpleControllerState: controls = SimpleControllerState() - controls.throttle = clamp11(labels[0]) - controls.steer = clamp11(labels[1]) - controls.pitch = clamp11(labels[2]) - controls.yaw = clamp11(labels[3]) - controls.roll = clamp11(labels[4]) - controls.jump = (labels[5] > 0) - controls.boost = (labels[6] > 0) - controls.handbrake = (labels[7] > 0) - controls.use_item = (labels[8] > 0) + labels = (labels[0][0], labels[1][0]) + controls.throttle = clamp11(labels[0][0]) + controls.steer = clamp11(labels[0][1]) + controls.pitch = clamp11(labels[0][2]) + controls.yaw = clamp11(labels[0][3]) + controls.roll = clamp11(labels[0][4]) + controls.jump = (labels[1][0] > 0) + controls.boost = (labels[1][1] > 0) + controls.handbrake = (labels[1][2] > 0) + controls.use_item = False return controls From a5bda101c21f8ea12ecc082f53854987b2296a27 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 5 Sep 2019 20:43:16 +0100 Subject: [PATCH 68/76] Local ball prediction --- bots/utility/collect_data.py | 51 ++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index e6a93be..8bcfcab 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -4,14 +4,12 @@ ball velocity normalised: X, Y, Z ball velocity magnitude / pitch width -BALL PREDICTION: -ball prediction displacement: (X, Y, Z) / pitch width, each second for 3 seconds - CARS: our car: (X, Y, Z) / pitch width our car nose: X, Y, Z local angular velocity: X, Y, Z local ball normalised: X, Y, Z +local ball prediction normalised (each half second for 3 seconds): X, Y, Z our ball distance / pitch width our car boost / 100 car velocity magnitude / pitch width @@ -42,8 +40,8 @@ opponent_data = False -data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 7) * (2 if opponent_data else 1) + 3) -car_data_size = 19 +data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 18 + 7) * (2 if opponent_data else 1) + 3) +car_data_size = 37 label_size = (5, 3) @@ -69,14 +67,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): # Ball prediction ball_position = Vec3(ball.physics.location) # Rescale - for i in range(3): - frame = (i + 1) * 60 - predicted_location = Vec3(prediction.slices[frame].physics.location) - if flip: predicted_location = Vec3(-predicted_location.x, -predicted_location.y, predicted_location.z) - displacement = (predicted_location - ball_position) / pitch_side_uu - data[7 + i * 3] = displacement.x - data[8 + i * 3] = displacement.y - data[9 + i * 3] = displacement.z + # Cars my_car = packet.game_cars[index] @@ -97,23 +88,31 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): data[22 + i * car_data_size] = local.x data[23 + i * car_data_size] = local.y data[24 + i * car_data_size] = local.z - data[25 + i * car_data_size] = car_position.dist(ball_position) / pitch_side_uu - data[26 + i * car_data_size] = car.boost / 100 + for j in range(6): + frame = (j + 1) * 30 + predicted_location = Vec3(prediction.slices[frame].physics.location) + if flip: predicted_location = Vec3(-predicted_location.x, -predicted_location.y, predicted_location.z) + local = relative_location(car_position, car_orientation, predicted_location).normalised() + data[25 + i * car_data_size + j * 3] = local.x + data[26 + i * car_data_size + j * 3] = local.y + data[27 + i * car_data_size + j * 3] = local.z + data[43 + i * car_data_size] = car_position.dist(ball_position) / pitch_side_uu + data[44 + i * car_data_size] = car.boost / 100 car_velocity_magnitude = Vec3(car.physics.velocity).length() - data[27 + i * car_data_size] = car_velocity_magnitude / pitch_side_uu - data[28 + i * car_data_size] = car_direction.dot(car.physics.velocity) / max(0.01, car_velocity_magnitude) - data[29 + i * car_data_size] = (1 if car.is_super_sonic else -1) - data[30 + i * car_data_size] = (1 if car.has_wheel_contact else -1) - data[31 + i * car_data_size] = (1 if not car.double_jumped else -1) + data[45 + i * car_data_size] = car_velocity_magnitude / pitch_side_uu + data[46 + i * car_data_size] = car_direction.dot(Vec3(car.physics.velocity).normalised()) + data[47 + i * car_data_size] = (1 if car.is_super_sonic else -1) + data[48 + i * car_data_size] = (1 if car.has_wheel_contact else -1) + data[49 + i * car_data_size] = (1 if not car.double_jumped else -1) ang_vel = relative_location(Vec3(0, 0, 0), car_orientation, Vec3(car.physics.angular_velocity)) - data[32 + i * car_data_size] = ang_vel.x - data[33 + i * car_data_size] = ang_vel.y - data[34 + i * car_data_size] = ang_vel.z + data[50 + i * car_data_size] = ang_vel.x + data[51 + i * car_data_size] = ang_vel.y + data[52 + i * car_data_size] = ang_vel.z # Misc - data[54 - (0 if opponent_data else car_data_size)] = (1 if packet.game_info.is_kickoff_pause else -1) - data[55 - (0 if opponent_data else car_data_size)] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) - data[56 - (0 if opponent_data else car_data_size)] = (1 if packet.game_info.is_round_active else -1) + data[53 + (0 if not opponent_data else car_data_size)] = (1 if packet.game_info.is_kickoff_pause else -1) + data[54 + (0 if not opponent_data else car_data_size)] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) + data[55 + (0 if not opponent_data else car_data_size)] = (1 if packet.game_info.is_round_active else -1) return data From cc95f95638c36024ed3057bc90da0f3c8f81e4f5 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 5 Sep 2019 22:10:40 +0100 Subject: [PATCH 69/76] Update runner.py --- bots/runner/runner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bots/runner/runner.py b/bots/runner/runner.py index a8a7682..96adcd3 100644 --- a/bots/runner/runner.py +++ b/bots/runner/runner.py @@ -21,7 +21,7 @@ def initialize_agent(self): from tensorflow.keras import layers # Network - model_name = '25230_Dweller_MAE.h5' + model_name = '7204_Dweller_model.h5' self.model = tf.keras.models.load_model(model_path + model_name) print('[' + self.name + '] Loaded model: ' + str(model_path + model_name).replace('\\', '/')) @@ -33,7 +33,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: data = format_data(self.index, packet, self.get_ball_prediction_struct()) # Get our own predicted output - output = self.model.predict(data.reshape((1, data_size)))[0] + output = self.model.predict(data.reshape((1, data_size))) self.controller_state = from_labels(output) return self.controller_state From cbb3d343de616dad7d781ab0f24b579c4f2dd029 Mon Sep 17 00:00:00 2001 From: Robbie Date: Sat, 7 Sep 2019 11:48:05 +0100 Subject: [PATCH 70/76] Update learner.py --- bots/learner/learner.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index ee9773d..9ee6070 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -24,7 +24,7 @@ def initialize_agent(self): self.state_set = False # Variables - self.epochs = 20 + self.epochs = 25 self.steps_used = None self.training_steps = None self.update_training_params() @@ -52,14 +52,14 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.0000001 + regularisation_rate = 0.0000005 inputs = layers.Input(shape = (data_size,)) x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(inputs) x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_one = layers.Dense(label_size[0], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two]) - self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.001), loss = ['mse', 'mae']) + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', 'mae']) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -126,7 +126,10 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: return self.controller_state def train(self, data, labels): - self.model.fit(data, labels, epochs = self.epochs) + for i in range(2): + game_state = GameState(console_commands=['Pause']) + self.set_game_state(game_state) + if i == 0: self.model.fit(data, labels, epochs = self.epochs) def save(self): try: From 16bf62636a3a7da13793e0c45742b329b4e88d20 Mon Sep 17 00:00:00 2001 From: Robbie Date: Sat, 7 Sep 2019 14:52:13 +0100 Subject: [PATCH 71/76] Remove touch time and change network a bit --- bots/learner/learner.py | 8 ++++---- bots/utility/collect_data.py | 6 ++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 9ee6070..4cf15ea 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -52,14 +52,14 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.0000005 + regularisation_rate = 0.00000001 inputs = layers.Input(shape = (data_size,)) x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(inputs) x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_one = layers.Dense(label_size[0], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two]) - self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', 'mae']) + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0001), loss = ['mse', 'mae']) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -152,5 +152,5 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float = 0): - self.training_steps = min(600, max(10, time)) - self.steps_used = max(0.1, 1 / max(1, time / 300)) + self.training_steps = min(600, max(10, time // 2)) + self.steps_used = max(0.15, 1 / max(1, time / 500)) diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 8bcfcab..114d4fb 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -21,7 +21,6 @@ MISC: is kickoff -time since last touch, 10th log is round active ''' @@ -40,7 +39,7 @@ opponent_data = False -data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 18 + 7) * (2 if opponent_data else 1) + 3) +data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 18 + 7) * (2 if opponent_data else 1) + 2) car_data_size = 37 label_size = (5, 3) @@ -111,8 +110,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): # Misc data[53 + (0 if not opponent_data else car_data_size)] = (1 if packet.game_info.is_kickoff_pause else -1) - data[54 + (0 if not opponent_data else car_data_size)] = log(max(0.01, packet.game_info.seconds_elapsed - ball.latest_touch.time_seconds)) - data[55 + (0 if not opponent_data else car_data_size)] = (1 if packet.game_info.is_round_active else -1) + data[54 + (0 if not opponent_data else car_data_size)] = (1 if packet.game_info.is_round_active else -1) return data From 2424b8a305ada53aaafb6b8b39649ac63ce17956 Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 19 Sep 2019 16:14:34 +0100 Subject: [PATCH 72/76] Try to get it to jump more (didn't work) --- bots/learner/learner.py | 21 +++++++++++++++++---- bots/runner/runner.py | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index 4cf15ea..a93ebba 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -12,7 +12,7 @@ from utility.dummy_renderer import DummyRenderer -game_speed = 1.5 +game_speed = 1.6 dummy_render = False @@ -59,7 +59,7 @@ def initialize_agent(self): output_one = layers.Dense(label_size[0], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two]) - self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0001), loss = ['mse', 'mae']) + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0001), loss = ['mse', max_loss]) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -152,5 +152,18 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float = 0): - self.training_steps = min(600, max(10, time // 2)) - self.steps_used = max(0.15, 1 / max(1, time / 500)) + self.training_steps = min(1000, max(10, time // 2)) + #self.steps_used = max(0.3, 1 / max(1, time / 1000)) + #self.training_steps = 500 + self.steps_used = 1 + + +def max_loss(predicted_y, desired_y): + import tensorflow as tf + return tf.reduce_max(tf.abs(predicted_y - desired_y), reduction_indices = [-1]) + + +def cubic_activation(inputs): + import tensorflow as tf + linearness = 1 / 2.5 + return tf.add(inputs * linearness, tf.pow(inputs, 3)) / (1 + linearness) diff --git a/bots/runner/runner.py b/bots/runner/runner.py index 96adcd3..ad2c2d4 100644 --- a/bots/runner/runner.py +++ b/bots/runner/runner.py @@ -21,7 +21,7 @@ def initialize_agent(self): from tensorflow.keras import layers # Network - model_name = '7204_Dweller_model.h5' + model_name = '9605_Dweller_model.h5' self.model = tf.keras.models.load_model(model_path + model_name) print('[' + self.name + '] Loaded model: ' + str(model_path + model_name).replace('\\', '/')) From fc107069cf489751e2d6f4e58dc80b9050ad300e Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 19 Sep 2019 17:10:15 +0100 Subject: [PATCH 73/76] Make Runner automatically find a model --- bots/runner/runner.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bots/runner/runner.py b/bots/runner/runner.py index ad2c2d4..b72bf3f 100644 --- a/bots/runner/runner.py +++ b/bots/runner/runner.py @@ -8,6 +8,7 @@ from utility.collect_data import format_data, data_size, from_labels +model_extension = '.h5' model_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'models/') @@ -21,7 +22,7 @@ def initialize_agent(self): from tensorflow.keras import layers # Network - model_name = '9605_Dweller_model.h5' + model_name = find_model() self.model = tf.keras.models.load_model(model_path + model_name) print('[' + self.name + '] Loaded model: ' + str(model_path + model_name).replace('\\', '/')) @@ -37,3 +38,13 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: self.controller_state = from_labels(output) return self.controller_state + + +# Find a model. +def find_model(manual_name: str = None): + for i in range(2 if manual_name else 1): + for file in os.listdir(model_path): + if not file.endswith(model_extension): continue + if i == 0 and manual_name and str(file) != manual_name: continue + return file + return None From c24927c106bb2f1b22f4c631621d2a9fb54d454d Mon Sep 17 00:00:00 2001 From: Robbie Date: Thu, 19 Sep 2019 18:11:05 +0100 Subject: [PATCH 74/76] Update learner.py --- bots/learner/learner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index a93ebba..caa2dde 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -59,7 +59,7 @@ def initialize_agent(self): output_one = layers.Dense(label_size[0], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two]) - self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0001), loss = ['mse', max_loss]) + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', max_loss]) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] From 7ac202b0036b83a4750c4141cc7d6309d21e75f0 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 25 Sep 2019 13:12:31 +0100 Subject: [PATCH 75/76] Jumping is now its own output --- bots/learner/learner.py | 11 ++++++----- bots/utility/collect_data.py | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/bots/learner/learner.py b/bots/learner/learner.py index caa2dde..e5b4843 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -58,8 +58,10 @@ def initialize_agent(self): x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_one = layers.Dense(label_size[0], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) - self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two]) - self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', max_loss]) + output_three = layers.Dense(label_size[2], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) + self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two, output_three]) + jump_weight = 6 + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', 'mae', max_loss], loss_weights=[1, 1, jump_weight]) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -103,8 +105,7 @@ def get_output(self, packet: GameTickPacket) -> SimpleControllerState: # Begin training steps = int(self.training_steps * self.steps_used) - #self.train(data[:steps], labels[:steps]) - labels_to_use = [[x[0] for x in labels[:steps]], [x[1] for x in labels[:steps]]] + labels_to_use = [[x[0] for x in labels[:steps]], [x[1] for x in labels[:steps]], [x[2] for x in labels[:steps]]] self.train([data[:steps]], labels_to_use) self.gathered_data.clear() @@ -152,7 +153,7 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float = 0): - self.training_steps = min(1000, max(10, time // 2)) + self.training_steps = min(1000, max(100, time // 3)) #self.steps_used = max(0.3, 1 / max(1, time / 1000)) #self.training_steps = 500 self.steps_used = 1 diff --git a/bots/utility/collect_data.py b/bots/utility/collect_data.py index 114d4fb..4ee1b24 100644 --- a/bots/utility/collect_data.py +++ b/bots/utility/collect_data.py @@ -41,7 +41,7 @@ data_size = (3 + 3 + 1 + (3 * 3) + (3 + 3 + 3 + 3 + 18 + 7) * (2 if opponent_data else 1) + 2) car_data_size = 37 -label_size = (5, 3) +label_size = (5, 2, 1) def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): @@ -116,7 +116,7 @@ def format_data(index: int, packet: GameTickPacket, prediction: BallPrediction): def format_labels(controls: SimpleControllerState, car: PlayerInfo, mask: bool = False): - labels = np.array([np.zeros(label_size[0]), np.zeros(label_size[1])]) # Blank labels + labels = np.array([np.zeros(label_size[0]), np.zeros(label_size[1]), np.zeros(label_size[2])]) # Blank labels if mask: labels[0][0] = (1 if controls.boost and car.boost >= 1 else clamp11(controls.throttle)) @@ -125,33 +125,33 @@ def format_labels(controls: SimpleControllerState, car: PlayerInfo, mask: bool = labels[0][2] = (clamp11(controls.pitch) if air else 0) labels[0][3] = (clamp11(controls.yaw) if air else 0) labels[0][4] = (clamp11(controls.roll) if air else 0) - labels[1][0] = (1 if controls.jump and (air or not car.double_jumped) else -1) - labels[1][1] = (1 if controls.boost and car.boost >= 1 else -1) - labels[1][2] = (1 if controls.handbrake and not air else -1) + labels[1][0] = (1 if controls.boost and car.boost >= 1 else -1) + labels[1][1] = (1 if controls.handbrake and not air else -1) + labels[2][0] = (1 if controls.jump and (air or not car.double_jumped) else -1) else: labels[0][0] = clamp11(controls.throttle) labels[0][1] = clamp11(controls.steer) labels[0][2] = clamp11(controls.pitch) labels[0][3] = clamp11(controls.yaw) labels[0][4] = clamp11(controls.roll) - labels[1][0] = (1 if controls.jump else -1) - labels[1][1] = (1 if controls.boost else -1) - labels[1][2] = (1 if controls.handbrake else -1) + labels[1][0] = (1 if controls.boost else -1) + labels[1][1] = (1 if controls.handbrake else -1) + labels[2][0] = (1 if controls.jump else -1) return labels def from_labels(labels) -> SimpleControllerState: controls = SimpleControllerState() - labels = (labels[0][0], labels[1][0]) + labels = (labels[0][0], labels[1][0], labels[2][0]) controls.throttle = clamp11(labels[0][0]) controls.steer = clamp11(labels[0][1]) controls.pitch = clamp11(labels[0][2]) controls.yaw = clamp11(labels[0][3]) controls.roll = clamp11(labels[0][4]) - controls.jump = (labels[1][0] > 0) - controls.boost = (labels[1][1] > 0) - controls.handbrake = (labels[1][2] > 0) + controls.boost = (labels[1][0] > 0) + controls.handbrake = (labels[1][1] > 0) + controls.jump = (labels[2][0] > 0) controls.use_item = False return controls From a85ebd919e8481a8746ce4ee0ad144f526d4ef3f Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 20 May 2020 18:57:23 +0100 Subject: [PATCH 76/76] Messing with Bottus I think this is the version that was submitted to TGD's Christmas Crash tournament --- bots/.gitignore | 3 ++- bots/learner/learner.py | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/bots/.gitignore b/bots/.gitignore index 6ea8874..155e8c2 100644 --- a/bots/.gitignore +++ b/bots/.gitignore @@ -1 +1,2 @@ -models/ \ No newline at end of file +models/ +bottus/ diff --git a/bots/learner/learner.py b/bots/learner/learner.py index e5b4843..d207b98 100644 --- a/bots/learner/learner.py +++ b/bots/learner/learner.py @@ -24,7 +24,7 @@ def initialize_agent(self): self.state_set = False # Variables - self.epochs = 25 + self.epochs = 50 self.steps_used = None self.training_steps = None self.update_training_params() @@ -52,7 +52,7 @@ def initialize_agent(self): #self.tf = tf # Network - regularisation_rate = 0.00000001 + regularisation_rate = 0.0000001 inputs = layers.Input(shape = (data_size,)) x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(inputs) x = layers.Dense(data_size, activation = 'linear', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) @@ -60,8 +60,8 @@ def initialize_agent(self): output_two = layers.Dense(label_size[1], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) output_three = layers.Dense(label_size[2], activation = 'tanh', kernel_regularizer = tf.keras.regularizers.l2(l = regularisation_rate))(x) self.model = tf.keras.Model(inputs = inputs, outputs = [output_one, output_two, output_three]) - jump_weight = 6 - self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', 'mae', max_loss], loss_weights=[1, 1, jump_weight]) + jump_weight = 8 + self.model.compile(optimizer = tf.compat.v1.train.AdamOptimizer(0.0005), loss = ['mse', 'mse', 'mse'], loss_weights=[1, 1, jump_weight]) def get_output(self, packet: GameTickPacket) -> SimpleControllerState: car = packet.game_cars[self.index] @@ -153,7 +153,7 @@ def reset_teacher_functions(self, first_time: bool = False): self.teacher.send_quick_chat = self.send_quick_chat def update_training_params(self, time: float = 0): - self.training_steps = min(1000, max(100, time // 3)) + self.training_steps = min(1000, max(200, time // 4)) #self.steps_used = max(0.3, 1 / max(1, time / 1000)) #self.training_steps = 500 self.steps_used = 1