Index: branches/scout/projects/diagnostic_station/station/test_motors.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_motors.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_motors.c	(revision 1346)
@@ -0,0 +1,170 @@
+#include "test_motors.h"
+#include "global.h"
+
+#include "comm_robot.h"
+#include "hardware_dynamos.h"
+
+
+// ******************
+// ** Data sending **
+// ******************
+
+static void send_motor_data (uint8_t num, uint8_t direction, char *acceleration_string,
+	uint8_t num_steps, uint8_t *data_pwm, int16_t *data_velocity)
+{
+	if (direction!=motor_direction_off)
+	{
+		usb_puts ("data motor ");
+		usb_puti (num);
+		usb_puts (" ");
+		usb_puts (motor_direction_string (direction));
+		usb_puts (" ");
+		usb_puts (acceleration_string);
+		usb_puts (" ");
+			
+		for (uint8_t i=0; i<num_steps; ++i)
+		{
+			usb_putc (' ');
+			usb_puti (data_pwm[i]);
+			usb_putc ('/');
+			usb_puti (data_velocity[i]);
+		}
+
+		usb_puts (NL);
+	}
+}
+
+
+// ************************
+// ** Internal functions **
+// ************************
+
+	// One way to do it
+/* 	#define vel_inc 10 */
+/* 	#define vel_steps 12 */
+/* 	#define vel_min 140 */
+/* 	#define vel_max 250 */
+/* 	#define velocity_steady_delay 400 */
+
+	// More steps at smaller intervals. We don't need so much delay here.
+ 	#define vel_inc 2
+ 	#define vel_steps 56
+ 	#define vel_min 140
+ 	#define vel_max 250
+ 	#define velocity_steady_delay 50
+
+//	#define vel_inc 2
+//	#define vel_steps 12
+//	#define vel_min 150
+//	#define vel_max 172
+//	#define velocity_steady_delay 50
+
+	
+
+
+static void test_motors_direction_acceleration (uint8_t direction1, uint8_t direction2, uint8_t pwm_start, uint8_t num_steps, int8_t pwm_step, char *acceleration_string)
+{
+	// Allocate space for the data on the stack
+//	uint8_t  *data_pwm       =malloc (num_steps*sizeof (uint8_t ));
+//	int16_t *data_velocity_l =malloc (num_steps*sizeof (uint16_t));
+//	int16_t *data_velocity_r =malloc (num_steps*sizeof (uint16_t));
+
+	uint8_t pwm=pwm_start;
+	int16_t left;
+	int16_t right;
+
+	for (uint8_t i=0; i<num_steps; ++i)
+	{
+		robot_set_motors (direction1, pwm, direction2, pwm);
+
+		// Wait some fixed time for the velocity to reach steady state. This could be improved.
+		delay_ms (velocity_steady_delay);
+
+		// Store it
+		//data_pwm[i]=pwm;
+
+		// Reset the dynamos, wait some time, then read the dynamos.
+		// Nothing else should go between dynamos_reset and dynamos_read.
+		// Note that we are currently using busy waiting which will be totally wrong if there are any interrupts.
+		dynamos_reset ();
+		delay_ms (500);
+		dynamos_read (&left, &right);
+
+		// Velocity readings are dynamo ticks per second.
+		left*=2;
+		right*=2;
+
+		// Store it
+		//dynamos_read (&(data_velocity_l[i]), &(data_velocity_r[i]));
+		
+
+	// Bad things happening. Methinks it's a stack overflow. Print one data line
+	// per measurement. The plotting script can probably handle it. Not sure about
+	// the server.
+	send_motor_data (0, direction1, acceleration_string, 1, &pwm, &left);
+	send_motor_data (1, direction2, acceleration_string, 1, &pwm, &right);
+
+//usb_puts ("# ");
+//usb_puti (i);
+//usb_puts (" ");
+//usb_puti (pwm);
+//usb_puts (" ");
+//usb_puti (data_velocity_l[i]);
+//usb_puts (" ");
+//usb_puti (data_velocity_r[i]);
+//usb_puts (NL);
+
+		pwm+=pwm_step;
+	}
+
+//	send_motor_data (0, direction1, acceleration_string, num_steps, data_pwm, data_velocity_l);
+//	send_motor_data (1, direction2, acceleration_string, num_steps, data_pwm, data_velocity_r);
+
+	robot_set_motors (motor_direction_off, 0, motor_direction_off, 0);
+
+//	free (data_velocity_r);
+//	free (data_velocity_l);
+//	free (data_pwm);
+}
+
+static void test_motors_direction (uint8_t direction1, uint8_t direction2)
+{
+	// The following equation must be true: vel_min+(vel_steps-1)*vel_inc=vel_max
+	// Note that we're setting vel_max twice, once going up and once going down. It's not important for vel_max, but
+	// vel_min is also reached twice, once at the beginning of accelerating and once at the end of decelerating, and
+	// this one is important.
+	
+	test_motors_direction_acceleration (direction1, direction2, vel_min, vel_steps, vel_inc, "increasing");
+	test_motors_direction_acceleration (direction1, direction2, vel_max, vel_steps, -vel_inc, "decreasing");
+}
+
+
+// **********************
+// ** Public functions **
+// **********************
+
+void test_motor_all (void)
+{
+	usb_puts("# Testing motors" NL);
+
+	test_motors_direction (motor_direction_forward, motor_direction_backward);
+	test_motors_direction (motor_direction_backward, motor_direction_forward);
+
+	robot_set_motors_off ();
+
+	usb_puts("# Testing motors finished" NL);
+}
+
+void test_motor (uint8_t num)
+{
+	if (num==1)
+	{
+		test_motors_direction (motor_direction_forward, motor_direction_off);
+		test_motors_direction (motor_direction_backward, motor_direction_off);
+	}
+	else if (num==2)
+	{
+		test_motors_direction (motor_direction_off, motor_direction_forward);
+		test_motors_direction (motor_direction_off, motor_direction_backward);
+	}
+}
Index: branches/scout/projects/diagnostic_station/station/Makefile
===================================================================
--- branches/scout/projects/diagnostic_station/station/Makefile	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/Makefile	(revision 1346)
@@ -0,0 +1,522 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = target
+MAIN_FUNCTION = main_default
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB1'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+CFLAGS += -D$(MAIN_FUNCTION)=main
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/diagnostic_station/station/test_encoders.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_encoders.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_encoders.c	(revision 1346)
@@ -0,0 +1,128 @@
+#include "test_encoders.h"
+#include "global.h"
+#include "comm_robot.h"
+
+#include "hardware.h"
+
+// ******************
+// ** Data sending **
+// ******************
+
+static void send_encoder_data (uint8_t num, uint8_t direction, 
+	int16_t *data_station, int16_t *data_robot, uint8_t num_measurements)
+{
+	if (direction!=motor_direction_off)
+	{
+		usb_puts ("data encoder ");
+		usb_puti (num);
+		usb_puts (" ");
+		usb_puts (motor_direction_string (direction));
+		usb_puts (" ");
+			
+		for (uint8_t i=0; i<num_measurements; ++i)
+		{
+			usb_putc (' ');
+			usb_puti (data_station[i]);
+			usb_putc ('/');
+			usb_puti (data_robot[i]);
+		}
+
+		usb_puts (NL);
+	}
+}
+
+
+// ************************
+// ** Internal functions **
+// ************************
+
+static void test_encoders_direction (uint8_t direction1, uint8_t direction2, uint8_t num_measurements, uint8_t velocity, uint16_t on_delay, uint16_t off_delay)
+{
+	// Allocate space for the data on the stack
+	// Seems like we've got a stack overflow...see test_motors.c
+//	int16_t *data_station_l  =malloc (num_measurements*sizeof (uint16_t));
+//	int16_t *data_station_r  =malloc (num_measurements*sizeof (uint16_t));
+//	int16_t *data_robot_l    =malloc (num_measurements*sizeof (uint16_t));
+//	int16_t *data_robot_r    =malloc (num_measurements*sizeof (uint16_t));
+	usb_puts ("# Resetting encoders" NL);
+	dynamos_reset ();
+	robot_reset_encoders ();
+
+	int16_t station_l=11, station_r=22, robot_l=33, robot_r=44;
+	
+	for (uint8_t m=0; m<num_measurements; ++m)
+	{
+		robot_set_motors (direction1, velocity, direction2, velocity);
+		delay_ms (on_delay);
+		robot_set_motors_off ();
+		delay_ms (off_delay);
+
+		// Read the station dynamos
+		dynamos_read (&station_l, &station_r);
+//		data_station_l[m]=station_l;
+//		data_station_r[m]=station_r;
+		
+		// Read the robot encoders
+		robot_read_encoders (&robot_l, &robot_r);
+//		data_robot_l[m]=robot_l;
+//		data_robot_r[m]=robot_r;
+		
+		//usb_puts ("# I readed teh encoders: ");
+		//usb_puti (data_robot_l[m]);
+		//usb_puts (" ");
+		//usb_puti (data_robot_r[m]);
+		//usb_puts (NL);
+
+	send_encoder_data (0, direction1, &station_l, &robot_l, 1);
+	send_encoder_data (1, direction2, &station_r, &robot_r, 1);
+	}
+
+//	send_encoder_data (0, direction1, data_station_l, data_robot_l, num_measurements);
+//	send_encoder_data (1, direction2, data_station_r, data_robot_r, num_measurements);
+	
+//	free (data_robot_r);
+//	free (data_robot_l);
+//	free (data_station_r);
+//	free (data_station_l);
+}
+
+
+// **********************
+// ** Public functions **
+// **********************
+
+// Encoder readings seem to be unreliable with these values (on too long?)
+//#define NUM 4
+//#define VEL 200
+//#define ON_DELAY 500
+//#define OFF_DELAY 800
+
+// Testing values
+#define NUM 8
+#define VEL 200
+#define ON_DELAY 150
+#define OFF_DELAY 400
+
+void test_encoder_all (void)
+{
+	usb_puts("# Testing encoders" NL);
+
+	test_encoders_direction (motor_direction_forward , motor_direction_backward, NUM, VEL, ON_DELAY, OFF_DELAY);
+	test_encoders_direction (motor_direction_backward, motor_direction_forward , NUM, VEL, ON_DELAY, OFF_DELAY);
+
+	usb_puts("# Testing encoders finished" NL);
+}
+
+void test_encoder (uint8_t num)
+{
+	if (num==1)
+	{
+		test_encoders_direction (motor_direction_forward , motor_direction_off, NUM, VEL, ON_DELAY, OFF_DELAY);
+		test_encoders_direction (motor_direction_backward, motor_direction_off, NUM, VEL, ON_DELAY, OFF_DELAY);
+	}
+	else if (num==2)
+	{
+		test_encoders_direction (motor_direction_off, motor_direction_forward , NUM, VEL, ON_DELAY, OFF_DELAY);
+		test_encoders_direction (motor_direction_off, motor_direction_backward, NUM, VEL, ON_DELAY, OFF_DELAY);
+	}
+}
Index: branches/scout/projects/diagnostic_station/station/Makefile_brad
===================================================================
--- branches/scout/projects/diagnostic_station/station/Makefile_brad	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/Makefile_brad	(revision 1346)
@@ -0,0 +1,522 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = target
+MAIN_FUNCTION = main_brad
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+CFLAGS += -D$(MAIN_FUNCTION)=main
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/diagnostic_station/station/main.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/main.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/main.c	(revision 1346)
@@ -0,0 +1,197 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <xbee.h>
+
+#include "../common/comm_station_robot.h"
+
+#include "global.h"
+#include "hardware.h"
+#include "tests.h"
+#include "self_test.h"
+#include "comm_server.h"
+#include "comm_robot.h"
+#include "comm_interactive.h"
+
+int main_default (void)
+{
+    dragonfly_init(0);
+
+	// Initialize before using USB
+	comm_server_init ();
+
+	usb_puts(NL NL NL);
+	usb_puts("# Diagnostic station version " version_string " starting" NL);
+
+    orb_init_pwm ();
+	hardware_init ();
+
+	orb1_set (255, 0, 0); usb_puts("# Initializing wireless" NL);
+	comm_robot_init ();
+	orb2_set (255, 0, 0); usb_puts("# Done" NL);
+
+	// If button 1 is pressed after initialization of the wireless (which takes about 1s), run all tests.
+	if (button1_read ())
+		test_all ();
+
+	// If button 2 is pressed, go to interactive mode (green/green). If not, go to server mode (green/yellow).
+	if (button2_read ())
+		interactive_main ();
+	else
+		server_main ();
+
+	while (1);
+	return 0;
+}
+
+int main_martin (void)
+{
+	dragonfly_init (0);
+	orb_init ();
+
+	if (!button2_read ())
+	{
+		// Initialize before using USB
+		// Do something else
+	}
+	else
+	{
+		delay_ms (1000);
+		main_default ();
+	}
+	
+	while (1);
+	return 0;
+}
+
+int main_john (void)
+{
+    dragonfly_init(0);
+
+	// Initialize before using USB
+	comm_server_init ();
+
+	usb_puts(NL NL NL);
+	usb_puts("# Diagnostic station version " version_string " starting" NL);
+
+    orb_init_pwm ();
+	hardware_init ();
+
+	orb1_set (255, 0, 0); usb_puts("# Initializing wireless" NL);
+	comm_robot_init ();
+	orb2_set (255, 0, 0); usb_puts("# Done" NL);
+
+	while (1) {
+
+			ibom_set(true);
+			delay_ms(500);
+			ibom_set(false);
+			delay_ms(500);
+	}
+	return 0;
+}
+
+
+int main_evan (void)
+{
+    dragonfly_init(0);
+
+    usb_init ();
+
+	usb_puts(NL NL NL);
+	usb_puts("# Diagnostic station version " version_string " starting" NL);
+
+    orb_init_pwm ();
+	
+	hardware_init ();
+	comm_server_init ();
+	comm_robot_init ();
+
+	orb1_set (255, 0, 0); usb_puts("# Initializing wireless" NL);
+	xbee_init ();
+	wl_init();
+	orb2_set (255, 0, 0); usb_puts("# Done" NL);
+
+
+	// If button 1 is pressed after initialization of the wireless (which takes about 1s), run all tests.
+	if (button1_read ())
+			test_all ();
+
+	// If button 2 is pressed, go to interactive mode (green/green). If not, go to server mode (green/yellow).
+	if (button2_read ())
+		interactive_main ();
+	else
+	{
+		// Set the orbs to green/yellow
+		orbs_set (0,255,0, 255,127,0);
+
+		server_main ();
+	}
+
+	while (1);
+	return 0;
+}
+
+int main_kwoo (void)
+{
+    dragonfly_init(0);
+    orb_init_pwm();
+    
+    usb_init ();
+
+	usb_puts(NL NL NL);
+	usb_puts("# Diagnostic station version " version_string " starting" NL);
+
+    wall_init();
+
+    wall_set_position(1); 
+    wall_set_position(2); 
+    wall_set_position(3); 
+    wall_set_position(4); 
+    wall_set_position(5); 
+
+	while (1) {
+        //usb_puti(wall_get_position());
+        //usb_puts("\r\n");
+        if (PINF & _BV(PINF0)) {
+            orbs_set(0,0,255,0,0,0);
+        }
+
+    }
+        
+	return 0;
+}
+
+int main_brad(void)
+{
+  dragonfly_init (ALL_ON);
+
+  if (!button2_read ()) {
+
+    usb_puts("running Brad's tests" NL);
+
+    turntable_init();
+    turntable_rotate_to_position(0);
+    delay_ms(1000);
+    usb_puts("actually got to:");
+    usb_puti(turntable_get_position());
+    usb_puts(NL);
+    turntable_rotate_to_position(512);
+    delay_ms(1000);
+    usb_puts("actually got to:");
+    usb_puti(turntable_get_position());
+    usb_puts(NL);
+
+
+  }
+  else {
+
+    //could put a call to default_main here
+    turntable_init();
+    interactive_main();
+
+
+  }
+	
+  while (1);
+  return 0;
+}
Index: branches/scout/projects/diagnostic_station/station/test_rangefinders.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_rangefinders.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_rangefinders.c	(revision 1346)
@@ -0,0 +1,92 @@
+#include <stdlib.h>
+
+#include "test_rangefinders.h"
+#include "global.h"
+
+#include "hardware.h"
+
+#include "comm_robot.h"
+
+#define wall_min 0
+#define wall_max 1000
+#define wall_inc 100
+
+static uint16_t rangefinder_position (uint8_t num)
+{
+	switch (num)
+	{
+		case 0:  return  100; break;
+		case 1:  return  200; break;
+		case 2:  return  300; break;
+		case 3:  return  400; break;
+		case 4:  return  500; break;
+	}
+	
+	return 0;
+}
+
+static void test_rangefinder_direction (uint8_t num, uint16_t wall_start, uint16_t wall_step, uint8_t num_steps, char *wall_direction_string)
+{
+	// Allocate space for the data on the stack
+	uint16_t *data_wall       =malloc (num_steps*sizeof (uint16_t));
+	uint16_t *data_rangefinder=malloc (num_steps*sizeof (uint16_t));
+	
+	// Rotate the robot to the correct position
+	turntable_rotate_to_position (rangefinder_position (num));
+	
+	uint16_t wall=wall_start;
+	for (uint8_t i=0; i<num_steps; ++i)
+	{
+		wall_set_position (wall);
+		
+		data_wall[i]=wall_get_position      ();
+		robot_read_rangefinder (num, &data_rangefinder[i]);
+		
+		wall+=wall_step;
+	}
+	
+	// Send data
+	usb_puts ("data rangefinder ");
+	usb_puti (num);
+	usb_puts (" ");
+	usb_puts (wall_direction_string);
+	
+	for (uint8_t i=0; i<num_steps; ++i)
+	{
+		usb_putc (' ');
+		usb_puti (data_wall[i]);
+		usb_putc ('/');
+		usb_puti (data_rangefinder[i]);
+	}
+
+	free (data_rangefinder);
+	free (data_wall);
+	
+	usb_puts (NL);
+}
+
+
+void test_rangefinder (uint8_t num)
+{
+	if (num>4) return;
+	
+	usb_puts("# Testing rangefinder ");
+	usb_puti(num);
+	usb_puts(NL);
+	
+	test_rangefinder_direction (num, wall_min, wall_inc, 10, "out");
+	test_rangefinder_direction (num, wall_max, -wall_inc, 10, "in");
+}
+
+
+void test_rangefinder_all (void)
+{
+	usb_puts("# Testing rangefinders" NL);
+	
+	for (int n=0; n<5; ++n)
+		test_rangefinder (n);
+
+
+	turntable_rotate_to_position(TURNTABLE_HOME_POSITION);	
+	usb_puts("# Testing rangefinders finished" NL);
+}
Index: branches/scout/projects/diagnostic_station/station/test_bom.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_bom.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_bom.c	(revision 1346)
@@ -0,0 +1,129 @@
+#include "test_bom.h"
+#include "global.h"
+
+#include "hardware_turntable.h"
+#include "hardware_ibom.h"
+#include "comm_robot.h"
+
+static uint16_t bom_emitter_position (uint8_t num)
+{
+	// 0 is the robot facing the station (BOM #4 aligned with IBOM).
+	// Positive is counter-clockwise on the bom (robot turning clockwise)
+	
+	// The difference in angle between two positions. 1024 steps on a full turn, 16 emitters/detectors.
+#define increment 1024/16
+	
+	switch (num)
+	{
+		case  0: return (-4)*increment; break;
+		case  1: return (-3)*increment; break;
+		case  2: return (-2)*increment; break;
+		case  3: return (-1)*increment; break;
+		case  4: return ( 0)*increment; break;
+		case  5: return ( 1)*increment; break;
+		case  6: return ( 2)*increment; break;
+		case  7: return ( 3)*increment; break;
+		case  8: return ( 4)*increment; break;
+		case  9: return ( 5)*increment; break;
+		case 10: return ( 6)*increment; break;
+		case 11: return ( 7)*increment; break;
+		case 12: return ( 8)*increment; break;
+		case 13: return ( 9)*increment; break;
+		case 14: return (10)*increment; break;
+		case 15: return (11)*increment; break;
+		default: return 0; break;
+	}
+#undef increment
+}
+
+static uint16_t bom_detector_position (uint8_t num)
+{
+	// Austin sez: detectors and emitters are supposed to be parallel.
+	return bom_emitter_position (num);
+}
+
+
+void test_bom_bitmask (uint16_t emitter_bitmask, uint16_t detector_bitmask)
+{
+	usb_puts("# Testing BOM" NL);
+	
+	for (uint8_t n=0; n<16; ++n, emitter_bitmask>>=1, detector_bitmask>>=1)
+	{
+		if (emitter_bitmask&1)
+		{
+			uint16_t values[3];
+			
+			usb_puts("# Testing BOM emitter ");
+			usb_puti(n);
+			usb_puts(NL);
+			
+			turntable_rotate_to_position (bom_emitter_position (n));
+			robot_set_bom (1<<n);
+		
+			ibom_update ();
+#define TOP 0
+#define LEFT 1
+#define RIGHT 2
+			ibom_read (&values[TOP], &values[LEFT], &values[RIGHT]);
+
+			robot_set_bom (0);
+
+			// Send data
+			usb_puts ("data bom emitter");
+			usb_puts (" top/"  ); usb_puti (values[TOP  ]);
+			usb_puts (" left/" ); usb_puti (values[LEFT ]);
+			usb_puts (" right/"); usb_puti (values[RIGHT]);
+#undef TOP
+#undef LEFT
+#undef RIGHT
+			usb_puts (NL);
+		}
+		
+		if (detector_bitmask&1)
+		{
+			usb_puts("# Testing BOM detector ");
+			usb_puti(n);
+			usb_puts(NL);
+			turntable_rotate_to_position (bom_detector_position (n));
+
+			uint16_t on_value, off_value;
+
+			ibom_set (true);
+			robot_read_bom (n, &on_value);
+			ibom_set (false);
+			robot_read_bom (n, &off_value);
+
+			// Send data
+			usb_puts ("data bom detector ");
+			usb_puti (n);
+			usb_puts (" on/");
+			usb_puti (on_value);
+			usb_puts (" off/");
+			usb_puti (off_value);
+			usb_puts (NL);
+		}
+	}
+
+	turntable_rotate_to_position(TURNTABLE_HOME_POSITION);
+	usb_puts("# Testing BOM finished" NL);
+}
+
+void test_bom (uint8_t num, bool test_emitter, bool test_detector)
+{
+	uint16_t emitter_bitmask=0, detector_bitmask=0;
+	
+	if (test_emitter  && num<16) emitter_bitmask =1<<num;
+	if (test_detector && num<16) detector_bitmask=1<<num;
+	
+	test_bom_bitmask (emitter_bitmask, detector_bitmask);
+}
+
+void test_bom_all (bool test_emitters, bool test_detectors)
+{
+	uint16_t emitter_bitmask=0, detector_bitmask=0;
+	
+	if (test_emitters ) emitter_bitmask =0xFFFF;
+	if (test_detectors) detector_bitmask=0xFFFF;
+	
+	test_bom_bitmask (emitter_bitmask, detector_bitmask);
+}
Index: branches/scout/projects/diagnostic_station/station/hardware_turntable.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_turntable.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_turntable.h	(revision 1346)
@@ -0,0 +1,18 @@
+#ifndef _hardware_turntable_h
+#define _hardware_turntable_h
+
+#include <dragonfly_lib.h>
+#include "global.h"
+
+#define TURNTABLE_HOME_POSITION 0
+
+
+void turntable_init (void);
+/*
+ * position: 10 bit angle, 0 is facing directly in to the station
+ *     positive numbers are counterclockwise looking down on the robot
+ */
+void turntable_rotate_to_position (int16_t position);
+uint16_t turntable_get_position (void);
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/hardware_turntable.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_turntable.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_turntable.c	(revision 1346)
@@ -0,0 +1,135 @@
+#include "hardware_turntable.h"
+#include <encoders.h>
+
+#define TURNTABLE_ENCODER_ZERO 737
+
+#define MOTOR_TURNTABLE_SET motor1_set
+#define TURNTABLE_ENCODER RIGHT
+#define TURNTABLE_MAX_PWM 255
+
+#define TURNTABLE_TOLERANCE 5
+#define TURNTABLE_STABLE_READINGS 100
+
+//180 seems to be just below
+#define TURNTABLE_PWM_OFFSET 160
+#define TURNTABLE_P 2
+
+//this seems like it should be between 50:200
+//100 is a little slow, but probably good
+#define TURNTABLE_I_DIV 100 
+
+int16_t turntable_encoder_offset = 0;
+
+void turntable_init ()
+{
+  int e;
+  encoders_init();
+
+  encoder_wait(1);
+
+  // get a reading to check alignment
+  e = encoder_read(TURNTABLE_ENCODER);
+  if(e==ENCODER_MAGNET_FAILURE)
+    usb_puts("# ERROR: turntable encoder magnet failure!!" NL);
+  else if(e==ENCODER_MISALIGNED)
+    usb_puts("# ERROR: turntable encoder misaligned!!" NL);
+  else if(e==ENCODER_DATA_NOT_READY)
+    usb_puts("# ERROR: turntable encoder data not ready!!" NL);
+
+  //get the offset
+  turntable_encoder_offset = e - TURNTABLE_ENCODER_ZERO;
+  //make it be less than 512
+  while(turntable_encoder_offset > 512)
+    turntable_encoder_offset -= 1024;
+  while(turntable_encoder_offset < -512)
+    turntable_encoder_offset += 1024;
+
+
+  motors_init();
+}
+
+void turntable_rotate_to_position (int16_t position)
+{
+  int16_t turntable=0;
+  uint8_t direction=0, last_direction=0;
+  int16_t error = 0;
+
+  //must be 16 bit to check for overflow
+  uint16_t power=0;
+  uint8_t cycle_count=0;
+
+  usb_puts ("# Turntable rotating to ");
+  usb_puti (position);
+  usb_puts (NL);
+
+  /*  MOTOR_TURNTABLE_SET(1, TURNTABLE_PWM_OFFSET);
+
+  delay_ms(1000);
+  return;
+  */
+
+  while(abs((turntable = turntable_get_position()) - position) > TURNTABLE_TOLERANCE)
+  {
+    
+    while(abs((turntable = turntable_get_position()) - position) > TURNTABLE_TOLERANCE)
+    {
+      //figure out which direction to set the motor
+      last_direction = direction;
+      direction = turntable < position;
+
+      //clear the accumuliated error when switching directions
+      if(last_direction != direction)
+	error = 0;
+
+
+//only add to the error every TURNTABLE_I_DIV cycles
+	if(++cycle_count > TURNTABLE_I_DIV)
+	{
+	  error += turntable - position;
+	  cycle_count = 0;
+	}
+
+	power = abs(TURNTABLE_P*(turntable - position) + error) + TURNTABLE_PWM_OFFSET;
+	if(power > TURNTABLE_MAX_PWM)
+	  power = TURNTABLE_MAX_PWM;
+	MOTOR_TURNTABLE_SET(direction, power);
+	
+
+	/*     usb_puti(turntable); */
+	/*     usb_puts(NL); */
+
+	if(turntable >= 1024)
+	{
+	  usb_puts("# ERROR: magnetic encoder error!" NL);
+	  break;
+	}
+
+	usb_puti(error);
+	usb_puts(" ");
+	usb_puti(direction);
+	usb_puts(" ");
+	usb_puti(power);
+	usb_puts(NL);
+
+	delay_ms(1);
+
+	encoder_wait(1);
+    }
+
+    encoder_wait(TURNTABLE_STABLE_READINGS);
+  }
+
+
+  MOTOR_TURNTABLE_SET(direction, 0);
+
+  //just to prevent resetting
+  delay_ms(50);
+	
+  usb_puts ("# Turntable position reached" NL);
+}
+
+uint16_t turntable_get_position (void)
+{
+  return encoder_get_dx(TURNTABLE_ENCODER) + turntable_encoder_offset;
+  //  return encoder_read(TURNTABLE_ENCODER);
+}
Index: branches/scout/projects/diagnostic_station/station/dump_robot.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/dump_robot.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/dump_robot.c	(revision 1346)
@@ -0,0 +1,78 @@
+#include "dump_robot.h"
+
+#include <dragonfly_lib.h>
+
+#include "global.h"
+#include "comm_robot.h"
+
+
+void dump_robot_encoders (void)
+{
+	int16_t left, right;
+	char c;
+
+	robot_reset_encoders ();
+
+	while (usb_getc_nb (&c)==-1)
+	{
+		robot_read_encoders (&left, &right);
+		
+		usb_puts ("Left:  "); usb_puti (left ); usb_puts (NL);
+		usb_puts ("Right: "); usb_puti (right); usb_puts (NL);
+		usb_puts (NL NL);
+		
+		delay_ms (50);
+	}
+}
+
+void dump_robot_rangefinders (void)
+{
+	uint16_t rf[5];
+	char c;
+
+	while (usb_getc_nb (&c)==-1)
+	{
+		// First read all of the values, then print them, because it's much more readable that way.
+
+		for (uint8_t i=0; i<5; ++i)
+		{
+			robot_read_rangefinder (i, &rf[i]);
+		}
+
+		for (uint8_t i=0; i<5; ++i)
+		{
+			usb_puti (i);
+			usb_puts (": ");
+			usb_puti (rf[i]);
+			usb_puts (NL);
+		}
+
+		usb_puts (NL NL);
+	}
+}
+
+void dump_robot_bom (void)
+{
+	int16_t bom[16];
+	char c;
+	
+	while (usb_getc_nb (&c)==-1)
+	{
+		// First read all of the values, then print them, because it's much more readable that way.
+		
+		//for (uint8_t i=0; i<16; ++i)
+			//robot_read_bom (i, &bom[i]);
+		
+		robot_read_bom_all (bom);
+
+		for (uint8_t i=0; i<16; ++i)
+		{
+			if (i<10) usb_puts (" ");
+			usb_puti (i);
+			usb_puts (": ");
+			usb_puti (bom[i]);
+			usb_puts (NL);
+		}
+		usb_puts (NL NL);
+	}
+}
Index: branches/scout/projects/diagnostic_station/station/comm_robot.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/comm_robot.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/comm_robot.c	(revision 1346)
@@ -0,0 +1,339 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <string.h>
+
+#include "global.h"
+#include "comm_robot.h"
+#include "../common/comm_station_robot.h"
+
+
+#define received_state_waiting 0
+#define received_state_pre_timeout 1
+#define received_state_timeout 2
+#define received_state_received 3
+#define received_state_uninitialized 4
+
+#define MAX_PACKET_LENGTH 32
+
+uint8_t received_buffer[MAX_PACKET_LENGTH]; // Maximum length of a packet to be handled
+uint8_t received_length;
+uint8_t received_state;
+
+
+
+// *********************
+// ** Motor direction **
+// *********************
+
+/**
+  * All the functions in this file use these motor settings: a pair (direction/velocity) maps to a pair motor_direction/
+  * motor_velocity. motor_direction and motor_velocity are the values passed to the library functions and also sent
+  * to the robot. direction also includes an "off" direction. If the direction is off, the motor_velocity is always 0.\
+  **/
+
+char *motor_direction_string (uint8_t direction)
+{
+	if (direction==motor_direction_forward)
+		return "forward";
+	else if (direction==motor_direction_backward)
+		return "backward";
+	else if (direction==motor_direction_off)
+		return "off";
+	else
+		return "?";
+}
+
+static uint8_t motor_direction (uint8_t direction, uint8_t velocity)
+{
+	if (direction==motor_direction_backward)
+		return BACKWARD;
+	else
+		return FORWARD;
+}
+
+static uint8_t motor_velocity (uint8_t direction, uint8_t velocity)
+{
+	if (direction==motor_direction_off)
+		return 0;
+	else
+		return velocity;
+}
+
+
+// ***************************
+// ** Common comm functions	**
+// ***************************
+
+static void send_packet (char type, char *data, int len)
+{
+	// Right now we only wait until we receive *any* packet (with the appropriate group), so the functionality for
+	// sending command packets and request packets is the same.
+	// Note that this will horribly fail if other people are using the same channel/group.
+	
+	// Keep sending the packet until we get a reply (retry on timeout)
+	do
+	{
+		received_state=received_state_waiting;
+	
+		// Send the request packet
+		wl_send_global_packet (station_robot_group, type, data, len, 0);
+		
+		// When the reply is received, the receive handler will set received_state to recieved_state_received. Wait
+		// until this happens, periodically calling the wl_do function to handle incoming messages.
+		
+		// Keep polling the wireless until the state is either "received" or "timeout" (as set by the callbacks)
+		while (received_state!=received_state_received && received_state!=received_state_timeout)
+			wl_do();
+			
+		if (received_state==received_state_timeout)
+			usb_puts ("# Timeout, retrying" NL);
+	}
+	while (received_state==received_state_timeout);
+}
+
+// A packet that is followed by a "done" packet from the robot.
+static void send_command_packet (char type, char *data, int len)
+{
+	send_packet (type, data, len);
+}
+
+// A packet that is followed by a data packet from the robot
+static void send_request_packet(char type, char *data, int len)
+{
+	send_packet (type, data, len);
+}
+
+
+// *************************
+// ** Individual commands **
+// *************************
+
+void robot_set_orbs (uint8_t red1, uint8_t green1, uint8_t blue1, uint8_t red2, uint8_t green2, uint8_t blue2)
+{
+	char data[6];
+
+	data[0]=red1;
+	data[1]=green1;
+	data[2]=blue1;
+	
+	data[3]=red2;
+	data[4]=green2;
+	data[5]=blue2;
+
+	send_command_packet (station_robot_set_orbs, data, 6);
+}
+
+/** Direction is motor_direction_off/forward/backward, not FORWARD/BACKWARD */
+void robot_set_motors (uint8_t direction1, uint8_t speed1, uint8_t direction2, uint8_t speed2)
+{
+	char data[4];
+	
+	data[0]=motor_direction (direction1, speed1);
+	data[1]=motor_velocity  (direction1, speed1);
+	data[2]=motor_direction (direction2, speed2);
+	data[3]=motor_velocity  (direction2, speed2);
+	
+	send_command_packet (station_robot_set_motors, data, 4);
+}
+
+/** Direction is direction_off/forward/backward, not FORWARD/BACKWARD */
+void robot_set_motors_time (uint8_t direction1, uint8_t speed1, uint8_t direction2, uint8_t speed2, uint16_t time_ms)
+{
+	char data[6];
+	
+	data[0]=motor_direction (direction1, speed1);
+	data[1]=motor_velocity  (direction1, speed1);
+	data[2]=motor_direction (direction2, speed1);
+	data[3]=motor_velocity  (direction2, speed2);
+	data[4]=WORD_BYTE_0(time_ms);
+	data[5]=WORD_BYTE_1(time_ms);
+	
+	send_command_packet (station_robot_set_motors_time, data, 6);
+}
+
+void robot_set_motors_off (void)
+{
+	send_command_packet (station_robot_set_motors_off, NULL, 0);
+}
+
+void robot_set_bom (uint16_t bitmask)
+{
+	char data[2];
+	
+	data[0]=WORD_BYTE_0(bitmask);
+	data[1]=WORD_BYTE_1(bitmask);
+	
+	send_command_packet (station_robot_set_bom, data, 2);
+}
+
+void robot_reset_encoders (void)
+{
+	send_command_packet (station_robot_reset_encoders, NULL, 0);
+}
+
+
+// *************************
+// ** Individual requests **
+// *************************
+
+bool robot_read_encoders (int16_t *left, int16_t *right)
+{
+	send_request_packet (station_robot_read_encoders, NULL, 0);
+	
+	// Now the received data is in received_buffer/received_length
+	if (received_length>=4)
+	{
+		*left =WORD(received_buffer[0], received_buffer[1]);
+		*right=WORD(received_buffer[2], received_buffer[3]);
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
+bool robot_read_bom (uint8_t num, uint16_t *value)
+{
+	send_request_packet(station_robot_read_bom, (char *)&num, 1);
+	
+	// Now the received data is in received_buffer/received_length
+	if(received_length >= 2)
+	{
+		*value = WORD(received_buffer[0], received_buffer[1]);
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+
+}
+
+bool robot_read_rangefinder (uint8_t num, uint16_t *value)
+{
+	send_request_packet(station_robot_read_rangefinder, (char *)&num, 1);
+	
+	// Now the received data is in received_buffer/received_length
+	if(received_length >= 2)
+	{
+		*value = WORD(received_buffer[0], received_buffer[1]);
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
+bool robot_read_bom_all (int16_t *value)
+{
+	send_request_packet(station_robot_read_bom_all, NULL, 0);
+	
+	// Now the received data is in received_buffer/received_length
+	if(received_length >= 32)
+	{
+		value[0] = WORD(received_buffer[0], received_buffer[1]);
+		value[1] = WORD(received_buffer[2], received_buffer[3]);
+		value[2] = WORD(received_buffer[4], received_buffer[5]);
+		value[3] = WORD(received_buffer[6], received_buffer[7]);
+		value[4] = WORD(received_buffer[8], received_buffer[9]);
+		value[5] = WORD(received_buffer[10], received_buffer[11]);
+		value[6] = WORD(received_buffer[12], received_buffer[13]);
+		value[7] = WORD(received_buffer[14], received_buffer[15]);
+		value[8] = WORD(received_buffer[16], received_buffer[17]);
+		value[9] = WORD(received_buffer[18], received_buffer[19]);
+		value[10] = WORD(received_buffer[20], received_buffer[21]);
+		value[11] = WORD(received_buffer[22], received_buffer[23]);
+		value[12] = WORD(received_buffer[24], received_buffer[25]);
+		value[13] = WORD(received_buffer[26], received_buffer[27]);
+		value[14] = WORD(received_buffer[28], received_buffer[29]);
+		value[15] = WORD(received_buffer[30], received_buffer[31]);
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
+bool robot_read_eeprom(uint8_t *id, uint8_t *bom_type)
+{
+	send_request_packet(station_robot_read_eeprom, NULL, 0);
+	
+	// Now the received data is in received_buffer/received_length
+	if(received_length >= 2)
+	{
+		*id = received_buffer[0];
+    *bom_type = received_buffer[1];
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
+// ***********************
+// ** Receive callbacks **
+// ***********************
+
+static void robot_station_receive (char type, int source, unsigned char* packet, int length)
+{
+	// Dump the raw packet
+	//usb_puts ("# [");
+	//for (uint8_t i=0; i<length; ++i)
+	//{
+	//	if (i!=0) usb_putc (' ');
+	//	usb_puti (packet[i]);
+	//}
+	//usb_putc (']');
+	
+	// We received some data from the robot. It is not handled immediately as some function is waiting for it.
+	
+	// Note the fact that we received some data
+	received_state=received_state_received;
+	
+	// The packet buffer might be overwritten after this function returns, so we have to make a copy of the data.
+	
+	// First, determine the number of bytes to copy. It is the minimum of the received length and the size of the data
+	// buffer the data is copied to. If the received length is greater than the buffer size, print an error message.
+	// We could stop here (while (1);), but then any long packet would stop the program, even if it's unrelated to
+	// what we're doing.
+	received_length=length;
+	if (sizeof (received_buffer)<received_length)
+	{
+		received_length=sizeof (received_buffer);
+		usb_puts ("# Error: received packet is too long for allocated buffer." NL);
+	}
+	
+	// Now copy the data
+	memcpy (received_buffer, packet, received_length);
+}
+
+static void robot_station_timeout (void)
+{
+	if      (received_state==received_state_waiting    ) { received_state=received_state_pre_timeout; }
+	else if (received_state==received_state_pre_timeout) { received_state=received_state_timeout    ; }
+}
+
+// ********************
+// ** Initialization **
+// ********************
+
+// Must not be a local variable because the library doesn't make a copy of it.
+PacketGroupHandler receive_handler={robot_station_group, robot_station_timeout, NULL, &robot_station_receive, NULL};
+
+void comm_robot_init ()
+{
+	received_state=received_state_uninitialized;
+	received_length=0;
+
+	usb_puts("# Initializing robot communication" NL);
+	xbee_init ();
+	wl_init();
+	usb_puts("# Done" NL);
+	
+	//PacketGroupHandler xxx_receive_handler = {robot_station_group, NULL, NULL, &robot_station_receive, NULL};
+	wl_register_packet_group(&receive_handler);
+}
Index: branches/scout/projects/diagnostic_station/station/comm_robot.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/comm_robot.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/comm_robot.h	(revision 1346)
@@ -0,0 +1,28 @@
+#ifndef _robot_comm_h
+#define _robot_comm_h
+
+#include <wireless.h>
+
+void comm_robot_init (void);
+
+char *motor_direction_string (uint8_t direction);
+
+void robot_set_orbs (uint8_t red1, uint8_t green1, uint8_t blue1, uint8_t red2, uint8_t green2, uint8_t blue2);
+void robot_set_motors (uint8_t direction1, uint8_t speed1, uint8_t direction2, uint8_t speed2);
+void robot_set_motors_time (uint8_t direction1, uint8_t speed1, uint8_t direction2, uint8_t speed2, uint16_t time_ms);
+void robot_set_motors_off (void);
+void robot_set_bom (uint16_t bitmask);
+void robot_reset_encoders (void);
+
+bool robot_read_encoders (int16_t *left, int16_t *right);
+bool robot_read_bom (uint8_t num, uint16_t *value);
+bool robot_read_rangefinder (uint8_t num, uint16_t *value);
+bool robot_read_bom_all (int16_t *value);
+bool robot_read_eeprom(uint8_t *id, uint8_t *bom_type);
+
+#define motor_direction_off 0
+#define motor_direction_forward 1
+#define motor_direction_backward 2
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/test_comm.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_comm.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_comm.c	(revision 1346)
@@ -0,0 +1,34 @@
+#include "test_comm.h"
+#include "global.h"
+#include "comm_robot.h"
+#include <bom.h>
+
+/** Returns whether we have communication **/
+bool test_comm ()
+{
+	usb_puts("# Testing communications" NL);
+
+	// FIXME implement
+  uint8_t id,bom_type;
+  
+	bool success = robot_read_eeprom(&id, &bom_type);
+
+	if (success)
+	{
+    usb_puts("# Testing communication finished (communication succeeded)" NL);
+    usb_puts("# Robot ID:");
+    usb_puti(id);
+    usb_puts(" BOM type:");
+    switch (bom_type)
+    {
+      case BOM10: usb_puts("1.0" NL); break;
+      case BOM15: usb_puts("1.5" NL); break;
+      case RBOM: usb_puts("RBOM" NL); break;
+      default: usb_puti(bom_type); usb_puts("(invalid)" NL);
+    }
+  }
+	else
+		usb_puts("# Testing communication finished (communication failed)" NL);
+
+	return success;
+}
Index: branches/scout/projects/diagnostic_station/station/hardware.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware.c	(revision 1346)
@@ -0,0 +1,12 @@
+#include "hardware.h"
+
+void hardware_init ()
+{
+	usb_puts ("# Initializing station hardware" NL);
+	
+	dynamos_init ();
+	ibom_init ();
+	//wall_init ();
+	turntable_init ();
+}
+
Index: branches/scout/projects/diagnostic_station/station/self_test.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/self_test.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/self_test.c	(revision 1346)
@@ -0,0 +1,12 @@
+#include "test_bom.h"
+#include "global.h"
+
+void self_test (void)
+{
+	usb_puts("# Doing self test" NL);
+	
+	// FIXME implement
+	// move everything around a bit, and flahsh the lights
+	
+	usb_puts("# Self test finished" NL);
+}
Index: branches/scout/projects/diagnostic_station/station/comm_server.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/comm_server.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/comm_server.c	(revision 1346)
@@ -0,0 +1,397 @@
+#include "comm_server.h"
+
+#include <avr/pgmspace.h>
+#include <string.h>
+
+#include "global.h"
+#include "tests.h"
+
+#include "comm_interactive.h"
+
+// ##############
+// ## Settings ##
+// ##############
+
+//#define comm_server_debug
+
+// ###############
+// ## Constants ##
+// ###############
+
+#define buffer_size 120
+
+// Put all symbolic string constants into the program memory because else all of them would be copied into the RAM (see
+// the avr-libc documentation, chapter "Data in Program Space").
+
+// Commands 
+const char command_ping          [] PROGMEM = "ping"       ;
+const char command_start_test    [] PROGMEM = "start_test" ;
+const char command_all           [] PROGMEM = "all"        ;
+const char command_comm          [] PROGMEM = "comm"       ;
+const char command_bom           [] PROGMEM = "bom"        ;
+const char command_rangefinder   [] PROGMEM = "rangefinder";
+const char command_motor         [] PROGMEM = "motor"      ;
+const char command_encoder       [] PROGMEM = "encoder"    ;
+const char command_emitter       [] PROGMEM = "emitter"    ;
+const char command_detector      [] PROGMEM = "detector"   ;
+const char command_help          [] PROGMEM = "help"       ;
+const char command_interactive   [] PROGMEM = "interactive";
+const char command_i             [] PROGMEM = "i"          ;
+
+// Help
+const char help_text          [] PROGMEM =
+	"# Available commands:" NL
+	"#   - help" NL
+	"#   - ping" NL
+	"#   - start_test all" NL
+	"#   - start_test comm" NL
+	"#   - start_test bom all|<num> (0..15)" NL
+	"#   - start_test rangefinder all|<num> (0..4)" NL
+	"#   - start_test motor all|<num> (0..1)" NL
+	"#   - start_test encoder all|<num> (0..1)" NL
+	;
+
+
+// ####################
+// ## Initialization ##
+// ####################
+
+void comm_server_init ()
+{
+	usb_init ();
+}
+
+
+// ########################
+// ## Message processing ##
+// ########################
+
+static char *find_next_parameter (char *p)
+{
+	// Advance p until a blank or the terminating zero is found.
+	while ((*p)!=' ' && (*p)!=0) p++;
+	
+	// Advance p until a non-blank (including the terminating zero) is found.
+	while (*p==' ') p++;
+	
+	// We have found the next parameter unless p points to the terminating zero.
+	if (*p==0)
+		return NULL;
+	else
+		return p;
+}
+
+/** Check if the buffer starts with the given text, followed by a space */
+static bool serial_match (PGM_P text, const char *buffer)
+{
+	uint8_t text_len=strlen_P (text);
+	uint8_t buffer_len=strlen (buffer);
+
+	// If the buffer is shorter than the text, there is no match
+	if (buffer_len<text_len) return false;
+
+	// If the buffer is longer than the text, it must have a space at position after the text
+	if (buffer_len>text_len && buffer[text_len]!=' ') return false;
+
+	// Test for match
+	if (strncmp_P ((char *)buffer, text, text_len)==0) return true;
+	
+	return false;
+}
+
+static bool serial_number_u8 (uint8_t *num, const char *buffer)
+{
+	uint8_t result=0;
+	
+	// Iterate over the buffer
+	while (1)
+	{
+		// Look at the character
+		char c=*buffer;
+
+		if (c>='0' && c<='9')
+		{
+			// It's a digit. Process it.
+			result*=10;
+			result+=(c-'0');
+		}
+		else if (c==' ' || c==0)
+		{
+			// It's a space or a terminating zero, which means that the paramter is a valid number.
+			*num=result;
+			return true;
+		}
+		else
+		{
+			// It's a different character, which means that the parameter is not a number.
+			return false;
+		}
+		
+		// Move to the next byte
+		buffer++;
+	}
+}
+
+
+
+
+
+
+// ########################
+// ## Messages (sending) ##
+// ########################
+
+void server_send_finished ()
+{
+	usb_puts ("finished");
+}
+
+// ##########################
+// ## Messages (Receiving) ##
+// ##########################
+
+static void unhandled_parameters (char *buffer)
+{
+	usb_puts ("# Warning: unhandled parameters: [");
+	usb_puts (buffer);
+	usb_puts ("]" NL);
+}
+
+static void parameter_missing (void)
+{
+	usb_puts ("# Parameter missing" NL);
+}
+
+
+// ######################
+// ## Message handlers ##
+// ######################
+
+
+static void handle_message_ping (char *buffer)
+{
+	usb_puts ("pong" NL);
+	orbs_set (255, 127, 0, 0, 255, 0);
+	delay_ms (400);
+	orbs_set (0, 255, 0, 255, 127, 0);
+}
+
+static void handle_message_start_test_all (char *buffer)
+{
+	test_all ();
+}
+
+static void handle_message_start_test_comm (char *buffer)
+{
+	test_comm ();
+}
+
+/** If the next parameter is "all", call the test all function. If it's a number, call the test one function. **/
+static void handle_message_start_test_component (char *buffer, void (*test_all_fn)(void), void (*test_one_fn)(uint8_t))
+{
+	// Find the next parameter
+	buffer=find_next_parameter (buffer);
+
+	// Initialize a buffer for the component number
+	uint8_t num=0;
+
+	if (!buffer)
+		// No paramter found (we could also interpret that as implicit "all")
+		parameter_missing ();
+	else if (serial_match (command_all, buffer))
+		// The paramter is "all". Call the all-tests function
+		test_all_fn ();
+	else if (serial_number_u8 (&num, buffer))
+		// The paramter is a number. Call the one-test function 
+		test_one_fn (num);
+	else
+		// Unknwon parameter
+		unhandled_parameters (buffer);
+}
+
+static void test_bom_both     (uint8_t num) { test_bom (num, true , true ); }
+static void test_bom_emitter  (uint8_t num) { test_bom (num, true , false); }
+static void test_bom_detector (uint8_t num) { test_bom (num, false, true ); }
+
+static void test_bom_all_both     (void) { test_bom_all (true , true ); }
+static void test_bom_all_emitter  (void) { test_bom_all (true , false); }
+static void test_bom_all_detector (void) { test_bom_all (false, true ); }
+
+static void handle_message_start_test_bom (char *buffer)
+{
+	// "start_test bom..."
+	char *param=find_next_parameter (buffer);
+	
+	// In addition to "all" and a number, both handled by handle_message_start_test_component, we can also have
+	// "emitter" and "detector" here. Not that we pass param rather than buffer in these cases.
+	if (!param)
+		// "start_test bom"
+		// No paramter found (we could also pass that on to start_test_component)
+		parameter_missing ();
+	else if (serial_match (command_emitter, param))
+		// "start_test bom emitter..."
+		handle_message_start_test_component (param, test_bom_all_emitter, test_bom_emitter);
+	else if (serial_match (command_detector, param))
+		// "start_test bom detector..."
+		handle_message_start_test_component (param, test_bom_all_detector, test_bom_detector);
+	else
+		// No emitter/detector given
+		handle_message_start_test_component (buffer, test_bom_all_both, test_bom_both);
+}
+
+static void handle_message_start_test_rangefinder (char *buffer)
+{
+	handle_message_start_test_component (buffer, test_rangefinder_all, test_rangefinder);
+}
+
+static void handle_message_start_test_motor (char *buffer)
+{
+	handle_message_start_test_component (buffer, test_motor_all, test_motor);
+}
+
+static void handle_message_start_test_encoder (char *buffer)
+{
+	handle_message_start_test_component (buffer, test_encoder_all, test_encoder);
+}
+
+static void handle_message_start_test (char *buffer)
+{
+	// TODO add required comm test
+	buffer=find_next_parameter (buffer);
+	if (!buffer)                                         parameter_missing ();
+	else if (serial_match (command_all        , buffer)) handle_message_start_test_all         (buffer);
+	else if (serial_match (command_comm       , buffer)) handle_message_start_test_comm        (buffer);
+	else if (serial_match (command_bom        , buffer)) handle_message_start_test_bom         (buffer);
+	else if (serial_match (command_rangefinder, buffer)) handle_message_start_test_rangefinder (buffer);
+	else if (serial_match (command_motor      , buffer)) handle_message_start_test_motor       (buffer);
+	else if (serial_match (command_encoder    , buffer)) handle_message_start_test_encoder     (buffer);
+	else                                                 unhandled_parameters (buffer);
+}
+
+static void handle_message_help (char *buffer)
+{
+	usb_puts_P (help_text);
+}
+
+
+// ##########################
+// ## Messages (receiving) ##
+// ##########################
+
+/** message is 0 terminated */
+static void handle_message (char *message)
+{
+#ifdef comm_server_debug
+	// Output: "# Received a message, size <size>: [<message>]"
+	usb_puts ("# Received a message, size ");
+	usb_puti(size);
+	usb_puts (": [");
+	usb_puts ((char *)message);
+	usb_puts ("]" NL);
+#endif
+	
+	bool handled=false;
+	if (serial_match (command_ping       , message)) { handle_message_ping       (message); handled=true; }
+	if (serial_match (command_start_test , message)) { handle_message_start_test (message); handled=true; }
+	if (serial_match (command_help       , message)) { handle_message_help       (message); handled=true; }
+	if (serial_match (command_interactive, message)) { interactive_main ()                ; handled=true; }
+	if (serial_match (command_i          , message)) { interactive_main ()                ; handled=true; }
+	// More messages go here
+	
+	if (!handled)
+	{
+		usb_puts ("# Warning: unhandled message: [");
+		usb_puts ((char *)message);
+		usb_puts ("]" NL);
+	}
+}
+
+
+// ###############
+// ## Debugging ##
+// ###############
+
+void byte_transmission_test (void)
+{
+	uint8_t c;
+	
+	while (1)
+	{
+		c=usb_getc ();
+		usb_puts ("[");
+		usb_puti (c);
+		usb_puts ("] ");
+	}
+}
+
+
+// ###############
+// ## Main loop ##
+// ###############
+
+static void ready (void)
+{
+	usb_puts ("ready" NL);
+}
+
+void server_main (void)
+{
+	char buffer[buffer_size];
+	uint8_t c;
+	uint8_t buffer_fill=0;
+
+	// Set the orbs to green/yellow
+	orbs_set (0,255,0, 255,127,0);
+
+	//byte_transmission_test (); // Does not return
+
+	usb_puts (NL);
+	usb_puts ("# Diagnostic station server mode" NL);
+
+	ready ();
+	
+	while (1)
+	{
+		// Do nothing until we receive a byte (this function will return 0 when a character has been read)
+		// (Yes, we could use the blocking function for now, but we may need the non-blocking later)
+		while (usb_getc_nb ((char *)&c));
+		
+		if (c=='\r' || c=='\n')
+		{
+			// A newline character was received. This terminates the message.
+			
+			// Empty lines are ignored.
+			if (buffer_fill>0)
+			{
+				// Add a terminating 0 to the buffer so the string functions won't try to read outside the buffer.
+				buffer[buffer_fill]=0;
+				
+				// Handle the message.
+				handle_message (buffer);
+				
+				// Reset the buffer
+				buffer_fill=0;
+			}
+			
+			// TODO do better, make a function get_message?
+			ready ();
+		}
+		else if (c==8)
+		{
+			// Backspace
+			// Of course, the server will never send one, but it's convenient to have for debugging.
+			if (buffer_fill>0) --buffer_fill;
+		}
+		else
+		{
+			// If there is enough space left in the buffer, add the character we just received. Leave one byte for a
+			// terminating 0. If there is not enough space in the buffer, the rest of the message is ignored.
+			if (buffer_fill<buffer_size-1)
+			{
+				buffer[buffer_fill]=c;
+				++buffer_fill;
+			}
+		}
+	
+	}
+}
Index: branches/scout/projects/diagnostic_station/station/dump_station.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/dump_station.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/dump_station.c	(revision 1346)
@@ -0,0 +1,91 @@
+#include "dump_station.h"
+
+#include "hardware.h"
+
+void dump_station_dynamos (void)
+{
+	int16_t left, right;
+	char c;
+
+	dynamos_reset ();
+
+	while (usb_getc_nb (&c)==-1)
+	{
+		dynamos_read (&left, &right);
+		
+		usb_puts ("Left: "); usb_puti (left ); usb_puts (NL);
+		usb_puts ("Right:"); usb_puti (right); usb_puts (NL);
+		usb_puts (NL NL);
+
+		delay_ms (100);
+	}
+}
+
+void dump_station_turntable (void)
+{
+	uint16_t turntable;
+	char c;
+
+	while (usb_getc_nb (&c)==-1)
+	{
+		turntable=turntable_get_position ();
+		usb_puti (turntable);
+		usb_puts (NL);
+
+		delay_ms (100);
+	}
+}
+
+void dump_station_wall (void)
+{
+	uint16_t wall;
+	char c;
+
+	while (usb_getc_nb (&c)==-1)
+	{
+		wall=turntable_get_position ();
+		usb_puti (wall);
+		usb_puts (NL);
+		
+		delay_ms (100);
+	}
+}
+
+void dump_station_ibom (void)
+{
+	uint16_t top, left, right;
+	char c;
+
+	while (usb_getc_nb (&c)==-1)
+	{
+		ibom_update ();
+		ibom_read (&top, &left, &right);
+		
+		usb_puts ("Top:   "); usb_puti (top  ); usb_puts (NL);
+		usb_puts ("Left:  "); usb_puti (left ); usb_puts (NL);
+		usb_puts ("Right: "); usb_puti (right); usb_puts (NL);
+		usb_puts (NL NL);
+
+		delay_ms (100);
+	}
+}
+
+void dump_station_adc (uint8_t startPort, uint8_t endPort, uint16_t delay)
+{
+	char c;
+	
+	while (usb_getc_nb (&c)==-1)
+	{
+		for (uint8_t i=startPort; i<=endPort; ++i)
+		{
+			if (i<10) usb_puts (" ");
+			usb_puti (i);
+			usb_puts (": ");
+			usb_puti (analog10 (i));
+			usb_puts (NL);
+		}
+		usb_puts(NL NL);
+
+		delay_ms (delay);
+	}
+}
Index: branches/scout/projects/diagnostic_station/station/hardware_ibom.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_ibom.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_ibom.h	(revision 1346)
@@ -0,0 +1,27 @@
+#ifndef _hardware_ibom_h
+#define _hardware_ibom_h
+
+#include <dragonfly_lib.h>
+#include "global.h"
+
+/* 
+ * Inverse BOM sensor macros for left, right, and top positions. "Left" and "right" is as seen from the station, looking
+ * towards the robot.
+ */
+#define IBOM_SENSOR_LEFT AN6
+#define IBOM_SENSOR_RIGHT AN4
+#define IBOM_SENSOR_TOP AN5
+
+#define IBOM_EMITTER_PIN _PIN_F3	/* Connected to A5 on the board */
+
+/* Delay in milliseconds for lookup table to update all entries */
+#define IBOM_ANALOG_CYCLE_TIME 10	/* Measured time was 2.4 ms */
+
+void ibom_init (void);
+
+void ibom_set (bool on);
+void ibom_read (uint16_t *top, uint16_t *left, uint16_t *right);
+void ibom_update (void);
+void ibom_debug (void);
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/hardware_dynamos.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_dynamos.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_dynamos.c	(revision 1346)
@@ -0,0 +1,59 @@
+#include "hardware_dynamos.h"
+
+volatile int16_t count_l=0, count_r=0;
+
+
+void dynamos_init (void)
+{
+  //enable pin change interrupts 4 and 5 (correspond to DIO2 and DIO3)
+  //to trigger on both edges
+  cli();
+  EICRB |= _BV(ISC40) | _BV(ISC50);
+  EIMSK |= _BV(INT4) | _BV(INT5);
+  sei();
+  
+  //enable the 5V switching regulator to power the dynamos
+  DDRB |= _BV(PB4);
+  PORTB &= ~_BV(PB4);
+
+}
+
+void dynamos_reset (void)
+{
+  SYNC
+  {
+    count_l = 0;
+    count_r = 0;
+  }
+}
+
+ISR(INT4_vect)
+{
+  uint8_t temp = PINE;
+  
+  if(((temp&_BV(PE4))>>2)^(temp&_BV(PE2)))
+    count_r--;
+  else
+    count_r++;
+}
+
+ISR(INT5_vect)
+{
+  uint8_t temp = PINE;
+  
+  if(((temp&_BV(PE5))>>2)^(temp&_BV(PE3)))
+    count_l++;
+  else
+    count_l--;
+}
+
+
+void dynamos_read (int16_t *left, int16_t *right)
+{
+  SYNC
+  {
+	*left= count_l;
+    *right = count_r;
+  }
+}
+
Index: branches/scout/projects/diagnostic_station/station/hardware_wall.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_wall.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_wall.c	(revision 1346)
@@ -0,0 +1,98 @@
+#include "hardware_wall.h"
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+volatile uint16_t wall_position; // Wall position in encoder ticks
+
+void wall_init ()
+{
+    // Start the motors
+    motors_init();
+    motor2_set(FORWARD, 0);
+
+    // Enable 5V switching regulator to power dynamos
+    DDRB |= _BV(PB4);
+    PORTB &= ~_BV(PB4);
+
+    // Turn on the interrupts for the A quadrature
+    /* uncomment when we actually have encoders
+    cli();
+    EICRB |= _BV(ISC60);
+    EIMSK |= _BV(INT6);
+	sei();
+    */
+    // Enable limit switch as input
+    DDRF &= ~_BV(DDF0);
+    
+    usb_puts("# Wall moving back...\r\n");
+    delay_ms(1000);
+    // Move wall back until the switch is triggered
+    motor2_set(FORWARD, 255);  
+    while (!(PINF & _BV(PINF0)));
+    motor2_set(FORWARD, 0);
+
+    delay_ms(1000);
+    usb_puts("# Wall moving forward...\r\n");
+   
+    // Move wall forward slowly until the switch is untriggered
+    motor2_set(BACKWARD, 255);
+    while (PINF & _BV(PINF0));
+    motor2_set(FORWARD, 0);
+  
+    usb_puts("# Done with wall init\r\n");
+
+	wall_position = 0; 
+}
+
+
+void wall_set_position (uint16_t position)
+{
+    char i;
+	usb_puts ("# Moving wall from position ");
+	usb_puti (wall_position);
+	usb_puts (NL);
+	usb_puts ("# Moving wall to position ");
+	usb_puti (position);
+	usb_puts (NL);
+	
+    if (wall_position < position) {
+        for(i = 0; i < position - wall_position; i++) {
+            motor2_set(BACKWARD, 255);
+            delay_ms(2700);
+            motor2_set(FORWARD, 0);
+        }
+    } else if (wall_position > position) {
+        for(i = 0; i < wall_position - position; i++) {
+            motor2_set(FORWARD, 255);
+            delay_ms(2700);
+            motor2_set(FORWARD, 0);
+            if (PINF & _BV(PINF0))
+                break;
+        }
+
+    }
+
+	wall_position=position;
+	usb_puts ("# Wall position reached" NL);
+}
+
+
+// We might also need this because the wall_set_position might not reach the exact position
+uint16_t wall_get_position ()
+{
+	return wall_position;
+}
+/*
+// Read encoder when it changes and determine our position
+ISR(INT6_vect) {
+    uint8_t tmp = PINE;
+
+    if (((tmp & _BV(PE6)) << 1) ^ (tmp & _BV(PE7))) {
+        wall_position--;
+    } else {
+        wall_position++;
+    }
+}
+*/
+
+
Index: branches/scout/projects/diagnostic_station/station/hardware_ibom.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_ibom.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_ibom.c	(revision 1346)
@@ -0,0 +1,32 @@
+#include "hardware_ibom.h"
+
+void ibom_init (void)
+{
+	analog_init (ADC_START);
+}
+
+void ibom_set (bool on)
+{
+	if (on)
+	{
+		usb_puts ("# Turning IBOM light on" NL);
+		digital_output(IBOM_EMITTER_PIN, 1);
+	}
+	else
+	{
+		usb_puts ("# Turning IBOM light off" NL);
+		digital_output(IBOM_EMITTER_PIN, 0);
+	}
+}
+
+void ibom_read (uint16_t *top, uint16_t *left, uint16_t *right)
+{
+	*top	=analog10(IBOM_SENSOR_TOP);
+	*left	=analog10(IBOM_SENSOR_LEFT);
+	*right	=analog10(IBOM_SENSOR_RIGHT);
+}
+
+void ibom_update (void)
+{
+	delay_ms(IBOM_ANALOG_CYCLE_TIME);
+}
Index: branches/scout/projects/diagnostic_station/station/README
===================================================================
--- branches/scout/projects/diagnostic_station/station/README	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/README	(revision 1346)
@@ -0,0 +1,20 @@
+#####################################################################
+# Station Code Folder
+#####################################################################
+
+This folder contains code intended to be compiled and run on the
+dragonfly board controlling the station hardware. The station runs
+the tests and communicates with the server and the robot.
+
+COMPILE NOTES:
+	To compile, call
+	
+	make -f <your Makefile> [-program]
+
+	This is implemented to allow the development of several different
+	main functions simultaneously.
+
+NOTES:
+
+-	The total time to complete one cycle through the analog look-up
+	table was measured to be 2.4 milliseconds
Index: branches/scout/projects/diagnostic_station/station/Makefile_kwoo
===================================================================
--- branches/scout/projects/diagnostic_station/station/Makefile_kwoo	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/Makefile_kwoo	(revision 1346)
@@ -0,0 +1,522 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = target
+MAIN_FUNCTION = main_kwoo
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+CFLAGS += -D$(MAIN_FUNCTION)=main
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/diagnostic_station/station/comm_interactive.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/comm_interactive.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/comm_interactive.c	(revision 1346)
@@ -0,0 +1,101 @@
+#include "comm_interactive.h"
+
+#include <dragonfly_lib.h>
+
+#include "global.h"
+#include "tests.h"
+#include "self_test.h"
+
+#include "dump_robot.h"
+#include "dump_station.h"
+
+#include "hardware.h"
+
+#define ESC 27
+
+void station_sensors_menu (void)
+{
+	while (1)
+	{
+		usb_puts ("# Dump station sensors menu: (d)ynamos, (w)all, (t)urntable, (i)bom, (a)dc" NL);
+
+		char choice = usb_getc ();
+		switch (choice) {
+			case 'd': case 'D': dump_station_dynamos   ();           break;
+			case 'w': case 'W': dump_station_wall      ();           break;
+			case 't': case 'T': dump_station_turntable ();           break;
+			case 'i': case 'I': dump_station_ibom      ();           break;
+			case 'a': case 'A': dump_station_adc       (0, 16, 100); break;
+			case ESC: return;
+			default: break;
+		}
+	}
+}
+
+void robot_sensors_menu (void)
+{
+	while (1)
+	{
+		usb_puts ("# Dump robot sensors menu: (e)ncoders, (r)angefinders, (b)om" NL);
+
+		char choice = usb_getc ();
+		switch (choice) {
+			case 'e': case 'E': dump_robot_encoders     (); break;
+			case 'r': case 'R': dump_robot_rangefinders (); break;
+			case 'b': case 'B': dump_robot_bom          (); break;
+			case ESC: return;
+			default: break;
+		}
+	}
+}
+
+void tests_menu (void)
+{
+	while (1)
+	{
+		usb_puts ("# Tests menu: (a)ll, (c)omm, (b)om, (r)angefinders, (m)otors, (e)ncoders" NL);
+
+		char choice = usb_getc ();
+		switch (choice) {
+			case 'a': case 'A': test_all ();                                    break; // test_all will test comm itself
+			case 'c': case 'C': test_comm ();                                   break;
+			case 'b': case 'B': if (require_comm ()) test_bom_all (true, true); break;
+			case 'r': case 'R': if (require_comm ()) test_rangefinder_all ();   break;
+			case 'm': case 'M': if (require_comm ()) test_motor_all ();         break;
+			case 'e': case 'E': if (require_comm ()) test_encoder_all ();       break;
+			case ESC: return;
+			default: break;
+		}
+	}
+}
+
+
+void main_menu (void)
+{
+	while (1)
+	{
+		usb_puts ("# Main menu: (t)ests, dump (s)tation sensors, dump (r)obot sensors" NL);
+
+		char choice = usb_getc ();
+		switch (choice) {
+			case 't': tests_menu ();           break;
+			case 's': station_sensors_menu (); break;
+			case 'r': robot_sensors_menu ();   break;
+			case ESC: return;
+		}
+	}
+}
+
+void interactive_main (void)
+{
+	while (1)
+	{
+		// Set the orbs to green/green
+		orbs_set (0,255,0, 0,255,0);
+
+		usb_puts (NL);
+		usb_puts ("# Diagnostic station interactive mode" NL);
+
+		main_menu ();
+	}
+}
Index: branches/scout/projects/diagnostic_station/station/dump_station.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/dump_station.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/dump_station.h	(revision 1346)
@@ -0,0 +1,12 @@
+#ifndef _dump_station_h
+#define _dump_station_h
+
+#include <dragonfly_lib.h>
+
+void dump_station_dynamos (void);
+void dump_station_turntable (void);
+void dump_station_wall (void);
+void dump_station_ibom (void);
+void dump_station_adc (uint8_t startPort, uint8_t endPort, uint16_t delay);
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/hardware_dynamos.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_dynamos.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_dynamos.h	(revision 1346)
@@ -0,0 +1,12 @@
+#ifndef _hardware_dynamos_h
+#define _hardware_dynamos_h
+
+#include <dragonfly_lib.h>
+#include "global.h"
+
+void dynamos_init (void);
+
+void dynamos_read (int16_t *left, int16_t *right);
+void dynamos_reset (void);
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/hardware.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware.h	(revision 1346)
@@ -0,0 +1,24 @@
+#ifndef _station_hardware_h
+#define _station_hardware_h
+
+#include <dragonfly_lib.h>
+
+#include "global.h"
+
+#include "hardware_dynamos.h"
+#include "hardware_ibom.h"
+#include "hardware_wall.h"
+#include "hardware_turntable.h"
+
+
+void hardware_init (void);
+
+
+
+
+
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/dump_robot.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/dump_robot.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/dump_robot.h	(revision 1346)
@@ -0,0 +1,13 @@
+#ifndef _dump_robot_h
+#define _dump_robot_h
+
+void dump_robot_encoders (void);
+void dump_robot_rangefinders (void);
+void dump_robot_bom (void);
+
+
+
+
+
+#endif
+
Index: branches/scout/projects/diagnostic_station/station/comm_interactive.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/comm_interactive.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/comm_interactive.h	(revision 1346)
@@ -0,0 +1,11 @@
+#ifndef _comm_interactive_h
+#define _comm_interactive_h
+
+void interactive_main (void);
+
+
+
+
+
+#endif
+
Index: branches/scout/projects/diagnostic_station/station/hardware_wall.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/hardware_wall.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/hardware_wall.h	(revision 1346)
@@ -0,0 +1,14 @@
+#ifndef _hardware_wall_h
+#define _hardware_wall_h
+
+#include <dragonfly_lib.h>
+#include "global.h"
+
+
+void wall_init (void);
+
+void wall_set_position (uint16_t position);
+uint16_t wall_get_position (void);
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/tests.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/tests.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/tests.h	(revision 1346)
@@ -0,0 +1,15 @@
+#ifndef _tests_h
+#define _tests_h
+
+#include "test_comm.h"
+#include "test_bom.h"
+#include "test_rangefinders.h"
+#include "test_motors.h"
+#include "test_encoders.h"
+
+
+bool require_comm (void);
+void test_all (void);
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/test_rangefinders.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_rangefinders.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_rangefinders.h	(revision 1346)
@@ -0,0 +1,15 @@
+#ifndef _test_rangefinders_h
+#define _test_rangefinders_h
+
+#include <dragonfly_lib.h>
+
+void test_rangefinder (uint8_t num);
+void test_rangefinder_all (void);
+
+
+
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/test_bom.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_bom.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_bom.h	(revision 1346)
@@ -0,0 +1,10 @@
+#ifndef _test_bom_h
+#define _test_bom_h
+
+#include <dragonfly_lib.h>
+
+void test_bom_bitmask (uint16_t emitter_bitmask, uint16_t detector_bitmask);
+void test_bom (uint8_t num, bool test_emitter, bool test_detector);
+void test_bom_all (bool test_emitters, bool test_detectors);
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/test_motors.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_motors.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_motors.h	(revision 1346)
@@ -0,0 +1,15 @@
+#ifndef _test_motors_h
+#define _test_motors_h
+
+#include <dragonfly_lib.h>
+
+void test_motor (uint8_t num);
+void test_motor_all (void);
+
+
+
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/tests.c
===================================================================
--- branches/scout/projects/diagnostic_station/station/tests.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/tests.c	(revision 1346)
@@ -0,0 +1,37 @@
+#include "tests.h"
+
+#include <dragonfly_lib.h>
+#include "global.h"
+
+bool communication_ok=false;
+
+bool require_comm (void)
+{
+	if (!communication_ok)
+		communication_ok=test_comm ();
+
+	if (!communication_ok)
+		usb_puts ("# Communications required. Stop." NL);
+
+	return communication_ok;
+}
+
+void test_all (void)
+{
+	// test_all tests comm itself because we want to test comm, even if it
+	// succeeded before (that's what test_all means).
+	if (!test_comm ())
+	{
+		usb_puts ("# Communications required. Stop." NL);
+		return;
+	}
+	
+	test_bom_all (true, true);
+	test_rangefinder_all ();
+	test_encoder_all ();
+	test_motor_all ();
+}
+
+
+
+
Index: branches/scout/projects/diagnostic_station/station/test_encoders.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_encoders.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_encoders.h	(revision 1346)
@@ -0,0 +1,14 @@
+#ifndef _test_encoders_h
+#define _test_encoders_h
+
+#include <dragonfly_lib.h>
+
+void test_encoder (uint8_t num);
+void test_encoder_all (void);
+
+
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/comm_server.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/comm_server.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/comm_server.h	(revision 1346)
@@ -0,0 +1,16 @@
+#ifndef _server_comm_h
+#define _server_comm_h
+
+#include <dragonfly_lib.h>
+
+
+
+void comm_server_init (void);
+void server_send_finished (void);
+
+void server_main (void);
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/Makefile_martin
===================================================================
--- branches/scout/projects/diagnostic_station/station/Makefile_martin	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/Makefile_martin	(revision 1346)
@@ -0,0 +1,522 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = target
+MAIN_FUNCTION = main_martin
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+CFLAGS += -D$(MAIN_FUNCTION)=main
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/diagnostic_station/station/Makefile_john
===================================================================
--- branches/scout/projects/diagnostic_station/station/Makefile_john	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/Makefile_john	(revision 1346)
@@ -0,0 +1,522 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = target
+MAIN_FUNCTION = main_john
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+CFLAGS += -D$(MAIN_FUNCTION)=main
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/diagnostic_station/station/self_test.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/self_test.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/self_test.h	(revision 1346)
@@ -0,0 +1,10 @@
+#ifndef _self_test_h
+#define _self_test_h
+
+#include <dragonfly_lib.h>
+
+void self_test (void);
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/test_comm.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/test_comm.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/test_comm.h	(revision 1346)
@@ -0,0 +1,10 @@
+#ifndef _test_comm_h
+#define _test_comm_h
+
+#include <dragonfly_lib.h>
+
+bool test_comm (void);
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station/global.h
===================================================================
--- branches/scout/projects/diagnostic_station/station/global.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station/global.h	(revision 1346)
@@ -0,0 +1,16 @@
+#ifndef _global_h
+#define _global_h
+
+#define version_string "1.0"
+
+#define NL "\r\n"
+
+
+
+
+
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/station
===================================================================
--- branches/scout/projects/diagnostic_station/station	(nonexistent)
+++ branches/scout/projects/diagnostic_station/station	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/station
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,6 ##
+*.lst
+*.sym
+*.lss
+*.hex
+*.elf
+*.map
Index: branches/scout/projects/diagnostic_station/data/poster/motors_16.dat
===================================================================
--- branches/scout/projects/diagnostic_station/data/poster/motors_16.dat	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/poster/motors_16.dat	(revision 1346)
@@ -0,0 +1,224 @@
+140 0 140 0
+142 0 142 0
+144 0 144 0
+146 0 146 0
+148 0 148 0
+150 0 150 0
+152 0 152 0
+154 0 154 0
+156 0 156 304
+158 410 158 406
+160 670 160 460
+162 906 162 460
+164 962 164 884
+166 1162 166 1198
+168 1446 168 1364
+170 1644 170 1420
+172 1850 172 1606
+174 1890 174 1802
+176 2200 176 2012
+178 2398 178 2160
+180 2496 180 2328
+182 2780 182 2578
+184 2946 184 2692
+186 3126 186 2924
+188 3360 188 3104
+190 3512 190 3258
+192 3758 192 3516
+194 3924 194 3700
+196 4112 196 3892
+198 4328 198 4074
+200 4480 200 4282
+202 4684 202 4494
+204 4736 204 4708
+206 5034 206 4840
+208 5070 208 5056
+210 5378 210 5194
+212 5496 212 5466
+214 5798 214 5564
+216 5886 216 5726
+218 5934 218 5998
+220 6284 220 6088
+222 6392 222 6102
+224 6464 224 6570
+226 6804 226 6610
+228 6956 228 6690
+230 7036 230 7014
+232 7090 232 7226
+234 7126 234 7268
+236 7446 236 7306
+238 7654 238 7322
+240 7712 240 7332
+242 7672 242 8034
+244 7634 244 8058
+246 7606 246 8138
+248 7620 248 8114
+250 7674 250 8146
+250 7672 250 8128
+248 7604 248 8150
+246 7618 246 8132
+244 7650 244 8086
+242 7644 242 8026
+240 7190 240 7934
+238 7000 238 7672
+236 6954 236 7326
+234 6934 234 7260
+232 6900 232 7242
+230 6684 230 6962
+228 6474 228 6708
+226 6358 226 6546
+224 6288 224 6436
+222 6120 222 6112
+220 5898 220 6062
+218 5792 218 5990
+216 5660 216 5866
+214 5426 214 5636
+212 5328 212 5472
+210 5224 210 5258
+208 5010 208 5078
+206 4928 206 4878
+204 4768 204 4688
+202 4644 202 4490
+200 4410 200 4306
+198 4274 198 4090
+196 4088 196 3920
+194 3856 194 3712
+192 3702 192 3550
+190 3442 190 3366
+188 3356 188 3188
+186 3084 186 2962
+184 2972 184 2830
+182 2764 182 2566
+180 2596 180 2458
+178 2410 178 2248
+176 2136 176 2032
+174 2034 174 1876
+172 1828 172 1768
+170 1662 170 1510
+168 1386 168 1290
+166 1268 166 1152
+164 1138 164 1058
+162 902 162 842
+160 718 160 700
+158 626 158 76
+156 192 156 0
+154 0 154 0
+152 0 152 0
+150 0 150 0
+148 0 148 0
+146 0 146 0
+144 0 144 0
+142 0 142 0
+140 0 140 0
+-140 0 -140 0
+-142 0 -142 0
+-144 0 -144 0
+-146 0 -146 0
+-148 0 -148 0
+-150 0 -150 0
+-152 0 -152 0
+-154 -12 -154 0
+-156 0 -156 -404
+-158 0 -158 -218
+-160 0 -160 -704
+-162 0 -162 -790
+-164 -1026 -164 -888
+-166 -1132 -166 -1092
+-168 -1336 -168 -1296
+-170 -1524 -170 -1508
+-172 -1612 -172 -1730
+-174 -1916 -174 -1782
+-176 -2102 -176 -1970
+-178 -2236 -178 -2228
+-180 -2430 -180 -2382
+-182 -2638 -182 -2516
+-184 -2772 -184 -2768
+-186 -3022 -186 -2884
+-188 -3164 -188 -3132
+-190 -3306 -190 -3284
+-192 -3576 -192 -3498
+-194 -3698 -194 -3648
+-196 -3900 -196 -3830
+-198 -4124 -198 -3974
+-200 -4252 -200 -4298
+-202 -4416 -202 -4448
+-204 -4692 -204 -4640
+-206 -4708 -206 -4892
+-208 -5032 -208 -5044
+-210 -5040 -210 -5230
+-212 -5072 -212 -5438
+-214 -5440 -214 -5646
+-216 -5450 -216 -5714
+-218 -5824 -218 -5998
+-220 -5896 -220 -6170
+-222 -5916 -222 -6394
+-224 -6290 -224 -6572
+-226 -6444 -226 -6734
+-228 -6468 -228 -7008
+-230 -6798 -230 -7170
+-232 -7010 -232 -7284
+-234 -7052 -234 -7344
+-236 -7070 -236 -7398
+-238 -7092 -238 -7512
+-240 -7122 -240 -7958
+-242 -7194 -242 -8074
+-244 -7788 -244 -8108
+-246 -7828 -246 -8188
+-248 -7840 -248 -8202
+-250 -7878 -250 -8302
+-250 -7870 -250 -8278
+-248 -7848 -248 -8236
+-246 -7846 -246 -8208
+-244 -7808 -244 -8152
+-242 -7760 -242 -8146
+-240 -7678 -240 -7868
+-238 -7582 -238 -7714
+-236 -7144 -236 -7406
+-234 -7078 -234 -7342
+-232 -7076 -232 -7236
+-230 -6932 -230 -7048
+-228 -6846 -228 -6914
+-226 -6792 -226 -6678
+-224 -6776 -224 -6544
+-222 -6354 -222 -6380
+-220 -6288 -220 -6114
+-218 -6178 -218 -5968
+-216 -5862 -216 -5726
+-214 -5758 -214 -5552
+-212 -5418 -212 -5392
+-210 -5374 -210 -5196
+-208 -5142 -208 -4994
+-206 -4976 -206 -4800
+-204 -4694 -204 -4646
+-202 -4556 -202 -4434
+-200 -4386 -200 -4238
+-198 -4142 -198 -4106
+-196 -3990 -196 -3862
+-194 -3776 -194 -3722
+-192 -3610 -192 -3482
+-190 -3442 -190 -3336
+-188 -3244 -188 -3106
+-186 -3048 -186 -3000
+-184 -2908 -184 -2706
+-182 -2648 -182 -2642
+-180 -2516 -180 -2454
+-178 -2310 -178 -2240
+-176 -2108 -176 -2092
+-174 -1940 -174 -1940
+-172 -1784 -172 -1670
+-170 -1508 -170 -1538
+-168 -1392 -168 -1398
+-166 -1232 -166 -1266
+-164 -1072 -164 -1002
+-162 -850 -162 -718
+-160 -610 -160 -510
+-158 -304 -158 -494
+-156 -2 -156 -164
+-154 0 -154 0
+-152 0 -152 0
+-150 0 -150 0
+-148 0 -148 0
+-146 0 -146 0
+-144 0 -144 0
+-142 0 -142 0
+-140 0 -140 0
Index: branches/scout/projects/diagnostic_station/data/poster/motors_7.dat
===================================================================
--- branches/scout/projects/diagnostic_station/data/poster/motors_7.dat	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/poster/motors_7.dat	(revision 1346)
@@ -0,0 +1,224 @@
+140 0 140 0
+142 0 142 0
+144 0 144 0
+146 0 146 0
+148 0 148 0
+150 0 150 0
+152 0 152 0
+154 310 154 0
+156 544 156 0
+158 720 158 0
+160 832 160 0
+162 998 162 0
+164 1144 164 0
+166 1330 166 0
+168 1582 168 0
+170 1746 170 0
+172 1904 172 0
+174 2048 174 0
+176 2300 176 0
+178 2452 178 0
+180 2618 180 0
+182 2818 182 0
+184 2920 184 0
+186 3184 186 0
+188 3290 188 0
+190 3542 190 0
+192 3634 192 0
+194 3872 194 2556
+196 3990 196 3032
+198 4140 198 3302
+200 4408 200 3556
+202 4530 202 3824
+204 4526 204 3790
+206 4930 206 4230
+208 5390 208 4440
+210 5640 210 4638
+212 5908 212 4858
+214 6028 214 5016
+216 6348 216 5288
+218 6470 218 5452
+220 6558 220 5694
+222 6622 222 5852
+224 6672 224 6134
+226 7098 226 6326
+228 7164 228 6370
+230 7290 230 6476
+232 7340 232 6906
+234 7376 234 6980
+236 7568 236 7012
+238 7938 238 7014
+240 8034 240 7048
+242 8066 242 7668
+244 8144 244 7760
+246 8236 246 7796
+248 8220 248 7804
+250 8878 250 7862
+250 8884 250 7860
+248 8702 248 7826
+246 8606 246 7804
+244 8222 244 7802
+242 8136 242 7730
+240 8012 240 7132
+238 7902 238 7014
+236 7778 236 6960
+234 7714 234 6924
+232 7520 232 6922
+230 7294 230 6400
+228 7188 228 6312
+226 7100 226 6186
+224 6950 224 5914
+222 6656 222 5714
+220 6544 220 5578
+218 6424 218 5300
+216 6304 216 5080
+214 6054 214 4894
+212 5904 212 4640
+210 5768 210 4482
+208 5530 208 4316
+206 5378 206 4146
+204 5166 204 3890
+202 4948 202 3546
+200 4754 200 3450
+198 4582 198 1782
+196 4396 196 3094
+194 4140 194 2884
+192 4016 192 2686
+190 3770 190 2532
+188 3566 188 2396
+186 3406 186 2112
+184 3360 184 1956
+182 2980 182 1762
+180 2790 180 1600
+178 2572 178 1278
+176 2430 176 978
+174 2122 174 618
+172 1966 172 0
+170 1810 170 0
+168 1606 168 0
+166 1390 166 0
+164 1286 164 0
+162 1134 162 0
+160 970 160 0
+158 718 158 0
+156 458 156 0
+154 38 154 0
+152 0 152 0
+150 0 150 0
+148 0 148 0
+146 0 146 0
+144 0 144 0
+142 0 142 0
+140 0 140 0
+-140 0 -140 0
+-142 0 -142 0
+-144 0 -144 0
+-146 0 -146 0
+-148 0 -148 0
+-150 -12 -150 0
+-152 0 -152 0
+-154 0 -154 0
+-156 0 -156 -2
+-158 -594 -158 0
+-160 -616 -160 0
+-162 -894 -162 0
+-164 -996 -164 -2
+-166 -1126 -166 0
+-168 -1344 -168 0
+-170 -1470 -170 0
+-172 -1744 -172 -2
+-174 -1894 -174 0
+-176 -2044 -176 0
+-178 -2214 -178 0
+-180 -2420 -180 0
+-182 -2588 -182 0
+-184 -2802 -184 0
+-186 -2806 -186 0
+-188 -3126 -188 0
+-190 -3320 -190 0
+-192 -3484 -192 0
+-194 -3904 -194 0
+-196 -4116 -196 0
+-198 -4232 -198 0
+-200 -4482 -200 0
+-202 -4626 -202 0
+-204 -4524 -204 0
+-206 -5014 -206 0
+-208 -5184 -208 -2688
+-210 -5236 -210 -4406
+-212 -5530 -212 -4606
+-214 -5588 -214 -4938
+-216 -5668 -216 -5138
+-218 -5966 -218 -5352
+-220 -5974 -220 -5458
+-222 -6088 -222 -5676
+-224 -6158 -224 -5906
+-226 -6658 -226 -6048
+-228 -6670 -228 -6166
+-230 -6672 -230 -6372
+-232 -7102 -232 -6540
+-234 -7270 -234 -6672
+-236 -7322 -236 -6842
+-238 -7344 -238 -7046
+-240 -7358 -240 -7142
+-242 -7438 -242 -7218
+-244 -8016 -244 -7314
+-246 -8114 -246 -7762
+-248 -8154 -248 -7808
+-250 -8228 -250 -7864
+-250 -8160 -250 -7856
+-248 -8112 -248 -7830
+-246 -8114 -246 -7788
+-244 -8064 -244 -7696
+-242 -7798 -242 -7316
+-240 -7306 -240 -7160
+-238 -7128 -238 -7076
+-236 -6934 -236 -6964
+-234 -6774 -234 -6740
+-232 -6644 -232 -6594
+-230 -6572 -230 -6428
+-228 -6354 -228 -6226
+-226 -5880 -226 -6034
+-224 -5728 -224 -5784
+-222 -5492 -222 -5528
+-220 -5290 -220 -5398
+-218 -4876 -218 -5232
+-216 -4708 -216 -5004
+-214 -4316 -214 -4774
+-212 -4074 -212 -4670
+-210 -3944 -210 -4538
+-208 -3998 -208 -4236
+-206 -5050 -206 -4186
+-204 -3276 -204 -3902
+-202 -344 -202 -3706
+-200 -2846 -200 -3640
+-198 -816 -198 -3228
+-196 -2608 -196 -3242
+-194 -1512 -194 -2876
+-192 -1430 -192 -2760
+-190 -1358 -190 -2588
+-188 -1372 -188 -2288
+-186 -758 -186 -2276
+-184 -1696 -184 -2126
+-182 -232 -182 -1606
+-180 -1284 -180 -1532
+-178 0 -178 -1496
+-176 -106 -176 -1072
+-174 2 -174 -932
+-172 0 -172 -2
+-170 0 -170 0
+-168 0 -168 0
+-166 0 -166 0
+-164 0 -164 0
+-162 0 -162 0
+-160 0 -160 0
+-158 0 -158 0
+-156 0 -156 0
+-154 0 -154 0
+-152 -8 -152 0
+-150 0 -150 0
+-148 0 -148 0
+-146 0 -146 0
+-144 0 -144 0
+-142 0 -142 0
+-140 0 -140 0
Index: branches/scout/projects/diagnostic_station/data/poster/motors_11.dat
===================================================================
--- branches/scout/projects/diagnostic_station/data/poster/motors_11.dat	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/poster/motors_11.dat	(revision 1346)
@@ -0,0 +1,224 @@
+140 0 140 0
+142 0 142 0
+144 0 144 0
+146 0 146 0
+148 0 148 0
+150 0 150 0
+152 0 152 0
+154 0 154 16
+156 0 156 0
+158 0 158 0
+160 0 160 0
+162 0 162 814
+164 0 164 798
+166 0 166 836
+168 0 168 998
+170 1104 170 1384
+172 1536 172 1492
+174 2048 174 1896
+176 2202 176 1852
+178 2058 178 2188
+180 2552 180 2434
+182 2600 182 2462
+184 2818 184 2720
+186 3166 186 2962
+188 3214 188 3112
+190 3512 190 3236
+192 3612 192 3476
+194 3770 194 3730
+196 4060 196 3736
+198 4086 198 4068
+200 4398 200 4306
+202 4532 202 4444
+204 4680 204 4560
+206 4926 206 4866
+208 5168 208 5036
+210 5210 210 5232
+212 5418 212 5206
+214 5566 214 5286
+216 5748 216 5634
+218 5906 218 5718
+220 5952 220 5730
+222 6026 222 6178
+224 6386 224 6216
+226 6412 226 6196
+228 6454 228 6206
+230 6948 230 6670
+232 7016 232 6794
+234 7040 234 6842
+236 7072 236 6832
+238 7118 238 6846
+240 7170 240 7554
+242 7530 242 7578
+244 7808 244 7570
+246 7824 246 7536
+248 7854 248 8074
+250 7856 250 8508
+250 7858 250 8444
+248 7840 248 8346
+246 7808 246 8414
+244 7748 244 8188
+242 7644 242 7618
+240 7266 240 7570
+238 7138 238 7426
+236 7068 236 7424
+234 7012 234 7312
+232 6982 232 6882
+230 6548 230 6794
+228 6462 228 6744
+226 6426 226 6262
+224 6412 224 6230
+222 6346 222 6188
+220 6060 220 5978
+218 5922 218 5682
+216 5704 216 5646
+214 5470 214 5428
+212 5442 212 5226
+210 5208 210 5036
+208 5044 208 4838
+206 4982 206 4604
+204 4756 204 4488
+202 4468 202 4348
+200 4274 200 4172
+198 4260 198 4022
+196 3914 196 3784
+194 3746 194 3660
+192 3660 192 3456
+190 3338 190 3284
+188 3366 188 3062
+186 2904 186 2870
+184 2938 184 2724
+182 2530 182 2486
+180 2512 180 2116
+178 2444 178 2038
+176 1844 176 1856
+174 1926 174 1556
+172 1848 172 1498
+170 1406 170 1258
+168 1068 168 1216
+166 1020 166 1030
+164 1026 164 638
+162 794 162 6
+160 706 160 0
+158 460 158 0
+156 22 156 0
+154 0 154 0
+152 0 152 0
+150 0 150 0
+148 0 148 0
+146 0 146 0
+144 0 144 0
+142 0 142 0
+140 0 140 0
+-140 0 -140 0
+-142 0 -142 0
+-144 0 -144 0
+-146 0 -146 0
+-148 0 -148 0
+-150 0 -150 0
+-152 0 -152 0
+-154 0 -154 0
+-156 0 -156 0
+-158 -12 -158 0
+-160 0 -160 0
+-162 0 -162 0
+-164 0 -164 0
+-166 0 -166 -990
+-168 0 -168 -1156
+-170 -1146 -170 -1198
+-172 -1522 -172 -1602
+-174 -1608 -174 -1806
+-176 -1598 -176 -2156
+-178 -1928 -178 -2182
+-180 -2292 -180 -2372
+-182 -2230 -182 -2554
+-184 -2542 -184 -2760
+-186 -2928 -186 -3060
+-188 -2844 -188 -3160
+-190 -3214 -190 -3428
+-192 -3216 -192 -3550
+-194 -3746 -194 -3756
+-196 -3708 -196 -3954
+-198 -3928 -198 -4104
+-200 -4374 -200 -4336
+-202 -4260 -202 -4566
+-204 -4496 -204 -4724
+-206 -4876 -206 -4930
+-208 -4930 -208 -5132
+-210 -4964 -210 -5242
+-212 -5210 -212 -5388
+-214 -5386 -214 -5488
+-216 -5578 -216 -5694
+-218 -5746 -218 -5840
+-220 -5906 -220 -5960
+-222 -6094 -222 -6010
+-224 -6190 -224 -6398
+-226 -6386 -226 -6462
+-228 -6430 -228 -6458
+-230 -6470 -230 -6794
+-232 -6550 -232 -6890
+-234 -6970 -234 -7028
+-236 -7024 -236 -7106
+-238 -7056 -238 -7286
+-240 -7096 -240 -7684
+-242 -7232 -242 -7816
+-244 -7100 -244 -7902
+-246 -7094 -246 -7936
+-248 -7122 -248 -7944
+-250 -7634 -250 -7942
+-250 -7604 -250 -7930
+-248 -7140 -248 -7932
+-246 -7124 -246 -7924
+-244 -7106 -244 -7892
+-242 -7060 -242 -7850
+-240 -7056 -240 -7760
+-238 -7000 -238 -7624
+-236 -6972 -236 -7256
+-234 -6904 -234 -7120
+-232 -6834 -232 -7096
+-230 -6614 -230 -6948
+-228 -6416 -228 -6816
+-226 -6340 -226 -6568
+-224 -6272 -224 -6458
+-222 -6176 -222 -6396
+-220 -5906 -220 -6266
+-218 -5872 -218 -5910
+-216 -5586 -216 -5846
+-214 -5426 -214 -5590
+-212 -5168 -212 -5434
+-210 -5114 -210 -5292
+-208 -5018 -208 -5112
+-206 -4696 -206 -4950
+-204 -4438 -204 -4738
+-202 -4414 -202 -4542
+-200 -4166 -200 -4330
+-198 -3874 -198 -4206
+-196 -3948 -196 -3944
+-194 -3462 -194 -3792
+-192 -3534 -192 -3570
+-190 -3112 -190 -3366
+-188 -3182 -188 -3216
+-186 -2688 -186 -2946
+-184 -2808 -184 -2768
+-182 -2396 -182 -2510
+-180 -2164 -180 -2324
+-178 -2210 -178 -2320
+-176 -1828 -176 -1994
+-174 -1426 -174 -1744
+-172 -1532 -172 -1776
+-170 -1432 -170 -1318
+-168 -1200 -168 -1250
+-166 -784 -166 -928
+-164 -152 -164 -790
+-162 0 -162 -742
+-160 0 -160 -502
+-158 0 -158 -484
+-156 0 -156 0
+-154 0 -154 0
+-152 0 -152 0
+-150 0 -150 0
+-148 0 -148 0
+-146 0 -146 0
+-144 0 -144 0
+-142 0 -142 0
+-140 0 -140 0
Index: branches/scout/projects/diagnostic_station/data/poster/motors_13.dat
===================================================================
--- branches/scout/projects/diagnostic_station/data/poster/motors_13.dat	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/poster/motors_13.dat	(revision 1346)
@@ -0,0 +1,224 @@
+140 0 140 0
+142 0 142 0
+144 0 144 0
+146 0 146 0
+148 0 148 0
+150 0 150 0
+152 0 152 0
+154 0 154 0
+156 634 156 0
+158 756 158 670
+160 966 160 772
+162 1106 162 1016
+164 1340 164 1154
+166 1364 166 1250
+168 1068 168 1524
+170 1918 170 1748
+172 2068 172 1908
+174 1894 174 2040
+176 2500 176 2278
+178 2666 178 2514
+180 2418 180 2616
+182 3044 182 2908
+184 2970 184 3026
+186 3438 186 3292
+188 3490 188 3430
+190 3826 190 3708
+192 4054 192 3784
+194 4126 194 4056
+196 4316 196 4182
+198 4164 198 4322
+200 4316 200 4604
+202 4520 202 4710
+204 5094 204 4918
+206 5270 206 5226
+208 5264 208 5320
+210 5572 210 5516
+212 5348 212 5664
+214 5598 214 5708
+216 6128 216 6114
+218 5760 218 6172
+220 6344 220 6206
+222 6580 222 6660
+224 6598 224 6722
+226 6786 226 6766
+228 7284 228 7138
+230 7384 230 7254
+232 7406 232 7318
+234 7222 234 7348
+236 7274 236 7462
+238 7256 238 7762
+240 6768 240 7990
+242 7784 242 7932
+244 7990 244 7980
+246 8156 246 7956
+248 7736 248 8142
+250 8114 250 8688
+250 8214 250 8716
+248 7928 248 8346
+246 7952 246 8172
+244 8202 244 8052
+242 8196 242 8082
+240 8184 240 7972
+238 8090 238 7870
+236 8070 236 7442
+234 7850 234 7376
+232 7430 232 7294
+230 7214 230 7232
+228 6526 228 7152
+226 6836 226 6956
+224 7010 224 6668
+222 6632 222 6602
+220 6548 220 6502
+218 6544 218 6202
+216 6192 216 6012
+214 6086 214 5992
+212 5980 212 5692
+210 5670 210 5540
+208 5588 208 5228
+206 5028 206 5092
+204 5098 204 4870
+202 4908 202 4766
+200 4284 200 4582
+198 4224 198 4398
+196 4314 196 4198
+194 3886 194 3992
+192 3822 192 3836
+190 3706 190 3576
+188 3522 188 3456
+186 3354 186 3188
+184 3118 184 3056
+182 2920 182 2838
+180 2730 180 2660
+178 2548 178 2430
+176 2360 176 2278
+174 1884 174 2148
+172 2022 172 1586
+170 1856 170 1690
+168 1726 168 1564
+166 696 166 1192
+164 1350 164 1124
+162 1150 162 892
+160 950 160 796
+158 810 158 482
+156 682 156 522
+154 458 154 348
+152 202 152 32
+150 0 150 0
+148 0 148 0
+146 0 146 0
+144 0 144 0
+142 0 142 0
+140 0 140 0
+-140 0 -140 0
+-142 0 -142 0
+-144 0 -144 0
+-146 0 -146 0
+-148 0 -148 0
+-150 0 -150 0
+-152 0 -152 0
+-154 0 -154 0
+-156 0 -156 -412
+-158 0 -158 -452
+-160 0 -160 -668
+-162 -1000 -162 -756
+-164 -1282 -164 -1132
+-166 -1398 -166 -1312
+-168 -1566 -168 -1392
+-170 -1434 -170 -1558
+-172 -2026 -172 -1796
+-174 -2116 -174 -2026
+-176 -1926 -176 -2144
+-178 -2576 -178 -2360
+-180 -2714 -180 -2566
+-182 -2932 -182 -2676
+-184 -3112 -184 -2950
+-186 -3328 -186 -3076
+-188 -3464 -188 -3126
+-190 -3716 -190 -3458
+-192 -3454 -192 -3696
+-194 -4016 -194 -3846
+-196 -4094 -196 -4088
+-198 -4288 -198 -4256
+-200 -4616 -200 -4364
+-202 -4772 -202 -4602
+-204 -4842 -204 -4738
+-206 -5148 -206 -4886
+-208 -5246 -208 -4980
+-210 -5504 -210 -5270
+-212 -5596 -212 -5446
+-214 -5536 -214 -5648
+-216 -5946 -216 -5682
+-218 -6092 -218 -5866
+-220 -6322 -220 -6068
+-222 -6560 -222 -6096
+-224 -6626 -224 -6466
+-226 -6660 -226 -6556
+-228 -6740 -228 -6618
+-230 -7098 -230 -6630
+-232 -7248 -232 -7064
+-234 -7298 -234 -7136
+-236 -7366 -236 -7188
+-238 -7432 -238 -7236
+-240 -7758 -240 -7226
+-242 -7970 -242 -7732
+-244 -7992 -244 -7880
+-246 -8046 -246 -7916
+-248 -8230 -248 -7900
+-250 -8336 -250 -7948
+-250 -8276 -250 -7986
+-248 -8096 -248 -7918
+-246 -7888 -246 -7892
+-244 -7598 -244 -7832
+-242 -7928 -242 -7752
+-240 -7802 -240 -7640
+-238 -7538 -238 -7312
+-236 -7356 -236 -7224
+-234 -7302 -234 -7164
+-232 -7192 -232 -7042
+-230 -7070 -230 -6800
+-228 -6736 -228 -6596
+-226 -6658 -226 -6546
+-224 -6560 -224 -6500
+-222 -6512 -222 -6146
+-220 -6412 -220 -6076
+-218 -6076 -218 -5992
+-216 -6012 -216 -5758
+-214 -5950 -214 -5636
+-212 -5656 -212 -5438
+-210 -5496 -210 -5276
+-208 -5316 -208 -5142
+-206 -5164 -206 -4832
+-204 -4864 -204 -4626
+-202 -4778 -202 -4466
+-200 -4610 -200 -4140
+-198 -4450 -198 -4084
+-196 -4222 -196 -3798
+-194 -4018 -194 -3584
+-192 -3924 -192 -3474
+-190 -3660 -190 -3170
+-188 -3546 -188 -3034
+-186 -3280 -186 -2818
+-184 -3144 -184 -2656
+-182 -2876 -182 -2574
+-180 -2776 -180 -2382
+-178 -2488 -178 -2208
+-176 -2166 -176 -2076
+-174 -2182 -174 -1894
+-172 -1930 -172 -1680
+-170 -1704 -170 -1574
+-168 -1226 -168 -1456
+-166 -1404 -166 -1206
+-164 -1198 -164 -1016
+-162 -972 -162 -868
+-160 -816 -160 -500
+-158 -662 -158 -648
+-156 -472 -156 -362
+-154 -470 -154 0
+-152 -90 -152 0
+-150 0 -150 0
+-148 0 -148 0
+-146 0 -146 0
+-144 0 -144 0
+-142 0 -142 0
+-140 0 -140 0
Index: branches/scout/projects/diagnostic_station/data/poster/motors_5.dat
===================================================================
--- branches/scout/projects/diagnostic_station/data/poster/motors_5.dat	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/poster/motors_5.dat	(revision 1346)
@@ -0,0 +1,224 @@
+140 0 140 0
+142 0 142 0
+144 0 144 0
+146 0 146 0
+148 0 148 0
+150 0 150 0
+152 0 152 0
+154 0 154 0
+156 0 156 12
+158 0 158 0
+160 0 160 0
+162 844 162 0
+164 1166 164 0
+166 1308 166 0
+168 1244 168 2
+170 1380 170 1542
+172 1706 172 1884
+174 2068 174 1758
+176 2074 176 1722
+178 2334 178 2354
+180 2642 180 2524
+182 2658 182 2416
+184 3028 184 3050
+186 3098 186 2812
+188 3418 188 3382
+190 3564 190 3270
+192 3840 192 3808
+194 3862 194 3672
+196 4272 196 4190
+198 4370 198 4106
+200 4596 200 4322
+202 4960 202 4680
+204 5100 204 4752
+206 5260 206 4828
+208 5428 208 5228
+210 5668 210 5394
+212 5858 212 5404
+214 6072 214 5508
+216 6242 216 5776
+218 6370 218 5910
+220 6564 220 6230
+222 6832 222 6356
+224 6956 224 6410
+226 7126 226 6608
+228 7342 228 6922
+230 7534 230 7028
+232 7696 232 7048
+234 7900 234 7080
+236 8050 236 7626
+238 8286 238 7764
+240 8464 240 7820
+242 8724 242 7834
+244 8844 244 7856
+246 8924 246 8392
+248 8928 248 8764
+250 9262 250 8818
+250 9136 250 8796
+248 9038 248 8740
+246 8920 246 8592
+244 8846 244 8444
+242 8590 242 8194
+240 8154 240 7828
+238 7902 238 7800
+236 7738 236 7732
+234 7812 234 7618
+232 7644 232 7094
+230 7494 230 7060
+228 7220 228 6982
+226 7026 226 6798
+224 6916 224 6414
+222 6812 222 6378
+220 6650 220 6320
+218 6446 218 6264
+216 6302 216 5854
+214 6138 214 5596
+212 5908 212 5458
+210 5718 210 5232
+208 5550 208 5188
+206 5384 206 5006
+204 5196 204 4704
+202 4898 202 4472
+200 4678 200 4520
+198 4612 198 4102
+196 4264 196 3872
+194 4064 194 3906
+192 3950 192 3378
+190 3582 190 3580
+188 3564 188 2924
+186 3160 186 3180
+184 3166 184 2574
+182 2744 182 2592
+180 2746 180 2528
+178 2508 178 1886
+176 2158 176 2026
+174 2222 174 2018
+172 1960 172 1446
+170 1564 170 1052
+168 1510 168 1122
+166 1520 166 1226
+164 1342 164 1126
+162 890 162 698
+160 504 160 456
+158 340 158 116
+156 54 156 0
+154 0 154 0
+152 0 152 0
+150 0 150 0
+148 0 148 0
+146 0 146 0
+144 0 144 0
+142 0 142 0
+140 0 140 0
+-140 0 -140 0
+-142 0 -142 0
+-144 0 -144 0
+-146 0 -146 0
+-148 -2 -148 0
+-150 0 -150 0
+-152 0 -152 0
+-154 0 -154 0
+-156 -22 -156 0
+-158 0 -158 0
+-160 0 -160 0
+-162 0 -162 0
+-164 -814 -164 0
+-166 -1062 -166 0
+-168 -1454 -168 0
+-170 -1680 -170 0
+-172 -1710 -172 2
+-174 -1904 -174 -1082
+-176 -2308 -176 -1912
+-178 -2346 -178 -2128
+-180 -2582 -180 -2014
+-182 -2858 -182 -2522
+-184 -2886 -184 -2776
+-186 -3282 -186 -2702
+-188 -3268 -188 -3258
+-190 -3662 -190 -3138
+-192 -3696 -192 -3618
+-194 -4040 -194 -3426
+-196 -4196 -196 -4084
+-198 -4322 -198 -4008
+-200 -4656 -200 -4264
+-202 -4822 -202 -4666
+-204 -4984 -204 -4588
+-206 -5216 -206 -4870
+-208 -5450 -208 -5154
+-210 -5604 -210 -5292
+-212 -5716 -212 -5310
+-214 -5874 -214 -5490
+-216 -6114 -216 -5790
+-218 -6156 -218 -6020
+-220 -6372 -220 -6238
+-222 -6588 -222 -6402
+-224 -6710 -224 -6542
+-226 -6806 -226 -6768
+-228 -6994 -228 -6922
+-230 -7268 -230 -7094
+-232 -7338 -232 -7220
+-234 -7410 -234 -7286
+-236 -7610 -236 -7522
+-238 -8008 -238 -7724
+-240 -8100 -240 -8026
+-242 -8166 -242 -8098
+-244 -8238 -244 -8084
+-246 -8538 -246 -8124
+-248 -8868 -248 -8094
+-250 -8990 -250 -8992
+-250 -8962 -250 -8644
+-248 -8758 -248 -8946
+-246 -8450 -246 -8324
+-244 -8228 -244 -8082
+-242 -8062 -242 -8042
+-240 -7942 -240 -7968
+-238 -7898 -238 -7894
+-236 -7654 -236 -7620
+-234 -7468 -234 -7434
+-232 -7392 -232 -7228
+-230 -7224 -230 -7194
+-228 -6958 -228 -7010
+-226 -6802 -226 -6780
+-224 -6700 -224 -6600
+-222 -6388 -222 -6476
+-220 -6120 -220 -6334
+-218 -5940 -218 -6132
+-216 -5818 -216 -5980
+-214 -5686 -214 -5746
+-212 -5552 -212 -5412
+-210 -5468 -210 -5214
+-208 -5332 -208 -5182
+-206 -5134 -206 -5044
+-204 -4922 -204 -4694
+-202 -4830 -202 -4458
+-200 -4656 -200 -4482
+-198 -4304 -198 -4162
+-196 -4202 -196 -3934
+-194 -3996 -194 -3930
+-192 -3710 -192 -3446
+-190 -3690 -190 -3554
+-188 -3238 -188 -3068
+-186 -3300 -186 -3184
+-184 -2866 -184 -2708
+-182 -2856 -182 -2674
+-180 -2650 -180 -2560
+-178 -2292 -178 -1996
+-176 -2324 -176 -2152
+-174 -2022 -174 -1976
+-172 -1682 -172 -1476
+-170 -1706 -170 -1184
+-168 -1562 -168 -1358
+-166 -1288 -166 -1346
+-164 -868 -164 -1026
+-162 -688 -162 -704
+-160 -532 -160 0
+-158 -56 -158 0
+-156 0 -156 0
+-154 0 -154 0
+-152 0 -152 0
+-150 0 -150 0
+-148 0 -148 0
+-146 0 -146 0
+-144 0 -144 0
+-142 0 -142 0
+-140 0 -140 0
Index: branches/scout/projects/diagnostic_station/data/motors2.txt
===================================================================
--- branches/scout/projects/diagnostic_station/data/motors2.txt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/motors2.txt	(revision 1346)
@@ -0,0 +1,15 @@
+# Tests menu: (a)ll, (c)omm, (b)om, (r)angefinders, (m)otors, (e)ncoders
+# Testing communications
+# Testing communication finished (communication succeeded)
+# Testing motors
+data motor 0 forward increasing  140/0 150/0 160/-522 170/-906 180/-1366 190/-1692 200/-2126 210/-2386 220/-2744 230/-3074 240/-3202 250/-3414
+data motor 1 backward increasing  140/0 150/12 160/592 170/1026 180/1430 190/1810 200/2222 210/2598 220/2878 230/3178 240/3498 250/3526
+# Timeout, retrying
+data motor 0 forward decreasing  250/-3390 240/-3284 230/-2994 220/-2790 210/-2344 200/-2072 190/-1688 180/-1336 170/-840 160/-400 150/0 140/0
+data motor 1 backward decreasing  250/3514 240/3456 230/3098 220/2752 210/1404 200/1876 190/1722 180/1300 170/840 160/450 150/0 140/0
+data motor 0 backward increasing  140/0 150/0 160/476 170/882 180/1374 190/1778 200/2114 210/2400 220/2842 230/3120 240/3310 250/3452
+data motor 1 forward increasing  140/0 150/0 160/-412 170/-658 180/-1144 190/-1572 200/-1948 210/-2358 220/-2764 230/-2918 240/-3200 250/-3524
+data motor 0 backward decreasing  250/3566 240/3454 230/3130 220/2816 210/2426 200/2132 190/1682 180/1218 170/938 160/372 150/0 140/0
+data motor 1 forward decreasing  250/-3518 240/-3284 230/-2892 220/-2690 210/-2372 200/-1928 190/-1574 180/-1174 170/-702 160/-214 150/0 140/0
+# Testing motors finished
+# Tests menu: (a)ll, (c)omm, (b)om, (r)angefinders, (m)otors, (e)ncoders
Index: branches/scout/projects/diagnostic_station/data/motors2.dat
===================================================================
--- branches/scout/projects/diagnostic_station/data/motors2.dat	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/motors2.dat	(revision 1346)
@@ -0,0 +1,48 @@
+140 0 0
+150 0 0
+160 -522 -412
+170 -906 -658
+180 -1366 -1144
+190 -1692 -1572
+200 -2126 -1948
+210 -2386 -2358
+220 -2744 -2764
+230 -3074 -2918
+240 -3202 -3200
+250 -3414 -3524
+250 -3390 -3518
+240 -3284 -3284
+230 -2994 -2892
+220 -2790 -2690
+210 -2344 -2372
+200 -2072 -1928
+190 -1688 -1574
+180 -1336 -1174
+170 -840 -702
+160 -400 -214
+150 0 0
+140 0 0
+-140 0 0
+-150 0 12
+-160 476 592
+-170 882 1026
+-180 1374 1430
+-190 1778 1810
+-200 2114 2222
+-210 2400 2598
+-220 2842 2878
+-230 3120 3178
+-240 3310 3498
+-250 3452 3526
+-250 3566 3514
+-240 3454 3456
+-230 3130 3098
+-220 2816 2752
+-210 2426 1404
+-200 2132 1876
+-190 1682 1722
+-180 1218 1300
+-170 938 840
+-160 372 450
+-150 0 0
+-140 0 0
Index: branches/scout/projects/diagnostic_station/data/encoders1.txt
===================================================================
--- branches/scout/projects/diagnostic_station/data/encoders1.txt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/encoders1.txt	(revision 1346)
@@ -0,0 +1,12 @@
+# Diagnostic station interactive mode
+# Test (s)elf, (a)ll, (c)omm, (b)om, (r)angefinders, (m)otors, (e)ncoders
+# Testing communications
+# Testing communication finished (communication succeeded)
+# Testing encoders
+# Resetting encoders
+data encoder 0 forward  -1338/352 -2650/676 -3969/1018 -5344/1393
+data encoder 1 backward  1287/-363 2478/-720 3732/-1085 5111/-1456
+# Resetting encoders
+data encoder 0 backward  1384/-363 2783/-690 4181/-1065 5632/-1445
+data encoder 1 forward  -1308/372 -2518/746 -3880/1120 -5261/1511
+# Testing encoders finished
Index: branches/scout/projects/diagnostic_station/data/motors1.txt
===================================================================
--- branches/scout/projects/diagnostic_station/data/motors1.txt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/data/motors1.txt	(revision 1346)
@@ -0,0 +1,12 @@
+# Testing motors
+# Timeout, retrying
+data motor 0 forward increasing  140/0 150/0 160/-482 170/-876 180/-1366 190/-1706 200/-2140 210/-2466 220/-2790 230/-3076
+data motor 1 backward increasing  140/0 150/216 160/612 170/1062 180/1500 190/1836 200/2260 210/2626 220/2918 230/3214
+data motor 0 forward decreasing  250/-3546 240/-3332 230/-3032 220/-2808 210/-2410 200/-2134 190/-1716 180/-1374 170/-864 160/-496
+data motor 1 backward decreasing  250/3582 240/3552 230/3402 220/2872 210/2378 200/2236 190/1732 180/1416 170/1010 160/412
+data motor 0 backward increasing  140/0 150/0 160/552 170/962 180/1402 190/1858 200/2220 210/2624 220/2882 230/3154
+data motor 1 forward increasing  140/0 150/0 160/-476 170/-950 180/-1360 190/-1800 200/-2198 210/-2566 220/-2856 230/-3136
+data motor 0 backward decreasing  250/3696 240/3464 230/3134 220/2886 210/2600 200/2212 190/1812 180/1342 170/906 160/436
+data motor 1 forward decreasing  250/-3592 240/-3474 230/-3144 220/-2842 210/-2526 200/-2192 190/-1736 180/-1342 170/-918 160/-486
+# Testing motors finished
+# Tests menu: (a)ll, (c)omm, (b)om, (r)angefinders, (m)otors, (e)ncoders
\ No newline at end of file
Index: branches/scout/projects/diagnostic_station/robot/main.c
===================================================================
--- branches/scout/projects/diagnostic_station/robot/main.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/robot/main.c	(revision 1346)
@@ -0,0 +1,230 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <xbee.h>
+
+#include "../common/comm_station_robot.h"
+#include "../../../lib/include/libdragonfly/encoders.h"
+
+
+// **********************
+// ** Command handlers **
+// **********************
+
+static void message_set_orbs (int length, uint8_t *data)
+{
+	if (length>=6)
+	{
+		orbs_set (data[0], data[1], data[2], data[3], data[4], data[5]);
+	}
+}
+
+static void message_set_motors (int length, uint8_t *data)
+{
+	if (length>=4)
+	{
+		motor1_set (data[0], data[1]);
+		motor2_set (data[2], data[3]);
+	}
+}
+
+static void message_set_motors_time (int length, uint8_t *data)
+{
+	if (length>=6)
+	{
+		motor1_set (data[0], data[1]);
+		motor2_set (data[2], data[3]);
+		delay_ms (WORD(data[4], data[5]));
+		motors_off ();
+	}
+}
+
+static void message_set_motors_off (int length, uint8_t *data)
+{
+	motors_off ();
+}
+
+static void message_set_bom (int length, uint8_t *data)
+{
+	if (length>=2)
+	{
+		uint16_t bitmask=WORD(data[0], data[1]);
+		
+		bom_set_leds (bitmask);
+		
+		if (bitmask==0)
+			bom_off ();
+		else
+			bom_on ();
+	}
+}
+
+static void message_reset_encoders (int length, uint8_t *data)
+{
+	SYNC
+	{
+		encoder_rst_dx (LEFT);
+		encoder_rst_dx (RIGHT);
+	}
+}
+
+// **********************
+// ** Request handlers **
+// **********************
+
+static void message_read_encoders (int length, uint8_t *data)
+{
+	int16_t left, right;
+	
+	SYNC
+	{
+		left = encoder_get_dx (LEFT);
+		right = encoder_get_dx (RIGHT);
+	}
+	
+	char senddata[4];
+	senddata[0]=WORD_BYTE_0 (left);
+	senddata[1]=WORD_BYTE_1 (left);
+	senddata[2]=WORD_BYTE_0 (right);
+	senddata[3]=WORD_BYTE_1 (right);
+
+	wl_send_global_packet (robot_station_group, robot_station_data_encoders, senddata, 4, 0);
+}
+
+static void message_read_rangefinder (int length, uint8_t *data)
+{
+	int16_t value;
+	int rangefinder_id = 0;
+	
+	switch(*data)
+	{
+		case 0: rangefinder_id = IR1; break;
+		case 1: rangefinder_id = IR2; break;
+		case 2: rangefinder_id = IR3; break;
+		case 3: rangefinder_id = IR4; break;
+		case 4: rangefinder_id = IR5; break;
+	}
+	
+	value = range_read_distance(rangefinder_id);
+	
+	char senddata[2];
+	senddata[0] = WORD_BYTE_0 (value);
+	senddata[1] = WORD_BYTE_1 (value);
+	
+	wl_send_global_packet (robot_station_group, robot_station_data_rangefinder, senddata, 2, 0);
+
+}
+
+static void message_read_bom (int length, uint8_t *data){
+	int16_t value;
+	bom_refresh(BOM_ALL);
+	value = bom_get((*data));
+	char senddata[2];
+	senddata[0] = WORD_BYTE_0 (value);
+	senddata[1] = WORD_BYTE_1 (value);
+	
+	wl_send_global_packet (robot_station_group, robot_station_data_bom, senddata, 2, 0);
+}
+
+static void message_read_bom_all(int length, uint8_t *data){
+	int16_t value;
+	char senddata[32];
+
+	bom_refresh(BOM_ALL);
+
+	for(uint8_t i=0; i<16; ++i){
+		value=bom_get(i);
+		senddata[2*i  ] = WORD_BYTE_0 (value);
+		senddata[2*i+1] = WORD_BYTE_1 (value);
+	}
+	
+	wl_send_global_packet(robot_station_group, robot_station_data_bom_all, senddata, 32, 0);
+}
+
+static void message_read_eeprom(int length, uint8_t *data)
+{
+  char senddata[2];
+  senddata[0] = get_robotid();
+  senddata[1] = get_bom_type();
+  
+  wl_send_global_packet (robot_station_group, robot_station_data_eeprom, senddata, 2, 0);
+}
+
+// ***************************
+// ** Message acknowledging **
+// ***************************
+
+static void send_done (void)
+{
+	wl_send_global_packet (robot_station_group, robot_station_done, NULL, 0, 0);
+}
+
+// ***********************
+// ** Receive callbacks **
+// ***********************
+
+static void station_robot_receive (char type, int source, unsigned char* packet, int length)
+{
+	orb_set (0, 0, 255);
+
+	usb_puti (type);
+	usb_puts (" [");
+	for (uint8_t i=0; i<length; ++i)
+	{
+		if (i!=0) usb_putc (' ');
+		usb_puti (packet[i]);
+	}
+	usb_puts ("]\r\n");
+	
+	switch (type)
+	{
+		// Command messages
+		case station_robot_set_orbs:        message_set_orbs        (length, packet); send_done (); break;
+		case station_robot_set_motors:      message_set_motors      (length, packet); send_done (); break;
+		case station_robot_set_bom:         message_set_bom         (length, packet); send_done (); break;
+		case station_robot_set_motors_off:  message_set_motors_off  (length, packet); send_done (); break;
+		case station_robot_set_motors_time: message_set_motors_time (length, packet); send_done (); break;
+		case station_robot_reset_encoders:  message_reset_encoders  (length, packet); send_done (); break;
+		
+		// Request messages
+		case station_robot_read_encoders:	 message_read_encoders	   (length, packet); break;
+		case station_robot_read_rangefinder: message_read_rangefinder  (length, packet); break;
+		case station_robot_read_bom:         message_read_bom		   (length, packet); break;
+		case station_robot_read_bom_all:	 message_read_bom_all	   (length, packet); break;
+    case station_robot_read_eeprom:     message_read_eeprom(length, packet); break;
+	}
+	
+	orb_set (255, 127, 0);
+}
+
+// **********
+// ** Main **
+// **********
+
+int main(void) {
+    dragonfly_init(ALL_ON);
+	encoders_init ();
+
+	analog_init (ADC_START);
+	//bom_init ();
+
+    usb_init ();
+    usb_puts ("Diagnostic station robot starting up\r\n");
+
+	orb1_set (255, 127, 0);
+	xbee_init ();
+	wl_init();
+//	xbee_set_channel(15);
+	orb2_set (255, 127, 0);
+	
+	usb_puts ("PAN ID: ");  usb_puti (xbee_get_pan_id ());  usb_puts ("\r\n");	// -1
+	usb_puts ("Channel: "); usb_puti (xbee_get_channel ()); usb_puts ("\r\n");	// 0
+	usb_puts ("Address: "); usb_puti (xbee_get_address ()); usb_puts ("\r\n");	// 4/8
+	
+	PacketGroupHandler receive_handler = {station_robot_group, NULL, NULL, &station_robot_receive, NULL};
+	wl_register_packet_group(&receive_handler);
+	
+	while (1)
+	{
+		wl_do();
+	}
+}
Index: branches/scout/projects/diagnostic_station/robot/Makefile
===================================================================
--- branches/scout/projects/diagnostic_station/robot/Makefile	(nonexistent)
+++ branches/scout/projects/diagnostic_station/robot/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = main
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/diagnostic_station/robot/README
===================================================================
--- branches/scout/projects/diagnostic_station/robot/README	(nonexistent)
+++ branches/scout/projects/diagnostic_station/robot/README	(revision 1346)
@@ -0,0 +1,7 @@
+#####################################################################
+# Robot Code Folder
+#####################################################################
+
+This folder contains code intended to be compiled and run on a
+robot being tested on the diagnostic station. It responds to
+commands and sends measurement data to the station.
Index: branches/scout/projects/diagnostic_station/common/comm_station_robot.h
===================================================================
--- branches/scout/projects/diagnostic_station/common/comm_station_robot.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/common/comm_station_robot.h	(revision 1346)
@@ -0,0 +1,39 @@
+#ifndef _comm_station_robot_h
+#define _comm_station_robot_h
+
+// Macros for multibyte variables
+#define WORD_BYTE_0(word) ( word    &0xFF)
+#define WORD_BYTE_1(word) ((word>>8)&0xFF)
+#define WORD(byte0, byte1) (byte1<<8 | byte0)
+
+// The message group station -> robot (0..15)
+#define station_robot_group 1
+
+// The message types station -> robot
+#define station_robot_set_orbs         1
+#define station_robot_set_motors       2
+#define station_robot_set_bom          3
+#define station_robot_set_motors_off   4
+#define station_robot_set_motors_time  5
+#define station_robot_read_encoders    6
+#define station_robot_reset_encoders   7
+#define station_robot_read_rangefinder 8
+#define station_robot_read_bom         9
+#define station_robot_read_bom_all     10
+#define station_robot_read_eeprom      11
+
+#define robot_station_group 2
+
+#define robot_station_done              1
+#define robot_station_data_encoders     2
+#define robot_station_data_rangefinder  3
+#define robot_station_data_bom          4
+#define robot_station_data_bom_all      5
+#define robot_station_data_eeprom       6
+//...
+
+
+
+
+
+#endif
Index: branches/scout/projects/diagnostic_station/tools/plot.rb
===================================================================
--- branches/scout/projects/diagnostic_station/tools/plot.rb	(nonexistent)
+++ branches/scout/projects/diagnostic_station/tools/plot.rb	(revision 1346)
@@ -0,0 +1,90 @@
+#!/usr/bin/env ruby
+
+# All rows must have the same length. rows are arrays of [x y]. titles are strings.
+def plot(rows, titles)
+	datafile='/tmp/data.tmp'
+
+	#write it
+
+	num_points=rows[0].size
+
+        File.open(datafile, 'w') { |f|
+		(0...num_points).each { |n|
+			f.puts rows.map { |row| row[n] }.join(' ')
+		}
+        }
+
+	# plot it
+	num_rows=rows.size
+
+	p=IO.popen('gnuplot', 'w')
+        #p.puts("set xlabel 'Station encoders'")
+        #p.puts("set ylabel 'Robot encoders'")
+
+	(0...num_rows).each { |n|
+		plotcmd=(n==0)?"plot":"replot"
+		p.puts "#{plotcmd} '#{datafile}' using #{2*n+1}:#{2*n+2} with linespoints title '#{titles[n]}'";
+	}
+
+end
+
+encoder_data=Hash.new { |hash,key| hash[key]=Hash.new { |h,k| h[k]=[] } }
+motor_data=Hash.new { |hash,key| hash[key]=Hash.new { |h,k| h[k]=Hash.new { |hh,kk| hh[kk]=[] } } }
+
+puts "Paste output from station here please"
+
+while a=gets
+        a.chomp!
+        a.strip!
+
+	if a =~ /^data encoder (0|1) (forward|backward) (.*)$/
+		num=$1.to_i; dir=$2; data=$3
+
+		data.split(' ').each { |pair|
+			point=pair.split('/').map { |v| v.to_i };
+			encoder_data[num][dir]<<point
+		}
+	elsif a =~ /^data motor (0|1) (forward|backward) (increasing|decreasing) (.*)$/
+		num=$1.to_i; dir=$2; acc=$3; data=$4
+
+		data.split(' ').each { |pair|
+			point=pair.split('/').map { |v| v.to_i };
+			motor_data[num][dir][acc]<<point
+		}
+	end
+end
+
+
+if !encoder_data.empty?
+	encoder_rows=[0,1].map { |n| encoder_data[n]['forward']+encoder_data[n]['backward'] }
+
+	encoder_rows[0].sort! { |a,b| a[0]<=>b[0] }
+	encoder_rows[1].sort! { |a,b| a[0]<=>b[0] }
+
+	plot(encoder_rows, ['left', 'right'])
+end
+
+if !motor_data.empty?
+	motor_data[0]['backward']['increasing'].each { |x| x[0]=-x[0] }
+	motor_data[0]['backward']['decreasing'].each { |x| x[0]=-x[0] }
+	motor_data[1]['backward']['increasing'].each { |x| x[0]=-x[0] }
+	motor_data[1]['backward']['decreasing'].each { |x| x[0]=-x[0] }
+
+	motor_rows=[0,1].map { |n|
+		motor_data[n]['forward']['increasing']+\
+		motor_data[n]['forward']['decreasing']+\
+		motor_data[n]['backward']['increasing']+\
+		motor_data[n]['backward']['decreasing']
+	}
+
+	plot(motor_rows, ['left', 'right'])
+end
+
+
+puts "Interrupt to close"
+begin
+	while 1; end
+rescue Interrupt
+end
+
+

Property changes on: branches/scout/projects/diagnostic_station/tools/plot.rb
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/server/README
===================================================================
--- branches/scout/projects/diagnostic_station/server/README	(nonexistent)
+++ branches/scout/projects/diagnostic_station/server/README	(revision 1346)
@@ -0,0 +1,9 @@
+#####################################################################
+# Server Code Folder
+#
+# John Sexton
+#####################################################################
+
+This folder contains code intended to be compiled and run on a
+computer acting as the server for the diagnostic station. All data
+analysis will occur at this level.
Index: branches/scout/projects/diagnostic_station/server/server.c
===================================================================
--- branches/scout/projects/diagnostic_station/server/server.c	(nonexistent)
+++ branches/scout/projects/diagnostic_station/server/server.c	(revision 1346)
@@ -0,0 +1,118 @@
+#include "comp-hub.h"
+
+// ALSO DON'T FORGET TO CHECK OUT
+// ATTRIBUTES ON LINES 39 ish TO 50 ish
+#define PORT_DEFAULT "/dev/ttyUSB0"
+#define BAUD_RATE 115200
+
+static char* com_port = PORT_DEFAULT;
+static int stream;
+
+int main(void)
+{
+	if(lib_init() < 0)
+		printf("Exiting...\n");
+	
+	//your code here
+	listen();
+	put_char('r');
+	listen();
+	put_char('b');
+	listen();
+	put_char('m');
+	listen();
+	
+	return 0;
+}
+
+int lib_init()
+{
+	stream = open(com_port, O_RDWR);
+	if (stream == -1)
+	{
+		printf("Failed to open connection on port ");
+		printf("%i\n", *com_port);
+		return -1;
+	} else {
+	  	printf("Successfully opened connection on port ");
+		printf("%i\n", (int)(*com_port));
+	}
+	// set baud rate, etc. correctly
+	struct termios options;
+	if(tcgetattr(stream, &options))
+		printf("Error getting attributes");
+	cfsetispeed(&options, BAUD_RATE);
+	cfsetospeed(&options, BAUD_RATE);
+	//options.c_iflag &= ~ICRNL;
+	//options.c_oflag &= ~OCRNL;
+	//options.c_cflag |= (CLOCAL | CREAD);
+	options.c_cflag &= ~PARENB; //no parity
+	options.c_cflag &= ~CSTOPB; //one stop bit
+	options.c_cflag &= ~CSIZE;
+	options.c_cflag |= CS8; //8 bits
+	//options.c_lflag &= ~ICANON;
+	//options.c_cc[VMIN] = 1;
+	//options.c_cc[VTIME] = 50;
+
+	if (tcsetattr(stream, TCSANOW, &options))
+	{
+		printf("Error setting attributes.\n");
+		return -1;
+	}
+	return 0;
+}
+
+/**
+ * Listener function
+ * At the moment, just prints out what it receives
+ **/
+static void* listen()
+{
+	char c;
+	int count = 0;
+	char buf[100];
+	while (1)
+	{
+		if (read_char(&c) != 0) {
+			printf("Listen failed.\n");
+			return NULL;
+		}
+		
+		printf("%c", c); fflush(stdout);
+		
+		if(c == '\0')
+			break;
+	}
+
+	return NULL;
+}
+
+static int read_char(char* buf)
+{
+	if (read(stream, buf, 1) == -1) {
+		printf("Failed to read.\r\n");
+		return -1;
+	}
+	return 0;
+}
+
+/**
+ * Put functions
+ **/
+static int put_string(char *str)
+{
+	if (write(stream, str, strlen(str)) == -1) {
+		printf("Failed to write.\r\n");
+		return -1;
+	}
+	return 0;
+}
+
+static int put_char(char c)
+{
+	if (write(stream, &c, 1) == -1) {
+		printf("Failed to write.\r\n");
+		return -1;
+	}
+	return 0;
+}
Index: branches/scout/projects/diagnostic_station/server/server.h
===================================================================
--- branches/scout/projects/diagnostic_station/server/server.h	(nonexistent)
+++ branches/scout/projects/diagnostic_station/server/server.h	(revision 1346)
@@ -0,0 +1,13 @@
+#include <termios.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+int main(void);
+int lib_init();
+static void* listen();
+static int read_char(char* buf);
+static int put_string(char *str);
+static int put_char(char c);
Index: branches/scout/projects/diagnostic_station/server/Makefile
===================================================================
--- branches/scout/projects/diagnostic_station/server/Makefile	(nonexistent)
+++ branches/scout/projects/diagnostic_station/server/Makefile	(revision 1346)
@@ -0,0 +1,5 @@
+all:
+	gcc server.c -o server
+
+clean:
+	rm server
Index: branches/scout/projects/diagnostic_station/CAD/hinge_bushing.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/hinge_bushing.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/hinge_bushing.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/hinge_bushing.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/hinge_bushing.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/board_standoff.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/board_standoff.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/board_standoff.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/board_standoff.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/board_standoff.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/servolink.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/servolink.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/servolink.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/servolink.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/servolink.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/full_station.SLDASM
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/full_station.SLDASM
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/full_station.SLDASM	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/full_station.SLDASM	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/full_station.SLDASM
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/hinge_shaft.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/hinge_shaft.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/hinge_shaft.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/hinge_shaft.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/hinge_shaft.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/encoder.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/encoder.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/encoder.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/encoder.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/encoder.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/wall1.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/wall1.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/wall1.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/wall1.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/wall1.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/dyno_block.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/dyno_block.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/dyno_block.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/dyno_block.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/dyno_block.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/Servo Isolation Mounts.sldprt
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/Servo Isolation Mounts.sldprt
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/Servo Isolation Mounts.sldprt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/Servo Isolation Mounts.sldprt	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/Servo Isolation Mounts.sldprt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/dyno_bushing.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/dyno_bushing.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/dyno_bushing.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/dyno_bushing.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/dyno_bushing.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/hinge.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/hinge.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/hinge.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/hinge.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/hinge.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/slide_hinge1.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/slide_hinge1.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/slide_hinge1.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/slide_hinge1.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/slide_hinge1.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/dyno_shaft.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/dyno_shaft.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/dyno_shaft.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/dyno_shaft.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/dyno_shaft.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/turntable.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/turntable.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/turntable.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/turntable.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/turntable.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/rotating_hinge.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/rotating_hinge.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/rotating_hinge.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/rotating_hinge.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/rotating_hinge.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/Servo Screw.sldprt
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/Servo Screw.sldprt
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/Servo Screw.sldprt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/Servo Screw.sldprt	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/Servo Screw.sldprt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/Screw2.sldprt
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/Screw2.sldprt
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/Screw2.sldprt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/Screw2.sldprt	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/Screw2.sldprt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/servo gear - 18t.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/servo gear - 18t.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/servo gear - 18t.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/servo gear - 18t.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/servo gear - 18t.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/servo gear - 36t.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/servo gear - 36t.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/servo gear - 36t.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/servo gear - 36t.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/servo gear - 36t.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/slide_hinge.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/slide_hinge.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/slide_hinge.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/slide_hinge.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/slide_hinge.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/Hitec Servo.sldprt
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/Hitec Servo.sldprt
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/Hitec Servo.sldprt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/Hitec Servo.sldprt	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/Hitec Servo.sldprt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/floor.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/floor.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/floor.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/floor.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/floor.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/wall2.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/wall2.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/wall2.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/wall2.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/wall2.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/swivel_hinge.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/swivel_hinge.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/swivel_hinge.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/swivel_hinge.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/swivel_hinge.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/wall_standoff.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/wall_standoff.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/wall_standoff.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/wall_standoff.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/wall_standoff.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/dyno.SLDASM
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/dyno.SLDASM
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/dyno.SLDASM	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/dyno.SLDASM	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/dyno.SLDASM
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/turntable_standoff.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/turntable_standoff.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/turntable_standoff.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/turntable_standoff.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/turntable_standoff.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/Servo Horn.sldprt
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/Servo Horn.sldprt
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/Servo Horn.sldprt	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/Servo Horn.sldprt	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/Servo Horn.sldprt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/Hitec Servo.SLDASM
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/Hitec Servo.SLDASM
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/Hitec Servo.SLDASM	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/Hitec Servo.SLDASM	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/Hitec Servo.SLDASM
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/swivel_mount.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/swivel_mount.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/swivel_mount.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/swivel_mount.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/swivel_mount.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/electronics_board.SLDASM
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/electronics_board.SLDASM
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/electronics_board.SLDASM	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/electronics_board.SLDASM	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/electronics_board.SLDASM
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/diagnostic_station/CAD/dyno_base.SLDPRT
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/diagnostic_station/CAD/dyno_base.SLDPRT
===================================================================
--- branches/scout/projects/diagnostic_station/CAD/dyno_base.SLDPRT	(nonexistent)
+++ branches/scout/projects/diagnostic_station/CAD/dyno_base.SLDPRT	(revision 1346)

Property changes on: branches/scout/projects/diagnostic_station/CAD/dyno_base.SLDPRT
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/test/main.c
===================================================================
--- branches/scout/projects/test/main.c	(nonexistent)
+++ branches/scout/projects/test/main.c	(revision 1346)
@@ -0,0 +1,19 @@
+extern int testlcd();
+extern int testrangefinders();
+extern int testanalog();
+extern int testtokenring();
+extern int testmotors();
+
+int main(void) {
+  //testlcd();
+  //testrangefinders();
+  //testanalog();
+  testtokenring();
+  //testencoders();
+  //testlights();
+  //testmotors();
+  
+	return 0;
+}
+
+
Index: branches/scout/projects/test/testrangefinders.c
===================================================================
--- branches/scout/projects/test/testrangefinders.c	(nonexistent)
+++ branches/scout/projects/test/testrangefinders.c	(revision 1346)
@@ -0,0 +1,78 @@
+#include <dragonfly_lib.h>
+
+
+/**
+ * RangeFinder Rules
+ * - analog_init() is needed
+ * - value 100 - under 5cm is not detected
+ * - value 800 - over ~30cm is not detected
+ * - at ~20cm values become increasingly erroneous
+ *
+ */
+ 
+int to_mm(int rangeFinder) 
+{
+
+	if(rangeFinder != -1)
+		return (int)(rangeFinder/15.112*10);
+	else
+		return -1;
+
+}
+
+int testrangefinders(void) {
+  dragonfly_init(ANALOG);
+  usb_init();
+	usb_puts("usb turned on\r\n");
+  range_init();
+  usb_puts("rangefinders turned on\r\n");
+  int d1,d2,d3,d4,d5;
+  delay_ms(1000);
+  
+  //int sum = 0;
+  //int count = 0;
+  //int average = 0;
+  
+  // start testing rangefinders
+  while(1) {
+	//if(count == 10000)
+	//{
+	//	average = sum/count;
+	//	count = 0;
+	//}
+	
+    // get ranges
+    //d1 = range_read_distance(IR1);
+    d2 = range_read_distance(IR2);
+    //d3 = range_read_distance(IR3);
+    //d4 = range_read_distance(IR4);
+    //d5 = range_read_distance(IR5);
+    //usb_puts("d1=");
+    //usb_puti(d1);
+	
+	//sum += d2;
+	
+    //usb_puts("\taverage of 10000=");
+    //usb_puti(d2);
+	
+    //usb_puts("\td3=");
+    //usb_puti(d3);
+    //usb_puts("\td4=");
+    //usb_puti(d4);
+    //usb_puts("\td5=");
+    //usb_puti(d5);
+	
+	usb_puts("\tIn mm=");
+	usb_puti(to_mm(d2));
+    usb_puts("\r\n");   
+	
+	//count++;
+	
+    delay_ms(100);
+  }
+  
+  // end testing rangefinders
+	return 0;
+}
+
+
Index: branches/scout/projects/test/testmotors.c
===================================================================
--- branches/scout/projects/test/testmotors.c	(nonexistent)
+++ branches/scout/projects/test/testmotors.c	(revision 1346)
@@ -0,0 +1,16 @@
+#include <dragonfly_lib.h>
+
+int testmotors(void) {
+    dragonfly_init(ALL_ON); // orbs will work if you only init ORBS
+    //usb_init();
+    usb_puts("usb turned on\n");
+    delay_ms(1000);
+
+    motor1_set(1, 220);
+    motor2_set(1, 220);
+    delay_ms(1000);
+
+    return 0;
+}
+
+
Index: branches/scout/projects/test/Makefile
===================================================================
--- branches/scout/projects/test/Makefile	(nonexistent)
+++ branches/scout/projects/test/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = main
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/test/testlights.c
===================================================================
--- branches/scout/projects/test/testlights.c	(nonexistent)
+++ branches/scout/projects/test/testlights.c	(revision 1346)
@@ -0,0 +1,25 @@
+#include <dragonfly_lib.h>
+
+int testlights(void) {
+    dragonfly_init(ALL_ON); // orbs will work if you only init ORBS
+    //usb_init();
+    usb_puts("usb turned on\n");
+    delay_ms(1000);
+
+    orb_set_color(RED);
+    delay_ms(1000);
+    orb_set_color(ORANGE);
+    delay_ms(1000);
+    orb_set_color(YELLOW);
+    delay_ms(1000);
+    orb_set_color(GREEN);
+    delay_ms(1000);
+    orb_set_color(BLUE);
+    delay_ms(1000);
+    orb_set_color(PURPLE);
+    delay_ms(1000);
+
+    return 0;
+}
+
+
Index: branches/scout/projects/test/testencoders.c
===================================================================
--- branches/scout/projects/test/testencoders.c	(nonexistent)
+++ branches/scout/projects/test/testencoders.c	(revision 1346)
@@ -0,0 +1,29 @@
+#include <dragonfly_lib.h>
+#include "spi.h"
+#include "encoders.h"
+
+#define MODE 0
+#define TEST 0
+
+extern char spi_status;
+
+int testencoders(void)
+{
+	usb_init();
+	encoders_init();
+	dragonfly_init(ALL_ON);
+	int encoder_left,encoder_right;
+	while(1){
+		
+		encoder_left = encoder_read(LEFT);
+		encoder_right = encoder_read(RIGHT);
+		usb_puts("Encoder values (left, right): ");
+		usb_puti(encoder_left); 
+		usb_puts(", ");
+		usb_puti(encoder_right); 
+		usb_puts("\n\r");
+		delay_ms(500);
+	}
+	return 0;
+}
+
Index: branches/scout/projects/test/testtokenring.c
===================================================================
--- branches/scout/projects/test/testtokenring.c	(nonexistent)
+++ branches/scout/projects/test/testtokenring.c	(revision 1346)
@@ -0,0 +1,100 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+
+
+/**
+ * Tests the token ring and BOM
+ * - prints table of bom values for every robot in token ring
+ * - takes several seconds to initialize token ring
+ */
+ 
+#define MAX_ROBOTS 16
+
+// set a list of integers to 0
+void clearRobots(int* list) {
+  for(int i=0;i<MAX_ROBOTS;i++)
+    list[i] = 0;
+}
+
+int testtokenring(void) {
+  // initialize everything
+  dragonfly_init(ALL_ON);
+  usb_init();
+	usb_puts("usb turned on\r\n");
+  wl_init();
+  usb_puts("wireless turned on\r\n");
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+  usb_puts("token ring joined\r\n");
+  int* robotList = (int*)malloc(sizeof(int)*MAX_ROBOTS);
+  int numRobots = 0;
+  delay_ms(1000);
+  
+  // start testing wireless/token ring/BOM
+  int i=0;
+  while(1) {
+    wl_do();
+    // only print table every 200 loops
+    if (i%200==0) {
+      // get token ring size values
+      usb_puts("\r\nnumber of robots in token ring:");
+      usb_puti(wl_token_get_robots_in_ring());
+      usb_puts("\r\nnumber of robots in matrix:"); 
+      usb_puti(wl_token_get_num_robots());
+      
+      // get list of robots
+      numRobots = 0;
+      clearRobots(robotList);
+      wl_token_iterator_begin();
+      while(wl_token_iterator_has_next()) {
+        int tmp = wl_token_iterator_next();
+        if (tmp < 0)
+          break;
+        robotList[tmp] = 1;
+        numRobots++;
+      }
+      if (numRobots < 1) {
+        usb_puts("\r\nNo BOM table available.");
+        continue; // skip table printing
+      } else {
+        usb_puts("\r\nBOM table: (* indicates this robot)");
+      }
+      
+      // print table of bom readings between robots
+      usb_puts("\r\ns \\ d");
+      // print header
+      for(int j=0;j<MAX_ROBOTS;j++)
+        if (robotList[j]) {
+          usb_puts("\t|");
+          if (j == wl_get_xbee_id())
+            usb_puts("*"); // indicate that this is the current bot
+          usb_puti(j);
+        }
+      usb_puts("\r\n");
+      // print body
+      for(int l=0;l<MAX_ROBOTS;l++) 
+        if (robotList[l]) {        
+          if (l == wl_get_xbee_id())
+            usb_puts("*"); // indicate that this is the current bot
+          usb_puti(l); // print label col
+          for(int k=0;k<MAX_ROBOTS;k++) 
+            if (robotList[k]) {
+              usb_puts("\t|");
+              if (k != l) {
+                int bom = wl_token_get_sensor_reading(l,k);
+                if (bom >= 0 && bom <= 15)
+                  usb_puti(bom); // print bom value
+              }
+            }
+          usb_puts("\r\n");
+        }
+      usb_puts("\r\n");
+    }
+  }
+  
+  // end testing token ring and bom
+	return 0;
+}
+
+
Index: branches/scout/projects/test/testeeprom.c
===================================================================
--- branches/scout/projects/test/testeeprom.c	(nonexistent)
+++ branches/scout/projects/test/testeeprom.c	(revision 1346)
@@ -0,0 +1,90 @@
+/** @file testeeprom.c
+ *  @brief tests the eeprom code
+ *
+ *  stores and retrives a value, then sets it back to what it was
+ */
+#include <dragonfly_lib.h>
+#include "eeprom.h"
+
+#define ADDR 0
+
+int testeeprom(void) {
+    unsigned char data, data2;
+    int ret;
+    int worked=1;
+
+    dragonfly_init(ALL_ON);
+    
+    /* read whats there */
+    ret = eeprom_get_byte(ADDR, &data);
+    
+    if(ret) {
+        usb_puts("Error reading intial value! return code: ");
+        usb_puti(ret);
+        usb_puts(" data: ");
+        usb_puti(data);
+        usb_puts("\r\n");
+        worked=0;
+    }
+    else {
+        usb_puts("data was: ");
+        usb_puti(data);
+        usb_puts("\r\n");
+    }
+    
+    /* write something new */
+    
+    ret = eeprom_put_byte(ADDR, 123);
+    if(ret) {
+        usb_puts("Error writing data! return code: ");
+        usb_puti(ret);
+        usb_puts("\r\n");
+        worked=0;
+    }
+    else {
+        usb_puts("wrote 123\r\n");
+    }
+    
+    
+    /* check if tis really there */
+    
+    ret = eeprom_get_byte(ADDR, &data2);
+    
+    if(ret) {
+        usb_puts("Error reading second value! return code: ");
+        usb_puti(ret);
+        usb_puts(" data: ");
+        usb_puti(data2);
+        usb_puts("\r\n");
+        worked=0;
+    }
+    else {
+        if(data2==123) {
+            usb_puts("data write and re-read worked!\r\n");
+        }
+        else {
+            usb_puts("data re-read returned 0 but data was ");
+            usb_puti(data2);
+            usb_puts("\r\n");
+            worked=0;
+        }
+    }
+    
+    
+    /* restore old value */
+    
+    ret = eeprom_put_byte(ADDR, 123);
+    if(ret) {
+        usb_puts("Error writing data the second time! return code: ");
+        usb_puti(ret);
+        usb_puts("\r\n");
+        worked=0;
+    }
+    else {
+        usb_puts("re-wrote original data: ");
+        usb_puti(data);
+        usb_puts("\r\n");
+    }
+    
+    return worked;
+}
Index: branches/scout/projects/test/testanalog.c
===================================================================
--- branches/scout/projects/test/testanalog.c	(nonexistent)
+++ branches/scout/projects/test/testanalog.c	(revision 1346)
@@ -0,0 +1,45 @@
+#include <dragonfly_lib.h>
+
+/*
+ * This function outputs to TeraTerm a table which displays the values currently
+ * stored in the analog table
+ */
+
+int testanalog(void) {
+
+	dragonfly_init(ANALOG);
+	
+	usb_init();
+	usb_puts("usb turned on\r\n");
+	
+	range_init();
+	usb_puts("rangefinders initialized\r\n");
+	
+	usb_puts("\r\n\n");
+	delay_ms(1000);
+	
+	while (1) {
+	
+		for (int i = 0; i < 20; i++) {
+		
+			usb_puts("\r\n");
+		
+		}
+		
+		usb_puts("port# |\tvalue\r\n");
+		
+		for (int j = 1; j < 16; j++) {
+		
+			usb_puti(j);
+			usb_puts("\t");
+			usb_puti(analog10(j));
+			usb_puts("\r\n");
+		
+		}
+		
+		delay_ms(575);
+		
+	}
+	
+	return 0;
+}
\ No newline at end of file
Index: branches/scout/projects/test/testlcd.c
===================================================================
--- branches/scout/projects/test/testlcd.c	(nonexistent)
+++ branches/scout/projects/test/testlcd.c	(revision 1346)
@@ -0,0 +1,45 @@
+#include <dragonfly_lib.h>
+
+
+/**
+ * LCD Rules
+ * - when changing put formats (from string to int or back)
+ *   the screen will clear and start printing at beginning
+ * - when outputting again in same format, an append op is performed
+ * - text wraps to next line, and to beginning
+ *    - when wrapping to beginning, screen is not cleared
+ * - puti only does signed ints
+ */
+
+int testlcd(void) {
+  usb_init();
+	usb_puts("usb turned on\n");
+  lcd_init();
+  usb_puts("lcd turned on\n");
+  lcd_clear_screen();
+  usb_puts("lcd screen cleared\n");
+  delay_ms(1000);
+  
+  // start testing lcd
+  lcd_puts("this is a test, a really long test");
+  lcd_puts("this is a test, a really long test. this is a test, a really long test");
+  usb_puts("test writing string to lcd: 'this is a test, a really long test'\n");
+  delay_ms(10000);
+  
+  /*lcd_clear_screen();
+  usb_puts("lcd screen cleared\n");
+  lcd_puti(1000000);
+  lcd_puti(100000);
+  lcd_puti(10000);
+  lcd_puti(1000);
+  lcd_puti(100);
+  lcd_puti(10);
+  lcd_puti(1);
+  usb_puts("test writing int to lcd: 1000000,100000, 10000, 1000, 100, 10, 1\n");
+  delay_ms(10000);
+  */
+  // end testing lcd
+	return 0;
+}
+
+
Index: branches/scout/projects/mapping/matlab/data/input11.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input11.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input11.txt	(revision 1346)
@@ -0,0 +1,466 @@
+0 0 0.000000 -1 -1 552 270 356
+0 0 0.015120 -1 -1 791 265 347
+3 0 0.058800 -1 -1 478 265 356
+9 1 0.169680 -1 -1 -1 260 478
+13 2 0.231839 -1 -1 -1 282 434
+81 54 0.923998 356 623 -1 -1 213
+83 57 0.950877 294 800 597 651 213
+87 63 1.007997 315 623 -1 751 213
+89 66 1.036557 307 -1 -1 531 217
+93 73 1.098717 330 651 -1 -1 217
+95 76 1.127277 307 597 -1 -1 207
+99 84 1.191117 322 681 512 681 207
+101 92 1.253277 307 714 552 681 228
+102 96 1.286877 307 681 552 -1 224
+104 104 1.349037 315 651 714 -1 207
+105 108 1.382636 315 386 -1 651 228
+91 88 1.007998 288 494 -1 681 237
+95 96 0.997918 241 651 478 597 237
+97 100 0.991198 255 681 -1 651 237
+101 108 0.979438 255 623 -1 597 237
+105 116 0.967678 260 574 -1 681 237
+107 119 0.960958 241 421 -1 322 255
+20 93 0.319200 245 408 714 623 260
+24 94 0.351120 232 552 -1 800 255
+32 98 0.416639 224 552 531 574 237
+35 100 0.446879 221 494 -1 494 265
+43 104 0.512399 221 574 -1 397 270
+50 108 0.577919 221 512 800 681 282
+53 110 0.609839 210 552 -1 714 276
+25 106 0.413279 255 -1 791 -1 228
+33 110 0.394799 260 751 -1 -1 237
+37 111 0.383039 276 597 -1 -1 237
+45 115 0.367919 255 -1 -1 -1 232
+53 117 0.356160 245 -1 -1 -1 228
+57 118 0.346080 294 -1 -1 -1 224
+65 120 0.336000 260 375 -1 -1 228
+69 121 0.329280 288 651 -1 -1 207
+77 123 0.315840 270 791 -1 -1 224
+-12 155 -0.341039 301 -1 751 -1 221
+-4 153 -0.275519 322 -1 -1 -1 221
+0 152 -0.243599 307 -1 791 -1 224
+8 150 -0.178079 315 800 -1 -1 221
+12 149 -0.144479 330 494 -1 -1 217
+20 149 -0.077279 347 -1 -1 -1 213
+29 149 -0.008399 338 -1 -1 -1 210
+33 149 0.023520 386 -1 597 -1 217
+42 149 0.094080 375 751 -1 -1 207
+46 150 0.126000 421 714 751 -1 207
+54 152 0.193200 347 800 800 -1 213
+58 153 0.226800 347 -1 -1 -1 217
+66 155 0.292320 447 -1 681 -1 213
+70 156 0.324240 623 -1 -1 751 213
+78 160 0.389759 421 -1 751 -1 213
+82 162 0.421679 597 -1 714 -1 213
+90 166 0.488879 -1 -1 800 -1 221
+65 163 0.134400 651 -1 597 -1 217
+69 164 0.129360 714 -1 623 -1 217
+77 165 0.117600 -1 -1 681 -1 217
+81 165 0.112560 791 -1 651 -1 221
+89 165 0.097440 574 597 800 -1 210
+93 165 0.092400 800 800 552 -1 213
+101 165 0.082320 -1 751 574 -1 210
+109 165 0.067200 -1 -1 651 -1 228
+113 165 0.060480 -1 -1 597 -1 210
+121 165 0.047040 -1 681 751 -1 245
+125 165 0.040320 -1 651 478 -1 237
+52 220 -0.613198 -1 681 651 -1 237
+55 218 -0.581278 -1 623 512 -1 237
+63 214 -0.515758 -1 800 574 -1 241
+67 212 -0.482158 -1 574 597 -1 245
+75 208 -0.416638 -1 597 597 -1 250
+79 206 -0.351119 -1 552 512 -1 250
+87 204 -0.317519 -1 597 494 -1 250
+95 202 -0.251999 -1 494 574 -1 250
+99 201 -0.218399 -1 552 494 -1 255
+107 199 -0.152879 462 512 494 -1 265
+111 198 -0.119279 462 478 434 -1 232
+119 198 -0.052079 338 462 478 -1 270
+128 198 0.016800 307 494 447 -1 265
+132 198 0.048720 265 408 447 -1 260
+140 199 0.117600 282 447 408 -1 294
+144 200 0.152880 260 447 434 -1 288
+152 202 0.220080 210 421 408 -1 294
+124 206 -0.131039 245 421 397 -1 301
+132 204 -0.142799 265 408 365 -1 307
+140 202 -0.152879 307 375 375 -1 307
+144 201 -0.157919 365 356 330 -1 322
+152 199 -0.167999 375 365 356 -1 315
+160 197 -0.181439 421 322 365 -1 330
+164 196 -0.186479 375 322 322 -1 338
+172 194 -0.199919 462 322 322 -1 347
+176 193 -0.206639 494 307 322 -1 330
+184 191 -0.220079 421 270 315 -1 356
+194 189 -0.208319 386 270 276 -1 356
+132 257 -0.831597 301 -1 282 -1 386
+144 246 -0.702238 421 245 265 -1 375
+151 241 -0.635038 282 241 228 -1 356
+165 232 -0.503998 265 241 207 574 375
+181 225 -0.372959 207 288 194 462 386
+189 222 -0.304079 531 250 169 -1 347
+205 219 -0.173039 -1 255 171 -1 375
+214 218 -0.104159 -1 307 164 -1 421
+231 218 0.030240 397 322 160 434 531
+247 220 0.162960 386 301 160 375 375
+255 222 0.228480 338 260 166 276 574
+271 227 0.356159 338 173 164 260 681
+278 230 0.419999 322 288 178 241 -1
+292 238 0.549359 270 800 183 217 751
+306 248 0.678719 315 462 221 194 -1
+312 254 0.742558 307 386 232 189 714
+321 264 0.850078 294 397 255 186 -1
+327 272 0.934078 294 347 232 186 -1
+330 276 0.971038 288 322 260 181 -1
+334 284 1.036558 276 338 250 183 -1
+347 319 1.322157 224 245 186 166 800
+349 333 1.434716 210 237 189 178 714
+350 341 1.495196 191 176 169 171 -1
+350 354 1.597676 183 200 149 181 -1
+349 365 1.681676 176 191 151 181 -1
+348 370 1.718636 166 181 151 181 -1
+342 346 1.406157 158 162 140 181 -1
+344 354 1.394397 151 158 149 181 -1
+345 358 1.389357 134 158 145 189 -1
+347 366 1.375917 125 142 139 183 -1
+348 370 1.369197 118 139 137 176 -1
+349 378 1.448156 114 129 265 181 -1
+349 386 1.565756 121 115 462 181 -1
+349 390 1.632956 126 110 276 173 -1
+347 398 1.762316 147 110 181 181 -1
+346 402 1.831195 160 105 164 183 -1
+306 447 2.447754 322 134 117 232 -1
+300 451 2.508233 597 139 104 203 -1
+297 453 2.538473 -1 154 109 169 -1
+289 458 2.615753 -1 189 111 166 -1
+282 461 2.672873 -1 221 106 494 -1
+218 473 3.191991 -1 -1 169 164 791
+201 470 3.326391 -1 -1 186 142 434
+193 468 3.393590 -1 -1 228 139 386
+177 462 3.524630 -1 714 288 137 338
+165 456 3.632150 -1 -1 307 133 301
+160 453 3.675830 -1 -1 386 137 307
+152 447 3.751430 -1 -1 375 137 307
+149 444 3.785030 -1 -1 386 140 330
+143 438 3.848869 -1 -1 375 134 347
+137 432 3.912709 -1 -1 375 144 365
+134 429 3.944629 -1 -1 330 147 397
+129 423 4.006789 -1 -1 375 149 478
+127 420 4.037029 -1 347 365 151 421
+177 450 3.711110 -1 751 338 152 478
+171 446 3.695990 -1 -1 338 154 552
+168 444 3.689270 -1 -1 338 156 447
+162 440 3.672470 -1 -1 347 149 597
+159 438 3.667430 -1 -1 338 152 791
+131 422 3.608630 -1 -1 288 162 -1
+124 418 3.591830 -1 -1 282 162 -1
+121 416 3.583431 -1 552 276 160 -1
+210 397 2.963512 -1 -1 270 164 800
+206 398 2.995432 -1 -1 260 164 -1
+198 398 3.057592 -1 -1 237 164 -1
+190 398 3.121432 -1 -1 245 164 -1
+186 398 3.153352 -1 -1 265 164 -1
+178 398 3.215512 -1 -1 237 162 -1
+174 398 3.245751 -1 -1 232 162 -1
+166 396 3.309591 -1 -1 232 164 -1
+162 395 3.343191 -1 -1 232 156 -1
+154 393 3.405351 -1 -1 213 164 -1
+150 392 3.438951 -1 -1 189 164 -1
+130 384 3.603590 -1 -1 183 160 623
+121 379 3.685910 -1 -1 191 152 597
+115 375 3.743030 -1 -1 191 147 434
+103 365 3.862309 -1 -1 217 151 -1
+127 375 3.541430 -1 -1 232 142 -1
+116 370 3.561590 -1 -1 232 144 -1
+108 366 3.559911 -1 -1 237 140 -1
+104 364 3.556551 -1 -1 237 137 -1
+96 360 3.544791 -1 -1 237 137 -1
+92 358 3.538070 -1 -1 232 142 681
+84 355 3.524631 -1 -1 221 142 531
+80 354 3.514551 -1 -1 217 140 447
+72 352 3.499431 -1 -1 217 142 552
+64 350 3.484311 -1 -1 197 144 623
+60 349 3.475911 -1 623 200 142 531
+145 316 2.797193 -1 -1 178 142 597
+141 317 2.832473 -1 -1 186 137 574
+127 321 2.946712 -1 -1 191 136 623
+111 323 3.074392 -1 -1 217 131 421
+103 323 3.138232 -1 714 241 129 552
+90 322 3.245752 -1 -1 250 129 -1
+85 321 3.287751 714 -1 260 130 -1
+63 316 3.465831 -1 -1 255 133 714
+59 314 3.499431 -1 531 245 131 714
+51 310 3.564951 -1 -1 241 134 512
+43 306 3.630471 -1 -1 245 134 552
+39 304 3.662390 -1 -1 237 139 408
+33 300 3.724550 -1 714 237 137 681
+30 298 3.756470 -1 623 221 137 408
+24 294 3.818630 -1 462 232 139 714
+21 291 3.850550 -1 623 232 137 751
+15 285 3.914390 -1 681 221 137 800
+38 295 3.554871 -1 597 221 137 -1
+34 293 3.549831 -1 597 203 134 -1
+26 290 3.536391 -1 494 210 137 -1
+22 288 3.529671 -1 531 210 140 -1
+15 286 3.511191 -1 462 207 136 -1
+7 284 3.497751 -1 494 191 139 -1
+3 282 3.499431 -1 434 200 137 -1
+-11 276 3.549831 -1 397 197 145 -1
+2 240 3.408711 800 397 203 144 -1
+-16 233 3.561591 714 338 191 151 -1
+-23 230 3.620391 651 408 183 152 -1
+-37 221 3.749750 651 330 169 156 -1
+-43 216 3.813590 623 282 176 158 791
+-55 205 3.941270 478 232 176 162 681
+-65 192 4.070630 651 421 176 173 -1
+-70 185 4.136149 800 681 186 186 -1
+-78 170 4.265509 651 714 224 181 -1
+-81 163 4.327669 512 574 232 213 -1
+-85 150 4.435189 791 462 241 197 -1
+-87 140 4.519188 791 494 265 197 -1
+-88 136 4.554468 623 512 265 183 -1
+-89 128 4.619988 751 478 260 186 -1
+-89 124 4.651908 751 447 255 194 -1
+-89 116 4.715748 751 434 241 191 -1
+-80 140 4.399909 552 447 245 191 -1
+-81 136 4.393188 494 434 232 191 -1
+-83 128 4.383108 462 421 237 189 -1
+-84 124 4.374708 462 408 245 189 -1
+-86 116 4.361268 478 356 228 189 -1
+-88 108 4.347828 462 386 224 189 -1
+-90 104 4.342788 447 375 210 189 -1
+-93 96 4.331028 365 365 210 189 -1
+-95 92 4.324307 434 365 210 183 -1
+-104 74 4.325987 365 330 194 181 -1
+-107 67 4.352867 397 322 176 186 -1
+-37 111 3.774949 356 288 207 166 -1
+-43 106 3.838789 375 276 200 164 -1
+-55 94 3.966469 347 276 171 156 -1
+-65 80 4.097508 462 255 191 149 -1
+-69 73 4.163028 -1 255 288 154 -1
+-76 58 4.292388 597 255 250 154 -1
+-79 50 4.356228 623 255 228 160 -1
+-83 34 4.487267 -1 276 207 164 -1
+-85 17 4.619987 -1 270 191 178 -1
+-85 9 4.685507 -1 265 191 194 -1
+-84 -8 4.818226 800 276 186 241 -1
+-83 -16 4.883746 -1 315 191 228 -1
+-78 -32 5.016466 -1 512 183 194 -1
+-75 -40 5.085345 -1 375 191 494 -1
+-67 -56 5.219745 -1 574 203 294 -1
+-63 -63 5.283585 -1 -1 207 276 -1
+-55 -74 5.396144 -1 -1 210 245 791
+-47 -82 5.483504 -1 800 210 241 -1
+-43 -85 5.522144 -1 -1 197 241 -1
+-35 -92 5.606144 -1 651 194 224 -1
+-29 -96 5.663264 -1 447 194 228 -1
+-15 -104 5.789264 -1 -1 194 210 -1
+-7 -107 5.854784 127 -1 288 171 -1
+8 -112 5.980783 -1 -1 232 197 681
+15 -114 6.034543 -1 -1 241 189 714
+26 -116 6.121903 -1 -1 255 191 714
+35 -117 6.197503 -1 -1 250 191 -1
+39 -117 6.231102 -1 -1 250 191 -1
+47 -117 6.296622 -1 -1 241 189 800
+51 -117 6.326862 -1 -1 245 186 -1
+59 -117 6.390702 -1 -1 241 189 -1
+63 -116 6.420942 -1 -1 228 194 -1
+71 -114 6.486462 -1 -1 224 197 -1
+75 -113 6.518382 -1 -1 224 197 -1
+50 -110 6.167263 -1 -1 213 194 -1
+58 -111 6.155503 -1 -1 207 207 -1
+62 -112 6.147103 -1 -1 197 197 -1
+97 -117 6.229423 -1 -1 210 176 -1
+115 -117 6.323503 -1 -1 250 173 276
+123 -116 6.370543 -1 -1 288 169 -1
+136 -114 6.419262 -1 -1 301 158 -1
+147 -112 6.436062 651 -1 282 166 -1
+152 -111 6.434382 -1 -1 347 166 -1
+160 -109 6.422623 -1 -1 347 173 -1
+78 -62 5.769104 -1 -1 322 178 -1
+85 -66 5.831264 -1 -1 307 183 -1
+89 -68 5.864864 -1 -1 322 140 -1
+97 -71 5.928704 -1 681 315 142 -1
+101 -72 5.958944 -1 -1 307 134 -1
+109 -74 6.022784 -1 800 294 145 -1
+117 -76 6.083264 -1 -1 294 147 -1
+121 -77 6.113504 -1 791 276 147 -1
+129 -78 6.177344 -1 751 265 147 -1
+133 -78 6.207584 -1 -1 270 151 -1
+141 -78 6.269744 -1 800 245 149 -1
+145 -78 6.299984 -1 681 260 151 -1
+153 -78 6.362144 -1 714 245 152 -1
+161 -77 6.424304 -1 623 241 152 -1
+165 -76 6.456224 -1 597 224 154 -1
+173 -74 6.520064 -1 651 237 156 -1
+177 -73 6.550304 -1 552 237 147 -1
+152 -71 6.200865 -1 552 232 156 -1
+156 -71 6.195825 -1 478 221 154 -1
+164 -71 6.180705 -1 597 217 154 -1
+172 -71 6.167264 -1 552 213 156 -1
+176 -72 6.165585 -1 478 203 154 -1
+184 -73 6.148785 -1 447 200 156 -1
+188 -74 6.143744 -1 494 183 154 -1
+198 -76 6.147104 -1 512 189 110 -1
+241 -78 6.284864 -1 462 228 144 -1
+267 -43 6.454544 597 207 147 131 -1
+283 -38 6.587264 714 265 301 131 -1
+291 -35 6.652783 -1 250 276 133 -1
+307 -27 6.788863 -1 260 228 136 -1
+321 -17 6.921582 -1 260 203 136 -1
+328 -11 6.988782 -1 270 191 149 -1
+340 1 7.119822 -1 282 183 158 -1
+345 7 7.183661 -1 288 178 178 -1
+354 21 7.311341 -1 365 173 210 -1
+358 28 7.375181 -1 270 181 191 -1
+364 43 7.506221 -1 494 178 173 -1
+368 59 7.635581 -1 -1 189 338 -1
+369 67 7.701100 -1 574 200 260 -1
+370 83 7.830460 -1 447 210 241 -1
+370 91 7.894300 -1 681 250 228 -1
+368 105 8.003500 -1 -1 260 207 -1
+367 111 8.048860 -1 -1 270 200 -1
+365 121 8.126139 -1 -1 270 200 -1
+364 97 7.806940 -1 -1 276 189 -1
+364 101 7.801899 -1 -1 270 200 -1
+322 122 7.309659 -1 -1 200 162 -1
+325 127 7.358379 -1 -1 210 171 -1
+330 137 7.444059 651 -1 217 169 -1
+332 142 7.482699 -1 -1 221 166 -1
+334 150 7.549899 -1 -1 221 160 -1
+336 158 7.615419 -1 -1 210 164 -1
+337 162 7.647339 -1 -1 189 164 -1
+339 172 7.729659 -1 -1 197 158 -1
+339 179 7.786778 -1 -1 203 158 -1
+339 195 7.911098 -1 -1 224 144 -1
+338 202 7.964859 -1 -1 237 151 -1
+336 213 8.057259 651 -1 232 147 -1
+334 223 8.132858 623 -1 237 139 -1
+333 227 8.168139 -1 -1 237 147 -1
+330 235 8.235338 -1 -1 237 147 -1
+331 206 7.899339 791 -1 232 149 -1
+331 214 7.887579 597 -1 228 147 -1
+331 239 7.852300 597 -1 200 147 -1
+331 247 7.838860 512 -1 197 147 -1
+331 255 7.827099 552 -1 197 145 -1
+331 260 7.832139 512 -1 194 145 -1
+331 275 7.884219 651 -1 194 140 -1
+330 283 7.921179 651 681 213 137 -1
+328 298 7.995099 408 714 232 136 -1
+286 222 7.390301 597 623 270 131 -1
+288 227 7.437341 574 597 265 134 -1
+295 248 7.617100 462 478 265 137 -1
+297 256 7.679260 462 531 255 136 -1
+298 260 7.709500 397 462 250 140 -1
+298 268 7.771660 462 478 250 139 -1
+298 276 7.833820 397 434 250 137 -1
+298 280 7.867420 434 462 245 137 -1
+298 288 7.927900 397 478 237 140 -1
+298 292 7.959820 375 462 237 139 800
+296 300 8.021980 408 408 228 137 -1
+294 308 8.084140 375 408 232 140 -1
+293 312 8.116059 347 434 224 136 -1
+291 320 8.179899 307 434 200 139 791
+291 321 7.921180 294 338 221 134 -1
+291 331 7.926219 282 347 207 136 -1
+291 339 7.919499 276 347 213 134 -1
+291 343 7.911099 255 288 210 136 -1
+291 351 7.902699 265 301 207 136 -1
+291 355 7.897659 241 307 203 134 -1
+291 364 7.895979 232 282 197 133 -1
+290 379 7.946379 186 265 139 134 -1
+289 387 7.979979 217 265 194 122 -1
+251 329 7.499500 189 210 156 -1 -1
+253 337 7.563340 176 197 136 129 -1
+256 350 7.672540 149 160 140 131 -1
+257 361 7.761580 151 152 139 131 -1
+257 366 7.796859 149 144 152 130 -1
+257 375 7.867419 129 134 160 131 -1
+240 438 8.369737 -1 173 113 197 -1
+133 464 9.263494 -1 189 113 154 -1
+126 465 9.350854 -1 245 115 462 -1
+35 418 10.306771 -1 -1 301 140 213
+27 408 10.360531 -1 -1 375 144 237
+18 395 10.372291 -1 -1 462 144 250
+13 388 10.362210 -1 -1 375 151 265
+11 385 10.355491 -1 -1 375 149 282
+98 410 9.733892 -1 714 408 154 255
+94 409 9.764132 -1 -1 397 147 322
+86 406 9.824613 -1 -1 397 158 322
+50 381 10.169009 -1 -1 338 160 512
+41 361 10.145487 -1 -1 282 171 -1
+38 358 10.138767 -1 -1 270 166 -1
+32 352 10.127007 -1 -1 282 171 -1
+29 349 10.120288 -1 -1 265 171 -1
+23 344 10.106849 -1 -1 260 169 -1
+17 339 10.093409 -1 -1 255 173 -1
+14 337 10.085009 751 -1 260 169 -1
+8 332 10.073249 -1 -1 228 169 -1
+5 330 10.066529 -1 -1 232 171 -1
+-1 326 10.049729 -1 -1 232 171 -1
+-4 324 10.041329 -1 -1 224 171 -1
+87 319 9.399571 -1 -1 217 166 -1
+83 319 9.429811 -1 -1 203 164 -1
+75 319 9.490292 -1 -1 207 166 -1
+67 319 9.552451 -1 -1 197 166 574
+62 318 9.591091 -1 -1 197 164 681
+48 314 9.705331 -1 -1 200 160 800
+41 311 9.767490 -1 -1 221 147 -1
+28 305 9.873329 -1 -1 221 152 -1
+23 302 9.917009 -1 -1 232 149 -1
+15 297 9.992609 -1 -1 224 149 -1
+11 294 10.027889 -1 -1 228 152 -1
+5 289 10.091729 -1 -1 232 147 -1
+-1 284 10.152209 -1 -1 221 147 714
+-4 281 10.184129 -1 -1 217 147 681
+-10 275 10.249648 -1 -1 213 147 478
+-13 272 10.279888 -1 -1 213 145 478
+-18 266 10.343727 -1 -1 197 147 347
+0 278 10.054769 -1 -1 200 139 531
+-73 204 10.207648 -1 -1 265 137 531
+22 215 9.537331 800 -1 237 145 574
+14 213 9.599490 -1 -1 245 145 494
+6 211 9.659970 -1 651 250 145 494
+2 210 9.690210 -1 714 224 142 714
+-6 208 9.752370 -1 552 241 144 -1
+-10 207 9.784289 -1 552 232 149 -1
+-18 204 9.844769 -1 714 224 140 -1
+-22 202 9.878369 -1 681 221 139 800
+-29 198 9.942209 -1 623 203 144 -1
+-35 194 10.002688 -1 552 200 145 -1
+-38 192 10.034608 -1 531 210 140 -1
+-44 187 10.098447 -1 531 189 145 -1
+-47 184 10.128687 -1 462 200 140 -1
+-53 178 10.190846 -1 347 197 144 -1
+-56 175 10.222766 -1 434 191 144 -1
+-94 117 10.442843 -1 322 241 139 494
+-104 100 10.414283 -1 365 217 127 531
+-108 94 10.400844 623 386 221 151 597
+-110 91 10.392444 681 397 203 152 800
+-114 85 10.375644 751 375 200 156 714
+-24 106 9.680126 714 397 194 158 597
+-28 105 9.715406 -1 375 181 154 -1
+-41 100 9.829646 714 356 178 164 -1
+-55 92 9.957326 597 322 162 166 -1
+-62 87 10.022846 512 217 173 171 -1
+-75 76 10.157246 681 217 173 173 -1
+-81 70 10.224445 -1 237 183 -1 -1
+-92 56 10.358846 751 751 203 183 -1
+-101 41 10.493245 714 651 228 213 -1
+-104 34 10.555405 751 597 237 197 -1
+-109 21 10.659564 -1 494 265 189 -1
+-111 16 10.703244 -1 408 270 183 -1
+-113 7 10.778844 -1 494 276 178 -1
+-115 -1 10.844364 -1 447 265 176 -1
+-116 -5 10.877964 623 386 270 183 -1
+-116 -13 10.940124 531 434 250 186 -1
+-116 -17 10.972043 574 421 260 183 -1
+-116 -25 11.034203 494 408 245 183 -1
+-116 -33 11.096362 478 421 237 186 -1
+-115 -37 11.126602 447 375 241 186 -1
+-113 -45 11.188762 434 347 245 183 -1
+-112 -49 11.219002 397 338 237 186 -1
+-109 -52 10.919964 356 307 213 183 -1
+-109 -56 10.914924 386 301 191 178 -1
+-109 -64 10.903164 375 294 197 176 -1
+-110 -74 10.914925 322 270 197 173 -1
+-110 -82 10.941805 365 255 194 173 -1
Index: branches/scout/projects/mapping/matlab/data/input12.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input12.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input12.txt	(revision 1346)
@@ -0,0 +1,297 @@
+0 0 -0.001680 294 191 228 152 -1
+3 0 0.023520 307 197 228 152 -1
+9 0 0.072240 282 191 200 139 -1
+23 2 0.186479 315 186 183 149 -1
+31 4 0.250319 494 207 176 160 -1
+47 10 0.379679 -1 197 154 171 -1
+55 14 0.443519 -1 203 142 181 -1
+69 23 0.574558 -1 200 139 197 -1
+81 33 0.702238 -1 228 137 217 -1
+87 39 0.767758 -1 241 -1 200 -1
+122 114 1.429676 -1 -1 173 164 -1
+123 123 1.496876 -1 -1 169 158 800
+122 141 1.631276 -1 -1 237 147 651
+121 149 1.691755 -1 -1 294 144 512
+119 162 1.753915 -1 -1 288 142 552
+75 84 1.098717 462 -1 322 149 478
+77 88 1.137357 -1 -1 338 151 531
+81 96 1.206237 -1 -1 322 152 531
+82 100 1.238157 -1 -1 330 154 512
+84 108 1.300317 -1 -1 338 152 552
+85 112 1.330557 -1 -1 322 158 552
+87 120 1.392717 -1 -1 307 160 597
+88 128 1.454876 -1 -1 276 166 651
+88 132 1.485116 -1 -1 315 171 751
+88 140 1.545596 623 -1 301 181 714
+88 144 1.575836 462 -1 307 186 800
+88 152 1.636316 714 -1 307 181 -1
+88 156 1.668236 462 -1 276 169 681
+87 164 1.728716 -1 -1 276 164 751
+84 176 1.821116 -1 -1 260 164 -1
+81 188 1.913516 -1 -1 260 173 800
+81 163 1.562397 -1 -1 250 173 714
+81 167 1.553997 -1 -1 237 176 -1
+81 175 1.538877 -1 -1 241 176 -1
+81 219 1.461597 -1 791 200 173 -1
+82 230 1.475037 -1 -1 194 173 -1
+21 162 0.836639 -1 -1 207 166 -1
+30 174 0.959279 -1 -1 213 160 -1
+34 180 1.011359 -1 800 221 164 -1
+40 190 1.098718 -1 -1 237 129 -1
+42 194 1.132318 -1 681 228 126 -1
+46 202 1.199518 -1 -1 245 127 -1
+47 206 1.231438 -1 791 241 127 -1
+50 218 1.322158 -1 714 237 131 -1
+52 226 1.380957 -1 791 232 133 -1
+53 234 1.441437 -1 597 221 134 -1
+53 238 1.471677 -1 574 221 137 -1
+53 246 1.532157 -1 512 210 136 -1
+53 250 1.560717 -1 651 203 134 -1
+53 258 1.619517 -1 623 197 133 -1
+53 262 1.654797 -1 623 186 137 -1
+51 275 1.762317 -1 574 181 129 -1
+47 289 1.883276 -1 597 210 126 -1
+44 297 1.947116 -1 421 221 122 -1
+-4 289 1.043279 623 347 189 129 -1
+2 301 1.149119 386 397 194 131 -1
+7 316 1.270078 338 315 197 129 -1
+5 389 1.853036 478 301 237 142 -1
+0 403 1.967276 651 330 217 152 -1
+-4 410 2.029436 -1 338 210 162 -1
+-10 421 2.131916 -1 347 200 186 -1
+-13 426 2.177275 -1 347 189 191 -1
+-23 438 2.298235 -1 322 186 197 -1
+-35 449 2.432635 -1 307 183 228 -1
+-87 475 2.889593 -1 -1 203 260 -1
+-103 478 3.013913 -1 265 207 232 -1
+-118 479 3.129833 -1 -1 237 228 -1
+-126 479 3.195352 -1 -1 260 203 -1
+-142 476 3.324712 -1 -1 282 203 -1
+-150 474 3.388552 -1 -1 301 197 -1
+-166 468 3.521271 -1 -1 386 189 -1
+-174 464 3.588471 -1 -1 597 191 -1
+-188 455 3.719511 -1 -1 462 189 -1
+-201 445 3.852230 -1 -1 397 197 -1
+-207 439 3.917750 681 -1 -1 207 -1
+-218 426 4.052150 -1 -1 -1 224 714
+-223 419 4.117670 -1 -1 -1 241 681
+-230 406 4.230229 -1 -1 714 265 478
+-233 400 4.278949 -1 -1 -1 288 397
+-217 417 4.021909 -1 -1 -1 294 434
+-220 414 4.020229 -1 -1 -1 322 552
+-226 408 4.011829 -1 -1 -1 315 531
+-232 402 4.001749 -1 791 -1 315 597
+-235 399 3.995029 -1 -1 -1 330 651
+-241 393 3.981589 -1 -1 -1 356 714
+-244 390 3.974869 -1 -1 791 356 597
+-250 384 3.961429 -1 -1 751 356 681
+-256 378 3.944629 -1 -1 714 338 751
+-259 375 3.937909 -1 800 751 375 -1
+-265 369 3.922789 -1 791 681 365 -1
+-268 366 3.912709 800 800 751 386 -1
+-178 373 3.245751 -1 751 623 386 -1
+-186 371 3.309591 552 791 791 375 -1
+-190 370 3.339831 -1 494 791 408 -1
+-198 368 3.401990 -1 681 -1 386 -1
+-202 367 3.435590 -1 651 714 408 -1
+-209 365 3.494390 -1 623 -1 421 -1
+-213 363 3.526310 -1 623 574 421 -1
+-220 359 3.586790 -1 574 -1 408 -1
+-227 355 3.650630 597 531 791 386 -1
+-230 353 3.680869 574 552 -1 434 -1
+-237 349 3.746389 -1 552 623 434 -1
+-240 347 3.778309 -1 552 623 397 -1
+-246 342 3.840469 -1 512 552 408 -1
+-249 339 3.872389 -1 478 681 462 -1
+-255 333 3.936229 -1 478 623 421 -1
+-261 327 4.000069 -1 421 651 462 -1
+-263 324 4.030309 -1 434 681 462 -1
+-242 337 3.687590 -1 408 574 434 531
+-246 335 3.682550 574 408 714 478 597
+-254 331 3.672470 512 386 494 447 531
+-262 327 3.664070 751 386 681 494 531
+-266 325 3.659030 714 375 597 434 681
+-274 321 3.645590 597 397 597 462 681
+-282 317 3.633830 552 375 531 512 552
+-286 315 3.627110 552 365 574 512 800
+-210 284 2.896312 421 322 531 434 -1
+-229 287 3.049191 241 288 330 531 -1
+-229 287 3.049191 241 322 224 478 531
+-230 287 3.055912 232 338 356 552 681
+-235 287 3.097912 217 347 386 597 623
+-238 287 3.123111 210 347 478 574 478
+-215 277 2.803912 197 421 421 494 512
+-219 278 2.787112 183 408 512 651 494
+-224 280 2.713192 197 478 434 494 386
+-229 283 2.640953 194 531 397 751 408
+-230 284 2.590553 197 -1 322 751 347
+-231 285 2.462873 191 322 365 800 270
+-231 285 2.323434 217 237 356 -1 255
+-228 186 1.606076 270 237 294 -1 241
+-233 218 1.856395 408 322 282 -1 213
+-234 222 1.888315 260 307 276 -1 207
+-236 230 1.950475 210 276 260 -1 217
+-238 234 1.982395 210 276 245 -1 255
+-240 239 2.021035 178 245 228 -1 224
+-238 174 1.597676 210 232 250 -1 221
+-238 174 1.532157 322 224 255 -1 241
+-238 177 1.422957 288 200 270 191 255
+-236 190 1.416237 210 191 276 -1 139
+-235 198 1.424637 237 181 245 -1 301
+-296 165 0.764399 158 119 203 -1 356
+-290 171 0.826559 173 119 169 -1 347
+-285 177 0.888718 203 122 160 -1 307
+-283 180 0.920638 213 122 145 791 307
+-303 285 1.821116 270 130 129 714 301
+-306 293 1.952155 245 144 124 -1 307
+-308 296 2.015995 178 144 120 -1 307
+-312 302 2.148715 494 158 115 -1 322
+-315 306 2.215914 800 197 115 512 347
+-324 316 2.382234 365 224 117 408 356
+-337 326 2.550234 276 241 120 330 751
+-344 330 2.629194 288 189 112 237 478
+-359 336 2.770313 260 171 136 207 478
+-383 342 2.968553 232 397 158 164 751
+-400 343 3.101272 232 347 186 152 -1
+-417 342 3.233992 241 232 207 144 -1
+-425 341 3.301192 237 237 162 142 -1
+-441 337 3.432231 232 217 158 139 -1
+-457 330 3.568311 245 162 397 142 -1
+-464 326 3.630471 241 191 294 145 -1
+-476 319 3.637191 224 178 282 147 -1
+-485 315 3.585111 221 160 260 156 -1
+-488 314 3.543111 200 152 265 162 -1
+-493 312 3.470871 162 147 365 160 -1
+-496 311 3.492711 160 125 330 169 751
+-502 308 3.588470 156 126 224 171 -1
+-509 304 3.706070 186 126 194 166 -1
+-512 302 3.773270 213 127 181 178 -1
+-518 297 3.897589 241 133 154 181 714
+-523 291 4.028629 315 139 145 197 -1
+-525 288 4.097509 447 149 133 221 -1
+-529 282 4.226869 597 166 126 237 -1
+-533 272 4.381428 -1 173 125 207 -1
+-535 265 4.463748 -1 210 122 210 -1
+-537 249 4.628387 -1 217 122 651 -1
+-537 241 4.710707 -1 282 124 386 -1
+-535 225 4.856867 -1 282 126 245 -1
+-528 201 5.056787 -1 -1 130 203 -1
+-521 185 5.191186 -1 -1 166 169 -1
+-517 178 5.255026 -1 -1 183 160 552
+-507 164 5.391105 -1 -1 210 152 478
+-495 153 5.505345 -1 -1 245 145 347
+-490 148 5.533905 -1 -1 294 142 330
+-482 140 5.562464 -1 -1 301 142 315
+-479 137 5.564144 -1 623 307 144 347
+-473 131 5.560784 -1 800 322 149 386
+-467 126 5.549025 -1 -1 322 145 421
+-464 123 5.545665 -1 -1 315 147 421
+-454 197 4.826626 -1 -1 288 152 623
+-452 189 4.888786 -1 -1 294 152 -1
+-451 185 4.919026 -1 -1 288 151 714
+-449 177 4.981186 -1 -1 276 156 -1
+-448 173 5.011426 751 -1 276 154 681
+-446 165 5.073586 -1 -1 241 156 -1
+-443 158 5.134066 -1 -1 270 154 -1
+-441 154 5.165986 -1 -1 260 147 -1
+-437 148 5.226466 -1 -1 237 160 -1
+-435 145 5.256706 -1 -1 224 154 -1
+-431 139 5.318866 -1 -1 237 154 -1
+-429 136 5.349106 -1 -1 237 156 -1
+-424 130 5.411266 -1 -1 221 156 -1
+-418 124 5.473426 -1 -1 213 154 -1
+-415 121 5.505346 800 -1 213 156 -1
+-407 114 5.585986 -1 -1 217 -1 -1
+-401 110 5.643106 -1 -1 228 152 -1
+-413 128 5.381026 -1 -1 207 151 -1
+-385 93 5.342385 -1 -1 207 149 -1
+-383 90 5.333985 -1 -1 191 142 -1
+-379 83 5.322225 -1 -1 191 147 574
+-376 79 5.318865 -1 -1 106 139 531
+-368 68 5.362545 -1 -1 203 142 623
+-366 153 4.749347 -1 -1 224 136 -1
+-365 145 4.813187 -1 -1 250 130 -1
+-363 132 4.919026 -1 -1 255 129 -1
+-362 127 4.962706 -1 434 282 125 -1
+-360 118 5.038306 -1 681 260 129 -1
+-358 114 5.071906 -1 -1 270 127 -1
+-354 106 5.137425 -1 -1 265 129 -1
+-350 100 5.197906 -1 -1 276 136 -1
+-348 97 5.228146 -1 -1 276 136 -1
+-344 91 5.288625 -1 -1 255 139 -1
+-342 88 5.320545 -1 -1 260 137 -1
+-338 82 5.382705 -1 -1 260 139 651
+-335 79 5.414625 -1 -1 250 140 462
+-330 73 5.475105 -1 -1 241 140 365
+-327 70 5.507025 -1 -1 245 140 552
+-325 76 5.370945 -1 -1 221 139 714
+-321 70 5.359185 -1 751 213 139 -1
+-318 64 5.352466 -1 651 213 140 800
+-314 61 5.344066 -1 552 221 140 -1
+-309 54 5.335666 -1 651 200 139 -1
+-307 51 5.332306 -1 434 200 140 -1
+-303 44 5.322226 -1 462 194 140 800
+-296 35 5.337346 -1 478 191 137 -1
+-291 29 5.364226 -1 574 191 136 -1
+-281 17 5.444866 -1 574 210 134 791
+-275 11 5.488545 -1 623 203 126 681
+-265 2 5.533905 -1 651 191 126 478
+-278 88 4.902226 -1 681 186 127 574
+-276 81 4.961026 -1 800 282 127 623
+-270 66 5.081986 -1 434 338 127 597
+-267 60 5.135746 -1 347 330 127 375
+-261 50 5.224786 -1 365 301 134 800
+-257 42 5.293665 800 338 270 139 408
+-255 38 5.327265 -1 307 282 139 597
+-231 14 5.577585 791 386 237 154 651
+-225 10 5.639745 623 386 224 154 597
+-222 8 5.669985 623 397 228 160 -1
+-216 4 5.732145 681 434 217 162 -1
+-209 0 5.795985 681 421 207 162 -1
+-206 -2 5.826225 751 397 203 164 -1
+-224 15 5.564146 791 365 191 166 -1
+-210 3 5.614546 552 365 181 164 -1
+-196 -6 5.696866 714 288 176 173 597
+-189 -10 5.745586 714 301 166 173 -1
+-175 -17 5.851426 574 191 166 178 408
+-159 -23 5.974065 434 255 186 191 -1
+-151 -25 6.039585 751 -1 194 189 -1
+-135 -27 6.168945 651 623 228 191 -1
+-127 -27 6.227745 651 447 241 207 -1
+-114 -27 6.289905 800 531 260 197 -1
+-104 -27 6.306705 800 462 265 197 -1
+-100 -27 6.303345 714 478 265 194 -1
+-92 -27 6.294945 574 494 276 197 -1
+-88 -27 6.289905 751 447 265 197 -1
+-80 -27 6.276464 462 408 260 191 -1
+-72 -27 6.263024 447 408 255 183 -1
+-68 -27 6.254624 512 408 241 194 -1
+-135 36 5.564146 494 397 237 191 -1
+-132 34 5.594386 447 397 237 194 -1
+-120 26 5.717026 434 347 228 191 -1
+-117 24 5.747266 408 347 224 191 -1
+-110 20 5.811106 397 338 213 189 -1
+-106 18 5.843026 434 322 200 194 -1
+-98 15 5.906866 356 301 203 181 -1
+-90 13 5.970706 397 322 191 189 -1
+-86 12 6.002626 365 322 189 178 -1
+-76 10 6.084946 338 301 186 147 -1
+-69 9 6.142066 330 288 194 178 -1
+-45 8 6.330225 288 245 200 152 -1
+-29 10 6.459585 322 221 173 156 -1
+-13 15 6.588944 338 224 250 151 -1
+-5 18 6.654464 347 207 237 149 -1
+10 26 6.783824 512 213 210 149 -1
+17 30 6.849344 531 301 197 144 -1
+30 40 6.980383 -1 217 178 164 -1
+42 52 7.111423 -1 245 171 191 -1
+47 59 7.178623 -1 250 162 200 681
+56 73 7.311342 -1 255 158 213 -1
+66 96 7.511261 -1 288 154 217 -1
+68 104 7.578461 -1 494 162 375 -1
+70 162 8.033740 -1 -1 173 194 -1
+68 170 8.097580 -1 -1 189 189 -1
+34 228 8.620058 434 -1 356 181 552
+45 205 8.272299 -1 -1 330 186 597
+43 211 8.253819 -1 -1 356 183 681
+42 214 8.245419 -1 -1 330 186 623
Index: branches/scout/projects/mapping/matlab/data/input13.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input13.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input13.txt	(revision 1346)
@@ -0,0 +1,417 @@
+0 0 0.000000 -1 -1 315 245 597
+0 0 0.000000 -1 -1 294 241 531
+0 0 0.000000 -1 -1 307 241 623
+0 0 -0.001680 -1 -1 301 245 552
+0 0 0.000000 -1 -1 315 245 552
+0 0 0.000000 -1 -1 307 237 574
+0 0 0.001680 -1 -1 301 245 574
+0 0 0.000000 -1 -1 315 245 597
+0 0 0.000000 -1 -1 307 241 597
+0 0 0.000000 -1 -1 307 245 552
+0 0 0.000000 681 -1 322 245 597
+0 0 0.000000 -1 -1 315 245 623
+0 0 0.000000 -1 -1 301 245 597
+0 0 0.000000 -1 -1 307 232 597
+0 0 0.000000 -1 -1 322 241 597
+0 0 0.001680 -1 -1 322 241 531
+0 0 0.000000 -1 -1 322 245 597
+0 0 0.000000 -1 -1 307 245 681
+0 0 0.000000 -1 -1 307 241 597
+0 0 0.000000 -1 -1 322 241 623
+0 0 0.001680 -1 -1 315 241 552
+0 0 0.001680 -1 -1 301 232 597
+0 0 0.001680 -1 -1 307 245 597
+0 0 0.001680 478 -1 301 228 681
+0 0 0.001680 -1 -1 307 241 597
+0 0 0.000000 -1 -1 322 241 681
+0 0 0.000000 -1 -1 301 250 574
+0 0 0.000000 -1 -1 315 245 623
+0 0 -0.001680 -1 -1 307 245 623
+0 0 -0.018480 -1 -1 307 237 597
+0 0 -0.033600 -1 -1 294 245 552
+0 0 -0.052080 -1 -1 282 245 531
+0 0 -0.109200 -1 714 250 255 -1
+0 0 -0.119280 751 -1 241 228 -1
+1 0 -0.124320 -1 -1 241 232 714
+4 0 -0.107520 -1 -1 241 250 791
+7 0 -0.082320 -1 -1 260 245 791
+17 0 -0.018480 -1 -1 276 255 791
+-18 55 -0.599758 -1 -1 260 241 -1
+-12 51 -0.539278 -1 -1 270 237 791
+-5 47 -0.480479 -1 -1 260 221 -1
+-2 45 -0.453599 -1 -1 282 241 -1
+1 44 -0.426719 -1 -1 282 241 -1
+7 42 -0.376319 -1 -1 282 241 -1
+9 41 -0.356159 -1 -1 294 232 -1
+11 40 -0.335999 651 -1 288 241 -1
+15 38 -0.300719 -1 -1 288 255 -1
+17 37 -0.285599 -1 -1 288 255 751
+19 36 -0.268799 -1 -1 282 255 -1
+24 34 -0.230159 -1 -1 282 224 714
+27 33 -0.209999 -1 -1 282 221 -1
+30 32 -0.188159 -1 -1 282 221 -1
+36 32 -0.141119 -1 -1 301 221 -1
+39 32 -0.117600 -1 -1 288 221 -1
+48 32 -0.043680 -1 -1 301 224 800
+51 32 -0.016800 -1 -1 315 221 -1
+54 32 0.008400 -1 -1 307 221 -1
+60 32 0.058800 -1 -1 322 217 -1
+63 32 0.084000 -1 -1 301 217 -1
+66 32 0.104160 -1 -1 322 221 800
+71 32 0.146160 -1 714 288 213 -1
+74 32 0.166320 -1 -1 301 221 -1
+77 32 0.186480 -1 -1 301 221 -1
+83 34 0.233519 -1 -1 294 203 -1
+86 35 0.260399 -1 -1 282 210 -1
+90 36 0.290639 -1 751 282 217 -1
+98 38 0.356159 -1 -1 270 217 -1
+102 40 0.389759 -1 -1 288 217 -1
+40 40 0.001680 -1 791 301 213 -1
+48 40 0.008400 -1 -1 301 197 -1
+52 40 0.006720 -1 -1 301 210 -1
+56 40 0.006720 -1 -1 307 217 -1
+63 40 0.001680 -1 -1 307 217 -1
+66 40 -0.003360 -1 -1 322 210 -1
+69 40 -0.008400 -1 800 322 217 -1
+72 40 -0.015120 -1 714 338 191 -1
+78 40 -0.021840 -1 791 307 189 -1
+81 40 -0.020160 -1 714 307 183 -1
+87 40 -0.016800 -1 -1 288 183 -1
+89 40 -0.021840 -1 791 301 173 -1
+92 40 -0.018480 -1 651 265 183 -1
+98 40 -0.021840 -1 791 265 178 -1
+101 40 -0.018480 -1 791 282 183 -1
+104 40 -0.021840 -1 651 270 176 -1
+38 102 -0.725758 -1 651 270 176 -1
+41 99 -0.693838 -1 681 260 189 -1
+44 96 -0.661918 -1 714 288 189 -1
+51 92 -0.596398 -1 597 276 183 -1
+55 90 -0.562798 -1 597 276 186 -1
+63 86 -0.490559 -1 512 294 183 -1
+67 84 -0.453599 -1 574 265 183 -1
+71 82 -0.423359 800 552 294 176 -1
+78 79 -0.362879 -1 552 282 183 -1
+81 78 -0.334319 -1 623 270 183 -1
+84 77 -0.310799 -1 574 265 178 -1
+90 75 -0.263759 -1 574 276 183 -1
+93 74 -0.238559 -1 512 265 176 -1
+97 73 -0.209999 -1 574 260 173 -1
+105 71 -0.149520 -1 494 270 183 -1
+109 71 -0.119280 -1 478 255 181 -1
+151 73 0.208319 -1 434 237 178 -1
+154 74 0.233519 -1 408 228 183 -1
+157 75 0.260399 -1 421 232 183 -1
+164 77 0.317519 -1 408 228 183 -1
+167 78 0.344399 -1 338 221 181 -1
+107 80 -0.015120 574 347 210 173 -1
+110 80 -0.015120 -1 397 224 183 -1
+113 80 -0.015120 800 386 228 181 -1
+119 80 -0.013440 -1 330 221 181 -1
+122 80 -0.015120 800 375 217 176 -1
+127 80 -0.013440 751 365 217 181 -1
+130 80 -0.015120 -1 347 221 181 -1
+138 80 -0.011760 -1 347 197 176 -1
+141 80 -0.011760 478 322 181 173 -1
+144 80 -0.008400 681 330 191 181 -1
+166 80 -0.031920 531 288 164 183 -1
+166 80 -0.043680 397 288 169 176 -1
+166 80 -0.065520 462 270 181 181 -1
+166 80 -0.067200 397 276 178 181 -1
+166 80 -0.063840 531 276 181 178 -1
+166 80 -0.065520 397 288 160 181 -1
+166 80 -0.067200 397 276 183 181 -1
+166 80 -0.065520 408 288 178 181 -1
+166 80 -0.063840 421 288 183 181 -1
+166 80 -0.065520 434 270 183 183 -1
+105 147 -0.774478 386 265 156 191 -1
+112 141 -0.705598 421 255 152 197 -1
+116 138 -0.665278 408 250 152 178 -1
+126 132 -0.577918 421 221 250 176 -1
+131 129 -0.534238 397 221 282 173 -1
+141 123 -0.441839 315 207 315 173 -1
+147 121 -0.393119 386 210 307 173 -1
+153 119 -0.346079 421 210 241 173 -1
+164 116 -0.258719 421 200 221 169 -1
+169 115 -0.220079 494 200 189 173 -1
+179 113 -0.146159 531 200 186 173 -1
+183 113 -0.114239 651 200 178 176 -1
+187 113 -0.085680 -1 197 169 176 -1
+195 113 -0.025200 -1 197 169 183 -1
+199 113 0.003360 -1 189 160 189 -1
+211 113 0.092400 -1 200 142 197 -1
+214 113 0.119280 -1 197 147 197 -1
+225 116 0.203280 -1 221 134 217 -1
+229 117 0.231840 -1 217 137 221 -1
+276 139 0.633358 -1 330 136 241 -1
+285 147 0.725758 -1 462 136 228 -1
+289 151 0.771118 -1 -1 145 197 -1
+293 155 0.816478 -1 -1 154 200 -1
+300 163 0.900478 -1 791 156 191 -1
+302 166 0.932398 -1 -1 169 181 -1
+304 170 0.965998 -1 -1 171 176 -1
+308 176 1.023117 -1 356 178 173 -1
+309 178 1.044957 -1 462 181 166 -1
+311 181 1.070157 -1 574 178 166 -1
+315 188 1.130637 -1 714 178 164 -1
+321 203 1.254957 -1 -1 183 156 -1
+324 215 1.352396 -1 -1 200 139 -1
+326 227 1.453196 -1 800 210 144 -1
+326 233 1.503596 -1 -1 217 139 -1
+326 239 1.550636 -1 -1 228 139 -1
+326 251 1.644716 -1 -1 241 134 -1
+325 257 1.690076 -1 -1 245 137 -1
+323 269 1.782475 -1 -1 250 136 -1
+322 275 1.827835 -1 -1 228 136 -1
+316 290 1.957195 -1 -1 276 134 -1
+316 282 1.643036 -1 -1 288 140 -1
+316 287 1.641356 -1 -1 270 142 -1
+316 297 1.634636 -1 -1 294 145 -1
+316 302 1.636316 -1 -1 288 144 -1
+272 257 1.133997 -1 -1 322 144 -1
+274 262 1.174317 -1 -1 322 139 -1
+277 270 1.246557 -1 681 301 149 -1
+278 274 1.281837 -1 574 338 149 -1
+280 282 1.349036 751 714 307 151 -1
+281 286 1.380956 -1 574 315 152 -1
+282 290 1.411196 -1 623 307 152 751
+283 298 1.476716 -1 714 315 156 -1
+283 302 1.505276 -1 714 301 156 -1
+283 310 1.567436 651 623 315 156 -1
+283 314 1.597676 651 714 301 154 -1
+283 318 1.627916 751 623 260 158 623
+283 326 1.688396 531 651 294 158 -1
+282 330 1.718636 552 574 294 158 -1
+280 338 1.777436 574 512 315 160 -1
+279 341 1.802635 478 574 288 160 -1
+277 346 1.844635 552 597 301 162 -1
+276 348 1.861435 574 574 282 160 -1
+276 349 1.871515 494 574 282 162 -1
+276 350 1.883275 574 574 294 160 -1
+276 350 1.883275 462 447 301 162 -1
+276 350 1.883275 531 552 276 164 -1
+276 350 1.883275 512 552 276 164 -1
+276 350 1.883275 478 494 282 164 -1
+276 350 1.883275 512 597 282 164 -1
+276 350 1.883275 512 494 260 164 -1
+276 350 1.883275 434 531 282 164 -1
+276 350 1.883275 552 512 265 162 -1
+276 350 1.883275 478 531 282 164 -1
+276 350 1.883275 512 552 270 162 -1
+276 350 1.883275 512 552 276 164 -1
+276 350 1.883275 462 531 276 154 -1
+276 350 1.883275 512 494 270 164 -1
+276 350 1.883275 512 597 270 160 -1
+276 350 1.883275 434 494 288 162 -1
+276 350 1.883275 512 494 260 154 -1
+276 350 1.883275 462 552 276 162 -1
+276 350 1.883275 478 552 276 164 -1
+276 350 1.883275 512 574 265 164 -1
+276 350 1.883275 552 597 260 164 -1
+276 350 1.883275 494 447 270 160 -1
+276 350 1.883275 512 574 276 152 -1
+276 350 1.883275 478 512 282 162 -1
+276 350 1.883275 512 552 282 154 -1
+276 350 1.883275 447 552 255 154 -1
+276 350 1.883275 478 651 288 160 -1
+276 350 1.883275 531 531 282 162 -1
+276 350 1.883275 512 494 260 164 -1
+276 350 1.883275 478 494 288 164 -1
+276 350 1.883275 421 512 276 154 -1
+276 350 1.883275 574 531 270 164 -1
+276 350 1.883275 552 574 270 164 -1
+276 350 1.883275 462 462 276 154 -1
+276 350 1.883275 574 597 260 164 -1
+276 350 1.883275 512 623 276 164 -1
+276 350 1.883275 574 462 276 164 -1
+276 350 1.883275 462 478 294 164 -1
+276 350 1.883275 512 531 282 154 -1
+276 317 1.562396 478 512 282 162 -1
+276 317 1.562396 574 574 282 164 -1
+276 317 1.562396 397 494 282 164 -1
+276 317 1.562396 478 552 276 164 -1
+276 317 1.562396 512 597 282 162 -1
+276 317 1.562396 552 512 282 160 -1
+276 317 1.562396 462 623 270 162 -1
+276 317 1.562396 531 574 282 164 -1
+276 317 1.562396 531 552 265 164 -1
+276 317 1.562396 478 512 282 164 -1
+276 317 1.562396 512 512 255 164 -1
+276 317 1.562396 597 623 276 162 -1
+276 317 1.562396 478 552 282 158 -1
+276 317 1.562396 478 574 276 169 -1
+276 317 1.562396 552 552 276 164 -1
+276 317 1.562396 478 494 250 164 -1
+276 317 1.562396 552 531 276 164 -1
+276 317 1.562396 447 447 276 164 -1
+276 317 1.555676 531 494 245 164 -1
+276 317 1.562396 478 494 265 164 -1
+276 317 1.564076 494 386 270 162 -1
+276 317 1.560716 531 255 282 164 -1
+276 317 1.555676 512 315 265 162 -1
+276 317 1.553996 494 288 265 160 -1
+276 317 1.552316 447 421 270 158 -1
+276 317 1.553996 478 552 265 164 -1
+276 317 1.553996 512 531 255 164 -1
+276 317 1.562396 447 347 255 164 -1
+276 317 1.564076 512 224 270 156 -1
+276 317 1.564076 574 197 288 160 -1
+276 317 1.562396 434 191 301 164 -1
+276 317 1.562396 531 200 294 162 -1
+276 317 1.562396 512 217 294 164 -1
+276 317 1.553996 552 330 265 154 -1
+276 317 1.552316 408 478 260 162 -1
+276 317 1.552316 494 552 270 164 -1
+276 318 1.560716 447 574 276 164 -1
+276 318 1.560716 494 574 270 164 -1
+276 318 1.545596 478 447 265 164 -1
+276 319 1.491836 512 512 241 160 -1
+276 324 1.466636 462 597 241 169 623
+276 350 1.537196 386 478 265 160 -1
+276 355 1.543916 408 421 260 158 -1
+276 365 1.543916 408 462 241 158 -1
+276 370 1.542236 365 434 250 160 -1
+276 380 1.538876 375 408 250 160 -1
+276 386 1.533836 386 447 260 160 -1
+212 323 0.813118 356 365 250 162 -1
+216 327 0.855118 322 386 250 162 -1
+219 331 0.895438 330 386 245 154 -1
+225 339 0.977758 301 386 228 152 -1
+228 344 1.021438 322 375 232 156 -1
+234 354 1.110477 301 356 232 158 623
+236 359 1.155837 282 315 241 156 -1
+240 369 1.243197 276 315 228 160 -1
+242 375 1.288557 270 288 197 158 -1
+243 380 1.328877 265 260 181 158 -1
+245 390 1.409517 255 260 173 156 800
+246 394 1.444797 260 265 160 158 -1
+246 404 1.518716 237 232 156 158 681
+246 409 1.557356 237 232 151 158 -1
+246 418 1.627916 241 217 210 158 -1
+246 423 1.666556 237 194 421 160 -1
+245 428 1.706876 237 203 597 160 -1
+243 438 1.789196 221 207 434 160 -1
+242 443 1.829516 255 189 276 160 -1
+236 458 1.948795 265 183 221 181 800
+234 462 1.985755 270 176 217 183 -1
+230 470 2.054635 307 173 203 197 -1
+228 474 2.086555 288 173 191 207 -1
+224 480 2.145355 315 166 178 210 -1
+222 483 2.173915 386 169 166 217 -1
+218 489 2.227675 434 169 158 241 -1
+216 492 2.252875 434 169 151 250 -1
+214 494 2.276395 386 166 139 260 -1
+210 499 2.326795 651 171 140 265 -1
+208 501 2.351995 -1 169 139 232 -1
+204 505 2.400715 -1 169 130 232 -1
+202 507 2.424235 -1 164 129 197 -1
+200 509 2.447755 -1 171 122 186 -1
+194 513 2.498154 800 173 124 176 -1
+191 515 2.525034 -1 166 120 217 -1
+148 534 2.903033 -1 270 109 245 -1
+138 536 2.980313 -1 288 111 228 -1
+133 537 3.017273 -1 330 113 217 -1
+123 537 3.096233 -1 462 113 197 800
+118 537 3.134872 -1 623 121 189 -1
+113 537 3.173512 -1 -1 126 166 -1
+103 536 3.252472 -1 681 129 158 -1
+98 535 3.292792 -1 791 139 147 -1
+88 533 3.368392 -1 -1 152 144 -1
+83 532 3.407031 -1 -1 158 139 -1
+78 531 3.445671 -1 751 169 133 800
+68 527 3.526311 -1 421 183 129 681
+63 525 3.568310 -1 -1 200 125 623
+58 522 3.611990 574 714 213 121 512
+45 513 3.736310 -1 330 315 121 434
+9 472 4.157988 -1 447 408 137 531
+47 500 3.894229 -1 -1 681 147 552
+43 496 3.897589 -1 -1 623 144 552
+35 489 3.894229 -1 -1 421 145 552
+31 486 3.889189 -1 -1 597 147 651
+27 483 3.877429 -1 -1 623 154 623
+20 477 3.848869 -1 623 356 158 714
+17 474 3.833749 -1 478 478 154 651
+11 469 3.795110 -1 -1 375 162 -1
+8 467 3.778310 -1 -1 397 166 -1
+103 456 3.030712 -1 -1 397 166 -1
+63 453 3.334790 -1 -1 315 173 -1
+59 452 3.363350 -1 -1 338 162 -1
+55 451 3.391910 -1 -1 301 178 -1
+49 449 3.447350 -1 -1 301 178 -1
+46 448 3.474230 -1 -1 315 171 -1
+43 447 3.501110 -1 -1 294 169 -1
+37 445 3.554870 -1 -1 301 176 -1
+34 444 3.580070 -1 -1 301 176 -1
+31 442 3.608630 -1 -1 288 173 -1
+25 438 3.664070 -1 -1 260 166 -1
+22 436 3.694310 -1 -1 282 173 -1
+19 434 3.726230 -1 -1 270 173 -1
+10 426 3.825349 -1 -1 282 171 -1
+4 420 3.890869 -1 -1 282 173 -1
+44 433 3.549830 -1 -1 260 176 574
+14 419 3.559910 -1 -1 250 173 552
+4 415 3.581750 -1 -1 241 171 681
+-1 413 3.591830 -1 -1 250 169 574
+-6 411 3.601909 -1 751 260 162 552
+-16 407 3.617029 -1 -1 255 169 421
+75 385 2.906391 -1 -1 232 166 462
+65 387 2.980311 -1 -1 255 166 623
+61 388 3.013911 -1 -1 241 169 494
+57 388 3.047511 -1 -1 245 166 552
+49 388 3.113030 -1 -1 245 166 597
+45 388 3.143270 -1 552 237 166 -1
+41 388 3.175190 -1 623 232 173 -1
+33 388 3.235670 -1 714 237 166 800
+29 388 3.265910 800 651 237 166 -1
+21 386 3.324709 -1 751 232 166 -1
+17 385 3.353269 -1 751 232 166 -1
+13 384 3.381829 -1 574 221 160 -1
+7 382 3.432229 -1 512 228 166 800
+4 381 3.455749 -1 574 228 164 791
+-2 379 3.499429 -1 623 228 162 800
+-5 378 3.522949 -1 597 221 164 681
+-8 377 3.546469 -1 681 224 166 800
+-14 375 3.595189 -1 552 221 164 -1
+-17 374 3.618709 -1 552 210 158 -1
+-20 373 3.642229 -1 494 213 158 -1
+-25 370 3.689269 -1 462 210 162 -1
+-28 368 3.712789 -1 574 189 162 -1
+-32 364 3.758148 -1 597 194 164 -1
+-41 347 3.630469 -1 386 213 160 -1
+-47 343 3.637189 -1 288 213 160 -1
+-50 342 3.638869 552 330 207 160 -1
+-53 341 3.640548 714 356 203 160 -1
+-57 339 3.645588 -1 375 194 160 -1
+-60 338 3.650628 -1 347 186 160 -1
+-66 335 3.670788 -1 375 183 160 -1
+-69 333 3.685908 531 365 178 156 -1
+-72 331 3.706068 623 375 183 160 -1
+18 318 3.042470 751 375 183 160 -1
+13 318 3.079430 800 356 186 160 -1
+3 318 3.155030 751 356 189 154 -1
+-2 318 3.193670 531 347 183 164 462
+-6 318 3.227269 512 288 186 164 681
+-15 316 3.297829 574 270 189 166 791
+-19 315 3.329749 597 260 191 171 800
+-27 313 3.391909 574 307 191 173 -1
+-35 311 3.457429 -1 -1 200 189 -1
+-117 220 4.455347 -1 356 203 191 -1
+-118 215 4.493987 -1 375 189 194 -1
+-119 211 4.529267 -1 365 186 194 -1
+-120 203 4.598146 -1 347 183 197 -1
+-120 199 4.631746 -1 338 171 197 -1
+-120 191 4.695586 623 347 183 197 -1
+-120 187 4.729186 552 330 186 194 -1
+-120 183 4.761106 623 294 207 197 -1
+-118 189 4.468786 288 194 260 203 -1
+-119 187 4.462066 260 203 265 203 -1
+-120 185 4.451986 276 203 282 203 -1
+-122 181 4.431826 260 191 250 197 -1
+-123 179 4.421746 250 183 250 203 -1
+-123 177 4.404946 250 189 232 207 -1
+-123 177 4.391506 241 178 224 207 -1
+-123 177 4.362947 241 183 213 207 -1
+-123 177 4.357906 232 173 189 203 -1
+-123 177 4.351186 232 173 194 210 -1
+-123 177 4.347826 217 181 186 207 -1
+-35 222 3.618709 228 169 176 207 -1
+-35 222 3.618709 228 178 183 207 -1
Index: branches/scout/projects/mapping/matlab/data/input14.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input14.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input14.txt	(revision 1346)
@@ -0,0 +1,417 @@
+3 0 0.028560 -1 -1 347 301 552
+6 0 0.052080 -1 -1 365 307 623
+10 0 0.082320 -1 -1 356 307 623
+18 1 0.147840 -1 -1 330 307 574
+22 2 0.183119 -1 -1 315 288 494
+26 3 0.216719 -1 -1 347 294 681
+34 5 0.285599 -1 -1 386 270 681
+38 6 0.317519 -1 -1 375 294 623
+42 7 0.351119 -1 -1 375 294 623
+49 9 0.409919 -1 -1 365 294 623
+52 11 0.438479 -1 -1 397 294 597
+55 13 0.465359 -1 -1 365 294 623
+61 17 0.517439 -1 -1 386 294 623
+64 19 0.544318 -1 -1 386 288 623
+67 21 0.571198 -1 -1 365 282 681
+71 25 0.616558 -1 -1 447 294 714
+73 27 0.636718 -1 -1 408 307 714
+75 28 0.655198 -1 -1 375 294 714
+78 30 0.685438 -1 -1 447 288 681
+79 31 0.697198 -1 -1 397 294 623
+80 32 0.708958 574 -1 421 307 714
+82 34 0.729118 -1 -1 356 301 597
+83 35 0.742558 -1 -1 375 276 791
+86 37 0.772798 -1 -1 375 322 714
+87 38 0.787918 -1 -1 375 307 597
+88 40 0.804718 -1 -1 386 288 -1
+91 44 0.841678 -1 -1 408 276 751
+93 46 0.863518 -1 -1 397 276 800
+95 48 0.881997 -1 800 375 276 -1
+99 52 0.925677 800 -1 434 288 714
+101 54 0.947517 -1 791 365 276 -1
+102 56 0.967677 -1 -1 421 282 800
+106 62 1.014717 623 -1 307 282 800
+107 64 1.036557 -1 -1 397 276 -1
+109 67 1.061757 -1 -1 375 276 -1
+111 73 1.112157 -1 -1 375 288 -1
+63 33 0.695518 -1 -1 386 282 -1
+66 35 0.695518 -1 -1 375 276 -1
+72 39 0.700558 -1 -1 356 265 800
+75 41 0.698878 -1 -1 408 282 -1
+80 45 0.697198 -1 -1 365 276 791
+83 47 0.697198 -1 -1 478 276 -1
+86 49 0.697198 -1 -1 478 282 -1
+92 53 0.693838 -1 -1 375 276 -1
+95 55 0.690478 -1 -1 434 260 -1
+98 57 0.687118 -1 791 397 270 -1
+104 61 0.682078 -1 791 365 282 -1
+107 63 0.677038 -1 -1 356 282 -1
+110 66 0.678718 -1 -1 356 260 -1
+18 75 -0.068880 -1 -1 375 276 -1
+22 75 -0.040320 -1 800 356 270 -1
+26 75 -0.008400 -1 -1 347 282 -1
+38 75 0.080640 -1 751 375 276 -1
+42 75 0.109200 -1 623 322 237 -1
+48 76 0.161280 -1 574 338 241 -1
+51 77 0.184799 -1 791 322 245 -1
+54 78 0.206639 -1 751 322 241 -1
+58 79 0.241919 -1 791 315 245 -1
+62 81 0.273839 -1 791 301 237 -1
+66 82 0.302399 -1 714 288 245 -1
+68 83 0.319199 -1 714 301 245 -1
+70 84 0.337679 -1 714 307 237 -1
+74 86 0.377999 -1 623 301 232 -1
+76 87 0.398159 -1 597 288 250 -1
+78 88 0.418319 751 714 301 241 -1
+82 90 0.451919 -1 597 288 245 -1
+84 91 0.470399 -1 651 301 245 -1
+86 92 0.492239 800 623 282 237 -1
+91 95 0.539279 -1 574 276 241 -1
+94 97 0.566158 -1 651 282 237 -1
+97 99 0.591358 -1 651 294 237 -1
+103 103 0.648478 -1 552 270 241 -1
+106 105 0.675358 -1 512 288 228 -1
+112 109 0.729118 -1 552 288 241 -1
+114 111 0.754318 -1 552 288 241 -1
+116 113 0.779518 -1 531 282 232 -1
+120 117 0.828238 623 531 276 232 -1
+122 119 0.851758 681 512 255 232 -1
+126 123 0.895438 -1 494 282 224 -1
+128 125 0.917277 -1 478 288 228 -1
+130 127 0.937437 -1 494 282 232 -1
+76 96 0.537599 -1 531 265 228 -1
+78 97 0.535919 -1 512 265 228 -1
+80 98 0.534239 -1 494 270 228 -1
+84 100 0.535919 -1 494 265 228 -1
+86 101 0.535919 -1 434 265 221 -1
+90 103 0.539279 651 434 265 228 -1
+92 104 0.542639 434 434 265 224 -1
+94 105 0.545999 714 365 265 221 -1
+98 107 0.545999 751 447 260 210 -1
+100 108 0.544318 -1 447 260 224 -1
+104 110 0.545999 751 421 265 200 -1
+106 111 0.545999 623 447 260 200 -1
+109 113 0.547679 800 408 245 217 -1
+114 116 0.545999 623 408 245 217 -1
+117 118 0.547679 574 386 250 213 -1
+123 122 0.547679 531 386 245 213 -1
+126 124 0.545999 714 375 250 200 -1
+35 146 -0.215039 574 347 245 210 -1
+38 145 -0.191519 512 365 237 213 -1
+41 144 -0.167999 531 356 250 213 -1
+96 150 0.262079 597 276 250 213 -1
+129 163 0.530879 -1 255 276 189 -1
+132 165 0.554399 651 255 250 197 -1
+135 167 0.579598 552 265 241 197 -1
+139 171 0.624958 -1 255 237 197 -1
+141 173 0.648478 -1 270 237 203 -1
+145 177 0.688798 -1 255 228 197 -1
+147 179 0.710638 -1 270 221 197 -1
+149 181 0.730798 -1 270 224 207 -1
+153 185 0.767758 -1 276 207 210 -1
+155 187 0.787918 -1 282 207 217 -1
+157 189 0.808078 -1 265 207 203 -1
+161 193 0.845038 651 270 203 217 -1
+163 195 0.863518 -1 270 203 221 -1
+167 199 0.903838 -1 270 197 210 -1
+169 201 0.927358 512 255 189 228 -1
+171 204 0.952558 597 270 176 228 -1
+175 210 1.007997 -1 270 186 245 -1
+177 213 1.036557 -1 260 183 245 -1
+181 219 1.097037 791 270 178 255 -1
+183 222 1.127277 791 270 176 265 -1
+188 318 1.853035 -1 800 156 228 -1
+187 321 1.879915 -1 408 162 210 -1
+186 324 1.906795 -1 -1 164 203 -1
+184 330 1.957195 -1 791 166 203 -1
+183 333 1.980715 -1 574 173 200 -1
+182 335 2.000875 -1 434 176 194 -1
+180 339 2.037835 800 -1 173 189 -1
+179 341 2.054635 -1 -1 183 189 -1
+177 345 2.091595 -1 751 186 183 -1
+176 347 2.111755 -1 623 191 178 -1
+174 350 2.136955 -1 -1 203 173 -1
+170 355 2.187355 -1 -1 207 173 -1
+164 364 2.269675 -1 -1 224 162 -1
+163 365 2.284795 -1 -1 241 164 -1
+130 387 2.252875 -1 -1 250 152 -1
+128 389 2.257915 -1 -1 245 152 -1
+124 394 2.267994 -1 -1 260 142 -1
+122 396 2.271354 -1 -1 255 149 -1
+120 398 2.274714 714 -1 255 142 -1
+116 304 1.548956 -1 -1 260 144 -1
+116 307 1.569116 -1 -1 255 149 -1
+116 312 1.607756 -1 -1 260 140 -1
+116 314 1.626236 -1 -1 270 149 -1
+116 316 1.643036 -1 -1 276 142 -1
+116 320 1.676636 -1 -1 265 151 -1
+116 322 1.693436 -1 -1 270 149 -1
+116 324 1.710236 -1 -1 265 149 -1
+116 328 1.737116 -1 -1 276 149 -1
+116 329 1.748876 -1 714 255 149 -1
+116 332 1.774076 -1 -1 260 149 -1
+116 333 1.784156 531 800 260 149 -1
+116 334 1.795916 -1 -1 276 151 -1
+116 337 1.821116 -1 -1 270 149 -1
+116 339 1.834556 -1 -1 270 149 -1
+115 341 1.849676 -1 -1 270 152 -1
+114 345 1.878236 -1 -1 276 149 -1
+113 347 1.895036 -1 -1 265 149 -1
+111 351 1.930315 -1 -1 276 147 -1
+110 353 1.948795 -1 -1 282 151 -1
+109 355 1.965595 -1 791 282 151 -1
+107 359 2.000875 751 714 270 149 -1
+89 384 2.246155 751 791 294 152 -1
+85 388 2.288154 681 531 288 154 -1
+83 390 2.308314 714 447 307 152 -1
+81 392 2.330154 421 623 282 152 -1
+77 396 2.373834 623 623 270 147 -1
+75 398 2.393994 597 681 265 152 -1
+71 402 2.435994 623 552 265 152 -1
+69 404 2.456154 552 623 276 152 -1
+67 406 2.476314 623 574 288 156 -1
+63 410 2.516634 714 623 270 152 -1
+61 411 2.536794 597 512 288 154 -1
+57 413 2.577114 597 574 282 154 -1
+55 414 2.598953 512 531 307 154 -1
+53 415 2.619113 494 512 288 154 -1
+47 417 2.666153 478 552 270 154 -1
+44 418 2.689673 552 574 288 152 -1
+38 420 2.740073 421 552 288 152 -1
+81 375 2.335194 574 478 282 154 -1
+65 391 2.341914 397 447 265 156 -1
+61 395 2.338555 512 421 260 160 -1
+59 397 2.335195 397 408 276 154 -1
+55 401 2.331835 421 408 255 162 -1
+53 403 2.328475 421 447 250 160 -1
+49 407 2.323435 434 421 250 164 -1
+47 409 2.325115 434 421 250 162 -1
+45 411 2.330155 408 397 250 152 -1
+41 415 2.355355 397 397 217 164 -1
+38 418 2.373835 434 386 221 164 -1
+32 423 2.430954 365 375 186 164 -1
+26 427 2.491434 462 315 237 166 -1
+20 431 2.545194 408 322 397 166 -1
+18 432 2.563674 434 347 552 166 -1
+15 434 2.593914 447 315 -1 171 -1
+14 434 2.598954 462 301 791 169 -1
+14 434 2.597274 512 330 -1 171 -1
+14 434 2.600634 552 330 791 166 -1
+14 434 2.598954 552 330 -1 176 -1
+14 434 2.598954 447 307 -1 169 -1
+14 434 2.597274 421 330 791 176 -1
+14 434 2.600634 512 330 -1 169 -1
+14 434 2.598954 531 330 800 164 -1
+14 434 2.600634 434 330 791 171 -1
+14 434 2.598954 447 338 -1 169 -1
+14 434 2.598954 574 330 681 166 -1
+14 434 2.598954 434 330 -1 169 -1
+14 434 2.598954 597 330 -1 162 -1
+14 434 2.598954 552 330 791 171 -1
+14 434 2.600634 531 322 681 171 -1
+14 434 2.597274 531 338 -1 169 -1
+14 434 2.603994 478 330 -1 171 -1
+14 434 2.607354 531 315 651 169 -1
+14 434 2.607354 574 322 -1 169 -1
+13 434 2.615754 462 322 714 166 -1
+12 434 2.620794 478 282 791 173 -1
+10 435 2.635914 714 315 791 173 -1
+9 436 2.647674 462 322 552 173 -1
+7 437 2.664474 421 322 597 176 -1
+2 439 2.709833 512 315 574 176 -1
+-1 440 2.736713 512 315 408 186 -1
+-14 443 2.837513 714 322 301 200 -1
+-22 445 2.908073 408 307 301 207 -1
+-26 446 2.943353 -1 270 260 224 -1
+-30 447 2.976953 -1 232 245 245 -1
+-38 448 3.042473 -1 194 213 260 -1
+-112 432 3.652312 -1 623 228 574 -1
+-118 428 3.702711 -1 800 228 494 -1
+-121 426 3.731271 -1 -1 237 478 -1
+-126 422 3.779991 -1 800 232 447 -1
+-129 420 3.806871 -1 -1 237 408 -1
+-131 418 3.832071 -1 -1 221 365 -1
+-136 414 3.882471 -1 574 250 386 -1
+-138 412 3.905991 -1 -1 250 356 791
+-143 406 3.963111 -1 -1 245 347 791
+-145 403 3.988311 -1 -1 270 330 -1
+-147 400 4.015191 -1 -1 260 294 -1
+-151 394 4.065590 -1 -1 260 315 -1
+-153 392 4.089110 -1 -1 270 294 -1
+-155 390 4.112630 -1 -1 282 294 -1
+-157 386 4.151270 -1 -1 315 282 -1
+-158 384 4.159670 -1 -1 322 276 -1
+-160 381 4.161350 -1 -1 315 282 -1
+-161 380 4.154630 -1 -1 322 270 -1
+-162 379 4.144550 -1 -1 315 276 -1
+-69 402 3.395272 800 -1 288 265 -1
+-71 401 3.413752 -1 -1 301 276 -1
+-91 394 3.586792 -1 -1 347 260 -1
+-94 393 3.611992 -1 -1 365 260 -1
+-98 391 3.655671 -1 -1 356 260 -1
+-100 390 3.677511 800 -1 375 255 -1
+-103 388 3.701031 -1 -1 365 260 -1
+-108 384 3.746391 -1 -1 375 255 -1
+-110 382 3.769911 -1 -1 375 255 -1
+-112 380 3.793431 -1 -1 330 250 -1
+-117 376 3.845511 -1 -1 397 232 -1
+-119 374 3.870711 -1 -1 386 250 -1
+-123 370 3.922791 -1 -1 408 232 -1
+-125 368 3.947991 -1 -1 421 245 -1
+-127 366 3.973191 -1 623 397 255 -1
+-131 362 4.023591 -1 651 434 255 -1
+-135 356 4.075670 -1 -1 365 255 -1
+-159 299 4.535988 -1 -1 434 250 -1
+-159 296 4.557828 -1 -1 365 245 -1
+-159 290 4.601509 -1 -1 478 260 -1
+-159 287 4.623349 -1 -1 386 255 -1
+-159 284 4.645189 -1 -1 574 250 -1
+-159 278 4.687189 -1 375 421 255 -1
+-159 275 4.709029 -1 356 397 241 -1
+-159 269 4.752708 -1 791 478 250 -1
+-159 266 4.772868 -1 -1 478 250 -1
+-159 257 4.836708 -1 -1 447 250 -1
+-141 318 4.423429 -1 -1 434 245 -1
+-142 316 4.421749 -1 -1 375 255 -1
+-144 312 4.421749 -1 -1 462 255 -1
+-145 310 4.423429 -1 386 330 241 -1
+-147 306 4.421749 -1 -1 494 237 -1
+-148 304 4.423429 -1 -1 397 255 -1
+-149 302 4.421749 -1 338 386 250 -1
+-151 296 4.425109 -1 751 478 255 -1
+-154 288 4.431828 -1 -1 434 255 -1
+-155 285 4.435188 -1 751 478 260 -1
+-156 283 4.435188 -1 434 356 260 -1
+-161 271 4.433508 751 -1 397 241 -1
+-163 267 4.435188 -1 434 315 255 -1
+-122 277 4.060550 -1 751 330 270 -1
+-128 269 4.132790 -1 478 408 260 512
+-130 266 4.157990 -1 623 397 276 478
+-131 264 4.179830 800 531 408 260 494
+-133 258 4.228549 -1 552 531 250 408
+-134 256 4.250390 -1 330 447 241 356
+-136 250 4.297430 -1 478 552 276 494
+-137 247 4.320950 574 421 552 276 386
+-139 241 4.367990 -1 307 531 276 408
+-140 239 4.388149 -1 478 597 276 408
+-141 236 4.413349 -1 512 512 276 386
+-144 227 4.480549 -1 494 494 270 386
+-146 221 4.524230 -1 552 478 276 408
+-146 218 4.547750 -1 494 623 282 386
+-146 215 4.569590 -1 421 447 276 375
+-146 209 4.614950 -1 307 531 260 478
+-146 206 4.635109 -1 375 462 288 356
+-146 200 4.677109 531 330 462 288 478
+-146 197 4.697269 681 408 462 276 478
+-146 191 4.739269 -1 386 408 288 375
+-146 188 4.761109 623 386 421 260 478
+-146 185 4.781269 -1 375 462 288 386
+-146 179 4.823268 -1 338 397 294 408
+-146 176 4.843428 -1 365 447 276 386
+-147 188 4.450309 -1 288 356 307 681
+-148 185 4.453669 800 288 356 294 623
+-149 183 4.451989 714 270 365 294 800
+-151 179 4.451989 623 270 347 307 -1
+-152 177 4.448629 751 288 365 307 552
+-154 173 4.448629 512 294 338 307 -1
+-73 225 3.707752 651 288 338 307 623
+-77 223 3.748071 512 301 338 288 -1
+-79 221 3.769911 623 294 356 307 -1
+-81 219 3.793431 714 265 330 307 714
+-86 215 3.843831 751 270 301 282 791
+-114 185 4.151271 574 623 322 330 397
+-116 182 4.176471 552 791 301 315 478
+-120 176 4.226871 462 -1 301 347 338
+-121 173 4.250391 478 -1 307 330 375
+-123 170 4.278950 478 -1 322 330 494
+-125 164 4.332710 478 -1 307 338 494
+-126 161 4.361269 494 -1 315 330 434
+-128 154 4.421749 408 751 315 322 494
+-129 150 4.455349 462 651 322 330 -1
+-131 142 4.519189 478 531 301 288 -1
+-133 95 4.892147 462 375 210 338 -1
+-120 61 5.167665 651 347 494 322 -1
+-118 58 5.194545 623 338 397 330 -1
+-116 54 5.236545 531 338 397 330 -1
+-115 52 5.251665 751 307 375 330 -1
+-114 51 5.265104 -1 347 356 330 -1
+-114 51 5.265104 751 330 356 330 -1
+-16 -10 6.212622 -1 288 194 265 681
+-2 -10 6.316781 -1 322 194 751 -1
+6 -10 6.382301 -1 338 191 -1 -1
+14 -9 6.442780 -1 375 186 462 -1
+22 -7 6.499900 -1 365 186 397 -1
+29 -5 6.557020 -1 623 181 356 -1
+35 -3 6.614139 -1 597 186 315 -1
+38 -2 6.642699 -1 -1 207 307 -1
+41 -1 6.671258 -1 494 181 294 -1
+48 3 6.731739 -1 791 181 288 -1
+51 5 6.761979 -1 245 189 270 -1
+55 7 6.793899 -1 494 194 260 -1
+61 11 6.856059 -1 -1 203 255 -1
+64 13 6.884618 -1 -1 213 245 -1
+67 15 6.913178 -1 -1 221 241 -1
+73 19 6.965258 -1 -1 237 241 -1
+76 21 6.992137 -1 -1 237 221 -1
+79 23 7.019017 -1 -1 265 232 -1
+84 28 7.074457 -1 -1 282 217 -1
+86 31 7.103016 -1 -1 301 221 -1
+88 34 7.131576 -1 -1 330 217 -1
+92 40 7.190376 -1 -1 338 210 -1
+94 43 7.218935 -1 -1 356 217 791
+96 46 7.245815 -1 -1 375 217 714
+100 52 7.301255 -1 -1 447 213 -1
+101 54 7.323095 -1 -1 397 213 800
+103 57 7.348295 623 -1 301 200 791
+105 61 7.386935 552 -1 301 207 714
+108 67 7.432295 -1 -1 241 207 751
+109 68 7.444055 -1 -1 265 207 681
+110 69 7.455814 -1 -1 347 203 681
+110 71 7.475974 -1 -1 338 197 681
+110 72 7.486054 -1 800 338 197 714
+112 76 7.517974 -1 -1 250 207 681
+113 78 7.536454 -1 -1 301 210 681
+114 81 7.559974 -1 -1 307 213 791
+77 35 7.185335 -1 -1 282 200 791
+101 71 7.227334 -1 -1 -1 213 -1
+105 77 7.232374 -1 -1 -1 217 651
+107 80 7.234054 -1 -1 -1 200 -1
+109 83 7.239094 478 -1 -1 228 -1
+113 89 7.245814 751 -1 -1 228 -1
+115 92 7.249174 -1 -1 -1 237 800
+117 95 7.254214 -1 -1 -1 232 -1
+28 76 6.538536 -1 -1 -1 228 791
+30 77 6.558696 -1 -1 -1 237 791
+36 79 6.604056 -1 -1 -1 245 714
+38 80 6.624216 -1 800 -1 241 -1
+41 81 6.646056 -1 -1 -1 245 800
+46 83 6.686376 -1 -1 -1 255 800
+48 84 6.706535 -1 -1 -1 255 800
+50 85 6.723335 -1 -1 -1 255 -1
+54 87 6.753575 386 -1 -1 265 -1
+55 88 6.765335 447 -1 800 260 800
+56 89 6.777095 -1 -1 -1 282 -1
+58 90 6.790535 -1 -1 -1 265 -1
+58 90 6.792215 -1 -1 681 260 791
+58 90 6.792215 -1 -1 -1 260 -1
+58 90 6.793895 -1 -1 -1 245 800
+58 90 6.793895 -1 -1 651 265 800
+58 90 6.792215 -1 -1 800 260 -1
+58 90 6.792215 -1 751 -1 260 -1
+58 90 6.793895 -1 800 -1 260 -1
+58 90 6.793895 408 -1 -1 260 -1
+58 90 6.793895 751 -1 681 245 800
+58 90 6.792215 -1 -1 -1 260 800
+58 90 6.792215 -1 -1 -1 260 714
+58 90 6.793895 791 -1 -1 260 -1
+58 90 6.793895 -1 -1 -1 260 -1
+58 90 6.792215 -1 -1 800 260 -1
+58 90 6.792215 -1 -1 -1 241 800
+58 90 6.792215 -1 800 -1 260 -1
+58 90 6.792215 714 -1 -1 237 800
+58 90 6.792215 -1 -1 714 260 800
+58 90 6.793895 -1 -1 -1 265 -1
+58 90 6.793895 512 -1 800 232 800
+58 90 6.793895 -1 -1 -1 260 -1
+58 90 6.793895 -1 800 -1 260 -1
+58 90 6.792215 512 -1 -1 241 791
Index: branches/scout/projects/mapping/matlab/data/input_success_0.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input_success_0.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input_success_0.txt	(revision 1346)
@@ -0,0 +1,261 @@
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 434
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 386
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 434
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 408
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 478
+0 0 0.000000 -1 -1 -1 -1 478
+-26 0 0.458628 -1 -1 -1 -1 478
+-1 1 0.504788 512 -1 -1 -1 478
+14 6 0.504788 -1 -1 -1 -1 408
+25 12 0.507766 -1 -1 -1 -1 447
+51 25 0.543504 597 -1 -1 -1 408
+66 33 0.546482 447 -1 -1 -1 447
+92 47 0.564350 421 -1 -1 -1 421
+102 53 0.562861 375 -1 -1 -1 408
+113 59 0.558394 494 -1 -1 -1 375
+124 65 0.547971 356 -1 -1 -1 434
+134 71 0.546482 365 -1 -1 -1 408
+145 77 0.553927 421 -1 -1 -1 408
+153 81 0.562861 408 -1 -1 -1 408
+212 115 0.573284 375 -1 -1 -1 386
+272 151 0.573284 330 651 -1 -1 375
+308 171 0.561372 294 -1 -1 -1 338
+319 177 0.553927 294 623 -1 -1 347
+327 181 0.540525 294 574 -1 -1 315
+335 185 0.522657 288 434 -1 -1 322
+359 197 0.461606 288 494 -1 -1 288
+367 201 0.443737 276 408 -1 -1 288
+375 205 0.428847 288 552 -1 -1 265
+383 208 0.410978 294 574 -1 -1 270
+391 209 0.396088 301 462 -1 -1 265
+401 211 0.400555 294 623 -1 -1 250
+409 215 0.402044 276 597 -1 -1 241
+491 242 0.251650 365 552 651 -1 224
+503 242 0.212934 462 494 714 -1 224
+527 242 0.136993 -1 447 681 -1 221
+536 242 0.067007 307 408 -1 -1 217
+544 240 -0.052117 255 365 -1 -1 217
+548 236 -0.134015 386 494 -1 -1 224
+552 232 -0.205489 397 447 -1 -1 232
+556 228 -0.276964 347 512 -1 -1 245
+560 224 -0.348438 347 478 574 -1 255
+571 205 -0.558394 307 494 -1 -1 375
+583 182 -0.888964 386 -1 -1 -1 330
+587 170 -0.918745 375 -1 -1 -1 347
+591 158 -0.939591 307 714 -1 -1 365
+595 147 -0.967883 347 681 -1 -1 375
+599 137 -0.978307 386 714 -1 -1 375
+604 126 -0.985752 397 651 -1 -1 375
+608 118 -1.006599 347 623 -1 -1 375
+610 110 -1.025956 397 651 -1 -1 356
+611 102 -1.039358 386 751 -1 -1 356
+614 86 -1.075095 322 597 -1 -1 347
+618 75 -1.097430 397 681 -1 -1 330
+622 63 -1.116788 408 714 -1 -1 301
+626 51 -1.140612 408 597 -1 -1 322
+630 39 -1.152525 447 -1 -1 -1 330
+648 -13 -1.183795 434 623 -1 -1 322
+655 -31 -1.186773 478 714 681 -1 322
+659 -43 -1.200174 494 623 714 -1 322
+664 -58 -1.207619 447 651 714 -1 307
+668 -70 -1.212087 478 623 681 -1 315
+691 -144 -1.293984 -1 447 574 -1 301
+692 -159 -1.302918 -1 434 478 -1 301
+692 -171 -1.316320 386 386 478 -1 301
+692 -179 -1.326743 294 365 421 -1 288
+692 -187 -1.332699 270 330 408 -1 301
+693 -197 -1.335677 260 301 408 -1 288
+696 -217 -1.346100 245 294 347 -1 294
+696 -225 -1.365458 260 276 356 -1 288
+696 -233 -1.384816 288 250 347 -1 294
+696 -238 -1.413108 294 241 338 -1 301
+696 -242 -1.471181 288 237 356 -1 288
+696 -246 -1.538188 276 228 408 -1 301
+695 -247 -1.585838 250 228 421 -1 294
+693 -247 -1.591794 255 221 447 -1 301
+693 -247 -1.591794 255 224 512 478 301
+691 -247 -1.602217 245 224 434 -1 301
+687 -248 -1.645400 237 228 478 -1 301
+679 -257 -1.849400 197 241 -1 -1 347
+675 -261 -1.944699 189 250 -1 -1 408
+631 -275 -2.632639 241 -1 -1 -1 221
+626 -275 -2.678799 260 -1 -1 -1 207
+618 -275 -2.730916 294 -1 -1 -1 203
+608 -275 -2.784522 315 -1 -1 -1 191
+569 -275 -2.867909 408 -1 -1 -1 197
+554 -275 -2.884289 512 -1 -1 -1 207
+476 -286 -2.881311 623 -1 -1 -1 213
+464 -286 -2.873865 375 -1 -1 -1 217
+443 -289 -2.876844 512 -1 -1 -1 217
+428 -290 -2.881311 494 -1 -1 -1 224
+406 -293 -2.881311 552 -1 -1 -1 224
+393 -294 -2.872377 574 -1 -1 -1 232
+356 -296 -2.854508 386 -1 651 -1 237
+342 -297 -2.855997 623 -1 -1 -1 245
+327 -298 -2.869398 597 -1 -1 -1 241
+315 -298 -2.875355 552 -1 -1 -1 255
+295 -301 -2.872377 552 -1 -1 -1 245
+268 -303 -2.864932 597 -1 -1 -1 245
+256 -303 -2.861953 421 -1 -1 -1 228
+241 -305 -2.864932 512 -1 -1 -1 237
+234 -305 -2.884289 -1 -1 -1 -1 255
+232 -305 -2.891735 -1 -1 -1 -1 255
+232 -305 -2.891735 397 -1 597 -1 260
+223 -305 -2.875355 397 -1 -1 -1 255
+222 -305 -2.872377 552 -1 -1 -1 250
+220 -305 -2.869399 408 -1 -1 -1 260
+182 -307 -2.854508 574 -1 681 -1 260
+170 -307 -2.842596 512 751 -1 -1 265
+157 -307 -2.835150 434 -1 -1 -1 260
+143 -307 -2.827705 462 651 -1 -1 255
+125 -308 -2.832172 597 552 -1 -1 447
+47 -313 -2.878333 -1 681 -1 -1 265
+11 -313 -2.942363 751 623 651 -1 276
+-70 -315 -3.080844 -1 714 -1 -1 294
+-80 -315 -3.153808 -1 -1 -1 -1 301
+-88 -311 -3.232727 -1 434 -1 -1 301
+-98 -306 -3.345895 375 375 -1 -1 213
+-103 -302 -3.462041 322 -1 -1 -1 597
+-111 -297 -3.607968 347 -1 -1 -1 -1
+-119 -289 -3.767297 288 -1 -1 -1 -1
+-134 -262 -4.215501 -1 -1 -1 -1 356
+-134 -254 -4.322713 -1 -1 -1 -1 307
+-134 -246 -4.412055 -1 -1 -1 -1 315
+-134 -238 -4.485019 -1 -1 -1 -1 375
+-134 -234 -4.532669 -1 -1 -1 -1 386
+-134 -226 -4.590742 -1 -1 -1 -1 347
+-134 -225 -4.595209 -1 -1 -1 -1 338
+-134 -225 -4.595209 -1 -1 -1 -1 338
+-134 -222 -4.607122 -1 -1 -1 -1 347
+-134 -218 -4.632436 -1 -1 -1 -1 330
+-134 -214 -4.645837 -1 -1 -1 -1 315
+-134 -205 -4.610100 -1 -1 -1 -1 330
+-134 -193 -4.556494 -1 -1 -1 -1 356
+-135 -103 -4.443324 -1 681 -1 -1 365
+-139 -32 -4.418008 -1 494 -1 -1 447
+-141 -15 -4.419497 -1 494 -1 -1 447
+-144 33 -4.595206 574 375 -1 -1 -1
+-144 37 -4.620520 623 447 -1 -1 -1
+-144 41 -4.653279 552 434 -1 -1 -1
+-144 45 -4.696462 421 421 -1 -1 -1
+-142 49 -4.742622 462 434 -1 -1 -1
+-138 53 -4.763469 421 397 -1 -1 -1
+-134 57 -4.788783 421 447 -1 -1 -1
+-130 61 -4.828987 408 434 -1 -1 -1
+-126 65 -4.882593 386 408 -1 -1 -1
+-122 69 -4.946622 307 447 751 -1 -1
+-118 73 -5.037454 330 494 651 -1 -1
+-105 86 -5.332286 330 -1 -1 -1 681
+-101 90 -5.418651 347 714 -1 -1 597
+-96 92 -5.493103 338 -1 -1 -1 478
+-92 92 -5.534796 356 -1 -1 -1 478
+-89 92 -5.548198 408 597 -1 -1 408
+-88 92 -5.551176 365 -1 -1 -1 421
+-88 92 -5.551176 375 -1 -1 -1 447
+-88 92 -5.551176 408 -1 -1 -1 408
+-88 92 -5.551176 356 -1 -1 -1 447
+-88 92 -5.551176 421 714 -1 -1 397
+-88 92 -5.551176 386 -1 -1 -1 434
+-84 92 -5.580957 421 -1 -1 -1 434
+-80 92 -5.621161 462 -1 -1 -1 408
+-72 95 -5.603293 365 -1 -1 -1 397
+-34 116 -5.646475 408 651 -1 -1 375
+14 143 -5.655410 397 -1 -1 -1 375
+24 152 -5.682213 478 751 -1 -1 356
+70 176 -5.725397 397 -1 -1 -1 330
+83 184 -5.723907 408 -1 -1 -1 322
+147 217 -5.759645 322 714 -1 -1 301
+303 286 -6.047032 315 447 651 -1 237
+311 286 -6.115528 255 408 -1 -1 250
+319 286 -6.187002 347 552 -1 -1 260
+327 286 -6.270389 447 494 -1 -1 265
+335 283 -6.344841 356 447 -1 -1 265
+346 279 -6.405892 386 447 751 -1 315
+380 263 -6.642651 288 478 -1 478 552
+393 250 -6.880898 301 -1 -1 -1 301
+393 247 -6.895789 315 -1 -1 -1 322
+393 247 -6.895789 347 -1 -1 -1 338
+393 246 -6.898767 338 -1 -1 -1 330
+393 242 -6.930037 315 -1 -1 -1 356
+397 234 -7.037249 356 -1 -1 -1 408
+401 226 -7.120636 375 651 -1 -1 356
+405 215 -7.144460 375 552 -1 -1 375
+411 201 -7.145949 386 714 -1 -1 356
+415 189 -7.160840 434 651 -1 -1 365
+441 141 -7.172752 375 681 -1 -1 347
+445 131 -7.175731 408 623 -1 -1 347
+450 120 -7.175731 386 623 -1 -1 307
+467 83 -7.195090 356 651 -1 -1 330
+472 71 -7.199557 386 623 -1 -1 347
+480 55 -7.190623 386 552 -1 -1 330
+488 39 -7.223382 375 651 751 -1 322
+496 23 -7.263586 365 623 681 -1 315
+504 7 -7.272521 397 574 623 -1 301
+521 -26 -7.311236 397 447 597 -1 301
+525 -34 -7.323149 447 478 512 -1 322
+539 -70 -7.570331 315 375 751 -1 270
+539 -83 -7.851760 365 397 -1 -1 301
+536 -87 -7.923234 338 397 -1 -1 322
+532 -87 -7.957482 338 447 -1 -1 322
+532 -87 -7.957482 338 434 -1 -1 330
+532 -87 -7.957482 322 421 -1 -1 322
+532 -87 -7.957482 338 408 -1 -1 338
+530 -87 -7.967906 330 421 -1 -1 338
+528 -87 -7.979818 330 288 -1 -1 330
+523 -87 -8.039379 322 447 -1 -1 356
+519 -87 -8.079584 315 447 -1 -1 397
+503 -97 -8.292520 294 714 -1 -1 301
+491 -109 -8.361018 307 623 -1 -1 315
+484 -114 -8.389311 294 -1 -1 -1 347
+476 -122 -8.416115 301 -1 -1 -1 386
+468 -130 -8.436962 288 -1 -1 -1 397
+460 -138 -8.472698 260 -1 -1 -1 386
+404 -178 -8.605226 288 -1 -1 -1 330
+368 -202 -8.681170 301 -1 -1 -1 270
+300 -242 -8.788383 338 -1 -1 -1 276
+216 -283 -8.940269 751 -1 -1 -1 255
+45 -304 -9.272333 -1 -1 -1 -1 356
+-2 -304 -9.419749 462 -1 -1 -1 386
+-15 -291 -9.562700 -1 -1 -1 -1 681
+-24 -279 -9.719050 623 -1 -1 -1 -1
+-47 -261 -9.946877 574 -1 -1 -1 -1
+-92 -204 -10.377212 -1 623 -1 -1 421
+-100 -129 -11.008571 714 -1 -1 -1 -1
+-96 -121 -11.114294 512 -1 -1 -1 -1
+-92 -113 -11.225973 574 -1 -1 -1 -1
+-88 -105 -11.334674 -1 -1 -1 -1 -1
+-72 -79 -11.669713 -1 -1 -1 -1 651
+-66 -73 -11.757567 -1 -1 -1 -1 623
+-62 -69 -11.806705 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 623
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 681
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 552
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 714 597
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 651
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 552
+-58 -65 -11.823085 -1 -1 -1 -1 597
Index: branches/scout/projects/mapping/matlab/data/input1.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input1.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input1.txt	(revision 1346)
@@ -0,0 +1,1029 @@
+95 -227 -0.401519 -1 -1 681 -1 494
+111 -235 -0.403199 -1 -1 552 -1 512
+132 -245 -0.406559 -1 -1 597 -1 531
+152 -255 -0.409919 -1 -1 447 -1 512
+168 -263 -0.411599 -1 -1 397 -1 531
+188 -273 -0.430079 -1 -1 347 -1 552
+221 -291 -0.477119 -1 -1 288 -1 531
+241 -301 -0.492238 -1 -1 245 -1 623
+261 -311 -0.498958 -1 -1 197 -1 574
+282 -321 -0.450239 -1 -1 142 -1 651
+324 -334 -0.179759 -1 -1 -1 574 494
+369 -332 0.171360 -1 -1 -1 791 751
+402 -320 0.448559 -1 -1 -1 131 -1
+435 -294 0.782878 651 -1 -1 -1 -1
+459 -257 1.130637 681 597 -1 -1 -1
+468 -222 1.409516 -1 512 714 -1 -1
+467 -179 1.701835 651 574 494 -1 -1
+462 -150 1.758955 478 531 434 -1 -1
+458 -134 1.752235 421 462 421 -1 -1
+453 -114 1.730395 397 421 421 -1 -1
+448 -94 1.713595 447 386 347 -1 -1
+439 -58 1.693435 597 322 294 -1 -1
+435 -30 1.748875 681 270 255 -1 -1
+421 11 2.027754 434 294 197 -1 -1
+399 40 2.315033 -1 421 186 375 -1
+363 66 2.656073 -1 338 203 245 -1
+325 78 2.908072 -1 -1 276 186 -1
+303 82 2.946712 -1 751 276 189 -1
+283 87 2.943352 -1 714 282 191 -1
+263 92 2.934952 -1 681 282 191 -1
+247 96 2.928232 -1 597 307 186 -1
+226 101 2.926553 -1 531 265 183 -1
+205 106 2.926553 800 494 265 181 -1
+189 110 2.923193 751 494 250 178 -1
+169 115 2.906393 494 462 255 173 -1
+149 120 2.876153 478 397 241 171 -1
+129 125 2.849273 462 365 237 169 -1
+113 129 2.839193 397 315 213 166 -1
+65 142 2.896313 270 270 194 152 -1
+30 146 3.123113 338 228 330 136 -1
+-15 138 3.477592 -1 232 178 152 -1
+-53 115 3.823671 -1 301 152 176 574
+-79 82 4.161349 -1 751 162 241 -1
+-92 49 4.438548 -1 -1 217 171 -1
+-96 6 4.720787 -1 -1 408 158 -1
+-96 -24 4.787987 -1 -1 531 160 -1
+-96 -43 4.794706 -1 -1 478 164 434
+-96 -64 4.789667 -1 -1 714 173 -1
+-96 -84 4.774547 751 -1 791 176 -1
+-96 -100 4.754387 -1 -1 751 183 -1
+-96 -120 4.727506 -1 -1 714 183 -1
+-96 -141 4.715746 -1 -1 552 178 -1
+-96 -158 4.710706 -1 -1 531 194 -1
+-96 -179 4.700626 651 -1 681 200 -1
+-96 -201 4.690547 -1 -1 531 194 -1
+-96 -220 4.683827 -1 -1 512 207 -1
+-96 -244 4.683827 -1 -1 478 210 -1
+-96 -262 4.680467 681 -1 397 213 -1
+-96 -282 4.673748 751 -1 408 210 -1
+-96 -304 4.655267 -1 -1 315 221 574
+-96 -324 4.626707 751 -1 315 232 -1
+-96 -340 4.608227 751 -1 270 237 -1
+-97 -360 4.599827 531 -1 294 228 -1
+-100 -380 4.591427 -1 -1 265 232 -1
+-104 -396 4.581348 -1 -1 224 232 -1
+-109 -416 4.567908 574 651 203 241 -1
+-114 -436 4.562869 751 651 197 245 -1
+-118 -452 4.557829 791 651 221 255 -1
+-123 -473 4.556149 -1 597 330 250 531
+-128 -493 4.546070 -1 574 552 255 574
+-137 -529 4.497349 -1 478 -1 237 552
+-142 -549 4.477189 751 421 -1 245 462
+-147 -569 4.467109 265 375 791 260 447
+-151 -585 4.458709 245 347 478 250 434
+-161 -622 4.354550 221 260 347 270 447
+-162 -626 4.043751 237 194 169 282 375
+-170 -632 3.853912 178 191 241 307 512
+-198 -659 3.894232 133 140 191 294 447
+-217 -676 3.892551 -1 101 176 282 597
+-229 -691 4.196631 117 -1 210 224 408
+-236 -725 4.789670 183 113 -1 203 651
+-230 -745 5.129029 447 176 -1 166 -1
+-212 -770 5.515427 478 217 109 189 -1
+-183 -788 5.839666 651 397 176 127 -1
+-139 -798 6.205905 -1 434 217 111 -1
+-57 -772 6.894702 -1 -1 315 194 365
+-33 -750 7.114781 -1 -1 365 178 330
+-15 -728 7.175261 -1 -1 375 574 338
+0 -710 7.170221 -1 -1 375 408 347
+15 -695 7.156782 751 -1 375 347 375
+27 -682 7.155102 -1 -1 315 330 375
+42 -666 7.155102 -1 -1 322 282 386
+57 -651 7.148382 -1 -1 347 307 408
+69 -639 7.133262 -1 -1 301 270 462
+84 -624 7.109742 -1 -1 294 270 478
+99 -609 7.089582 -1 -1 265 276 512
+114 -594 7.082862 -1 -1 241 255 478
+126 -582 7.077822 -1 -1 237 245 597
+141 -567 7.066063 -1 -1 217 241 574
+156 -552 7.054303 -1 -1 200 203 447
+171 -537 7.097983 -1 -1 -1 181 751
+195 -501 7.365102 -1 -1 -1 164 574
+207 -459 7.707821 -1 -1 -1 160 338
+205 -416 8.043820 791 -1 -1 -1 791
+193 -383 8.321020 531 -1 -1 -1 330
+167 -350 8.665420 531 791 494 -1 -1
+130 -327 8.957740 494 531 -1 -1 714
+103 -315 9.023260 478 478 -1 -1 -1
+87 -307 9.014860 512 408 791 -1 -1
+67 -297 8.987981 478 375 681 -1 -1
+48 -287 8.971181 421 330 434 -1 -1
+32 -279 8.964461 338 315 512 -1 -1
+16 -270 8.888862 301 288 651 -1 -1
+12 -267 8.569662 245 276 -1 -1 -1
+12 -267 8.216863 200 330 681 -1 651
+12 -267 7.937983 197 -1 623 -1 375
+13 -262 7.642303 245 478 -1 -1 245
+18 -243 7.551584 276 597 -1 -1 213
+22 -227 7.538145 288 574 791 -1 210
+27 -207 7.534785 282 623 791 -1 217
+37 -167 7.519666 260 478 597 -1 203
+41 -151 7.511266 245 478 531 -1 210
+46 -131 7.491106 270 531 462 -1 210
+53 -111 7.472626 255 434 494 -1 189
+63 -91 7.457507 294 365 421 -1 203
+81 -55 7.442387 397 315 315 -1 207
+93 -28 7.512947 338 270 322 -1 203
+102 10 7.635586 203 224 232 -1 237
+106 29 7.499506 307 186 189 791 203
+113 42 7.271027 160 130 189 -1 178
+123 57 7.291187 142 -1 164 -1 176
+130 75 7.590227 140 105 119 -1 203
+132 91 7.843906 169 124 -1 -1 265
+128 111 8.075746 151 169 -1 322 356
+123 131 8.080787 124 145 -1 294 347
+119 147 8.146306 112 127 -1 237 347
+110 167 8.458786 119 160 -1 158 791
+95 182 8.799825 144 122 103 112 -1
+57 193 9.438224 434 144 124 -1 -1
+31 186 9.821263 -1 221 115 103 597
+-2 160 10.229503 -1 -1 136 133 -1
+-25 123 10.575582 -1 -1 197 145 -1
+-33 89 10.852780 -1 -1 315 127 681
+-12 4 11.491179 -1 -1 -1 203 237
+3 -22 11.549979 -1 -1 -1 265 237
+11 -37 11.538219 -1 -1 -1 307 276
+21 -55 11.509661 -1 -1 714 315 294
+31 -74 11.494541 -1 -1 -1 375 338
+39 -90 11.491180 -1 -1 -1 347 365
+49 -110 11.482780 -1 -1 -1 447 408
+59 -130 11.472699 -1 -1 -1 462 397
+67 -146 11.465979 -1 -1 478 597 462
+77 -166 11.465980 751 -1 -1 623 462
+87 -186 11.465979 -1 -1 751 597 597
+97 -206 11.464298 -1 -1 -1 681 512
+105 -222 11.452538 -1 -1 -1 623 651
+115 -240 11.423978 -1 512 552 -1 681
+125 -260 11.400458 -1 375 -1 -1 791
+133 -276 11.390378 -1 375 681 574 -1
+161 -348 11.124936 -1 245 791 -1 -1
+170 -389 11.331575 -1 154 -1 447 -1
+185 -414 11.717975 -1 -1 232 -1 -1
+198 -425 11.988454 -1 -1 152 -1 -1
+217 -432 12.316053 -1 -1 434 597 -1
+237 -433 12.650373 -1 -1 -1 597 681
+257 -427 12.989734 751 -1 -1 245 -1
+271 -417 13.260213 751 -1 -1 173 -1
+284 -400 13.602933 -1 -1 -1 -1 -1
+291 -380 13.949013 -1 800 714 -1 -1
+292 -364 14.231251 -1 -1 751 -1 -1
+287 -344 14.491650 597 347 714 -1 651
+278 -324 14.501730 681 421 552 -1 552
+271 -304 14.489969 597 462 681 -1 791
+267 -288 14.478209 597 397 597 -1 -1
+262 -268 14.456370 494 365 651 -1 -1
+257 -248 14.436212 478 347 552 -1 -1
+248 -212 14.412691 478 338 531 -1 -1
+233 -152 14.395890 421 301 408 -1 -1
+210 -94 14.652929 365 -1 365 623 -1
+197 -71 14.688210 330 512 338 651 -1
+169 -18 14.649570 245 512 270 447 -1
+159 2 14.634449 232 397 250 386 -1
+149 22 14.621009 207 356 232 397 791
+141 38 14.617648 183 307 213 347 -1
+121 78 14.610929 149 207 176 301 512
+111 98 14.599169 124 178 156 288 531
+103 114 14.584049 -1 147 134 276 434
+93 132 14.642849 -1 125 120 250 365
+81 147 14.948609 -1 -1 139 191 -1
+64 158 15.287969 131 -1 152 156 -1
+48 162 15.566848 224 -1 -1 142 -1
+28 160 15.904528 800 131 -1 151 -1
+8 152 16.240526 -1 194 -1 142 -1
+-9 138 16.544603 -1 597 110 160 -1
+-28 99 16.962923 -1 -1 197 119 -1
+-32 54 17.317402 -1 -1 681 112 -1
+-22 13 17.653400 -1 -1 -1 134 294
+-4 -18 17.927240 -1 -1 -1 213 237
+29 -48 18.276680 -1 -1 -1 478 237
+72 -64 18.637877 365 -1 -1 -1 260
+106 -66 18.829397 288 -1 -1 -1 294
+130 -67 18.684917 294 -1 -1 -1 276
+135 -67 18.362362 434 -1 186 -1 250
+135 -67 17.374525 -1 -1 -1 494 531
+135 -67 17.023407 -1 -1 -1 365 -1
+135 -67 16.742846 -1 -1 -1 397 -1
+135 -67 16.388369 -1 -1 447 494 -1
+129 -69 16.109489 -1 -1 375 714 434
+96 -78 16.003649 -1 751 315 434 -1
+76 -83 15.993567 -1 623 288 -1 751
+60 -87 15.986846 -1 462 270 -1 -1
+40 -92 15.981806 -1 397 245 651 681
+20 -97 15.973406 -1 408 221 574 -1
+-1 -102 15.968366 -1 408 191 447 791
+-23 -108 16.017086 -1 338 173 386 -1
+-62 -126 16.267403 -1 552 176 241 714
+-94 -155 16.600042 -1 -1 221 181 -1
+-114 -190 16.857082 -1 -1 365 166 -1
+-123 -211 16.897404 -1 -1 375 164 -1
+-133 -231 16.899084 681 -1 365 162 -1
+-143 -251 16.894043 -1 -1 356 178 -1
+-151 -267 16.894043 -1 -1 294 176 -1
+-171 -307 16.878920 -1 751 250 183 -1
+-179 -323 16.862118 -1 800 221 186 -1
+-189 -343 16.838596 -1 -1 213 191 -1
+-199 -363 16.818438 -1 714 203 191 -1
+-211 -390 16.887318 -1 434 255 183 -1
+-220 -422 17.067078 552 623 494 200 -1
+-225 -451 17.134275 462 552 386 224 -1
+-230 -474 17.137634 462 512 397 232 -1
+-239 -510 17.124191 397 408 307 265 -1
+-244 -530 17.105711 397 408 265 282 -1
+-249 -550 17.083872 386 338 260 294 574
+-254 -570 17.068750 356 315 228 315 681
+-259 -590 17.056988 356 276 194 322 462
+-263 -611 17.095625 330 232 169 301 651
+-264 -655 17.361063 288 255 145 623 800
+-251 -699 17.713860 288 478 151 213 -1
+-225 -734 18.058260 347 250 186 158 -1
+-190 -758 18.394258 512 232 241 144 -1
+-68 -748 19.377058 -1 -1 178 241 651
+-35 -718 19.724817 -1 -1 250 171 421
+-15 -685 19.973455 681 -1 597 162 478
+-6 -666 20.010416 -1 -1 -1 166 462
+4 -646 20.008736 -1 -1 -1 178 512
+14 -626 20.000336 -1 -1 -1 178 552
+22 -610 19.995295 -1 -1 -1 181 512
+32 -590 19.995295 -1 -1 -1 189 651
+42 -570 19.998655 -1 -1 -1 200 574
+50 -554 19.996975 -1 -1 -1 210 512
+60 -534 19.990255 -1 -1 -1 221 574
+70 -515 19.965057 -1 -1 -1 224 574
+80 -498 19.939857 -1 -1 -1 232 478
+88 -483 19.929777 -1 -1 -1 232 574
+98 -463 19.921375 -1 -1 -1 245 462
+108 -443 19.912973 791 -1 -1 255 531
+116 -427 19.904573 -1 -1 -1 241 531
+126 -407 19.896172 -1 -1 -1 276 478
+136 -387 19.894491 791 681 -1 365 512
+146 -367 19.899532 -1 -1 -1 -1 478
+154 -351 19.901213 -1 -1 -1 -1 512
+164 -331 19.886093 681 597 -1 -1 512
+174 -314 19.862574 -1 -1 681 -1 462
+182 -302 19.845774 -1 -1 -1 -1 434
+192 -285 19.835691 -1 791 -1 -1 494
+204 -267 19.825611 -1 681 681 -1 462
+214 -249 19.813850 -1 512 623 -1 512
+224 -235 19.808809 751 531 531 -1 478
+235 -217 19.805449 478 512 478 -1 478
+247 -200 19.807129 322 421 494 -1 478
+259 -180 19.807129 245 434 434 -1 447
+269 -165 19.802088 228 356 386 -1 478
+282 -148 19.785284 228 294 347 -1 512
+292 -133 19.761766 250 294 307 -1 462
+302 -120 19.652567 288 250 315 -1 512
+318 -109 19.476170 245 217 365 -1 408
+343 -90 19.511450 194 164 250 -1 531
+363 -74 19.489607 147 118 210 -1 408
+379 -59 19.798723 197 113 145 -1 512
+390 -22 20.420324 397 207 109 365 -1
+383 4 20.805042 434 200 129 217 -1
+358 37 21.218323 531 447 200 151 -1
+322 60 21.562723 -1 397 203 133 -1
+288 69 21.839924 -1 512 322 147 -1
+245 67 22.138964 -1 800 322 203 434
+216 62 22.207844 -1 751 307 237 751
+194 57 22.207844 -1 512 288 221 -1
+178 53 22.199444 -1 714 232 191 681
+158 48 22.180962 -1 494 228 191 681
+138 43 22.159122 -1 512 213 255 -1
+118 38 22.142321 -1 447 189 447 -1
+97 34 22.187679 -1 375 169 447 791
+57 20 22.451439 -1 -1 176 237 -1
+21 -9 22.809277 -1 -1 250 171 -1
+-2 -43 23.074717 -1 -1 462 158 -1
+-22 -84 23.106634 -1 -1 386 166 -1
+-32 -104 23.093191 751 -1 597 181 -1
+-40 -120 23.083109 -1 -1 552 183 -1
+-50 -140 23.074707 681 -1 434 191 -1
+-68 -176 23.069668 791 -1 356 194 -1
+-78 -196 23.067987 714 -1 347 210 -1
+-88 -216 23.064627 751 -1 237 213 -1
+-98 -236 23.054544 623 -1 241 221 -1
+-106 -252 23.044464 531 751 245 224 -1
+-116 -270 23.027664 447 -1 237 224 -1
+-136 -304 22.990704 531 791 260 245 -1
+-144 -319 22.983982 478 623 338 250 -1
+-154 -338 22.973902 462 -1 791 250 -1
+-174 -377 22.967180 434 714 -1 250 -1
+-185 -392 22.963820 478 651 -1 276 -1
+-210 -432 22.948696 512 462 494 282 597
+-220 -448 22.936935 434 421 408 294 512
+-228 -460 22.920135 531 447 365 294 494
+-254 -490 22.883175 681 330 330 301 462
+-269 -505 22.876455 714 288 282 315 408
+-287 -528 22.953733 -1 260 228 315 375
+-302 -559 23.178852 301 260 183 307 531
+-310 -604 23.529970 282 189 160 462 -1
+-302 -647 23.872690 434 315 181 213 -1
+-281 -684 24.210369 356 207 166 173 -1
+-206 -729 24.904209 -1 237 166 191 -1
+-170 -731 25.188128 -1 421 166 152 751
+-128 -720 25.537567 -1 -1 189 203 574
+-96 -698 25.803005 -1 -1 282 166 512
+-75 -681 25.850046 -1 -1 338 164 552
+-63 -669 25.841646 -1 -1 301 162 574
+-48 -654 25.833244 -1 -1 386 158 574
+-33 -639 25.829884 -1 -1 -1 166 531
+-18 -624 25.834925 -1 -1 -1 169 552
+-5 -612 25.834925 -1 -1 -1 166 574
+11 -597 25.828203 -1 -1 -1 166 574
+26 -582 25.818121 -1 -1 -1 169 574
+53 -561 25.786201 -1 -1 -1 164 574
+68 -550 25.772760 -1 -1 -1 173 574
+81 -539 25.766039 -1 -1 -1 171 597
+96 -525 25.754276 681 -1 -1 173 574
+112 -515 25.747555 421 -1 -1 173 597
+130 -505 25.745874 462 -1 -1 164 478
+145 -495 25.745874 397 -1 -1 176 531
+165 -482 25.742514 421 -1 -1 178 651
+185 -471 25.739153 408 -1 -1 434 751
+200 -461 25.722355 347 -1 -1 -1 597
+246 -433 25.682030 494 681 -1 -1 714
+281 -415 25.661867 531 597 -1 -1 623
+301 -405 25.658506 623 531 -1 -1 714
+321 -395 25.656826 552 512 597 -1 651
+337 -387 25.653465 494 434 531 -1 531
+357 -377 25.653465 478 386 574 -1 714
+377 -367 25.648426 434 338 494 -1 623
+425 -340 25.544264 315 250 397 -1 512
+428 -339 25.225065 217 237 597 -1 -1
+428 -339 24.877304 189 276 -1 -1 512
+428 -339 24.521145 176 434 -1 -1 301
+439 -379 23.837385 681 -1 -1 -1 189
+444 -399 23.828983 791 -1 -1 -1 194
+449 -419 23.825623 531 -1 -1 -1 203
+454 -441 23.822262 651 -1 -1 -1 203
+458 -458 23.820581 -1 -1 -1 -1 213
+463 -479 23.815540 447 -1 -1 -1 221
+468 -499 23.807138 -1 -1 -1 -1 224
+472 -515 23.793697 574 -1 -1 552 228
+477 -535 23.773537 -1 -1 -1 597 217
+482 -555 23.753376 -1 -1 -1 791 245
+487 -576 23.744974 751 -1 -1 -1 250
+505 -649 23.726492 -1 -1 -1 -1 276
+510 -671 23.726492 -1 -1 -1 -1 265
+515 -691 23.719770 -1 -1 -1 -1 307
+519 -707 23.714731 -1 -1 -1 -1 307
+524 -727 23.694571 -1 -1 -1 -1 315
+525 -747 23.671053 -1 -1 -1 -1 301
+525 -763 23.652575 -1 -1 -1 -1 315
+525 -783 23.644173 -1 791 -1 -1 338
+525 -803 23.634090 -1 -1 -1 -1 338
+525 -840 23.618969 -1 -1 -1 -1 347
+525 -860 23.613928 -1 -1 -1 -1 347
+525 -876 23.612247 -1 -1 -1 -1 365
+525 -897 23.610567 -1 -1 -1 -1 356
+525 -917 23.595446 651 -1 -1 -1 375
+525 -953 23.546730 386 -1 -1 -1 434
+525 -973 23.526569 434 -1 -1 -1 434
+525 -993 23.519848 421 800 -1 -1 447
+525 -1009 23.514807 397 -1 -1 -1 397
+525 -1029 23.501366 574 800 -1 -1 462
+525 -1049 23.491285 494 751 -1 -1 462
+525 -1070 23.487925 800 800 -1 -1 408
+525 -1087 23.489605 574 791 -1 -1 494
+525 -1108 23.487925 791 512 -1 -1 512
+525 -1128 23.471123 714 574 -1 -1 512
+525 -1148 23.445925 651 531 -1 -1 512
+523 -1164 23.422407 531 512 800 -1 512
+518 -1184 23.408966 478 434 -1 -1 574
+513 -1204 23.400564 447 434 714 -1 597
+508 -1224 23.385443 397 386 -1 -1 597
+504 -1240 23.375360 375 347 791 -1 478
+499 -1260 23.365278 356 301 531 -1 651
+494 -1278 23.289679 276 270 531 -1 651
+492 -1284 22.982243 228 255 -1 -1 651
+492 -1284 22.694963 183 397 -1 -1 478
+492 -1284 22.345522 194 751 -1 -1 276
+492 -1284 21.991043 224 -1 -1 -1 213
+471 -1278 21.641605 -1 -1 -1 408 191
+451 -1273 21.614727 -1 -1 -1 623 203
+432 -1266 21.587847 -1 -1 -1 -1 194
+419 -1261 21.560968 -1 -1 -1 -1 224
+404 -1251 21.532410 447 -1 -1 -1 228
+388 -1241 21.513929 375 -1 -1 -1 217
+368 -1231 21.498806 330 -1 -1 -1 245
+314 -1203 21.460163 478 -1 -1 -1 282
+295 -1193 21.456802 512 751 -1 -1 294
+279 -1185 21.450081 447 791 -1 -1 301
+243 -1165 21.418158 552 531 -1 -1 338
+228 -1155 21.394640 434 651 -1 -1 356
+216 -1147 21.376162 478 531 751 -1 365
+200 -1136 21.359362 421 512 -1 -1 397
+184 -1122 21.349281 375 408 751 651 397
+153 -1096 21.322401 338 397 623 -1 447
+140 -1084 21.320721 301 347 512 -1 478
+125 -1069 21.317360 270 315 552 -1 462
+109 -1056 21.238401 142 397 512 681 574
+106 -1051 20.934322 181 301 714 -1 301
+106 -1051 20.650402 189 386 -1 -1 276
+106 -1051 20.295921 270 512 -1 -1 224
+108 -1046 20.003601 307 -1 -1 -1 200
+118 -1029 19.904480 301 -1 -1 -1 191
+126 -1015 19.870880 265 -1 -1 -1 200
+136 -1000 19.838963 282 -1 -1 -1 210
+146 -985 19.818802 270 -1 -1 -1 221
+156 -968 19.805359 265 -1 -1 -1 232
+165 -955 19.793598 250 -1 -1 -1 250
+178 -939 19.780157 237 -1 -1 -1 255
+192 -924 19.768396 217 714 -1 -1 282
+272 -853 19.328238 260 -1 -1 -1 194
+287 -843 19.299679 245 -1 -1 -1 191
+306 -833 19.276161 288 -1 -1 681 189
+322 -825 19.267759 307 -1 -1 -1 191
+342 -815 19.257677 365 -1 -1 -1 183
+362 -805 19.245914 288 -1 -1 -1 224
+382 -795 19.234154 270 -1 -1 791 191
+399 -788 19.229115 245 -1 -1 -1 194
+419 -779 19.222395 245 -1 -1 -1 194
+439 -769 19.220715 221 -1 -1 -1 191
+459 -761 19.205595 210 -1 -1 -1 197
+474 -757 19.187115 181 -1 -1 -1 189
+492 -753 18.750317 -1 -1 -1 -1 191
+492 -753 18.464718 -1 -1 -1 -1 197
+492 -753 18.108559 -1 -1 -1 -1 166
+492 -753 17.757439 -1 -1 -1 -1 -1
+492 -753 17.475199 -1 -1 -1 -1 -1
+492 -758 17.179522 -1 -1 -1 -1 -1
+479 -812 17.046803 -1 791 -1 -1 -1
+474 -832 17.030003 -1 -1 -1 -1 -1
+460 -888 17.004799 -1 -1 -1 -1 -1
+456 -904 16.996397 -1 -1 -1 -1 -1
+451 -924 16.982954 -1 -1 -1 -1 -1
+446 -944 16.962793 -1 -1 -1 -1 651
+374 -1105 16.819988 -1 -1 -1 -1 791
+366 -1121 16.811588 -1 -1 -1 -1 751
+356 -1140 16.798145 -1 -1 800 -1 791
+346 -1157 16.771265 -1 -1 552 -1 651
+336 -1174 16.739347 -1 800 791 -1 791
+328 -1187 16.722548 -1 791 552 -1 751
+318 -1204 16.710787 -1 751 494 -1 714
+298 -1238 16.680544 462 651 531 -1 791
+290 -1253 16.672144 365 512 494 -1 791
+256 -1303 16.646938 221 408 386 791 597
+244 -1318 16.630136 245 356 356 -1 751
+208 -1365 16.626780 375 255 241 751 714
+187 -1403 16.893898 203 224 183 -1 791
+179 -1447 17.236618 552 307 162 375 -1
+184 -1483 17.520538 512 203 162 232 -1
+203 -1523 17.869980 552 552 221 171 -1
+231 -1551 18.145498 751 512 203 158 -1
+259 -1571 18.268137 -1 447 250 164 -1
+296 -1589 18.478136 -1 462 397 181 -1
+318 -1597 18.530216 -1 375 294 194 -1
+340 -1604 18.538618 -1 347 288 213 -1
+360 -1609 18.535257 -1 338 270 224 -1
+380 -1614 18.528536 -1 301 245 232 -1
+400 -1620 18.563814 -1 245 210 265 -1
+442 -1626 18.824213 -1 245 181 186 -1
+486 -1618 19.170292 -1 478 171 288 -1
+525 -1595 19.524773 -1 -1 207 197 -1
+554 -1560 19.877571 -1 -1 375 171 -1
+566 -1529 20.106050 -1 -1 -1 176 -1
+573 -1503 20.148048 -1 -1 -1 191 -1
+578 -1483 20.139648 -1 -1 -1 203 -1
+583 -1463 20.132929 -1 -1 -1 200 -1
+587 -1447 20.126209 -1 -1 462 224 -1
+592 -1427 20.117807 -1 -1 -1 237 -1
+597 -1407 20.112766 -1 -1 -1 255 -1
+606 -1367 20.111086 -1 -1 -1 288 -1
+611 -1347 20.112766 -1 -1 623 288 -1
+615 -1331 20.102686 -1 -1 -1 322 -1
+626 -1291 20.053968 -1 -1 751 322 -1
+633 -1271 20.043886 -1 -1 791 338 -1
+640 -1255 20.040525 -1 -1 478 347 -1
+650 -1235 20.033806 -1 -1 -1 365 -1
+660 -1215 20.025404 -1 -1 681 397 -1
+668 -1199 20.022043 -1 -1 -1 356 791
+678 -1179 20.023724 -1 -1 -1 397 552
+688 -1159 20.027084 -1 -1 -1 434 -1
+696 -1143 20.027084 -1 -1 -1 397 -1
+706 -1123 20.008604 -1 -1 -1 447 -1
+716 -1104 19.980045 -1 -1 -1 462 -1
+726 -1088 19.958206 -1 -1 -1 462 -1
+734 -1073 19.946445 -1 -1 -1 478 -1
+744 -1053 19.933002 -1 -1 -1 494 -1
+754 -1033 19.919563 751 -1 -1 494 -1
+762 -1017 19.912844 800 -1 -1 531 -1
+772 -997 19.906122 651 -1 -1 478 -1
+792 -957 19.906122 574 -1 -1 531 -1
+800 -941 19.897722 681 -1 -1 531 -1
+810 -922 19.879242 512 -1 -1 552 -1
+820 -907 19.850685 462 -1 -1 494 -1
+838 -880 19.825483 356 -1 -1 531 -1
+848 -862 19.815401 265 -1 -1 597 -1
+858 -844 19.803638 224 -1 -1 623 -1
+868 -832 19.796917 224 -1 -1 714 -1
+891 -802 19.699476 140 -1 -1 651 -1
+894 -799 19.450838 800 -1 478 681 -1
+899 -797 19.153479 -1 -1 -1 651 397
+918 -792 19.066120 -1 -1 -1 751 217
+934 -788 19.045961 -1 800 751 714 169
+954 -783 19.025801 -1 -1 681 681 137
+974 -778 18.998924 -1 -1 623 681 375
+994 -773 18.980444 -1 -1 751 597 -1
+1010 -770 18.968683 -1 -1 552 651 -1
+1030 -769 18.958601 -1 -1 531 714 -1
+1070 -769 18.926678 791 -1 552 623 -1
+1086 -769 18.923317 651 -1 512 597 -1
+1106 -769 18.919956 714 751 552 574 -1
+1126 -769 18.911554 531 -1 494 552 -1
+1146 -769 18.899794 574 -1 494 531 -1
+1222 -769 18.827547 447 494 375 478 -1
+1243 -769 18.812424 421 531 365 421 714
+1259 -769 18.798985 375 494 356 375 375
+1280 -769 18.788904 356 447 330 408 375
+1340 -769 18.767059 265 330 282 356 -1
+1356 -769 18.758659 237 301 250 356 -1
+1373 -769 18.672979 203 276 213 347 -1
+1375 -769 18.347057 181 200 194 447 408
+1378 -772 18.051378 189 194 162 -1 288
+1386 -783 17.967379 200 151 137 -1 250
+1398 -798 18.011059 191 130 115 -1 245
+1414 -811 18.313459 152 160 105 375 315
+1468 -827 18.541935 105 221 -1 203 462
+1488 -832 18.531853 -1 178 -1 181 397
+1508 -837 18.525131 -1 133 -1 158 338
+1529 -842 18.622570 -1 -1 -1 119 315
+1549 -843 18.940088 -1 -1 -1 -1 714
+1565 -839 19.203846 -1 -1 -1 -1 -1
+1581 -829 19.524725 164 -1 -1 -1 -1
+1600 -802 20.087523 434 137 -1 -1 552
+1603 -777 20.428560 -1 276 -1 -1 -1
+1594 -737 20.779678 -1 531 -1 -1 -1
+1570 -699 21.132479 -1 -1 203 -1 574
+1541 -676 21.416397 -1 -1 301 -1 186
+1501 -660 21.757437 -1 -1 -1 120 149
+1461 -658 21.967434 -1 -1 -1 197 158
+1422 -652 21.775915 -1 -1 -1 255 232
+1401 -647 21.752396 -1 -1 800 294 260
+1381 -642 21.749035 -1 -1 -1 338 288
+1361 -637 21.747355 -1 -1 -1 347 322
+1343 -633 21.749035 -1 -1 -1 408 322
+1323 -628 21.738953 -1 -1 -1 478 365
+1303 -623 21.715435 -1 -1 -1 494 397
+1248 -609 21.666712 -1 651 -1 552 478
+1228 -604 21.659990 -1 478 -1 651 531
+1208 -599 21.648228 -1 531 651 -1 681
+1192 -595 21.643187 -1 478 597 800 494
+1172 -589 21.638145 -1 408 512 -1 -1
+1152 -580 21.643187 -1 386 714 -1 -1
+1132 -573 21.639826 -1 330 800 681 -1
+1095 -555 20.914070 164 -1 -1 597 447
+1091 -538 20.494074 245 -1 800 552 -1
+1091 -519 20.389914 322 623 651 623 -1
+1091 -499 20.364714 478 -1 597 681 -1
+1091 -483 20.349594 -1 -1 791 800 191
+1091 -463 20.337831 -1 800 651 597 169
+1091 -423 20.317667 -1 -1 681 597 176
+1091 -407 20.312626 714 574 574 714 186
+1095 -367 20.292463 276 623 462 494 200
+1100 -347 20.267267 288 552 447 552 210
+1105 -327 20.237028 301 531 478 531 210
+1109 -311 20.220230 356 494 462 574 221
+1114 -291 20.205109 338 462 462 494 237
+1119 -271 20.191668 375 421 408 494 232
+1124 -251 20.178226 322 386 397 447 265
+1129 -231 20.166466 330 356 322 494 276
+1134 -211 20.156384 307 322 338 494 276
+1138 -195 20.153023 250 265 307 421 294
+1143 -177 20.077421 224 260 294 462 315
+1145 -173 19.766624 178 282 307 791 375
+1145 -173 19.062702 200 270 270 -1 241
+1145 -173 18.780462 183 217 315 -1 176
+1145 -173 18.079901 154 245 -1 -1 221
+1145 -173 17.792622 149 494 -1 681 200
+1145 -173 17.446541 181 -1 -1 574 186
+1145 -178 17.149181 276 -1 -1 531 156
+1140 -197 17.048382 365 -1 -1 462 154
+1136 -213 17.019823 -1 -1 -1 494 160
+1131 -232 16.994621 462 -1 -1 494 166
+1126 -252 16.971104 -1 -1 -1 447 173
+1121 -272 16.952621 -1 -1 -1 447 181
+1117 -288 16.939180 -1 -1 -1 494 176
+1112 -308 16.930780 -1 -1 -1 512 194
+1106 -328 16.920700 -1 -1 -1 494 194
+1097 -348 16.912298 -1 -1 -1 512 213
+1089 -364 16.907257 -1 -1 -1 478 228
+1079 -384 16.895496 -1 -1 -1 478 228
+1070 -404 16.882053 681 -1 -1 447 237
+1063 -419 16.861895 597 -1 -1 421 255
+1053 -435 16.829977 397 -1 -1 478 255
+1043 -452 16.801420 408 -1 -1 447 282
+1033 -472 16.786297 365 -1 -1 447 276
+1025 -487 16.772856 397 -1 -1 447 307
+1015 -507 16.761093 434 -1 -1 447 315
+1005 -527 16.745972 512 -1 -1 421 322
+995 -547 16.735889 623 800 -1 434 315
+985 -564 16.725807 574 714 -1 462 338
+977 -577 16.720766 597 651 -1 408 365
+967 -592 16.710686 574 597 -1 478 386
+957 -607 16.685486 478 462 -1 -1 397
+947 -622 16.648527 512 512 -1 -1 397
+939 -634 16.626688 397 574 -1 -1 408
+927 -649 16.609886 434 421 -1 -1 434
+914 -664 16.593084 397 447 -1 -1 478
+888 -691 16.561165 347 397 -1 -1 623
+873 -706 16.547724 315 375 -1 -1 574
+858 -721 16.539322 288 322 791 -1 597
+843 -736 16.534281 255 315 -1 -1 800
+832 -747 16.465401 217 241 -1 -1 -1
+828 -750 16.149563 189 301 -1 -1 397
+828 -750 15.803483 189 478 -1 -1 322
+783 -720 15.042449 -1 -1 -1 -1 203
+768 -707 15.017249 -1 -1 -1 -1 197
+753 -692 15.003810 651 -1 -1 -1 221
+741 -680 14.993730 791 -1 -1 -1 237
+726 -665 14.976930 -1 -1 -1 -1 245
+711 -650 14.965169 -1 -1 -1 -1 260
+696 -635 14.951728 -1 -1 -1 -1 265
+654 -593 14.916448 -1 -1 -1 -1 307
+643 -581 14.891247 -1 -1 -1 -1 307
+633 -566 14.852608 -1 -1 -1 -1 322
+621 -551 14.827408 -1 -1 -1 -1 338
+611 -539 14.815647 -1 -1 681 -1 338
+598 -524 14.797167 -1 -1 -1 397 365
+587 -509 14.777006 751 -1 -1 397 356
+577 -497 14.763566 791 -1 -1 338 408
+557 -464 14.740046 -1 -1 751 574 447
+547 -448 14.728286 -1 -1 -1 -1 512
+491 -360 14.585489 -1 -1 -1 800 -1
+481 -341 14.567009 -1 -1 -1 651 800
+463 -305 14.536769 -1 -1 -1 681 800
+454 -285 14.525008 -1 -1 -1 -1 -1
+446 -269 14.519967 -1 -1 -1 -1 751
+438 -249 14.501487 -1 -1 -1 800 -1
+423 -200 14.424206 -1 -1 -1 751 -1
+418 -181 14.392286 -1 -1 -1 -1 714
+409 -145 14.355327 -1 -1 -1 681 -1
+404 -125 14.333487 791 -1 -1 681 -1
+399 -105 14.318367 751 800 -1 751 -1
+395 -89 14.308287 800 -1 -1 791 -1
+390 -69 14.291486 791 -1 -1 597 -1
+385 -49 14.276365 714 -1 751 751 -1
+381 -33 14.264605 623 -1 -1 -1 -1
+381 -13 14.249484 623 -1 681 681 681
+381 7 14.224284 597 -1 -1 681 301
+381 24 14.189005 574 -1 714 -1 447
+381 40 14.165485 531 -1 623 751 276
+381 60 14.143646 531 -1 714 800 462
+381 116 14.099966 408 -1 512 751 -1
+381 136 14.079806 347 -1 552 791 -1
+381 156 14.063005 365 -1 375 751 -1
+381 176 14.052924 356 -1 531 651 -1
+381 192 14.046205 347 -1 397 681 -1
+381 212 14.024364 315 -1 408 597 -1
+382 232 13.997485 288 -1 397 597 800
+386 246 13.972285 260 651 365 751 800
+391 266 13.945406 241 434 338 597 681
+396 286 13.930285 228 386 315 714 512
+401 306 13.911805 217 330 276 -1 478
+406 322 13.792525 189 228 250 -1 447
+407 323 13.530446 217 241 228 -1 307
+415 330 13.286847 250 194 228 -1 213
+444 360 13.409487 265 156 162 -1 245
+467 395 13.716926 181 129 105 751 294
+473 435 14.264605 171 224 113 210 -1
+473 451 14.252846 151 181 -1 194 751
+473 471 14.229326 125 164 -1 186 681
+473 491 14.212525 102 130 -1 158 751
+455 542 14.896284 162 -1 125 -1 -1
+438 554 15.233964 276 -1 -1 -1 -1
+395 558 15.870684 -1 260 -1 -1 -1
+356 542 16.268843 -1 791 124 124 -1
+331 520 16.539322 -1 -1 232 -1 800
+309 483 16.876999 -1 -1 -1 105 338
+300 440 17.221397 -1 -1 -1 145 200
+304 399 17.488518 681 -1 -1 260 176
+308 377 17.528839 -1 -1 -1 322 207
+318 336 17.491879 -1 -1 -1 478 213
+322 320 17.471720 -1 -1 -1 574 265
+327 300 17.454920 -1 -1 -1 681 294
+332 280 17.448198 -1 -1 -1 751 294
+337 260 17.438116 -1 -1 -1 -1 338
+341 244 17.424675 -1 -1 -1 -1 365
+346 224 17.411232 -1 -1 -1 -1 375
+357 168 17.392748 -1 -1 -1 -1 462
+357 148 17.370909 -1 -1 -1 -1 478
+357 132 17.349070 -1 -1 -1 -1 623
+357 112 17.322189 -1 -1 -1 714 597
+357 56 17.285221 651 -1 -1 751 574
+357 -1 17.254980 714 -1 -1 531 597
+357 -22 17.253300 791 -1 -1 478 681
+357 -40 17.244898 651 -1 -1 651 597
+357 -61 17.228098 597 -1 -1 597 681
+353 -137 17.150814 -1 -1 -1 408 574
+348 -157 17.130655 -1 -1 714 597 597
+344 -173 17.117216 -1 -1 791 494 -1
+325 -249 17.090330 -1 -1 -1 -1 651
+320 -269 17.078568 -1 -1 681 -1 651
+315 -289 17.056726 -1 -1 681 -1 574
+311 -305 17.038248 -1 -1 714 -1 714
+306 -325 17.014730 -1 -1 651 -1 651
+301 -345 16.997931 -1 -1 623 -1 531
+297 -361 16.984491 -1 -1 552 -1 681
+292 -381 16.967690 -1 -1 531 -1 681
+287 -401 16.959290 -1 -1 478 -1 623
+282 -421 16.949207 -1 800 494 -1 462
+278 -437 16.944166 -1 751 478 -1 434
+273 -457 16.934084 -1 574 434 -1 462
+268 -477 16.920643 -1 714 365 -1 434
+263 -497 16.903841 -1 531 347 -1 -1
+257 -511 16.882002 -1 574 330 -1 -1
+241 -546 16.828247 800 434 282 -1 -1
+233 -561 16.818167 597 408 255 -1 -1
+223 -579 16.803045 681 338 228 -1 -1
+213 -597 16.789606 -1 294 197 -1 -1
+191 -703 17.444805 -1 800 173 213 408
+207 -743 17.779123 -1 255 255 166 -1
+233 -775 18.039524 -1 -1 421 156 -1
+248 -790 18.078165 751 -1 462 160 -1
+263 -805 18.078165 751 -1 552 166 -1
+278 -820 18.078165 791 -1 462 173 -1
+293 -835 18.078165 -1 -1 478 178 -1
+305 -847 18.069763 -1 -1 365 186 -1
+320 -862 18.054642 531 -1 365 191 -1
+0 0 0.000000 -1 -1 -1 -1 800
+335 -877 18.034481 -1 -1 315 191 -1
+10 0 -0.001680 -1 -1 -1 -1 791
+40 0 -0.008400 -1 -1 -1 -1 552
+346 -889 18.017681 791 -1 315 203 -1
+71 0 -0.006720 -1 -1 -1 -1 552
+361 -904 18.004238 -1 -1 301 210 -1
+109 0 -0.013440 -1 714 -1 -1 597
+376 -919 17.995836 -1 -1 301 210 -1
+141 0 -0.021840 -1 -1 -1 -1 -1
+391 -934 17.989115 512 -1 255 217 -1
+171 0 -0.033600 -1 -1 -1 -1 -1
+403 -946 17.980713 -1 800 241 224 -1
+201 0 -0.048720 -1 -1 -1 -1 -1
+418 -961 17.979033 -1 -1 232 228 -1
+241 0 -0.062160 -1 -1 -1 -1 -1
+433 -976 17.979033 -1 -1 250 237 597
+273 0 -0.063840 -1 -1 -1 -1 597
+448 -991 17.979033 -1 714 330 224 -1
+304 -2 -0.070560 -1 -1 -1 -1 338
+336 -6 -0.075600 -1 -1 -1 -1 681
+463 -1006 17.968950 -1 751 751 245 -1
+376 -11 -0.078960 -1 -1 -1 -1 478
+474 -1018 17.960550 -1 651 -1 260 -1
+406 -15 -0.082320 -1 -1 -1 597 -1
+487 -1033 17.945429 -1 574 -1 260 -1
+437 -19 -0.102480 -1 -1 -1 -1 651
+497 -1048 17.921911 -1 574 -1 245 -1
+477 -24 -0.117600 -1 -1 -1 -1 -1
+507 -1063 17.905111 -1 512 800 265 -1
+509 -28 -0.132720 -1 -1 -1 -1 597
+515 -1076 17.896711 681 462 651 276 -1
+540 -32 -0.152880 -1 714 -1 -1 434
+572 -36 -0.169680 -1 -1 -1 -1 294
+535 -1110 17.878227 -1 375 386 282 -1
+610 -41 -0.193199 -1 -1 574 -1 397
+635 -47 -0.270479 -1 228 -1 -1 421
+546 -1127 17.874866 574 330 347 294 623
+641 -50 -0.483839 531 282 -1 -1 434
+556 -1145 17.871506 651 294 307 282 -1
+641 -50 -0.814798 447 265 800 -1 408
+572 -1170 17.957184 681 270 282 282 -1
+641 -50 -1.083597 307 189 -1 -1 421
+598 -1193 18.185665 -1 270 203 315 -1
+641 -50 -1.350716 260 149 -1 -1 421
+636 -1212 18.521664 -1 347 176 307 -1
+641 -50 -1.678315 255 139 -1 -1 375
+680 -1218 18.859343 -1 800 183 260 -1
+639 -62 -1.678315 245 140 347 751 447
+721 -1210 19.129822 -1 -1 232 186 -1
+645 -91 -1.206237 245 144 -1 -1 421
+748 -1200 19.185261 -1 -1 265 183 -1
+671 -120 -0.606478 255 151 -1 -1 356
+765 -1194 19.191982 -1 -1 250 178 -1
+701 -130 -0.120960 265 149 -1 -1 408
+728 -127 0.176399 250 166 -1 -1 365
+785 -1187 19.195343 -1 -1 260 173 -1
+733 -127 -0.080640 260 151 -1 -1 375
+805 -1182 19.185261 -1 -1 250 166 -1
+744 -128 -0.067200 260 137 -1 -1 397
+825 -1177 19.166780 -1 -1 237 164 -1
+772 -122 0.391439 245 142 -1 -1 462
+840 -1173 19.148302 -1 -1 221 164 -1
+800 -95 1.001277 241 113 307 -1 375
+859 -1168 19.133183 -1 -1 213 160 -1
+809 -64 1.488476 191 -1 751 -1 386
+879 -1163 19.129822 -1 -1 207 156 -1
+803 -34 1.982394 197 -1 512 -1 421
+906 -1154 19.198702 -1 -1 207 151 -1
+783 -11 2.472953 221 103 -1 -1 397
+746 -1 3.081111 265 144 681 -1 386
+969 -1107 19.776621 651 681 -1 140 -1
+720 -4 3.354951 -1 171 -1 -1 365
+715 -5 3.170151 -1 -1 -1 -1 386
+715 -5 2.837512 -1 714 -1 -1 386
+996 -1045 20.105900 623 714 -1 250 751
+704 0 2.666152 -1 -1 -1 -1 386
+1001 -1025 20.095819 574 651 800 282 -1
+677 15 2.649353 -1 -1 -1 -1 386
+1006 -1005 20.094139 531 574 800 301 -1
+642 35 2.634233 -1 -1 681 -1 315
+1010 -989 20.089098 494 651 -1 307 -1
+614 51 2.622473 -1 -1 800 -1 356
+1015 -969 20.082378 462 651 714 365 -1
+587 67 2.600633 -1 681 -1 -1 365
+552 87 2.565353 -1 -1 -1 -1 245
+525 104 2.540153 -1 166 574 -1 356
+504 119 2.477993 241 207 -1 -1 347
+499 122 2.259594 142 462 -1 -1 386
+499 122 1.923595 127 -1 -1 -1 338
+1041 -873 20.080698 270 365 478 276 -1
+499 122 1.663196 140 -1 -1 -1 397
+1046 -853 20.057178 255 356 447 232 -1
+499 122 1.389357 356 -1 -1 -1 397
+1053 -834 20.035341 221 322 434 224 -1
+505 134 1.154158 651 -1 -1 -1 408
+1060 -818 19.941259 200 282 462 245 -1
+517 161 1.140718 574 -1 494 -1 365
+529 189 1.130637 -1 -1 -1 -1 434
+1062 -816 19.334784 200 386 434 494 260
+544 224 1.102078 -1 -1 213 -1 434
+1062 -816 18.983664 322 386 -1 478 203
+558 252 1.083598 -1 -1 -1 -1 386
+1067 -816 18.684626 276 375 276 597 186
+574 280 1.061758 -1 -1 -1 -1 133
+591 308 0.967678 -1 -1 -1 -1 -1
+1087 -821 18.595587 322 356 356 494 203
+594 311 0.744239 -1 -1 -1 -1 237
+1107 -826 18.578785 255 276 307 574 221
+602 316 0.549359 -1 -1 -1 -1 512
+1124 -831 18.477983 245 270 365 681 228
+635 336 0.515759 -1 -1 574 -1 434
+1128 -833 18.224302 189 330 386 -1 301
+663 352 0.505679 -1 531 203 103 478
+1128 -833 17.873182 194 237 307 -1 250
+691 368 0.473759 -1 -1 276 -1 -1
+1128 -833 17.520384 241 386 397 -1 245
+726 383 0.436800 -1 -1 651 109 462
+1128 -838 17.228064 197 301 478 -1 203
+754 396 0.465359 -1 -1 -1 -1 494
+1128 -855 17.070145 270 260 574 -1 197
+780 413 0.638399 -1 -1 421 -1 434
+802 434 0.878638 -1 -1 651 127 478
+1128 -858 16.740866 210 270 -1 -1 224
+823 468 1.081918 -1 -1 -1 -1 294
+1128 -858 16.460306 183 356 -1 623 408
+839 496 1.080238 -1 -1 -1 -1 478
+1128 -858 16.110865 197 -1 -1 494 245
+855 524 1.058398 -1 -1 -1 791 421
+1122 -858 15.825266 232 -1 -1 531 221
+1106 -858 15.754705 255 -1 -1 447 203
+1084 -858 15.731185 294 -1 -1 478 194
+1064 -858 15.717745 315 -1 -1 408 207
+1044 -858 15.692545 322 -1 -1 494 197
+1028 -858 15.674065 294 -1 -1 494 200
+1008 -858 15.655585 356 -1 -1 478 200
+988 -858 15.645505 307 -1 -1 494 203
+968 -858 15.633744 315 -1 -1 494 203
+952 -858 15.621984 386 -1 -1 478 210
+932 -858 15.608544 338 791 -1 531 203
+892 -858 15.598464 386 -1 -1 478 213
+876 -858 15.593424 375 623 -1 531 221
+856 -854 15.578304 421 -1 -1 531 224
+836 -849 15.558144 375 -1 -1 531 224
+816 -844 15.532944 478 800 -1 574 217
+800 -840 15.519504 791 800 -1 574 237
+780 -835 15.509423 -1 751 -1 494 237
+760 -830 15.495983 -1 623 -1 -1 237
+740 -825 15.480864 -1 714 -1 -1 245
+724 -821 15.472464 -1 651 751 -1 250
+704 -816 15.467422 478 574 -1 -1 255
+684 -811 15.464063 301 531 751 -1 260
+664 -806 15.453982 255 494 -1 -1 265
+648 -802 15.442223 245 447 681 -1 270
+628 -797 15.422063 255 397 714 -1 288
+609 -792 15.398542 288 356 552 -1 276
+589 -787 15.380062 307 338 421 -1 282
+573 -783 15.369982 315 294 447 -1 294
+551 -776 14.976863 221 255 -1 -1 347
+551 -776 14.625744 183 307 -1 -1 260
+551 -776 14.338465 183 651 -1 -1 294
+551 -776 13.992386 245 -1 -1 -1 213
+581 -719 13.569027 -1 -1 -1 -1 207
+591 -699 13.562305 -1 -1 -1 -1 221
+599 -683 13.552225 -1 -1 -1 -1 224
+609 -664 13.540464 751 -1 -1 -1 237
+619 -649 13.518625 -1 -1 -1 -1 245
+627 -637 13.498466 -1 -1 -1 -1 250
+638 -622 13.474946 -1 -1 -1 -1 255
+652 -607 13.453107 791 -1 -1 -1 250
+666 -592 13.437986 -1 -1 -1 -1 250
+678 -580 13.432946 -1 -1 -1 -1 294
+693 -565 13.421185 -1 -1 -1 -1 315
+720 -537 13.406065 -1 -1 -1 -1 315
+735 -522 13.397664 -1 -1 -1 -1 347
+750 -507 13.390944 -1 -1 -1 -1 365
+762 -495 13.375823 -1 -1 -1 -1 365
+803 -454 13.308621 -1 -1 -1 -1 434
+818 -439 13.295180 -1 -1 -1 -1 434
+833 -424 13.285100 800 -1 -1 338 408
+848 -409 13.271660 -1 -1 -1 282 512
+860 -397 13.264940 -1 -1 -1 294 478
+876 -382 13.261580 -1 -1 -1 408 531
+891 -367 13.249820 -1 -1 -1 791 531
+904 -355 13.244781 478 -1 -1 651 552
+919 -342 13.224621 -1 -1 -1 623 512
+992 -294 13.120462 -1 -1 -1 512 -1
+1004 -286 13.105343 -1 -1 -1 651 -1
+1024 -276 13.093582 -1 -1 -1 651 751
+1042 -266 13.083503 -1 -1 -1 714 -1
+1062 -256 13.078462 -1 -1 -1 681 791
+1078 -248 13.068381 -1 -1 -1 651 -1
+1096 -238 13.048222 -1 623 -1 597 -1
+1111 -228 13.012942 -1 -1 -1 651 -1
+1126 -221 12.977663 -1 -1 -1 681 -1
+1141 -216 12.959183 -1 -1 -1 751 -1
+1179 -206 12.915504 -1 -1 -1 751 -1
+1195 -202 12.898704 681 -1 -1 800 -1
+1215 -197 12.878543 -1 -1 -1 751 -1
+1235 -192 12.866783 -1 -1 -1 791 -1
+1347 -164 12.762623 597 -1 623 800 531
+1367 -159 12.742463 574 -1 651 751 322
+1387 -154 12.727344 478 -1 751 791 531
+1423 -145 12.703823 434 800 552 681 375
+1443 -140 12.692062 397 651 531 651 574
+1463 -137 12.683662 397 597 574 714 -1
+1483 -136 12.670223 356 597 494 651 -1
+1503 -136 12.653423 356 531 447 574 -1
+1519 -136 12.641663 330 531 434 791 751
+1539 -136 12.618143 294 478 386 -1 -1
+1558 -136 12.587904 276 494 356 -1 791
+1577 -136 12.559343 250 531 347 651 791
+1597 -136 12.540864 241 512 347 -1 800
+1613 -136 12.529103 217 462 322 -1 574
+1633 -136 12.517343 200 397 282 -1 574
+1653 -136 11.747905 294 217 241 -1 213
+1658 -144 11.558065 194 171 301 -1 176
+1680 -176 11.600064 160 117 -1 -1 186
+1693 -197 11.598385 112 -1 152 -1 189
+1708 -211 11.889023 145 -1 -1 -1 203
+1720 -218 12.132622 213 -1 -1 -1 276
+1736 -222 12.440061 154 140 -1 330 408
+1755 -222 12.656780 164 210 -1 213 791
+1774 -222 12.648379 140 194 -1 191 751
+1790 -222 12.631578 120 158 -1 178 531
+1810 -221 12.695418 104 145 -1 140 681
+1844 -202 13.325418 160 103 -1 -1 -1
+1856 -185 13.664778 301 121 119 -1 -1
+1861 -169 13.933578 -1 169 104 -1 -1
+1813 -75 15.039016 -1 -1 265 129 -1
+1783 -59 15.309495 -1 -1 623 127 315
+1740 -50 15.648855 -1 -1 -1 160 197
+1700 -55 15.931094 -1 -1 -1 250 183
+1674 -61 15.976453 -1 -1 -1 386 207
+1658 -65 15.963013 -1 -1 -1 397 213
+1638 -70 15.929413 -1 -1 -1 447 250
+1618 -75 15.909253 -1 -1 -1 462 270
+1602 -79 15.899173 -1 -1 -1 494 294
+1526 -98 15.860536 -1 -1 -1 -1 397
+1506 -103 15.852136 -1 -1 -1 -1 434
+1486 -108 15.847095 -1 -1 -1 -1 408
+1470 -112 15.837014 -1 -1 -1 -1 512
+1450 -112 15.810134 -1 -1 -1 -1 531
+1395 -112 15.747974 -1 -1 -1 -1 651
+1375 -112 15.741254 -1 -1 -1 -1 651
+1359 -112 15.727814 -1 -1 -1 751 681
+1338 -112 15.709333 -1 -1 -1 597 531
+1317 -112 15.699252 -1 -1 -1 -1 574
+1296 -112 15.695891 791 -1 -1 -1 681
+1279 -112 15.690851 651 -1 -1 597 597
+1257 -112 15.680772 -1 -1 -1 531 681
+1237 -112 15.657252 -1 -1 -1 408 597
+1217 -112 15.628693 -1 -1 -1 494 574
+1201 -112 15.611893 -1 -1 -1 408 651
+1181 -112 15.598453 -1 -1 -1 447 574
+1105 -98 15.548052 -1 -1 -1 397 651
+1049 -84 15.526212 -1 -1 623 791 651
+1029 -79 15.504372 -1 -1 681 -1 681
+1013 -75 15.482532 -1 -1 651 -1 751
+993 -70 15.462372 -1 -1 597 -1 751
+973 -65 15.447251 -1 -1 574 -1 714
+953 -60 15.432131 -1 -1 512 -1 -1
+937 -56 15.418692 -1 -1 512 -1 651
+917 -51 15.406931 -1 800 462 -1 512
+897 -46 15.400210 -1 714 447 -1 434
+861 -37 15.388449 -1 552 397 -1 478
+841 -32 15.378367 315 531 386 -1 800
+821 -27 15.358208 -1 512 338 -1 -1
+735 9 15.257409 751 282 194 -1 -1
+710 21 15.317889 307 241 178 791 -1
+667 32 15.598449 -1 288 144 356 -1
+631 30 15.875648 -1 462 149 221 -1
+590 14 16.216686 -1 800 203 173 -1
+558 -12 16.485485 -1 -1 338 140 -1
+518 -69 16.853403 -1 -1 -1 158 -1
+508 -111 17.144043 -1 -1 -1 217 -1
+506 -140 17.207882 -1 -1 -1 265 -1
+506 -156 17.202841 -1 -1 -1 307 -1
+506 -176 17.182680 791 -1 -1 315 -1
+506 -196 17.165878 -1 -1 -1 347 -1
+505 -212 17.155796 -1 -1 -1 375 -1
+500 -232 17.147394 800 -1 -1 421 -1
Index: branches/scout/projects/mapping/matlab/data/input2.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input2.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input2.txt	(revision 1346)
@@ -0,0 +1,793 @@
+0 0 0.001680 221 -1 -1 -1 133
+0 0 -0.005040 232 -1 -1 -1 127
+21 4 0.356159 149 -1 -1 -1 158
+34 12 0.621598 111 301 -1 -1 181
+47 24 0.779518 -1 200 -1 -1 144
+49 26 0.456959 -1 294 -1 -1 147
+49 26 0.178079 125 -1 -1 -1 133
+49 26 -0.181440 237 -1 -1 -1 103
+49 26 -0.465359 -1 -1 -1 447 106
+49 26 -0.819838 -1 -1 -1 294 131
+49 26 -1.177677 -1 -1 -1 265 245
+49 22 -1.419596 -1 -1 -1 265 751
+49 3 -1.523756 -1 -1 494 260 -1
+49 -17 -1.553995 791 -1 531 260 651
+49 -33 -1.580875 -1 -1 434 265 -1
+49 -49 -1.619515 -1 -1 478 265 -1
+47 -97 -1.715274 -1 -1 356 250 -1
+43 -113 -1.737114 -1 -1 307 260 -1
+38 -133 -1.767354 -1 -1 338 250 -1
+33 -153 -1.787514 -1 -1 315 237 -1
+29 -169 -1.804314 -1 -1 307 245 -1
+24 -189 -1.821114 -1 -1 288 224 -1
+19 -209 -1.846314 -1 -1 265 224 -1
+14 -229 -1.868153 -1 -1 260 224 -1
+10 -245 -1.886633 -1 -1 237 221 -1
+-6 -295 -1.920233 -1 -1 183 194 -1
+-14 -337 -1.648074 -1 -1 250 158 -1
+-1 -416 -1.387674 -1 -1 714 164 -1
+4 -436 -1.407834 -1 -1 -1 176 -1
+10 -472 -1.454874 -1 -1 574 181 -1
+10 -488 -1.481754 -1 -1 791 186 -1
+10 -506 -1.518713 -1 -1 494 186 -1
+10 -526 -1.547273 -1 -1 478 197 -1
+10 -546 -1.570793 -1 -1 494 200 -1
+10 -562 -1.592633 -1 -1 434 203 -1
+10 -618 -1.661512 -1 -1 434 207 -1
+10 -638 -1.678313 -1 -1 386 210 -1
+9 -658 -1.696793 -1 -1 386 194 -1
+5 -674 -1.713593 -1 -1 356 191 -1
+0 -694 -1.737112 -1 -1 397 210 -1
+-4 -710 -1.762312 -1 -1 365 207 -1
+-33 -817 -1.933671 -1 -1 265 186 -1
+-37 -833 -1.950471 -1 -1 250 191 -1
+-46 -853 -1.968951 -1 -1 232 183 -1
+-54 -869 -1.982391 -1 -1 213 183 -1
+-64 -889 -2.000871 -1 -1 203 181 -1
+-74 -905 -2.024391 -1 -1 200 176 -1
+-83 -922 -1.994151 -1 -1 186 164 -1
+-78 -1041 -1.139034 -1 -1 -1 176 -1
+-68 -1061 -1.103754 -1 -1 -1 210 -1
+-58 -1081 -1.115514 -1 -1 791 232 -1
+-48 -1098 -1.137354 -1 -1 751 250 -1
+-41 -1113 -1.152473 -1 -1 651 265 -1
+-30 -1144 -1.217993 -1 -1 714 294 -1
+-26 -1158 -1.241513 -1 -1 597 315 -1
+-21 -1176 -1.265033 -1 -1 681 322 -1
+-16 -1196 -1.283512 -1 -1 681 322 -1
+-12 -1212 -1.295273 -1 -1 552 347 -1
+-7 -1232 -1.317112 -1 -1 552 365 -1
+-2 -1252 -1.337272 -1 800 462 375 -1
+2 -1268 -1.350712 -1 800 462 397 -1
+7 -1288 -1.364152 -1 623 397 408 623
+12 -1308 -1.379272 -1 651 408 408 597
+17 -1328 -1.402792 -1 462 386 478 -1
+20 -1342 -1.429672 597 531 365 408 -1
+20 -1359 -1.468312 294 462 330 447 -1
+20 -1377 -1.496871 -1 397 307 408 -1
+20 -1393 -1.511991 -1 375 301 447 -1
+20 -1413 -1.533831 -1 330 255 447 -1
+21 -1440 -1.486791 552 294 232 386 -1
+32 -1480 -1.209592 -1 330 200 338 -1
+50 -1511 -0.930713 -1 552 194 338 -1
+79 -1539 -0.655194 462 434 224 232 -1
+99 -1554 -0.633354 -1 574 210 203 -1
+111 -1562 -0.651834 512 434 194 207 -1
+131 -1577 -0.611514 -1 386 194 186 -1
+169 -1595 -0.341035 -1 -1 250 164 -1
+276 -1585 0.315844 531 -1 -1 213 -1
+330 -1571 0.268804 447 -1 714 245 -1
+350 -1566 0.262084 447 -1 681 282 -1
+370 -1561 0.248644 386 -1 651 301 -1
+386 -1557 0.238564 386 -1 681 330 -1
+406 -1552 0.231844 408 -1 597 347 -1
+426 -1547 0.230164 347 -1 531 375 -1
+442 -1543 0.230164 315 -1 512 338 -1
+462 -1538 0.223444 301 -1 494 434 -1
+482 -1533 0.210004 276 -1 434 434 -1
+498 -1529 0.194884 270 -1 462 447 -1
+538 -1519 0.156244 221 -1 375 462 -1
+554 -1515 0.151204 221 -1 365 478 -1
+574 -1510 0.136084 200 -1 307 365 -1
+594 -1505 0.122644 183 -1 315 322 447
+614 -1504 -0.240235 169 282 255 574 260
+614 -1504 -0.594714 397 221 288 512 181
+614 -1504 -0.949193 200 200 -1 494 166
+614 -1504 -1.231432 158 213 338 -1 186
+614 -1504 -1.590951 131 282 447 -1 228
+614 -1504 -1.938710 160 282 386 -1 210
+614 -1504 -2.225989 228 356 494 -1 149
+597 -1516 -2.684628 294 356 -1 -1 152
+587 -1520 -2.936627 232 386 -1 -1 183
+571 -1524 -3.002147 224 386 681 -1 224
+534 -1528 -3.126467 164 338 -1 -1 203
+531 -1528 -3.462466 176 651 -1 681 250
+490 -1458 -4.210061 -1 -1 -1 434 200
+462 -1403 -4.238620 -1 -1 -1 447 245
+452 -1383 -4.240300 -1 -1 -1 478 250
+444 -1367 -4.245339 751 -1 -1 397 260
+434 -1347 -4.262139 800 -1 -1 447 265
+424 -1327 -4.280619 531 -1 -1 434 282
+417 -1312 -4.297419 447 -1 -1 408 282
+410 -1294 -4.322619 434 -1 -1 375 301
+402 -1274 -4.341098 408 -1 -1 408 294
+397 -1258 -4.351178 512 -1 -1 434 322
+386 -1218 -4.376377 651 -1 -1 408 365
+381 -1198 -4.381416 681 714 -1 397 365
+377 -1182 -4.388136 574 800 -1 356 347
+372 -1162 -4.398215 681 714 -1 434 397
+362 -1122 -4.426774 531 574 -1 -1 434
+358 -1106 -4.445254 574 574 -1 -1 386
+348 -1067 -4.502375 447 494 -1 -1 434
+344 -1051 -4.517495 375 421 -1 -1 512
+339 -1031 -4.530935 397 462 -1 -1 623
+334 -1011 -4.546055 356 421 -1 -1 531
+329 -991 -4.557814 338 356 -1 -1 681
+320 -955 -4.588053 245 315 -1 -1 574
+318 -935 -4.601492 237 288 -1 -1 -1
+318 -921 -4.668692 213 260 -1 -1 791
+318 -916 -4.982851 181 322 -1 -1 315
+318 -916 -5.340690 181 623 -1 791 276
+318 -916 -5.619569 237 -1 -1 -1 213
+322 -914 -5.925329 307 -1 714 -1 183
+340 -909 -6.037888 791 -1 -1 -1 183
+410 -892 -6.157168 -1 -1 -1 -1 221
+430 -892 -6.180688 -1 -1 -1 -1 228
+450 -892 -6.197488 -1 -1 -1 -1 245
+466 -892 -6.212608 -1 -1 -1 -1 250
+486 -892 -6.231088 -1 -1 -1 -1 270
+502 -892 -6.247888 -1 -1 -1 -1 276
+562 -892 -6.313408 -1 -1 -1 -1 330
+576 -892 -6.345328 -1 -1 -1 -1 338
+594 -892 -6.382288 714 -1 -1 -1 322
+614 -893 -6.412528 -1 -1 -1 -1 386
+781 -934 -6.593967 -1 -1 -1 791 751
+825 -949 -6.684688 -1 -1 -1 751 -1
+843 -958 -6.708208 -1 -1 -1 791 -1
+857 -966 -6.728368 -1 -1 -1 623 -1
+874 -976 -6.755248 -1 -1 -1 681 -1
+891 -986 -6.777088 -1 -1 -1 597 -1
+905 -994 -6.788848 -1 -1 -1 714 -1
+923 -1004 -6.803967 -1 -1 -1 651 -1
+941 -1014 -6.824127 -1 -1 -1 552 -1
+953 -1022 -6.839247 -1 -1 -1 651 -1
+968 -1032 -6.866127 -1 -1 -1 623 -1
+983 -1042 -6.898048 -1 -1 -1 714 -1
+1010 -1060 -6.956849 -1 800 751 552 -1
+1025 -1070 -6.983728 791 -1 -1 651 574
+1040 -1084 -7.010609 -1 751 791 651 397
+1052 -1095 -7.029089 -1 681 791 651 408
+1067 -1109 -7.045889 791 651 681 681 447
+1082 -1124 -7.064369 623 800 623 597 681
+1097 -1139 -7.081168 791 714 681 597 -1
+1112 -1154 -7.096288 -1 651 552 651 -1
+1137 -1181 -7.129888 651 552 531 623 -1
+1148 -1196 -7.158448 714 623 478 462 -1
+1158 -1211 -7.200448 714 714 478 597 -1
+1168 -1226 -7.234048 597 651 421 714 -1
+1176 -1239 -7.250848 681 623 365 651 751
+1186 -1254 -7.272687 597 434 365 574 -1
+1196 -1269 -7.292848 597 512 347 574 -1
+1206 -1285 -7.314688 462 421 330 597 -1
+1224 -1319 -7.344928 597 365 265 574 -1
+1244 -1357 -7.371807 751 288 207 478 -1
+1257 -1379 -7.328127 751 245 176 531 681
+1281 -1411 -7.066048 397 255 149 531 -1
+1351 -1444 -6.452850 447 408 194 173 -1
+1449 -1431 -6.012691 -1 294 365 151 -1
+1481 -1417 -5.790932 -1 282 203 160 -1
+1513 -1392 -5.513732 -1 356 186 207 -1
+1536 -1367 -5.389412 -1 421 171 181 -1
+1557 -1329 -5.090374 -1 -1 178 224 -1
+1564 -1293 -4.808134 -1 -1 255 181 -1
+1561 -1251 -4.529254 -1 -1 552 169 -1
+1556 -1226 -4.493975 -1 -1 462 169 -1
+1552 -1210 -4.499015 -1 -1 -1 181 -1
+1542 -1170 -4.512455 -1 -1 -1 183 -1
+1538 -1154 -4.514134 -1 -1 -1 186 -1
+1533 -1134 -4.522534 -1 -1 408 191 -1
+1528 -1112 -4.522534 -1 -1 681 197 -1
+1523 -1092 -4.529253 -1 -1 751 207 -1
+1519 -1076 -4.529253 -1 -1 751 210 -1
+1514 -1056 -4.541013 -1 -1 791 213 -1
+1509 -1036 -4.562852 -1 -1 434 203 -1
+1505 -1020 -4.581332 -1 -1 552 224 -1
+1501 -1000 -4.591412 -1 -1 421 224 -1
+1498 -980 -4.598131 -1 -1 434 237 -1
+1497 -964 -4.601491 -1 -1 375 237 -1
+1497 -944 -4.604851 -1 -1 338 232 -1
+1496 -923 -4.609891 -1 -1 294 250 -1
+1496 -906 -4.611571 -1 -1 270 250 -1
+1496 -885 -4.614931 -1 -1 260 255 -1
+1496 -864 -4.618290 -1 -1 228 265 -1
+1496 -848 -4.633410 -1 -1 228 265 -1
+1496 -828 -4.658611 -1 -1 241 270 -1
+1496 -808 -4.675410 -1 800 228 265 -1
+1496 -792 -4.682130 -1 751 260 282 -1
+1496 -771 -4.685490 -1 651 315 282 -1
+1496 -751 -4.693890 -1 597 681 294 -1
+1496 -691 -4.709009 751 462 -1 301 -1
+1496 -669 -4.707329 751 421 681 307 -1
+1496 -632 -4.732528 462 330 434 315 -1
+1496 -612 -4.751008 447 315 365 330 -1
+1496 -583 -4.672048 386 276 315 322 -1
+1490 -549 -4.450288 494 228 203 301 -1
+1471 -510 -4.102530 -1 270 183 217 -1
+1438 -479 -3.744690 -1 462 173 322 -1
+1397 -462 -3.396931 -1 -1 203 197 -1
+1340 -458 -3.138212 -1 -1 365 176 -1
+1319 -458 -3.143253 -1 -1 330 178 681
+1303 -458 -3.156693 -1 -1 338 178 -1
+1283 -458 -3.170132 -1 -1 347 178 -1
+1263 -458 -3.175172 -1 -1 347 166 -1
+1245 -458 -3.176852 -1 -1 365 173 -1
+1223 -458 -3.180212 -1 -1 322 173 -1
+1201 -458 -3.190292 -1 -1 338 173 -1
+1181 -458 -3.205412 -1 -1 330 173 -1
+1165 -458 -3.227252 -1 -1 307 173 -1
+1145 -458 -3.244052 -1 -1 288 173 -1
+1109 -457 -3.262531 -1 -1 265 171 -1
+1089 -453 -3.277651 -1 -1 294 162 -1
+1069 -448 -3.289411 -1 -1 282 162 -1
+1053 -444 -3.291091 -1 -1 265 162 -1
+1032 -439 -3.292771 -1 -1 270 162 -1
+1011 -434 -3.294451 -1 -1 265 158 -1
+995 -430 -3.296131 -1 -1 241 158 -1
+975 -425 -3.311251 681 -1 260 156 -1
+955 -420 -3.333090 -1 -1 241 151 -1
+939 -416 -3.344850 -1 -1 237 145 -1
+867 -412 -3.010531 -1 -1 408 142 -1
+834 -423 -2.735012 -1 -1 800 160 -1
+777 -466 -2.388932 -1 -1 -1 282 -1
+765 -478 -2.399012 -1 -1 -1 301 -1
+750 -492 -2.419172 -1 -1 -1 347 -1
+738 -503 -2.430932 -1 -1 -1 386 -1
+723 -518 -2.439332 -1 -1 -1 386 -1
+708 -533 -2.449412 -1 -1 -1 478 -1
+696 -545 -2.456132 -1 -1 -1 478 -1
+680 -560 -2.462852 -1 -1 -1 597 -1
+653 -586 -2.464531 -1 -1 -1 597 -1
+638 -601 -2.472931 -1 -1 -1 791 -1
+623 -615 -2.483011 -1 -1 -1 -1 -1
+611 -623 -2.498131 -1 -1 -1 -1 -1
+596 -633 -2.518291 597 -1 -1 -1 -1
+584 -641 -2.528371 751 -1 -1 -1 -1
+568 -652 -2.536771 574 -1 -1 -1 -1
+550 -663 -2.548531 434 -1 -1 -1 -1
+536 -672 -2.551891 434 -1 -1 791 -1
+498 -694 -2.555251 386 -1 -1 -1 -1
+484 -704 -2.551891 301 -1 -1 -1 597
+464 -717 -2.556930 147 -1 -1 791 -1
+445 -727 -2.565330 -1 -1 -1 574 -1
+433 -735 -2.580450 -1 -1 -1 347 -1
+418 -745 -2.600610 -1 -1 -1 478 -1
+403 -755 -2.617409 -1 -1 -1 386 -1
+391 -763 -2.627490 386 -1 791 623 791
+376 -773 -2.624130 147 -1 -1 531 -1
+365 -779 -2.729969 -1 -1 -1 -1 -1
+365 -779 -2.976928 -1 -1 -1 -1 -1
+365 -779 -3.286047 -1 -1 -1 -1 -1
+365 -779 -3.544767 -1 -1 -1 -1 681
+365 -779 -3.853886 -1 -1 -1 -1 791
+365 -779 -4.421725 -1 -1 -1 -1 -1
+365 -779 -4.729164 -1 -1 -1 -1 -1
+365 -779 -4.982843 -1 -1 -1 -1 -1
+365 -779 -5.303723 -1 -1 -1 -1 -1
+365 -779 -5.611162 -1 -1 -1 -1 -1
+365 -779 -5.861482 -1 -1 -1 -1 315
+365 -779 -6.180681 -1 -1 494 -1 -1
+365 -779 -6.499881 282 623 552 574 -1
+365 -779 -6.773720 -1 -1 -1 -1 -1
+365 -779 -7.479319 -1 -1 375 751 597
+365 -779 -7.763238 -1 -1 751 -1 -1
+365 -779 -8.114357 791 -1 -1 -1 597
+362 -785 -8.388197 -1 751 681 -1 -1
+354 -798 -8.460437 800 -1 651 -1 -1
+340 -813 -8.483957 574 -1 531 -1 -1
+326 -828 -8.490679 681 -1 531 -1 -1
+315 -841 -8.492359 -1 714 494 -1 -1
+303 -857 -8.495720 751 597 434 -1 -1
+290 -873 -8.505801 800 651 434 -1 -1
+277 -888 -8.524282 512 375 408 -1 -1
+269 -900 -8.541080 681 512 375 -1 -1
+257 -915 -8.559561 -1 421 347 -1 751
+242 -930 -8.573001 800 347 315 -1 791
+230 -942 -8.584761 -1 365 288 -1 681
+215 -957 -8.598200 -1 322 255 -1 751
+200 -972 -8.604920 681 282 228 -1 791
+180 -995 -8.519241 751 255 203 -1 681
+162 -1025 -8.290763 434 294 166 531 -1
+152 -1068 -7.948044 421 207 162 245 -1
+156 -1110 -7.612045 434 365 186 186 -1
+174 -1148 -7.341566 597 386 217 164 -1
+192 -1176 -7.212207 531 356 224 152 -1
+215 -1201 -7.022367 -1 307 282 169 -1
+238 -1221 -6.956848 -1 276 232 181 -1
+261 -1238 -6.891328 -1 255 194 200 -1
+299 -1256 -6.625888 -1 294 166 221 -1
+375 -1256 -6.014370 -1 -1 213 191 -1
+413 -1237 -5.725411 -1 -1 294 160 -1
+437 -1220 -5.654852 -1 -1 421 164 -1
+451 -1208 -5.656532 -1 -1 462 164 -1
+466 -1198 -5.678371 -1 -1 421 164 -1
+481 -1188 -5.705251 -1 -1 386 173 -1
+510 -1170 -5.720370 -1 -1 434 178 -1
+527 -1160 -5.728770 -1 -1 447 178 -1
+545 -1150 -5.737169 -1 -1 408 173 -1
+559 -1142 -5.742209 -1 -1 434 178 -1
+579 -1132 -5.740529 574 -1 397 183 -1
+598 -1121 -5.735489 -1 -1 397 183 -1
+613 -1113 -5.735489 751 -1 408 186 574
+632 -1103 -5.740529 -1 -1 447 191 800
+651 -1093 -5.759008 -1 -1 421 191 -1
+663 -1085 -5.777488 531 -1 365 194 -1
+681 -1075 -5.789248 -1 -1 386 183 -1
+717 -1057 -5.797647 -1 800 356 194 -1
+736 -1047 -5.802687 -1 -1 315 200 -1
+756 -1037 -5.802687 -1 -1 265 203 -1
+776 -1027 -5.799326 -1 623 221 203 -1
+792 -1019 -5.794287 -1 714 200 210 -1
+817 -1005 -5.723727 -1 531 224 207 -1
+847 -980 -5.522127 478 494 478 217 -1
+861 -966 -5.501967 421 512 434 237 -1
+918 -909 -5.525486 397 421 270 288 -1
+933 -894 -5.528846 338 421 255 307 751
+948 -879 -5.528846 347 330 250 330 651
+963 -864 -5.530526 347 276 217 301 623
+978 -849 -5.475087 315 270 186 301 681
+1001 -814 -5.206287 255 200 169 791 -1
+1012 -773 -4.868609 276 301 158 250 -1
+1010 -729 -4.529250 315 241 197 181 -1
+998 -696 -4.250371 494 221 232 164 -1
+970 -662 -3.897572 -1 232 166 178 -1
+932 -639 -3.556532 -1 307 145 181 -1
+889 -630 -3.217174 -1 -1 173 221 681
+854 -634 -2.946695 -1 -1 255 171 531
+816 -649 -2.664455 -1 -1 434 152 597
+773 -672 -2.588856 -1 -1 -1 173 574
+754 -682 -2.592216 -1 -1 -1 169 597
+738 -692 -2.602295 -1 -1 -1 181 623
+722 -702 -2.617415 -1 -1 -1 189 574
+708 -710 -2.629175 -1 -1 -1 197 597
+688 -720 -2.639255 -1 -1 -1 207 597
+652 -738 -2.645975 -1 -1 -1 217 552
+632 -748 -2.645975 -1 -1 -1 217 574
+612 -758 -2.644295 -1 -1 -1 232 574
+596 -766 -2.644295 714 -1 -1 245 574
+556 -786 -2.652695 -1 -1 -1 265 512
+541 -794 -2.659415 -1 -1 -1 375 512
+523 -804 -2.676215 -1 -1 -1 -1 531
+504 -814 -2.691334 651 -1 -1 -1 478
+488 -822 -2.701415 -1 -1 -1 -1 447
+468 -832 -2.703094 -1 -1 -1 -1 478
+452 -840 -2.703094 -1 -1 -1 -1 478
+432 -850 -2.703094 800 -1 -1 -1 478
+376 -878 -2.704774 751 386 623 -1 478
+356 -888 -2.709814 -1 494 494 -1 462
+336 -898 -2.718214 -1 531 512 -1 478
+281 -924 -2.760213 494 386 375 -1 462
+265 -932 -2.765253 294 330 375 -1 397
+245 -938 -2.765253 232 330 330 -1 447
+225 -944 -2.765253 221 294 301 -1 434
+204 -951 -3.109652 260 207 294 -1 397
+204 -951 -3.459091 181 194 447 -1 434
+204 -951 -3.815250 136 232 -1 -1 245
+204 -951 -4.099169 133 330 -1 -1 232
+204 -951 -4.451968 156 -1 -1 -1 169
+204 -951 -4.813167 245 -1 574 -1 137
+209 -948 -5.748924 -1 -1 -1 714 265
+228 -938 -5.831244 -1 -1 -1 -1 421
+244 -930 -5.846363 -1 -1 -1 714 408
+284 -910 -5.879962 -1 -1 -1 800 -1
+299 -904 -5.896762 -1 -1 -1 714 -1
+319 -898 -5.913562 -1 478 -1 -1 -1
+339 -891 -5.925322 -1 397 -1 -1 -1
+355 -886 -5.933721 -1 365 -1 -1 -1
+375 -881 -5.943801 -1 294 -1 791 751
+395 -876 -5.947161 -1 276 -1 791 -1
+409 -872 -6.012681 -1 203 -1 -1 -1
+416 -871 -6.313400 -1 -1 -1 -1 -1
+416 -871 -6.600679 149 -1 714 -1 -1
+416 -871 -7.306278 714 681 714 512 -1
+416 -871 -7.655717 -1 -1 751 791 162
+416 -871 -7.939636 -1 -1 -1 800 338
+416 -871 -8.292436 -1 -1 -1 -1 -1
+416 -871 -8.641875 751 751 751 751 -1
+416 -871 -8.924115 531 -1 714 -1 408
+411 -872 -9.219794 552 714 623 -1 -1
+392 -877 -9.300435 714 800 552 -1 -1
+372 -879 -9.318914 597 623 531 -1 -1
+356 -879 -9.330674 597 714 421 -1 714
+296 -879 -9.384435 623 512 397 -1 651
+280 -879 -9.389475 574 462 365 -1 552
+259 -879 -9.401235 574 434 347 -1 574
+239 -879 -9.404594 597 356 315 -1 574
+199 -879 -9.404594 531 301 255 -1 512
+94 -910 -8.742675 330 330 178 294 -1
+67 -945 -8.403316 307 330 221 210 -1
+55 -975 -8.189957 315 276 166 183 -1
+45 -1009 -8.065638 421 255 139 176 -1
+44 -1053 -7.778358 714 232 210 178 -1
+74 -1123 -7.173561 -1 462 164 375 -1
+108 -1150 -6.832523 -1 512 186 186 -1
+147 -1165 -6.553644 -1 -1 301 166 -1
+176 -1171 -6.483084 -1 -1 338 164 -1
+194 -1175 -6.479724 -1 -1 397 164 -1
+214 -1180 -6.484764 -1 -1 347 162 -1
+234 -1185 -6.503243 -1 -1 365 171 -1
+270 -1194 -6.538522 -1 -1 375 176 -1
+290 -1199 -6.540202 -1 -1 365 176 -1
+310 -1204 -6.546922 751 -1 338 166 -1
+330 -1209 -6.558681 -1 -1 386 173 -1
+346 -1213 -6.565401 -1 -1 356 173 -1
+366 -1218 -6.568760 -1 -1 356 178 -1
+386 -1223 -6.567080 -1 -1 375 178 -1
+422 -1232 -6.577160 -1 -1 365 183 -1
+441 -1237 -6.595640 -1 -1 315 181 -1
+459 -1242 -6.619159 -1 -1 347 181 -1
+475 -1246 -6.627559 -1 714 356 181 -1
+515 -1256 -6.639318 -1 -1 330 181 -1
+535 -1264 -6.649397 -1 651 347 181 -1
+551 -1272 -6.656117 -1 800 315 181 -1
+571 -1280 -6.656117 -1 651 315 183 791
+611 -1296 -6.659477 478 574 232 183 651
+627 -1304 -6.666196 315 478 207 183 597
+647 -1314 -6.682996 265 494 197 178 623
+671 -1324 -6.637636 260 434 176 178 597
+710 -1332 -6.420917 -1 408 397 186 -1
+737 -1335 -6.373878 574 294 307 200 -1
+754 -1335 -6.373878 531 356 265 210 791
+774 -1335 -6.378917 597 375 241 197 -1
+802 -1335 -6.313397 531 270 200 237 681
+846 -1329 -6.034518 386 288 176 207 -1
+884 -1310 -5.700200 365 282 166 265 -1
+910 -1287 -5.428041 397 338 217 181 -1
+930 -1252 -5.145801 623 322 189 178 -1
+941 -1225 -5.078601 597 288 447 173 -1
+951 -1196 -4.982841 574 276 260 171 -1
+955 -1161 -4.752682 -1 270 191 189 574
+949 -1120 -4.421723 -1 338 181 221 -1
+928 -1082 -4.082365 -1 -1 191 301 651
+899 -1054 -3.825326 -1 -1 241 194 494
+881 -1040 -3.781646 -1 -1 250 183 512
+861 -1025 -3.773246 -1 -1 265 181 462
+845 -1011 -3.771566 -1 -1 270 171 494
+832 -1002 -3.769886 -1 -1 250 173 494
+816 -991 -3.773246 -1 -1 270 162 478
+801 -981 -3.795086 -1 -1 255 166 574
+786 -969 -3.816926 574 -1 250 164 512
+774 -957 -3.825326 597 -1 315 162 574
+759 -942 -3.828686 751 -1 -1 160 574
+732 -916 -3.835406 751 -1 -1 149 597
+673 -878 -3.491006 -1 -1 -1 133 751
+630 -872 -3.153327 -1 -1 -1 140 800
+598 -876 -2.933248 574 -1 -1 -1 462
+572 -881 -2.882849 494 -1 -1 -1 365
+552 -886 -2.881169 512 -1 -1 -1 408
+536 -890 -2.881169 494 -1 800 -1 462
+516 -895 -2.882849 478 -1 681 -1 315
+496 -900 -2.891249 434 -1 681 -1 681
+479 -904 -2.887889 408 -1 791 -1 791
+459 -909 -2.887889 421 -1 623 -1 -1
+439 -914 -2.891249 330 -1 597 -1 -1
+423 -918 -2.903008 356 -1 651 -1 623
+403 -923 -2.926528 338 -1 552 -1 -1
+383 -928 -2.938288 315 -1 512 -1 751
+367 -932 -2.939968 307 -1 531 751 -1
+347 -937 -2.943328 301 751 478 -1 751
+327 -942 -2.946688 255 651 494 -1 574
+307 -947 -2.951728 245 574 434 -1 574
+291 -951 -2.953408 221 434 408 -1 531
+271 -956 -2.953408 207 408 434 -1 597
+252 -960 -3.034047 189 347 375 -1 531
+247 -960 -3.274287 178 232 330 623 294
+247 -960 -3.627085 221 315 356 -1 210
+243 -957 -3.917724 207 282 447 -1 186
+233 -944 -4.094124 260 210 531 -1 186
+234 -940 -5.307082 241 -1 -1 -1 213
+245 -926 -5.417961 282 -1 552 -1 197
+259 -911 -5.458281 294 -1 -1 -1 194
+286 -884 -5.483480 315 -1 -1 -1 200
+301 -869 -5.491879 276 -1 -1 -1 191
+313 -857 -5.500279 330 -1 791 -1 197
+328 -842 -5.508678 330 -1 -1 -1 203
+343 -827 -5.513718 322 800 -1 -1 194
+355 -815 -5.517078 330 -1 -1 -1 207
+370 -800 -5.517078 338 -1 -1 -1 203
+385 -785 -5.528837 315 -1 -1 -1 210
+397 -773 -5.547317 322 -1 -1 -1 194
+412 -758 -5.574198 307 -1 -1 -1 210
+427 -743 -5.589317 365 -1 -1 -1 203
+439 -731 -5.596037 315 -1 -1 -1 213
+454 -716 -5.601077 356 -1 -1 -1 213
+469 -701 -5.611156 386 -1 -1 -1 203
+483 -689 -5.614516 330 -1 791 -1 221
+501 -674 -5.621235 365 -1 -1 -1 210
+519 -659 -5.616196 375 -1 -1 -1 210
+533 -647 -5.616196 347 -1 -1 -1 224
+549 -633 -5.624595 397 -1 -1 478 224
+564 -622 -5.648116 512 -1 -1 -1 232
+576 -614 -5.668275 494 -1 -1 -1 232
+592 -604 -5.683395 574 -1 -1 714 232
+610 -593 -5.688435 397 -1 -1 -1 221
+625 -584 -5.695155 531 -1 -1 -1 228
+643 -574 -5.701875 574 -1 -1 -1 245
+662 -564 -5.706915 531 -1 -1 -1 250
+758 -507 -5.764035 494 -1 -1 -1 276
+772 -499 -5.775795 -1 -1 -1 -1 265
+1120 -343 -5.942111 330 651 -1 -1 347
+1140 -338 -5.958910 288 623 791 -1 356
+1156 -334 -5.974030 245 434 651 -1 347
+1174 -329 -5.997550 250 574 791 -1 322
+1194 -324 -6.012669 294 512 800 -1 365
+1214 -319 -6.022748 338 421 791 -1 365
+1230 -315 -6.032828 386 421 597 -1 397
+1250 -310 -6.039547 386 356 531 -1 356
+1268 -306 -6.120187 397 315 434 -1 434
+1280 -306 -6.357066 315 294 597 -1 408
+1295 -308 -6.478025 245 260 -1 -1 574
+1301 -309 -6.775384 178 294 714 -1 245
+1301 -309 -7.133224 197 512 -1 -1 356
+1303 -315 -7.410423 228 -1 -1 -1 250
+1310 -331 -7.477623 237 -1 -1 -1 232
+1316 -351 -7.502823 241 714 -1 -1 221
+1321 -370 -7.528023 241 -1 -1 751 217
+1330 -402 -7.573384 245 681 -1 -1 210
+1335 -422 -7.588503 250 714 -1 -1 203
+1340 -442 -7.601943 241 800 -1 -1 200
+1345 -462 -7.618742 237 -1 -1 -1 194
+1349 -478 -7.628821 237 623 -1 -1 200
+1354 -498 -7.638901 245 651 -1 -1 197
+1359 -518 -7.645620 237 714 -1 -1 186
+1364 -538 -7.654020 245 651 -1 -1 189
+1368 -554 -7.667460 237 791 -1 -1 191
+1378 -609 -7.736341 260 791 -1 -1 186
+1378 -629 -7.756502 270 651 -1 751 181
+1378 -705 -7.818660 338 512 -1 -1 183
+1378 -725 -7.828740 365 462 651 -1 181
+1378 -745 -7.838820 386 421 714 -1 181
+1378 -782 -7.864019 623 338 447 -1 191
+1378 -802 -7.880819 294 294 447 -1 194
+1378 -817 -8.273937 224 260 651 -1 194
+1378 -817 -8.979534 189 -1 -1 -1 221
+1378 -817 -9.332333 255 -1 -1 -1 221
+1375 -817 -9.575932 397 -1 -1 -1 183
+1358 -812 -9.698570 434 -1 -1 -1 191
+1338 -807 -9.733850 531 -1 -1 494 203
+1318 -802 -9.750649 494 -1 -1 -1 210
+1302 -798 -9.759048 531 -1 -1 -1 221
+1262 -786 -9.785929 434 -1 -1 -1 228
+1246 -779 -9.797689 494 -1 -1 -1 250
+1226 -769 -9.809450 434 -1 -1 -1 250
+1206 -760 -9.817851 434 -1 -1 -1 270
+1186 -750 -9.836330 421 -1 -1 -1 276
+1172 -743 -9.861529 408 -1 -1 -1 294
+1157 -734 -9.893448 397 -1 -1 -1 301
+1141 -724 -9.916968 365 -1 -1 -1 282
+1126 -716 -9.927049 386 -1 -1 -1 338
+1108 -706 -9.942169 365 -1 -1 -1 386
+1089 -696 -9.960649 365 -1 -1 -1 375
+1072 -686 -9.977450 356 -1 -1 -1 386
+1058 -678 -9.990891 330 -1 -1 -1 338
+1040 -668 -9.999291 338 -1 -1 -1 347
+1022 -658 -10.009373 338 -1 -1 -1 365
+953 -609 -10.116893 294 -1 -1 -1 315
+938 -595 -10.133694 294 -1 -1 -1 315
+923 -580 -10.152174 282 -1 -1 -1 265
+911 -568 -10.163934 288 -1 -1 -1 260
+896 -553 -10.175694 338 -1 -1 -1 265
+881 -538 -10.179055 282 -1 -1 -1 347
+866 -523 -10.187455 270 -1 -1 -1 265
+825 -481 -10.242895 200 -1 -1 -1 237
+817 -471 -10.321855 181 -1 -1 -1 221
+816 -429 -11.074492 -1 800 -1 -1 191
+816 -409 -11.091293 597 -1 -1 -1 169
+816 -389 -11.108093 -1 -1 -1 -1 166
+828 -333 -11.134972 -1 -1 -1 -1 -1
+832 -317 -11.148412 -1 791 751 -1 -1
+837 -297 -11.165213 -1 651 552 -1 -1
+842 -277 -11.192091 -1 651 623 -1 -1
+847 -258 -11.220651 -1 512 597 -1 -1
+856 -222 -11.266009 681 478 597 -1 -1
+861 -202 -11.281130 651 356 494 -1 -1
+865 -186 -11.296249 597 386 421 -1 -1
+870 -166 -11.306330 531 347 408 -1 -1
+880 -126 -11.333210 386 276 356 681 -1
+886 -105 -11.287850 365 232 315 -1 -1
+885 -22 -10.696490 -1 255 156 681 -1
+864 16 -10.357131 -1 386 149 288 -1
+838 40 -10.084970 -1 494 169 194 -1
+796 59 -9.727132 -1 -1 265 154 -1
+711 63 -9.412973 -1 -1 338 173 -1
+691 63 -9.429774 -1 -1 276 178 -1
+635 63 -9.456656 -1 -1 232 194 -1
+615 63 -9.460017 -1 -1 250 203 -1
+598 63 -9.461698 681 -1 288 213 -1
+501 63 -9.525537 531 751 -1 260 597
+485 63 -9.537298 -1 651 -1 265 -1
+465 65 -9.547379 -1 531 -1 265 791
+445 70 -9.555779 -1 552 751 276 -1
+425 75 -9.562500 -1 531 597 276 -1
+409 79 -9.565861 651 462 434 270 -1
+389 84 -9.569221 -1 447 408 294 -1
+369 89 -9.574261 -1 408 375 276 -1
+353 93 -9.582662 -1 365 322 315 -1
+313 103 -9.606183 462 294 276 322 -1
+292 107 -9.575943 651 265 250 338 -1
+172 65 -8.613306 -1 623 178 237 -1
+141 -4 -8.048829 -1 -1 531 166 -1
+136 -30 -8.003469 -1 800 478 173 -1
+131 -50 -8.006830 -1 -1 462 176 -1
+117 -107 -8.011871 791 -1 434 197 -1
+108 -143 -8.016912 681 -1 288 210 -1
+103 -163 -8.016912 651 -1 228 221 -1
+99 -179 -8.020273 597 -1 232 221 -1
+94 -199 -8.033714 597 -1 265 213 -1
+89 -219 -8.057234 651 -1 265 237 -1
+84 -239 -8.068995 574 -1 294 228 -1
+80 -255 -8.075714 531 -1 408 232 -1
+75 -275 -8.077394 512 -1 -1 260 -1
+70 -295 -8.080755 531 681 -1 250 -1
+66 -311 -8.085795 462 800 -1 265 751
+61 -331 -8.089156 421 574 -1 276 -1
+56 -352 -8.090836 397 623 681 282 -1
+52 -369 -8.090836 397 651 478 265 -1
+47 -389 -8.094196 408 623 447 294 -1
+42 -409 -8.107636 365 552 462 307 531
+37 -429 -8.131157 408 462 356 301 512
+23 -485 -8.151318 386 356 288 294 462
+15 -513 -8.070678 365 307 250 330 462
+12 -546 -7.890918 294 322 217 322 651
+13 -582 -7.769958 250 228 189 207 -1
+24 -623 -7.504519 237 597 173 315 -1
+45 -660 -7.170200 237 210 186 217 -1
+80 -688 -6.822442 260 194 265 176 -1
+114 -700 -6.540202 531 178 164 173 -1
+159 -702 -6.180683 -1 207 119 181 -1
+234 -662 -5.500285 -1 -1 149 151 651
+254 -633 -5.226446 -1 -1 265 124 597
+268 -592 -4.883728 -1 -1 -1 124 365
+266 -547 -4.529249 478 -1 -1 158 574
+252 -509 -4.257090 434 -1 -1 276 375
+242 -489 -4.218450 408 751 751 397 375
+232 -471 -4.223489 478 597 800 597 421
+214 -437 -4.238609 397 574 -1 -1 434
+204 -417 -4.243649 386 623 597 -1 531
+194 -398 -4.248688 338 552 597 -1 494
+184 -378 -4.245328 322 447 574 -1 494
+176 -362 -4.245328 301 421 552 -1 791
+156 -322 -4.247008 245 375 494 -1 -1
+148 -307 -4.255408 228 322 597 -1 -1
+138 -291 -4.268848 200 288 597 -1 265
+130 -276 -4.362928 178 260 552 -1 265
+130 -274 -4.697248 156 397 -1 800 301
+130 -274 -4.979487 189 -1 -1 -1 228
+132 -271 -5.273486 241 -1 -1 651 178
+142 -256 -5.370925 288 -1 -1 574 173
+154 -244 -5.384365 330 800 -1 512 171
+169 -229 -5.392765 315 -1 -1 597 178
+183 -214 -5.399484 315 751 -1 597 178
+198 -199 -5.404524 322 751 -1 623 176
+210 -187 -5.407884 386 800 -1 623 191
+225 -172 -5.412923 338 714 -1 -1 194
+252 -145 -5.421323 386 651 800 -1 197
+267 -130 -5.438123 462 597 -1 -1 200
+281 -115 -5.465003 681 574 714 -1 203
+296 -100 -5.481803 -1 512 751 -1 207
+308 -88 -5.488523 751 478 791 -1 213
+323 -73 -5.495242 356 397 597 -1 213
+338 -58 -5.505322 250 397 512 -1 221
+350 -46 -5.510361 203 356 462 -1 224
+365 -31 -5.513721 221 322 434 -1 232
+380 -16 -5.518761 221 282 434 -1 217
+393 -3 -5.611160 255 245 375 -1 237
+397 -1 -5.854760 221 228 623 -1 213
+397 -1 -6.210918 178 224 -1 -1 397
+397 -1 -6.560358 166 397 -1 -1 221
+403 -22 -7.558274 -1 -1 -1 791 186
+408 -42 -7.601954 714 -1 -1 791 194
+413 -62 -7.622115 -1 -1 -1 494 213
+417 -78 -7.633874 -1 -1 -1 -1 232
+422 -98 -7.647314 -1 -1 -1 408 224
+427 -118 -7.659073 -1 -1 -1 -1 237
+431 -134 -7.665793 -1 -1 791 597 276
+436 -155 -7.670833 -1 -1 462 574 288
+441 -175 -7.672513 -1 -1 478 447 301
+445 -191 -7.674192 -1 -1 681 800 322
+450 -211 -7.685952 -1 -1 -1 791 365
+455 -231 -7.702752 623 -1 -1 791 365
+460 -251 -7.722911 -1 -1 -1 -1 397
+460 -267 -7.739711 -1 -1 -1 -1 421
+460 -287 -7.759871 -1 -1 751 -1 462
+460 -307 -7.769951 -1 -1 -1 -1 462
+460 -343 -7.790110 -1 -1 -1 -1 512
+460 -363 -7.791790 -1 -1 -1 -1 552
+460 -379 -7.793469 -1 -1 -1 -1 574
+460 -401 -7.798509 -1 -1 -1 -1 574
+460 -423 -7.806909 -1 -1 -1 -1 574
+460 -439 -7.815308 -1 -1 -1 -1 651
+460 -459 -7.832108 -1 -1 791 574 800
+460 -479 -7.855628 -1 -1 -1 714 791
+460 -495 -7.872427 -1 -1 -1 207 800
+460 -515 -7.882507 -1 -1 -1 224 714
+460 -535 -7.895946 -1 -1 -1 232 -1
+460 -572 -7.904346 -1 -1 -1 315 -1
+460 -592 -7.907705 -1 -1 -1 447 -1
+460 -608 -7.914425 -1 -1 -1 397 791
+460 -630 -7.921144 -1 -1 -1 386 -1
+460 -650 -7.927864 -1 -1 -1 386 -1
+460 -666 -7.941304 -1 -1 -1 375 -1
+460 -686 -7.964824 -1 -1 -1 421 -1
+417 -874 -8.043788 -1 -1 681 478 -1
+413 -890 -8.060588 -1 -1 800 447 -1
+408 -909 -8.084107 -1 -1 791 478 -1
+403 -929 -8.100908 -1 -1 623 462 -1
+399 -945 -8.105949 -1 -1 681 494 -1
+394 -965 -8.107630 -1 -1 597 494 -1
+389 -985 -8.116030 -1 -1 681 574 -1
+385 -1001 -8.122751 800 -1 597 478 -1
+380 -1021 -8.131151 751 -1 494 531 -1
+375 -1041 -8.129472 714 -1 651 494 -1
+370 -1061 -8.132832 751 -1 478 494 -1
+366 -1077 -8.139552 681 -1 478 494 -1
+361 -1097 -8.158031 574 -1 462 512 -1
+356 -1115 -8.179872 574 -1 434 531 597
+351 -1135 -8.194992 494 -1 397 478 347
+347 -1151 -8.200032 494 -1 375 574 301
+342 -1171 -8.206753 494 -1 365 552 751
+335 -1191 -8.215154 462 -1 315 651 623
+328 -1211 -8.228594 434 -1 307 478 574
+318 -1231 -8.236995 397 -1 270 434 462
+253 -1384 -7.969877 224 221 176 213 347
+257 -1429 -7.625478 282 181 203 166 -1
+276 -1469 -7.274359 531 171 147 160 -1
+300 -1495 -6.997160 800 207 105 186 -1
+337 -1516 -6.661161 -1 301 107 307 -1
+381 -1524 -6.320123 -1 800 130 142 -1
+463 -1494 -5.622926 -1 -1 791 115 -1
+487 -1467 -5.340686 -1 -1 -1 145 397
+513 -1407 -5.024848 -1 -1 -1 330 397
+517 -1390 -5.021488 -1 -1 -1 365 375
+527 -1350 -5.039967 -1 -1 -1 651 434
+531 -1334 -5.041646 -1 -1 -1 751 434
+536 -1314 -5.038287 -1 -1 -1 751 531
+541 -1294 -5.034927 -1 -1 -1 791 574
+545 -1278 -5.039967 -1 -1 -1 791 531
+550 -1258 -5.046686 -1 -1 -1 -1 597
+555 -1239 -5.063486 -1 -1 -1 800 714
+559 -1223 -5.076925 -1 714 -1 791 597
+564 -1203 -5.083645 -1 -1 -1 791 751
+571 -1183 -5.088685 -1 -1 -1 447 -1
+578 -1167 -5.098764 -1 -1 -1 421 -1
+588 -1147 -5.100444 -1 -1 -1 347 -1
+598 -1127 -5.095405 -1 -1 -1 447 -1
+606 -1111 -5.095405 -1 -1 -1 434 -1
+616 -1089 -5.088685 -1 -1 -1 462 623
+626 -1069 -5.092044 -1 -1 -1 -1 751
+634 -1053 -5.095404 751 -1 -1 -1 800
+642 -1033 -5.110524 512 -1 -1 -1 714
+669 -978 -5.142443 623 -1 -1 -1 -1
+679 -959 -5.154203 751 -1 -1 -1 -1
+687 -943 -5.157563 494 791 -1 -1 791
+697 -923 -5.154203 -1 -1 -1 -1 -1
+705 -907 -5.150843 -1 -1 -1 -1 681
+715 -887 -5.152523 -1 -1 -1 -1 -1
+725 -867 -5.155883 -1 -1 -1 -1 751
+733 -851 -5.160923 -1 -1 800 -1 -1
+743 -832 -5.174362 -1 -1 -1 -1 -1
+753 -816 -5.191163 -1 -1 800 -1 -1
+781 -762 -5.221402 -1 -1 681 -1 791
+789 -746 -5.224761 -1 -1 623 681 574
+799 -726 -5.224761 -1 -1 651 -1 791
+807 -710 -5.223082 -1 -1 623 -1 597
+817 -690 -5.224761 -1 -1 494 -1 791
+827 -670 -5.224761 -1 -1 552 -1 751
+835 -654 -5.231481 -1 -1 531 623 597
+845 -638 -5.244921 -1 -1 447 791 714
+855 -623 -5.260041 -1 -1 447 681 714
+865 -608 -5.278520 -1 -1 434 -1 751
+873 -595 -5.283560 -1 714 434 751 434
+883 -580 -5.295319 -1 -1 375 574 347
+901 -551 -5.305399 -1 651 330 531 462
+911 -535 -5.315479 -1 -1 322 531 800
+922 -518 -5.313799 -1 -1 322 494 -1
Index: branches/scout/projects/mapping/matlab/data/input3.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input3.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input3.txt	(revision 1346)
@@ -0,0 +1,2214 @@
+0 0 0.001680 154 -1 -1 -1 111
+3 0 0.058800 140 -1 -1 -1 117
+6 0 0.112560 127 -1 -1 -1 119
+12 2 0.226799 117 -1 -1 -1 129
+16 3 0.288959 106 597 -1 -1 140
+19 4 0.351119 -1 447 -1 -1 152
+25 6 0.394799 -1 347 -1 -1 160
+28 7 0.399839 -1 307 -1 -1 156
+34 9 0.396479 -1 315 -1 -1 158
+37 10 0.393119 -1 282 -1 -1 152
+43 12 0.379679 -1 294 -1 751 149
+108 29 0.324239 -1 241 -1 -1 109
+120 32 0.312479 -1 241 -1 -1 105
+124 33 0.310799 -1 232 -1 -1 -1
+132 35 0.304079 -1 217 -1 -1 -1
+136 36 0.300719 -1 203 -1 -1 -1
+144 38 0.295679 -1 210 -1 -1 -1
+148 39 0.295679 -1 200 -1 -1 -1
+156 41 0.292319 -1 197 -1 -1 -1
+160 42 0.288959 -1 186 -1 -1 -1
+164 43 0.288959 -1 194 -1 -1 -1
+208 55 0.262079 -1 189 -1 -1 -1
+218 58 0.253679 -1 194 -1 -1 -1
+221 59 0.250319 -1 189 -1 -1 -1
+227 61 0.241919 -1 194 -1 -1 -1
+230 62 0.238559 -1 194 -1 -1 -1
+233 63 0.231839 -1 186 -1 -1 -1
+239 65 0.221759 -1 197 -1 -1 -1
+296 84 0.174719 -1 186 -1 -1 -1
+307 86 -0.278879 -1 421 -1 -1 -1
+307 86 -0.554399 -1 751 -1 -1 -1
+307 86 -1.167597 597 -1 -1 -1 -1
+307 86 -1.236477 651 -1 -1 -1 -1
+307 86 -1.379276 800 -1 -1 -1 -1
+307 86 -1.451516 -1 -1 -1 -1 -1
+307 86 -1.597676 -1 -1 -1 -1 -1
+307 86 -1.669915 -1 -1 -1 -1 -1
+307 86 -1.740475 -1 -1 -1 -1 133
+307 86 -1.881595 -1 -1 -1 -1 158
+307 86 -1.948795 -1 -1 -1 -1 -1
+305 82 -2.036154 -1 -1 -1 -1 791
+303 79 -2.064714 -1 -1 -1 -1 512
+283 47 -2.170554 -1 -1 -1 -1 651
+279 41 -2.178954 -1 -1 -1 -1 623
+277 38 -2.182314 -1 -1 -1 -1 597
+273 32 -2.187354 -1 -1 -1 -1 714
+271 29 -2.190714 -1 -1 -1 -1 -1
+266 23 -2.194074 -1 -1 -1 -1 791
+264 20 -2.197434 -1 -1 -1 -1 -1
+259 14 -2.199114 -1 -1 -1 -1 -1
+257 11 -2.202474 -1 -1 -1 -1 -1
+255 8 -2.202474 -1 -1 -1 -1 -1
+251 2 -2.209194 -1 -1 -1 -1 -1
+249 -1 -2.212554 -1 -1 -1 -1 791
+245 -7 -2.219274 -1 -1 -1 -1 791
+243 -10 -2.224313 -1 -1 -1 -1 -1
+238 -16 -2.232713 -1 -1 -1 -1 -1
+236 -19 -2.239434 -1 -1 -1 -1 -1
+232 -25 -2.251194 -1 -1 -1 -1 -1
+230 -28 -2.259593 -1 -1 -1 -1 -1
+226 -34 -2.269674 -1 -1 -1 -1 -1
+224 -37 -2.276394 -1 -1 -1 -1 -1
+222 -40 -2.284794 -1 -1 -1 -1 -1
+218 -46 -2.294873 -1 -1 -1 -1 -1
+216 -49 -2.299913 -1 -1 -1 -1 -1
+212 -55 -2.309993 -1 -1 -1 -1 -1
+209 -58 -2.315033 -1 -1 -1 -1 -1
+204 -64 -2.326793 -1 -1 -1 -1 -1
+201 -67 -2.330153 -1 -1 -1 -1 -1
+195 -73 -2.340233 -1 -1 651 -1 -1
+192 -76 -2.343593 -1 -1 -1 -1 -1
+189 -79 -2.348633 421 -1 -1 -1 -1
+183 -85 -2.357033 -1 -1 -1 -1 -1
+180 -88 -2.362073 -1 -1 -1 -1 -1
+174 -94 -2.368793 -1 -1 -1 -1 -1
+171 -97 -2.373833 791 -1 -1 -1 -1
+165 -103 -2.380553 -1 -1 -1 -1 -1
+162 -106 -2.383913 -1 -1 -1 -1 -1
+156 -112 -2.390633 -1 -1 -1 -1 -1
+153 -115 -2.392313 -1 -1 -1 -1 -1
+147 -121 -2.399033 597 -1 -1 -1 -1
+144 -124 -2.400712 -1 -1 -1 -1 -1
+141 -127 -2.405752 -1 -1 -1 -1 -1
+135 -133 -2.409112 -1 -1 714 -1 -1
+132 -136 -2.412472 -1 -1 714 -1 -1
+126 -142 -2.417512 -1 -1 791 -1 -1
+123 -145 -2.420872 -1 -1 791 -1 -1
+117 -151 -2.427593 -1 -1 -1 -1 -1
+114 -154 -2.432632 -1 -1 681 -1 -1
+108 -160 -2.437672 -1 -1 751 -1 -1
+105 -162 -2.441032 -1 -1 681 -1 -1
+99 -167 -2.449432 -1 -1 681 -1 -1
+96 -169 -2.454472 -1 -1 751 -1 -1
+90 -174 -2.461192 -1 -1 714 -1 -1
+87 -176 -2.467912 -1 -1 681 -1 -1
+81 -181 -2.476312 -1 -1 623 -1 -1
+78 -183 -2.476312 -1 -1 681 -1 -1
+72 -187 -2.488072 -1 -1 623 -1 -1
+69 -189 -2.491432 -1 800 623 -1 -1
+63 -193 -2.501512 -1 -1 597 -1 -1
+60 -195 -2.508232 -1 -1 651 -1 -1
+51 -201 -2.528392 -1 -1 597 -1 -1
+48 -203 -2.535112 -1 -1 651 -1 -1
+42 -207 -2.546872 -1 -1 597 -1 -1
+39 -209 -2.551912 -1 -1 531 -1 -1
+33 -213 -2.565352 -1 751 531 -1 -1
+30 -215 -2.572073 -1 -1 623 -1 -1
+24 -219 -2.582152 -1 -1 531 -1 -1
+21 -221 -2.583832 -1 714 552 -1 -1
+3 -233 -2.609032 -1 800 494 -1 -1
+-4 -237 -2.615752 -1 714 447 -1 -1
+-7 -239 -2.619112 -1 714 434 -1 -1
+-17 -245 -2.630872 -1 751 434 -1 -1
+-23 -249 -2.637592 -1 800 434 -1 -1
+-26 -251 -2.640952 -1 681 478 -1 -1
+-33 -255 -2.647672 -1 714 421 -1 -1
+-36 -257 -2.651032 -1 651 408 -1 -1
+-42 -261 -2.661112 -1 574 356 -1 -1
+-45 -263 -2.666152 -1 623 386 -1 -1
+-52 -267 -2.674551 -1 494 408 -1 -1
+-55 -269 -2.681272 800 462 347 -1 -1
+-62 -273 -2.689672 -1 531 365 -1 -1
+-66 -275 -2.687992 -1 512 356 -1 -1
+-72 -279 -2.696392 -1 552 356 -1 -1
+-75 -281 -2.703112 651 434 338 -1 -1
+-83 -285 -2.708152 -1 462 330 -1 -1
+-87 -287 -2.711512 714 447 322 -1 -1
+-94 -290 -2.719912 -1 421 322 -1 -1
+-98 -292 -2.721591 751 434 301 -1 -1
+-105 -295 -2.731671 651 397 282 -1 -1
+-134 -304 -2.788791 623 315 250 -1 -1
+-140 -306 -2.805591 651 307 232 -1 -1
+-143 -307 -2.808951 597 282 232 -1 -1
+-152 -310 -2.800551 531 270 232 -1 -1
+-159 -313 -2.771991 597 260 213 -1 -1
+-173 -320 -2.679591 494 265 191 751 -1
+-181 -324 -2.622472 574 276 191 365 -1
+-195 -334 -2.503192 623 282 181 397 -1
+-238 -387 -2.054633 -1 462 169 237 -1
+-242 -395 -1.987433 574 512 178 217 -1
+-247 -411 -1.849674 -1 512 181 194 -1
+-249 -420 -1.780794 -1 597 217 186 -1
+-251 -438 -1.644714 -1 552 241 183 681
+-251 -455 -1.530474 -1 -1 260 194 -1
+-251 -462 -1.498554 -1 791 288 162 -1
+-249 -497 -1.483434 -1 -1 315 158 -1
+-249 -501 -1.486794 -1 714 301 169 -1
+-249 -509 -1.495194 -1 -1 288 162 -1
+-249 -513 -1.503594 -1 681 276 166 -1
+-249 -525 -1.515354 -1 -1 270 171 -1
+-249 -533 -1.525434 -1 552 260 169 -1
+-249 -537 -1.530474 -1 651 260 171 -1
+-249 -545 -1.538874 -1 597 241 171 -1
+-249 -549 -1.542234 -1 651 232 171 -1
+-249 -557 -1.548954 -1 552 228 164 -1
+-249 -565 -1.553994 -1 421 224 169 751
+-249 -569 -1.555674 -1 531 200 166 -1
+-249 -577 -1.560714 -1 462 207 169 -1
+-249 -581 -1.562394 -1 462 203 176 478
+-249 -589 -1.565754 -1 408 194 173 -1
+-249 -593 -1.564074 -1 386 181 173 -1
+-248 -608 -1.500234 -1 447 173 176 623
+-237 -651 -1.206235 -1 478 181 178 -1
+-233 -659 -1.135675 -1 365 191 181 -1
+-224 -674 -0.999596 -1 -1 228 194 -1
+-219 -681 -0.932396 -1 -1 250 189 -1
+-207 -694 -0.801356 -1 -1 315 178 -1
+-200 -700 -0.732477 -1 -1 356 178 -1
+-186 -710 -0.596397 -1 -1 375 166 -1
+-178 -714 -0.527517 791 -1 315 164 -1
+-162 -721 -0.389758 -1 -1 623 160 -1
+-141 -728 -0.315838 -1 -1 800 194 -1
+-135 -730 -0.334318 -1 -1 800 197 -1
+-126 -734 -0.394797 -1 -1 800 203 -1
+-122 -736 -0.435117 -1 -1 791 203 -1
+-117 -738 -0.530877 -1 -1 -1 207 -1
+-116 -739 -0.587997 791 -1 462 203 -1
+-113 -742 -0.690477 -1 -1 276 210 -1
+-108 -746 -0.697197 -1 800 265 191 -1
+-96 -756 -0.682077 -1 800 288 181 -1
+-90 -761 -0.671997 -1 800 301 217 -1
+-80 -769 -0.661917 -1 -1 365 217 -1
+-75 -773 -0.655197 -1 751 531 221 -1
+-67 -779 -0.655197 -1 623 681 224 -1
+-64 -782 -0.655197 386 751 714 224 -1
+-58 -787 -0.658557 -1 800 751 224 -1
+-31 -807 -0.692157 -1 597 651 213 -1
+-25 -812 -0.698877 714 531 791 224 -1
+-22 -814 -0.702237 -1 552 751 245 -1
+-16 -820 -0.710636 -1 552 714 245 -1
+-13 -823 -0.712317 -1 531 714 245 -1
+-7 -829 -0.717357 -1 397 623 241 -1
+-4 -832 -0.719037 -1 512 531 245 -1
+2 -838 -0.722396 -1 421 494 232 -1
+5 -841 -0.724077 -1 478 531 250 -1
+11 -847 -0.727437 -1 386 434 241 -1
+14 -850 -0.730797 -1 408 434 250 -1
+20 -856 -0.734156 -1 397 408 245 -1
+23 -859 -0.735837 -1 386 386 250 -1
+29 -865 -0.737516 -1 365 322 228 -1
+32 -868 -0.739196 -1 386 330 250 -1
+38 -874 -0.740876 -1 356 338 255 -1
+41 -877 -0.742556 651 322 315 245 -1
+47 -883 -0.742556 651 330 301 255 -1
+50 -886 -0.742556 -1 330 288 260 -1
+56 -892 -0.744236 791 315 294 260 -1
+59 -895 -0.747596 800 307 288 265 -1
+65 -901 -0.749276 791 288 255 255 -1
+68 -904 -0.745916 462 270 255 245 -1
+79 -913 -0.685437 791 265 250 265 -1
+93 -923 -0.589677 -1 255 221 276 -1
+101 -927 -0.535917 552 265 194 276 -1
+117 -935 -0.411597 -1 250 191 294 -1
+125 -938 -0.346078 531 301 183 294 -1
+142 -942 -0.211678 -1 330 181 217 -1
+150 -943 -0.146158 -1 365 178 347 -1
+168 -944 -0.010079 -1 421 171 397 -1
+177 -943 0.058801 -1 597 183 315 651
+195 -940 0.198241 -1 -1 194 232 -1
+203 -938 0.265441 -1 -1 207 203 -1
+219 -932 0.398160 -1 574 228 194 -1
+244 -920 0.500640 -1 -1 255 178 -1
+254 -914 0.517440 -1 -1 270 181 -1
+266 -908 0.527520 -1 -1 282 178 -1
+294 -894 0.532560 -1 -1 250 160 -1
+302 -890 0.530880 -1 -1 282 171 -1
+306 -888 0.525840 -1 -1 241 171 791
+314 -884 0.520800 -1 -1 265 164 -1
+318 -882 0.519120 -1 -1 270 164 -1
+326 -878 0.509040 -1 -1 265 166 -1
+329 -876 0.507360 -1 -1 265 162 -1
+336 -872 0.498960 -1 -1 250 158 -1
+339 -870 0.493920 -1 -1 245 166 -1
+346 -866 0.487200 -1 -1 250 166 -1
+350 -864 0.482160 -1 -1 260 164 -1
+358 -860 0.477120 -1 -1 245 162 -1
+362 -858 0.473760 -1 -1 245 162 -1
+386 -846 0.472080 -1 -1 232 158 -1
+394 -842 0.470400 -1 -1 237 154 -1
+398 -840 0.467040 -1 -1 224 149 -1
+408 -835 0.487200 -1 -1 250 156 -1
+414 -831 0.510720 -1 -1 237 151 -1
+425 -825 0.549360 -1 -1 260 149 -1
+447 -810 0.623280 -1 -1 307 149 -1
+461 -799 0.710639 -1 -1 301 145 -1
+468 -793 0.769439 -1 -1 408 144 -1
+480 -779 0.888719 -1 -1 338 145 -1
+485 -772 0.955919 -1 -1 241 151 -1
+494 -756 1.093678 -1 -1 751 152 -1
+497 -748 1.162558 -1 -1 -1 178 -1
+502 -734 1.234798 -1 -1 714 181 -1
+504 -728 1.254958 -1 -1 -1 194 -1
+508 -717 1.278478 -1 -1 800 210 -1
+509 -712 1.283518 -1 -1 -1 224 -1
+511 -704 1.285198 -1 -1 -1 232 -1
+512 -700 1.285198 -1 -1 791 241 -1
+514 -692 1.285198 -1 -1 800 241 -1
+515 -688 1.283518 -1 -1 -1 250 -1
+517 -680 1.281838 -1 -1 -1 265 -1
+518 -676 1.280158 -1 -1 791 276 -1
+520 -668 1.276798 -1 -1 -1 276 -1
+521 -664 1.275118 -1 -1 -1 282 -1
+523 -655 1.273438 -1 -1 791 288 -1
+524 -651 1.273438 -1 -1 791 301 -1
+526 -643 1.268397 -1 -1 681 315 -1
+527 -638 1.271757 -1 -1 791 315 -1
+529 -630 1.268397 -1 -1 714 330 -1
+530 -626 1.268397 -1 -1 714 347 -1
+532 -617 1.270077 -1 -1 791 347 -1
+535 -604 1.273438 -1 -1 681 356 -1
+536 -600 1.275118 574 -1 651 375 -1
+538 -591 1.275118 -1 -1 681 386 -1
+539 -586 1.278478 -1 -1 651 397 -1
+541 -578 1.278478 -1 -1 751 397 -1
+542 -574 1.276798 -1 -1 623 408 -1
+544 -565 1.276798 -1 -1 651 408 -1
+545 -561 1.273438 -1 -1 623 447 -1
+547 -553 1.270077 -1 -1 597 434 -1
+548 -549 1.266717 791 -1 623 447 -1
+550 -541 1.259997 -1 -1 623 408 -1
+553 -529 1.246557 -1 -1 597 478 -1
+563 -489 1.216317 -1 -1 512 478 -1
+566 -481 1.212957 -1 800 494 447 -1
+567 -477 1.212957 552 -1 494 462 -1
+570 -469 1.209597 -1 -1 494 434 -1
+572 -465 1.206237 -1 751 397 512 -1
+575 -457 1.202877 -1 791 434 421 -1
+577 -453 1.201197 462 714 397 408 -1
+580 -445 1.199517 681 714 434 375 -1
+583 -437 1.197837 -1 751 421 375 -1
+585 -433 1.192797 -1 681 365 338 -1
+589 -425 1.192797 -1 681 408 347 -1
+591 -421 1.192797 -1 681 408 307 -1
+595 -413 1.192797 -1 651 356 294 -1
+597 -409 1.196157 -1 597 397 276 -1
+599 -401 1.196157 552 597 386 260 -1
+601 -397 1.196157 -1 623 356 237 -1
+604 -389 1.197837 -1 623 307 232 -1
+606 -385 1.197837 -1 574 322 241 -1
+609 -377 1.197837 -1 494 338 237 -1
+611 -373 1.197837 -1 552 330 237 -1
+614 -365 1.196157 -1 494 322 260 -1
+618 -357 1.191117 -1 512 315 265 -1
+620 -353 1.191117 434 462 315 276 -1
+631 -329 1.169277 -1 434 276 408 -1
+635 -321 1.164237 -1 408 241 434 -1
+636 -318 1.159197 -1 356 245 531 -1
+639 -311 1.152477 -1 397 241 651 -1
+641 -307 1.149117 597 365 228 751 -1
+645 -299 1.144077 -1 356 221 -1 -1
+649 -291 1.139037 -1 330 213 -1 -1
+651 -287 1.135677 -1 322 213 -1 -1
+655 -279 1.132317 -1 315 203 -1 -1
+657 -275 1.128957 -1 294 191 -1 -1
+662 -265 1.152477 -1 282 181 -1 -1
+665 -258 1.184397 -1 270 183 -1 -1
+670 -242 1.280157 791 276 162 597 -1
+675 -207 1.532156 -1 421 164 276 -1
+674 -189 1.671596 -1 531 166 260 -1
+672 -180 1.747195 -1 -1 171 232 -1
+667 -162 1.888315 -1 -1 181 186 -1
+664 -154 1.958875 -1 -1 203 176 -1
+652 -133 2.123514 -1 -1 282 166 -1
+644 -122 2.168874 -1 -1 301 166 -1
+641 -118 2.177274 -1 -1 322 162 -1
+633 -107 2.180634 -1 -1 322 164 -1
+629 -101 2.178954 -1 -1 322 164 -1
+623 -92 2.172235 800 -1 315 164 -1
+621 -89 2.168875 -1 -1 301 166 -1
+617 -83 2.168875 -1 -1 322 166 -1
+615 -79 2.167195 -1 -1 322 169 -1
+611 -71 2.167195 -1 -1 338 166 -1
+609 -68 2.167195 -1 -1 322 164 -1
+605 -60 2.165515 -1 -1 338 164 -1
+603 -57 2.162155 -1 -1 307 160 -1
+599 -50 2.157115 681 -1 307 162 -1
+596 -46 2.158795 -1 -1 322 160 -1
+592 -39 2.153755 -1 -1 301 160 -1
+590 -35 2.152075 -1 -1 347 164 -1
+586 -27 2.148715 -1 -1 338 162 -1
+584 -23 2.147035 -1 -1 338 162 -1
+580 -16 2.148715 -1 -1 322 156 -1
+578 -12 2.148715 -1 -1 322 162 -1
+574 -4 2.150395 -1 -1 338 164 -1
+572 -1 2.150395 -1 -1 338 152 -1
+567 7 2.153754 -1 -1 322 154 -1
+564 11 2.155434 -1 -1 330 164 -1
+548 42 2.155434 -1 -1 338 160 -1
+546 45 2.152074 714 -1 338 164 -1
+542 53 2.148714 -1 -1 330 169 -1
+540 56 2.145354 -1 -1 347 166 -1
+536 62 2.138634 -1 -1 315 164 -1
+534 66 2.135274 -1 -1 330 169 -1
+530 72 2.128554 -1 -1 338 158 -1
+528 75 2.121834 -1 -1 330 162 -1
+524 81 2.116794 -1 -1 347 166 -1
+522 84 2.113434 531 -1 338 166 -1
+518 90 2.110074 -1 -1 315 166 -1
+516 93 2.110074 -1 -1 338 166 -1
+500 125 2.099995 -1 -1 322 166 -1
+498 129 2.096635 651 -1 338 166 -1
+494 137 2.094955 -1 -1 330 166 -1
+492 141 2.093275 -1 -1 330 169 -1
+488 149 2.088235 -1 -1 330 169 -1
+486 153 2.086555 -1 -1 330 160 -1
+482 161 2.086555 -1 -1 322 166 -1
+480 165 2.084875 -1 -1 330 166 -1
+476 173 2.084875 -1 -1 338 169 -1
+474 177 2.084875 751 -1 330 169 -1
+470 185 2.088235 -1 -1 347 164 -1
+468 189 2.088235 -1 -1 338 164 -1
+464 196 2.089915 -1 -1 322 171 -1
+462 200 2.091595 -1 -1 338 171 -1
+458 208 2.091595 -1 -1 365 160 -1
+456 212 2.089915 -1 -1 356 166 -1
+452 220 2.089915 -1 -1 338 164 800
+438 248 2.078155 -1 -1 347 166 -1
+434 255 2.074795 -1 -1 347 171 -1
+432 258 2.069755 -1 -1 347 171 -1
+428 265 2.061355 -1 -1 330 171 -1
+426 268 2.057995 -1 -1 356 171 -1
+422 274 2.047915 531 -1 322 166 -1
+420 277 2.046235 -1 -1 330 164 -1
+416 284 2.042875 -1 -1 288 173 -1
+414 287 2.036155 -1 -1 322 171 -1
+402 309 2.027755 -1 -1 338 162 -1
+396 321 2.022716 -1 -1 294 171 -1
+390 333 2.014316 -1 -1 315 171 -1
+386 340 2.009276 -1 -1 330 173 -1
+384 344 2.007596 -1 -1 330 171 -1
+380 352 2.005916 -1 -1 347 169 -1
+378 356 2.002556 -1 -1 338 171 -1
+374 364 2.000876 -1 -1 315 171 -1
+372 368 2.000876 -1 -1 315 171 -1
+368 376 1.999196 -1 -1 322 171 -1
+366 380 2.000876 -1 -1 347 173 -1
+362 388 2.002556 -1 -1 330 169 -1
+360 392 2.000876 -1 -1 322 166 -1
+356 400 1.999196 -1 -1 307 169 -1
+354 404 1.999196 -1 -1 322 171 751
+350 412 2.000876 -1 -1 338 171 -1
+348 416 1.999196 -1 -1 301 160 -1
+344 424 1.997516 -1 -1 338 166 -1
+342 428 1.997516 -1 -1 338 171 -1
+327 459 1.977356 -1 -1 315 171 -1
+321 471 1.970636 -1 -1 307 171 -1
+320 474 1.965596 -1 -1 315 171 -1
+318 481 1.958876 -1 -1 315 171 -1
+313 493 1.953836 -1 -1 294 164 -1
+312 497 1.950476 -1 -1 315 171 -1
+309 505 1.947116 -1 -1 315 171 -1
+308 509 1.940396 -1 -1 282 166 -1
+304 517 1.940396 -1 -1 322 166 -1
+303 521 1.935356 -1 -1 307 158 -1
+301 529 1.933676 -1 800 315 164 -1
+300 533 1.928636 -1 -1 294 166 -1
+298 541 1.923596 -1 -1 301 166 -1
+297 545 1.923596 -1 -1 294 171 -1
+295 553 1.916876 -1 -1 294 171 -1
+294 557 1.916876 -1 714 307 171 -1
+292 565 1.915196 -1 800 294 171 -1
+291 569 1.913516 -1 800 301 166 -1
+289 577 1.911836 -1 651 282 169 -1
+288 581 1.911836 -1 791 282 166 -1
+286 589 1.911836 -1 651 294 166 -1
+285 593 1.910156 -1 651 288 164 -1
+283 601 1.906796 -1 597 294 169 751
+281 605 1.910156 -1 714 301 166 -1
+279 613 1.905116 -1 512 270 166 -1
+277 621 1.906796 -1 597 288 166 -1
+276 625 1.905116 -1 531 260 166 -1
+274 633 1.903436 -1 574 282 166 -1
+273 637 1.900076 -1 597 294 162 -1
+271 645 1.896716 -1 531 265 164 -1
+270 649 1.898396 -1 494 255 164 800
+268 657 1.891676 651 531 270 162 -1
+267 661 1.888316 800 552 265 164 -1
+265 669 1.881596 800 552 265 164 -1
+264 673 1.879916 651 434 265 164 -1
+262 680 1.871516 751 462 265 164 -1
+260 686 1.863116 714 447 255 160 -1
+259 690 1.859756 623 462 255 164 -1
+257 698 1.853036 597 421 255 164 751
+256 702 1.847996 512 421 250 160 -1
+253 714 1.839596 623 375 237 162 -1
+251 722 1.834556 512 375 237 160 -1
+249 730 1.829516 512 386 237 160 -1
+248 734 1.824476 421 338 228 160 -1
+246 742 1.821116 434 347 224 158 -1
+245 746 1.821116 512 315 224 158 -1
+243 754 1.816076 397 330 217 158 -1
+242 758 1.814396 397 330 200 156 -1
+240 766 1.812716 408 301 210 158 -1
+239 770 1.812716 375 288 203 152 -1
+237 779 1.822796 386 282 200 156 -1
+232 794 1.895036 408 265 169 152 -1
+229 802 1.947115 397 250 160 105 -1
+199 845 2.340235 -1 260 186 158 -1
+185 856 2.479674 574 270 186 166 -1
+170 865 2.615754 -1 288 181 181 -1
+163 869 2.679594 -1 365 173 197 -1
+147 875 2.815673 -1 386 173 164 -1
+139 877 2.884553 -1 421 169 178 -1
+121 880 3.022312 -1 512 178 365 -1
+112 880 3.089512 -1 -1 194 224 -1
+94 879 3.227272 -1 574 213 200 -1
+85 878 3.296152 -1 -1 237 194 -1
+69 874 3.378471 -1 -1 250 189 -1
+62 872 3.403671 800 -1 288 173 -1
+50 868 3.437271 681 -1 301 178 -1
+45 866 3.445671 -1 -1 294 173 -1
+35 862 3.457431 -1 -1 307 169 -1
+31 861 3.457431 -1 -1 322 166 -1
+23 859 3.460791 -1 -1 307 176 -1
+19 858 3.464151 -1 -1 322 176 -1
+11 856 3.464151 -1 -1 301 156 -1
+7 855 3.464151 -1 -1 315 173 -1
+-1 853 3.464151 -1 -1 307 166 -1
+-5 852 3.465831 -1 -1 301 164 -1
+-13 850 3.469191 -1 -1 315 171 -1
+-17 849 3.467511 -1 -1 315 169 -1
+-25 847 3.465831 -1 -1 288 166 -1
+-29 846 3.465831 -1 -1 322 166 -1
+-37 844 3.460791 -1 -1 322 169 -1
+-41 843 3.459111 -1 -1 322 164 -1
+-48 841 3.452391 -1 -1 301 166 791
+-52 840 3.449031 -1 -1 307 171 -1
+-59 838 3.438951 714 -1 301 160 -1
+-63 837 3.437271 -1 -1 294 171 -1
+-71 835 3.430552 -1 -1 301 171 -1
+-75 834 3.427191 -1 -1 301 171 -1
+-83 832 3.422152 -1 -1 294 171 -1
+-87 831 3.422152 -1 -1 301 166 -1
+-95 829 3.420472 -1 -1 288 171 -1
+-99 828 3.420472 -1 -1 301 164 -1
+-107 826 3.420472 -1 -1 301 169 -1
+-111 825 3.418792 -1 -1 301 166 -1
+-119 823 3.422152 -1 -1 301 169 -1
+-123 822 3.418792 -1 -1 294 164 -1
+-131 820 3.420471 -1 -1 322 164 -1
+-135 819 3.420471 -1 -1 294 164 -1
+-143 817 3.420471 -1 -1 294 160 -1
+-147 816 3.420471 -1 -1 301 164 -1
+-155 814 3.420471 791 751 315 164 -1
+-159 813 3.418792 -1 -1 288 164 -1
+-167 811 3.418792 -1 -1 307 164 -1
+-171 810 3.420471 -1 -1 294 164 -1
+-179 808 3.418792 -1 -1 322 166 -1
+-183 807 3.418792 -1 -1 294 156 -1
+-191 805 3.418792 -1 -1 315 162 552
+-195 804 3.420471 -1 -1 301 164 -1
+-203 802 3.420471 -1 -1 307 154 -1
+-207 801 3.420471 -1 -1 301 160 -1
+-215 799 3.422151 -1 -1 307 162 -1
+-219 798 3.418791 -1 -1 294 162 -1
+-227 796 3.418791 -1 -1 294 158 -1
+-243 792 3.413751 -1 -1 301 160 552
+-251 790 3.408711 -1 -1 315 160 -1
+-255 789 3.403672 -1 -1 307 160 -1
+-263 787 3.396951 -1 -1 315 160 -1
+-267 786 3.391912 -1 -1 307 162 -1
+-275 784 3.385192 -1 800 288 160 -1
+-279 783 3.380152 -1 -1 301 160 -1
+-287 781 3.378472 -1 800 294 164 -1
+-291 780 3.375112 -1 -1 294 158 -1
+-299 778 3.370072 -1 -1 294 160 -1
+-303 777 3.370072 -1 681 282 162 -1
+-311 775 3.370072 -1 714 294 160 -1
+-327 771 3.370072 -1 -1 276 158 -1
+-335 769 3.370072 -1 800 288 156 -1
+-339 768 3.371752 -1 681 301 158 681
+-347 766 3.368392 -1 791 294 158 -1
+-351 765 3.368392 -1 800 294 158 -1
+-359 763 3.368392 -1 800 288 156 -1
+-367 761 3.368392 681 714 294 154 -1
+-371 760 3.366712 -1 751 301 156 -1
+-379 758 3.368392 651 714 301 158 -1
+-383 757 3.368392 574 791 301 158 791
+-392 755 3.370072 447 714 301 158 681
+-396 754 3.370072 421 531 307 158 751
+-404 752 3.371752 397 574 282 152 -1
+-408 751 3.371752 434 651 282 152 751
+-417 749 3.375112 347 623 294 152 681
+-425 747 3.371752 338 462 270 156 651
+-429 746 3.375112 315 552 265 158 751
+-437 744 3.373432 265 531 276 154 714
+-441 743 3.373432 276 531 265 158 623
+-449 741 3.368392 276 494 237 151 681
+-457 739 3.365032 282 270 237 158 751
+-461 738 3.359992 203 462 237 156 751
+-469 736 3.353272 265 478 213 158 681
+-473 735 3.348232 260 434 224 158 681
+-481 733 3.341512 260 434 210 160 651
+-489 731 3.334792 294 421 183 151 651
+-493 730 3.329752 288 386 200 158 651
+-501 728 3.323032 276 338 197 156 651
+-506 727 3.331432 315 330 183 154 597
+-520 724 3.391912 265 330 166 158 791
+-536 719 3.494391 250 356 224 152 681
+-544 716 3.548151 512 322 375 156 714
+-557 710 3.613671 -1 356 301 154 800
+-563 707 3.633831 -1 356 276 160 -1
+-573 701 3.660711 800 330 265 171 -1
+-577 698 3.669111 -1 294 241 160 751
+-585 694 3.670791 -1 315 241 176 -1
+-593 690 3.677511 -1 276 241 176 -1
+-617 673 3.810230 531 265 197 191 -1
+-629 661 3.926150 408 307 189 207 -1
+-635 655 3.989990 397 322 181 203 -1
+-665 549 4.732547 512 386 255 183 -1
+-665 539 4.747667 494 375 250 189 -1
+-665 534 4.745987 478 356 221 183 -1
+-665 524 4.749347 574 347 228 181 -1
+-665 515 4.751027 478 330 213 176 -1
+-665 503 4.754387 365 301 200 181 -1
+-665 498 4.759427 447 294 186 178 -1
+-663 483 4.829987 434 294 178 164 -1
+-662 475 4.877027 494 241 365 176 -1
+-658 458 4.992946 597 260 365 171 -1
+-651 442 5.122305 651 265 255 166 -1
+-647 434 5.189505 -1 276 213 166 800
+-638 420 5.322225 -1 245 197 183 -1
+-633 413 5.389424 -1 294 194 194 -1
+-621 401 5.523824 -1 347 183 210 -1
+-614 396 5.591023 -1 386 186 217 751
+-599 386 5.728783 -1 447 181 171 -1
+-583 378 5.866542 -1 623 189 288 512
+-575 375 5.933742 -1 -1 191 347 531
+-558 370 6.073182 -1 -1 213 250 512
+-549 369 6.142061 421 -1 245 217 478
+-533 368 6.219341 -1 -1 255 203 512
+-526 368 6.244541 -1 -1 260 200 478
+-513 368 6.276460 -1 -1 270 189 462
+-508 368 6.286540 -1 -1 307 191 478
+-498 368 6.296620 -1 -1 276 186 494
+-493 368 6.301660 -1 -1 294 186 478
+-483 368 6.301660 -1 -1 301 183 512
+-475 368 6.299980 -1 -1 301 183 447
+-439 368 6.284861 -1 -1 315 181 478
+-435 368 6.281501 -1 -1 301 181 512
+-427 368 6.278141 -1 -1 301 183 494
+-423 368 6.276462 -1 -1 260 181 531
+-415 368 6.269742 -1 -1 307 181 478
+-411 368 6.269742 -1 -1 294 176 531
+-403 368 6.266382 -1 -1 294 181 531
+-399 368 6.263022 -1 -1 288 178 512
+-391 368 6.259663 -1 -1 338 173 531
+-383 368 6.261343 -1 -1 -1 169 552
+-379 368 6.261343 462 -1 -1 173 494
+-371 368 6.259663 597 -1 -1 173 531
+-367 368 6.257983 -1 -1 -1 166 552
+-359 368 6.257983 -1 -1 -1 171 531
+-355 368 6.256303 751 -1 -1 166 574
+-347 368 6.256303 791 -1 -1 171 597
+-342 368 6.257983 574 -1 -1 166 512
+-334 368 6.261343 597 -1 -1 169 574
+-330 368 6.259663 494 -1 -1 164 494
+-321 368 6.263022 447 -1 -1 166 574
+-316 368 6.264702 800 -1 -1 164 552
+-308 368 6.266382 531 -1 -1 158 597
+-303 368 6.269742 574 -1 791 158 574
+-294 368 6.269742 651 -1 -1 160 512
+-289 368 6.271422 751 -1 -1 162 574
+-275 368 6.274782 597 -1 -1 160 552
+-265 368 6.276462 421 -1 -1 149 623
+-257 368 6.273102 597 -1 -1 156 552
+-253 368 6.269742 681 -1 -1 158 574
+-244 368 6.268062 434 -1 -1 152 597
+-240 368 6.269742 494 -1 -1 154 623
+-232 368 6.266382 494 -1 -1 151 597
+-228 368 6.261342 494 -1 -1 156 552
+-220 368 6.257982 338 -1 -1 152 597
+-216 368 6.254622 322 -1 -1 154 574
+-208 368 6.249582 531 751 -1 151 531
+-204 368 6.246222 651 -1 -1 147 623
+-195 368 6.256303 574 -1 -1 154 597
+-182 368 6.306703 408 -1 -1 152 651
+-176 368 6.323503 386 -1 -1 151 597
+-165 368 6.338622 386 -1 -1 151 651
+-160 368 6.341982 315 -1 -1 171 623
+-151 368 6.345342 397 -1 -1 315 651
+-147 368 6.345342 462 791 -1 751 681
+-135 368 6.341982 434 681 -1 -1 651
+-127 368 6.340302 421 800 -1 -1 651
+-123 368 6.340302 434 -1 -1 -1 751
+-115 368 6.340302 356 -1 -1 -1 714
+-111 368 6.336942 338 800 -1 -1 552
+-102 368 6.338622 356 791 -1 -1 714
+-98 368 6.338622 434 800 -1 -1 681
+-89 368 6.341982 365 800 -1 -1 651
+-80 368 6.343662 386 800 -1 -1 681
+-76 368 6.345342 421 651 -1 -1 751
+-67 368 6.348701 386 623 -1 -1 651
+-63 368 6.347022 421 574 -1 -1 651
+-55 368 6.348701 386 791 -1 -1 681
+-51 368 6.350381 301 597 651 -1 651
+-43 368 6.348701 421 531 -1 -1 681
+-39 368 6.347022 421 651 -1 -1 751
+-31 368 6.345342 386 574 -1 -1 531
+-27 368 6.345342 434 623 714 -1 597
+-19 368 6.338622 408 512 791 -1 751
+-15 368 6.336942 574 574 -1 -1 597
+-7 368 6.331903 434 552 597 -1 751
+-3 368 6.326862 397 574 681 -1 714
+5 368 6.320142 447 531 714 -1 751
+13 368 6.315102 478 512 681 -1 791
+17 368 6.313422 531 512 651 -1 751
+25 368 6.311742 512 478 597 -1 681
+29 368 6.308383 597 478 462 -1 681
+37 368 6.306703 478 421 494 -1 651
+41 368 6.306703 531 462 552 -1 597
+49 368 6.305023 478 434 597 -1 714
+53 368 6.303343 512 421 494 -1 751
+61 368 6.299983 494 421 531 -1 651
+66 368 6.301663 462 397 512 -1 800
+74 368 6.298303 478 397 478 -1 751
+82 368 6.296623 512 386 421 -1 681
+86 368 6.296623 462 365 447 -1 714
+95 368 6.296623 462 356 408 -1 651
+99 368 6.294943 434 338 397 -1 714
+108 368 6.294943 408 330 408 -1 681
+112 368 6.296623 408 315 365 -1 751
+120 368 6.298303 408 307 386 -1 651
+125 368 6.301663 397 282 386 -1 176
+140 369 6.368863 397 270 315 -1 -1
+157 372 6.471343 408 255 315 -1 597
+165 374 6.528462 365 260 250 -1 751
+182 380 6.664542 276 255 228 -1 -1
+190 384 6.733421 237 260 217 -1 -1
+204 393 6.866141 282 265 210 574 -1
+211 398 6.933341 -1 276 183 791 -1
+223 409 7.064380 800 330 164 478 -1
+234 422 7.200459 623 347 183 434 -1
+239 429 7.269339 494 397 183 322 714
+247 445 7.405418 623 250 186 294 751
+250 453 7.472618 597 265 191 255 -1
+255 469 7.608697 751 -1 213 217 -1
+258 486 7.744777 -1 -1 237 210 -1
+258 495 7.811976 -1 531 255 194 -1
+257 512 7.932936 -1 574 245 186 -1
+256 520 7.971576 -1 574 288 178 -1
+254 534 8.020295 -1 597 265 178 -1
+253 540 8.032055 -1 574 237 183 -1
+251 550 8.045495 -1 512 213 186 -1
+250 555 8.048855 -1 512 200 183 -1
+248 565 8.060616 -1 552 207 186 -1
+240 594 8.139575 -1 512 651 191 -1
+239 598 8.139575 623 462 751 189 -1
+237 606 8.136214 -1 462 597 191 -1
+236 610 8.132854 -1 462 552 194 -1
+234 618 8.127814 -1 434 681 186 -1
+233 622 8.127814 -1 408 623 200 -1
+231 630 8.124454 -1 386 597 200 -1
+230 634 8.122773 -1 397 512 197 -1
+228 642 8.121093 -1 386 462 203 -1
+227 646 8.121093 574 386 447 194 -1
+225 654 8.121093 791 338 408 203 -1
+224 658 8.121093 -1 338 356 203 -1
+222 666 8.117732 751 307 338 194 -1
+220 674 8.117732 651 294 322 200 -1
+219 678 8.116052 751 282 282 213 -1
+217 686 8.114371 623 294 288 213 -1
+216 691 8.117731 623 265 282 217 -1
+217 681 7.964851 512 270 270 224 -1
+214 694 8.070691 -1 265 217 217 -1
+210 707 8.176531 -1 255 207 221 -1
+208 712 8.216850 -1 265 203 237 -1
+211 686 7.990051 800 270 194 255 -1
+211 685 7.979971 -1 338 186 221 -1
+211 684 7.968211 -1 356 178 194 574
+211 673 7.877491 -1 397 176 125 -1
+211 664 7.803572 -1 512 183 307 -1
+209 658 7.754852 -1 -1 189 255 -1
+209 668 7.835492 -1 681 203 237 800
+209 682 7.934612 -1 791 224 207 -1
+209 686 7.943012 -1 -1 241 200 -1
+209 686 7.887572 -1 -1 255 197 -1
+209 683 7.835492 -1 -1 260 194 -1
+209 679 7.734692 -1 -1 270 186 -1
+208 676 7.679252 -1 -1 294 181 -1
+207 670 7.565012 -1 -1 270 186 -1
+205 665 7.492773 -1 -1 255 176 -1
+197 652 7.304613 -1 -1 276 183 -1
+197 652 7.271013 -1 -1 270 178 -1
+202 660 7.276053 -1 -1 270 171 -1
+204 664 7.276053 -1 -1 265 183 -1
+209 672 7.279413 -1 -1 270 178 -1
+210 673 7.252533 -1 -1 282 171 -1
+213 678 7.232373 -1 -1 265 171 -1
+214 680 7.218933 -1 -1 294 173 -1
+217 685 7.190373 -1 -1 270 173 -1
+218 687 7.139974 -1 -1 282 173 -1
+218 687 7.108054 -1 -1 265 173 -1
+218 687 7.074454 -1 -1 265 171 -1
+216 685 6.988774 -1 -1 250 171 -1
+215 684 6.945094 -1 -1 270 164 -1
+213 684 6.867814 -1 -1 270 166 -1
+211 683 6.817414 -1 -1 255 169 -1
+205 681 6.698135 -1 -1 265 164 -1
+197 679 6.565415 -1 -1 265 166 -1
+191 678 6.486455 -1 -1 255 166 -1
+179 677 6.326856 -1 -1 241 162 -1
+179 677 6.291576 -1 -1 245 164 -1
+194 678 6.335256 -1 -1 250 160 -1
+199 678 6.338615 -1 -1 255 162 -1
+206 678 6.331895 -1 -1 250 164 -1
+209 678 6.323495 -1 -1 250 162 -1
+216 678 6.273096 -1 -1 241 158 -1
+217 678 6.217656 -1 -1 241 152 751
+215 678 6.170616 -1 -1 232 158 -1
+210 679 6.064776 -1 -1 241 154 -1
+209 679 6.024456 -1 -1 224 151 -1
+205 681 5.921977 -1 -1 237 154 -1
+203 682 5.871577 -1 -1 237 152 -1
+195 687 5.730457 -1 -1 241 149 -1
+193 689 5.580938 -1 -1 255 147 -1
+201 682 5.604458 -1 -1 276 140 -1
+206 678 5.636378 -1 -1 294 142 -1
+213 673 5.676698 -1 -1 356 144 -1
+214 672 5.678378 -1 -1 301 145 -1
+211 674 5.646458 681 -1 224 140 -1
+211 674 5.644778 552 478 478 147 -1
+201 684 5.537258 681 421 791 158 338
+194 692 5.453258 531 -1 651 169 800
+192 695 5.384378 574 -1 800 191 -1
+197 689 5.417978 574 -1 -1 210 -1
+204 681 5.434778 574 -1 791 221 -1
+206 679 5.428058 623 -1 714 232 -1
+209 675 5.399498 574 791 681 241 -1
+211 673 5.355819 531 -1 714 245 -1
+210 674 5.313819 512 -1 651 245 -1
+209 678 5.216379 531 -1 791 276 -1
+208 680 5.169339 478 -1 651 276 -1
+205 687 5.019819 447 800 597 301 -1
+202 696 4.645180 408 531 623 347 -1
+202 688 4.640141 397 597 597 375 -1
+202 686 4.621661 397 623 494 365 -1
+202 681 4.589741 386 597 574 397 -1
+202 675 4.566221 365 531 531 386 -1
+202 673 4.547741 365 552 597 397 -1
+202 671 4.492302 315 512 597 408 -1
+202 671 4.455342 356 494 512 408 -1
+202 672 4.376382 338 478 552 397 -1
+203 674 4.325983 322 408 531 397 -1
+203 675 4.250382 330 447 531 347 -1
+206 679 4.147902 276 447 531 315 -1
+208 682 4.087423 315 447 478 322 -1
+213 688 3.954703 276 421 494 301 -1
+217 691 3.882463 288 408 531 282 714
+229 699 3.709424 294 386 512 255 -1
+229 699 3.674144 276 365 447 250 -1
+217 692 3.709424 276 356 462 217 -1
+213 689 3.711104 260 365 494 241 -1
+207 685 3.702704 260 356 447 210 -1
+202 682 3.682544 232 338 434 228 -1
+200 681 3.659024 241 294 447 217 -1
+198 680 3.564944 224 315 421 232 -1
+197 680 3.521264 221 330 434 245 -1
+198 681 3.423824 210 288 375 255 -1
+199 681 3.371744 200 330 408 250 -1
+202 681 3.222225 191 338 356 265 -1
+203 681 3.148305 119 800 356 356 -1
+203 681 3.002145 183 751 315 531 434
+203 681 2.857666 183 241 330 478 356
+203 681 2.788786 194 260 322 494 260
+203 681 2.642626 210 356 347 462 250
+204 681 2.568707 241 356 322 478 232
+205 680 2.429267 245 330 347 447 224
+206 679 2.358707 288 270 330 447 210
+215 665 1.999188 447 265 365 512 194
+218 657 1.879909 255 250 338 531 197
+213 672 1.903429 -1 210 322 494 210
+211 678 1.889989 189 217 315 462 210
+209 686 1.816069 166 197 276 434 200
+209 690 1.710229 194 171 265 478 194
+209 692 1.654789 194 158 265 478 197
+209 694 1.528790 178 151 294 494 178
+209 695 1.463270 158 140 397 552 191
+209 695 1.340630 129 136 800 751 203
+209 695 1.354070 125 130 623 597 194
+209 695 1.375910 126 124 365 494 200
+209 693 1.419590 142 118 241 512 200
+209 692 1.441430 156 115 197 478 186
+209 692 1.501910 166 115 176 447 210
+209 690 1.523750 176 115 158 447 228
+209 684 1.540550 140 120 147 462 245
+209 677 1.548950 260 127 129 434 250
+209 672 1.545590 315 131 124 322 276
+208 656 1.485110 194 140 119 260 315
+208 656 1.518710 186 162 114 245 338
+207 668 1.664869 186 178 115 -1 365
+206 675 1.693429 183 178 114 -1 397
+206 679 1.696789 173 183 109 751 408
+206 685 1.686709 156 169 -1 597 408
+206 687 1.671589 160 164 -1 494 375
+206 691 1.639669 164 156 -1 347 386
+206 692 1.616149 149 140 -1 338 375
+206 692 1.565750 140 133 -1 315 356
+206 691 1.569110 140 133 -1 265 397
+206 686 1.574149 142 130 -1 232 478
+206 682 1.601029 139 178 -1 203 751
+206 680 1.617829 144 255 -1 176 -1
+206 671 1.592629 142 183 -1 152 -1
+206 667 1.548950 152 162 -1 147 -1
+205 654 1.397750 147 142 -1 145 -1
+205 654 1.367510 140 136 -1 139 -1
+207 664 1.402790 130 129 -1 133 -1
+208 668 1.448150 126 124 -1 127 -1
+208 675 1.548950 139 110 -1 119 -1
+208 677 1.597669 152 111 -1 -1 -1
+203 692 2.022708 434 140 110 -1 -1
+204 690 2.076468 -1 154 107 -1 -1
+204 690 2.110068 -1 162 105 -1 -1
+207 686 2.131908 -1 224 107 -1 -1
+211 679 2.096628 -1 270 108 103 681
+221 656 1.931989 -1 301 115 122 597
+213 671 2.086549 -1 791 115 144 512
+208 678 2.162148 -1 -1 129 221 651
+201 686 2.242788 -1 -1 154 158 597
+200 687 2.249508 -1 -1 176 133 531
+203 682 2.200788 -1 -1 200 124 531
+206 678 2.162148 -1 -1 237 122 397
+213 664 2.039509 -1 -1 365 120 365
+217 654 1.958869 -1 -1 597 120 421
+207 671 2.110068 531 -1 -1 122 -1
+204 676 2.157108 681 -1 -1 127 800
+197 685 2.241108 751 -1 -1 147 276
+195 688 2.271348 531 -1 -1 152 245
+196 687 2.257908 478 -1 -1 178 237
+198 684 2.180628 462 -1 -1 200 237
+200 681 2.116788 447 -1 -1 237 232
+205 671 1.965589 447 -1 -1 265 241
+210 651 1.705190 447 -1 -1 288 245
+210 651 1.671590 408 -1 751 307 276
+207 666 1.723670 434 -1 -1 301 276
+206 670 1.718630 434 -1 -1 338 282
+205 677 1.711910 408 681 -1 330 288
+205 680 1.701830 421 791 -1 375 294
+205 685 1.674950 375 -1 -1 365 265
+205 688 1.624550 347 -1 -1 365 315
+205 689 1.594310 375 -1 -1 375 322
+205 686 1.496870 365 751 -1 447 307
+205 685 1.451510 386 681 -1 434 347
+205 682 1.350711 338 800 -1 478 356
+204 680 1.300311 356 597 -1 462 356
+201 674 1.177671 347 -1 -1 478 365
+199 670 1.105431 338 651 -1 512 365
+191 658 0.918952 315 651 -1 494 365
+191 658 0.883672 330 651 651 714 386
+197 665 0.885352 330 574 -1 -1 408
+200 669 0.890392 315 552 -1 -1 421
+206 676 0.892072 315 623 -1 -1 421
+207 677 0.865192 294 462 -1 -1 434
+211 682 0.850072 294 574 -1 -1 494
+212 683 0.828232 282 494 -1 -1 574
+215 687 0.804712 282 512 574 -1 651
+217 689 0.750952 255 447 681 -1 714
+218 690 0.725752 260 478 -1 -1 -1
+217 689 0.646793 265 434 623 -1 -1
+216 688 0.603113 260 386 -1 -1 -1
+215 687 0.517433 237 375 791 -1 -1
+214 686 0.470393 241 386 -1 714 -1
+210 684 0.362873 228 365 791 -1 751
+207 683 0.297354 232 375 623 -1 447
+199 681 0.167994 217 375 552 -1 397
+194 681 0.089034 217 301 751 -1 338
+181 682 -0.078965 210 338 651 -1 228
+181 682 -0.112565 197 338 714 -1 200
+194 681 -0.090725 189 330 681 -1 221
+197 681 -0.131045 186 356 714 -1 245
+200 681 -0.238565 183 330 681 -1 288
+200 681 -0.376325 186 386 -1 -1 338
+200 681 -0.446884 189 597 -1 -1 330
+200 681 -0.589684 200 -1 -1 751 294
+201 680 -0.648484 197 -1 -1 574 237
+203 678 -0.752644 213 512 -1 447 232
+204 677 -0.806403 232 714 -1 531 210
+207 673 -0.887043 276 623 -1 531 213
+208 671 -0.920643 265 -1 -1 478 200
+210 667 -0.982803 288 -1 -1 512 197
+211 666 -1.016403 301 800 -1 531 194
+211 666 -1.097043 301 -1 -1 494 200
+210 668 -1.145763 307 -1 -1 531 197
+208 672 -1.249922 301 -1 -1 494 200
+208 673 -1.298642 315 -1 -1 531 200
+207 678 -1.406162 330 -1 -1 478 194
+207 682 -1.471682 294 -1 -1 552 194
+207 692 -1.616161 301 -1 -1 552 203
+209 703 -1.740481 294 -1 -1 574 197
+209 703 -1.809361 315 -1 -1 574 203
+207 695 -1.779121 307 -1 -1 531 203
+205 686 -1.774081 294 -1 -1 597 203
+204 681 -1.770721 315 -1 800 574 203
+203 677 -1.807680 294 -1 -1 597 203
+201 667 -1.861440 288 -1 -1 597 194
+200 665 -1.910160 322 -1 -1 512 210
+200 664 -1.970640 294 800 -1 552 210
+200 665 -2.014320 307 791 714 -1 207
+202 668 -2.110079 315 -1 -1 -1 207
+202 668 -2.141999 315 800 -1 -1 210
+204 671 -2.236079 330 800 -1 -1 197
+206 673 -2.296559 307 800 -1 -1 203
+211 678 -2.420879 307 -1 -1 -1 200
+215 681 -2.491438 330 791 -1 -1 194
+224 687 -2.644318 260 800 -1 -1 210
+231 690 -2.738398 330 800 -1 -1 213
+223 687 -2.736718 347 800 -1 -1 203
+218 685 -2.731678 330 597 -1 -1 207
+210 681 -2.726638 294 714 -1 -1 210
+207 680 -2.733358 338 751 -1 -1 207
+202 678 -2.755198 315 681 -1 -1 210
+200 677 -2.771998 338 651 -1 -1 210
+197 676 -2.819038 347 531 552 -1 203
+197 676 -2.887918 330 651 -1 -1 213
+199 676 -2.938317 365 623 -1 -1 213
+203 676 -3.040797 338 597 -1 -1 210
+204 676 -3.087837 338 597 791 -1 213
+209 676 -3.195356 356 494 -1 -1 207
+213 676 -3.259196 330 714 -1 -1 213
+223 674 -3.403676 356 552 512 -1 213
+234 670 -3.529675 375 462 623 -1 203
+197 687 -3.798475 574 356 447 -1 224
+200 684 -3.895915 574 356 462 -1 217
+201 683 -3.974874 597 386 434 -1 228
+202 682 -4.018554 714 375 397 -1 224
+206 676 -4.139514 -1 338 434 -1 213
+208 673 -4.206714 531 315 397 -1 224
+212 665 -4.344473 512 338 386 -1 224
+214 659 -4.426793 462 282 365 -1 224
+215 651 -4.551113 338 294 386 -1 213
+212 664 -4.475513 408 282 356 276 224
+209 676 -4.473833 315 255 307 -1 232
+207 685 -4.509113 245 237 294 -1 224
+207 687 -4.559513 191 221 276 -1 217
+207 686 -4.707352 181 207 270 -1 213
+207 685 -4.791352 197 197 265 -1 221
+207 682 -4.961031 210 160 265 -1 207
+207 681 -5.112231 191 160 260 -1 203
+207 681 -5.184471 173 154 301 -1 213
+207 681 -5.322230 152 156 356 -1 221
+207 681 -5.394470 131 154 447 -1 213
+207 681 -5.538950 119 162 -1 -1 260
+207 681 -5.611190 102 173 -1 -1 365
+207 681 -5.750629 103 181 -1 -1 237
+207 681 -5.822869 -1 217 -1 -1 176
+207 681 -5.963989 -1 245 791 -1 200
+207 681 -6.036229 -1 288 -1 -1 189
+207 681 -6.173989 104 347 -1 -1 160
+207 681 -6.242868 120 -1 -1 -1 156
+207 681 -6.383988 131 -1 -1 -1 133
+207 681 -6.528468 149 -1 -1 -1 124
+207 681 -6.600708 171 -1 -1 -1 108
+207 681 -6.743507 250 -1 -1 -1 111
+207 681 -6.817427 282 -1 681 552 105
+207 686 -7.882545 -1 -1 -1 434 365
+208 692 -8.028705 -1 -1 -1 447 512
+209 697 -8.109344 -1 -1 -1 447 751
+214 710 -8.302544 -1 -1 -1 447 -1
+214 710 -8.337824 -1 -1 -1 447 681
+210 701 -8.337824 -1 -1 -1 447 397
+208 697 -8.337824 -1 -1 -1 462 552
+204 689 -8.339504 -1 714 -1 478 -1
+203 688 -8.366385 -1 -1 -1 462 -1
+200 682 -8.389904 -1 -1 -1 512 -1
+199 680 -8.410064 -1 -1 -1 421 -1
+196 675 -8.438624 -1 -1 -1 512 -1
+195 674 -8.460464 -1 -1 -1 447 -1
+195 673 -8.519264 -1 -1 -1 447 408
+195 673 -8.552864 -1 -1 -1 494 -1
+197 675 -8.635184 -1 -1 -1 494 -1
+199 676 -8.688944 -1 -1 -1 478 -1
+201 678 -8.811583 -1 -1 -1 478 651
+207 682 -8.934222 -1 -1 -1 512 -1
+210 683 -8.998062 -1 -1 -1 494 -1
+219 686 -9.139182 -1 -1 -1 494 478
+224 687 -9.218142 -1 -1 -1 531 -1
+233 688 -9.355901 651 -1 -1 531 -1
+226 687 -9.335741 -1 -1 -1 478 -1
+216 687 -9.329021 791 -1 -1 512 -1
+212 687 -9.329021 -1 -1 -1 462 -1
+205 687 -9.344142 -1 -1 -1 494 -1
+202 687 -9.354222 -1 -1 -1 531 -1
+198 687 -9.389503 -1 -1 -1 494 -1
+197 687 -9.413022 -1 -1 -1 574 -1
+196 687 -9.470141 -1 -1 -1 531 -1
+199 687 -9.523901 -1 -1 -1 531 -1
+203 686 -9.623021 -1 -1 -1 531 -1
+204 686 -9.668381 -1 -1 -1 552 -1
+209 684 -9.775900 -1 -1 -1 531 -1
+211 683 -9.827980 -1 -1 -1 552 -1
+219 679 -9.970779 -1 -1 -1 552 -1
+223 676 -10.046379 -1 -1 -1 597 -1
+213 686 -10.214379 -1 -1 -1 494 -1
+209 690 -10.202620 -1 -1 -1 552 -1
+206 693 -10.239580 -1 -1 -1 651 -1
+205 695 -10.258060 651 800 -1 531 -1
+203 698 -10.301741 294 -1 -1 597 -1
+204 695 -10.804059 207 714 -1 597 751
+204 690 -11.150139 245 -1 434 552 -1
+203 687 -11.219019 288 -1 462 597 -1
+201 679 -11.366858 265 -1 447 597 -1
+199 675 -11.439098 288 -1 597 552 -1
+191 663 -11.627258 315 -1 681 651 -1
+191 663 -11.662539 270 -1 651 597 -1
+198 672 -11.635658 315 -1 574 531 -1
+201 675 -11.637339 294 -1 512 597 -1
+206 682 -11.642379 322 751 397 597 -1
+210 687 -11.660859 330 -1 434 552 -1
+211 689 -11.679339 338 -1 478 552 -1
+213 692 -11.717979 338 -1 462 574 -1
+213 692 -11.754939 338 -1 397 597 322
+213 692 -11.827179 294 597 494 597 213
+209 689 -11.931339 330 800 397 597 191
+208 689 -11.971659 365 800 338 512 191
+204 687 -12.075818 386 -1 375 597 191
+201 686 -12.132937 322 751 375 574 191
+179 681 -12.489098 397 714 338 574 186
+202 682 -12.482378 386 751 282 552 194
+209 682 -12.529418 494 552 294 478 194
+217 682 -12.576457 531 512 265 512 200
+220 682 -12.626857 651 597 265 494 207
+220 682 -12.695737 681 623 255 478 194
+219 682 -12.734377 597 574 265 494 200
+216 683 -12.828457 -1 462 270 531 203
+214 683 -12.904057 800 462 265 494 203
+212 684 -12.957816 -1 478 301 531 207
+207 687 -13.072056 -1 478 294 494 203
+204 689 -13.134215 -1 478 322 494 210
+196 695 -13.275335 -1 434 315 512 194
+192 699 -13.354295 -1 462 365 512 213
+187 705 -13.481975 597 447 397 478 210
+195 695 -13.448375 512 434 408 462 210
+198 691 -13.445015 386 408 494 462 210
+209 674 -13.562613 203 356 -1 478 217
+208 675 -13.646613 210 338 -1 494 203
+205 681 -13.802853 221 307 -1 478 221
+193 688 -14.957009 160 228 375 -1 434
+193 688 -15.025889 129 270 347 -1 574
+193 688 -15.168689 149 791 330 -1 194
+193 688 -15.313169 152 365 315 -1 237
+193 688 -15.385408 156 228 322 800 255
+193 688 -15.523168 162 307 338 -1 213
+193 688 -15.590367 191 307 347 -1 183
+193 688 -15.731486 213 322 330 -1 183
+193 688 -15.805407 322 282 375 -1 169
+188 689 -15.899487 221 260 447 -1 164
+188 689 -16.022127 186 255 478 -1 152
+183 691 -16.040607 197 -1 397 -1 149
+180 693 -16.144766 217 221 462 -1 160
+179 693 -16.208605 213 210 421 -1 158
+179 693 -16.351404 200 200 494 -1 158
+179 693 -16.495882 183 203 800 -1 169
+179 693 -17.345961 156 -1 -1 597 191
+179 693 -17.488760 171 -1 -1 552 183
+179 693 -17.559320 191 -1 -1 574 166
+179 693 -17.982683 -1 -1 -1 574 140
+179 693 -18.120443 -1 -1 -1 751 127
+179 693 -18.259882 -1 -1 -1 714 152
+179 693 -18.332121 -1 -1 623 245 162
+178 692 -18.468199 -1 -1 623 245 169
+177 692 -18.526999 -1 -1 552 237 183
+176 692 -18.641237 -1 -1 494 250 197
+173 692 -18.705076 -1 -1 494 288 203
+167 692 -18.834436 -1 -1 494 276 213
+163 692 -18.901636 -1 -1 494 282 245
+154 693 -19.041075 -1 -1 478 265 250
+141 697 -19.217474 -1 -1 434 260 241
+141 697 -19.251074 -1 -1 462 237 270
+153 692 -19.224194 -1 -1 447 250 282
+157 690 -19.222513 -1 -1 434 250 301
+171 684 -19.269552 -1 -1 421 224 301
+173 683 -19.289713 -1 -1 434 265 330
+175 682 -19.341791 -1 -1 375 250 375
+174 682 -19.420752 -1 -1 375 276 386
+173 683 -19.469471 -1 -1 375 282 386
+170 685 -19.568590 -1 -1 375 315 365
+168 686 -19.620670 -1 -1 375 386 447
+165 690 -19.729870 -1 -1 356 397 462
+163 692 -19.788670 -1 -1 338 494 478
+158 700 -19.931469 -1 -1 322 751 478
+154 710 -20.052429 -1 -1 330 -1 434
+154 710 -20.121309 -1 -1 315 -1 365
+156 703 -20.096109 -1 -1 322 -1 434
+159 695 -20.094429 -1 -1 307 -1 714
+161 690 -20.091068 -1 -1 307 -1 462
+162 686 -20.129709 -1 -1 301 -1 681
+163 682 -20.159948 -1 -1 301 -1 751
+165 675 -20.206989 -1 -1 260 714 800
+165 673 -20.230509 -1 -1 241 651 651
+165 673 -20.302748 -1 -1 260 651 651
+165 673 -20.336348 -1 -1 250 552 -1
+165 675 -20.428747 -1 -1 237 512 -1
+168 690 -20.788267 -1 -1 210 421 800
+180 709 -21.100746 -1 -1 191 421 -1
+180 709 -21.136026 -1 -1 181 330 -1
+168 692 -21.018427 -1 -1 183 365 -1
+164 686 -20.983147 -1 -1 176 365 -1
+159 678 -20.934427 -1 -1 375 294 -1
+159 678 -20.947866 714 -1 -1 250 -1
+162 683 -21.046986 -1 -1 -1 250 623
+164 685 -21.102425 -1 -1 -1 228 751
+169 690 -21.231783 -1 -1 -1 217 800
+174 694 -21.310743 -1 -1 -1 217 714
+186 701 -21.488821 791 -1 -1 210 623
+186 701 -21.524101 -1 -1 -1 203 -1
+177 696 -21.514021 -1 -1 -1 194 574
+173 694 -21.515701 -1 -1 -1 197 681
+166 690 -21.520741 -1 -1 -1 183 681
+164 689 -21.540901 751 -1 -1 191 751
+159 687 -21.564421 -1 -1 -1 186 714
+159 687 -21.596340 -1 -1 -1 186 800
+154 685 -21.619860 -1 -1 -1 173 -1
+152 684 -21.641699 -1 -1 -1 176 -1
+151 684 -21.697140 -1 -1 -1 173 -1
+151 684 -21.729059 -1 -1 -1 166 791
+152 684 -21.808020 -1 -1 -1 162 -1
+152 684 -21.846659 751 -1 -1 162 -1
+154 684 -21.935699 800 -1 -1 154 597
+156 684 -22.021379 681 -1 -1 152 -1
+159 684 -22.081860 -1 -1 -1 151 -1
+165 683 -22.199459 623 -1 -1 142 -1
+170 682 -22.270020 791 462 -1 142 -1
+188 673 -22.481697 -1 -1 -1 133 -1
+180 677 -22.427937 681 -1 -1 145 189
+163 684 -22.310337 651 -1 -1 -1 -1
+157 686 -22.271698 -1 -1 -1 -1 791
+152 687 -22.239779 -1 800 -1 -1 800
+156 686 -22.270018 -1 574 791 -1 -1
+164 684 -22.335537 -1 681 800 -1 791
+171 681 -22.396017 434 714 -1 -1 -1
+186 673 -22.533775 681 751 597 -1 -1
+163 683 -22.330496 -1 531 597 -1 -1
+152 686 -22.243135 -1 -1 494 -1 -1
+150 687 -22.226336 -1 -1 434 -1 -1
+151 686 -22.236416 751 651 494 -1 751
+152 686 -22.246496 714 347 597 -1 552
+162 682 -22.335537 714 -1 478 -1 -1
+170 678 -22.406097 651 -1 512 -1 -1
+177 674 -22.468258 791 -1 714 552 -1
+161 681 -22.343939 714 -1 597 552 -1
+156 683 -22.328819 -1 751 651 597 -1
+151 685 -22.342258 -1 714 462 531 -1
+156 683 -22.508577 791 623 347 531 -1
+159 681 -22.607697 651 714 408 447 -1
+163 678 -22.713537 800 651 397 447 -1
+165 676 -22.774017 597 651 375 462 -1
+171 669 -22.916817 751 651 365 512 -1
+177 659 -23.039455 574 574 347 478 -1
+177 659 -23.110016 800 531 294 447 -1
+173 666 -23.083136 681 623 307 478 -1
+161 689 -23.150337 574 512 294 478 -1
+159 692 -23.187296 531 462 265 478 -1
+159 693 -23.244415 478 434 265 478 -1
+159 693 -23.278015 478 397 265 447 -1
+159 692 -23.358656 421 408 265 447 -1
+159 691 -23.402336 462 434 255 478 -1
+159 690 -23.486336 447 421 255 447 -1
+159 689 -23.580416 421 421 265 478 -1
+159 684 -23.640896 397 397 265 421 -1
+160 676 -24.072655 322 315 245 447 -1
+164 682 -24.084415 315 294 270 462 -1
+165 684 -24.101215 307 301 270 375 -1
+167 687 -24.138174 307 260 347 434 -1
+166 687 -24.193613 288 265 714 397 -1
+164 684 -24.249052 282 255 751 408 -1
+159 680 -24.417051 270 241 478 408 -1
+155 677 -24.526251 270 210 397 408 -1
+146 673 -24.742970 224 194 478 397 -1
+137 671 -24.889130 203 194 597 397 -1
+137 671 -25.031929 173 181 356 447 597
+137 671 -25.173050 171 173 228 421 512
+137 671 -25.243610 142 178 224 421 800
+137 671 -25.383051 129 176 301 574 552
+137 671 -25.453611 126 200 338 751 462
+137 671 -25.596411 117 228 322 751 397
+137 671 -25.666971 109 237 307 -1 265
+137 671 -25.811449 117 462 282 681 232
+137 671 -25.952570 119 221 301 -1 203
+137 671 -26.023130 129 237 288 -1 200
+137 671 -26.160891 142 224 294 -1 152
+137 671 -26.231451 160 288 347 -1 149
+137 671 -26.370892 181 270 294 -1 136
+137 671 -26.441452 322 250 338 -1 131
+137 671 -26.585932 191 241 408 -1 121
+137 671 -26.727053 203 241 462 -1 120
+137 671 -26.797613 203 241 512 -1 124
+137 671 -26.938734 200 241 -1 -1 129
+137 671 -27.005934 197 250 -1 -1 137
+137 671 -27.147053 189 260 -1 -1 142
+137 671 -27.217613 171 294 -1 -1 166
+137 671 -27.360413 173 307 -1 -1 250
+137 671 -27.434332 169 265 -1 -1 375
+137 671 -27.577131 178 -1 -1 -1 144
+137 671 -27.647692 181 -1 -1 -1 200
+137 671 -27.854332 232 -1 -1 -1 203
+137 671 -27.992092 250 -1 -1 -1 200
+130 669 -27.998812 288 -1 -1 -1 191
+122 667 -28.054253 315 -1 -1 -1 186
+114 665 -28.091211 315 -1 -1 -1 183
+112 665 -28.123131 338 -1 -1 -1 186
+107 664 -28.161770 347 -1 447 -1 186
+105 664 -28.181931 375 -1 -1 -1 186
+99 664 -28.212170 356 -1 -1 -1 176
+97 664 -28.237370 397 -1 -1 -1 186
+96 664 -28.299528 434 -1 -1 -1 191
+96 664 -28.334808 447 -1 -1 -1 191
+98 664 -28.418808 347 -1 -1 -1 194
+100 664 -28.470888 356 -1 -1 -1 189
+102 664 -28.553207 434 -1 -1 -1 200
+104 663 -28.601927 421 -1 -1 -1 200
+109 660 -28.719526 478 -1 -1 -1 194
+112 658 -28.783365 408 -1 -1 -1 203
+120 653 -28.924484 478 -1 -1 -1 200
+124 649 -29.005123 434 -1 -1 -1 203
+130 643 -29.142883 478 -1 651 -1 194
+125 649 -29.117683 365 -1 -1 -1 200
+109 669 -29.164724 714 -1 -1 -1 210
+108 671 -29.181524 681 -1 -1 -1 207
+107 673 -29.233603 681 -1 597 -1 217
+107 673 -29.268883 651 -1 -1 -1 213
+108 670 -29.366322 434 -1 -1 -1 221
+109 668 -29.421761 800 -1 -1 -1 224
+111 664 -29.524240 -1 -1 -1 -1 221
+112 662 -29.576321 681 -1 -1 -1 224
+114 654 -29.705679 -1 -1 -1 -1 207
+114 649 -29.779598 -1 -1 751 -1 232
+113 636 -29.954317 -1 -1 -1 -1 232
+113 636 -29.991278 494 -1 -1 -1 232
+114 647 -29.976158 421 800 -1 -1 232
+115 651 -29.977839 -1 -1 -1 -1 237
+116 659 -29.984558 -1 -1 -1 -1 237
+116 662 -29.999678 -1 -1 -1 -1 245
+117 667 -30.031597 751 -1 -1 -1 241
+118 670 -30.048397 -1 -1 597 -1 241
+119 675 -30.080318 -1 -1 -1 -1 245
+119 677 -30.100479 -1 -1 -1 -1 250
+119 677 -30.169359 434 -1 -1 -1 250
+119 677 -30.204639 791 -1 -1 -1 260
+117 674 -30.298719 -1 -1 -1 -1 255
+117 673 -30.340719 -1 -1 -1 -1 260
+116 671 -30.431438 -1 -1 -1 -1 260
+115 670 -30.475119 -1 -1 -1 -1 245
+110 664 -30.604477 478 -1 -1 -1 265
+107 661 -30.671677 -1 -1 -1 -1 255
+100 655 -30.817837 -1 -1 -1 -1 265
+89 650 -30.945517 462 -1 -1 -1 265
+89 650 -31.016077 -1 -1 -1 -1 265
+98 654 -30.977438 751 -1 800 -1 270
+106 658 -30.974079 -1 -1 791 -1 265
+110 660 -30.975760 -1 -1 -1 -1 265
+116 662 -30.990879 -1 -1 -1 -1 270
+124 665 -31.098400 -1 -1 -1 -1 294
+122 664 -31.150480 -1 -1 -1 -1 294
+117 664 -31.300001 -1 -1 -1 -1 301
+115 664 -31.348721 -1 -1 -1 -1 307
+111 664 -31.459599 -1 -1 -1 -1 301
+107 664 -31.521759 -1 -1 -1 -1 282
+98 666 -31.666239 -1 -1 -1 -1 301
+87 670 -31.792238 -1 -1 -1 -1 315
+87 670 -31.862799 623 -1 -1 -1 315
+94 667 -31.835918 -1 -1 512 -1 315
+103 663 -31.837599 -1 -1 -1 -1 315
+108 661 -31.830879 -1 -1 -1 -1 315
+114 658 -31.854399 -1 -1 -1 -1 330
+116 657 -31.872879 -1 -1 -1 -1 322
+121 654 -31.903120 -1 -1 -1 -1 322
+123 653 -31.923281 -1 -1 -1 -1 315
+125 651 -31.970320 800 -1 681 -1 330
+125 651 -32.003922 -1 -1 -1 -1 322
+124 651 -32.082882 -1 -1 -1 -1 338
+123 652 -32.128242 -1 -1 -1 -1 315
+121 653 -32.220642 -1 -1 -1 -1 347
+120 654 -32.262642 -1 -1 -1 -1 347
+117 658 -32.375202 -1 -1 -1 478 347
+115 661 -32.435680 -1 -1 -1 365 322
+111 668 -32.570080 -1 -1 -1 386 365
+109 673 -32.642319 -1 -1 -1 397 347
+107 686 -32.855679 -1 -1 -1 397 375
+109 674 -32.830479 -1 -1 -1 338 375
+111 665 -32.825439 -1 -1 -1 315 338
+112 661 -32.828800 -1 -1 623 347 365
+112 655 -32.854000 -1 -1 -1 338 375
+112 653 -32.870800 -1 -1 -1 531 375
+112 650 -32.914478 -1 -1 -1 421 375
+112 649 -32.939678 -1 -1 -1 597 386
+112 651 -33.027035 -1 -1 -1 751 397
+112 652 -33.072395 -1 -1 -1 800 397
+112 657 -33.176556 -1 -1 -1 -1 397
+112 659 -33.225277 -1 -1 -1 -1 375
+114 663 -33.329437 -1 -1 -1 -1 365
+116 667 -33.396637 -1 -1 -1 -1 434
+120 675 -33.542797 -1 -1 -1 791 375
+126 683 -33.655357 -1 -1 -1 751 447
+126 683 -33.724236 -1 -1 -1 651 434
+120 676 -33.688957 -1 -1 -1 681 434
+115 669 -33.688957 -1 -1 -1 791 462
+112 665 -33.685596 -1 -1 -1 597 375
+109 662 -33.714157 -1 -1 -1 -1 434
+107 660 -33.729279 -1 -1 -1 791 434
+104 657 -33.761196 -1 -1 -1 791 462
+101 654 -33.799839 -1 -1 -1 751 434
+100 653 -33.828400 -1 -1 -1 623 408
+99 652 -33.895599 -1 -1 -1 681 447
+99 652 -33.932560 -1 -1 597 681 478
+101 654 -34.026642 800 -1 -1 -1 494
+101 654 -34.065281 -1 -1 -1 -1 478
+103 655 -34.154320 791 -1 -1 -1 447
+105 656 -34.206398 597 -1 -1 751 494
+112 658 -34.329037 -1 -1 -1 714 478
+116 659 -34.392876 714 -1 -1 791 494
+125 659 -34.535675 -1 -1 531 791 494
+136 658 -34.691914 -1 -1 -1 -1 478
+136 658 -34.725513 714 -1 -1 -1 478
+122 660 -34.683514 -1 -1 -1 -1 478
+118 661 -34.685192 597 -1 -1 791 478
+110 661 -34.690231 478 -1 -1 -1 531
+107 661 -34.703671 -1 -1 -1 791 531
+102 661 -34.735588 800 -1 597 -1 531
+100 661 -34.750710 -1 -1 -1 -1 574
+98 661 -34.806149 791 -1 -1 -1 478
+113 652 -35.259750 -1 -1 791 -1 478
+117 649 -35.331989 -1 -1 -1 -1 597
+126 637 -35.515110 -1 -1 -1 -1 597
+126 637 -35.550388 -1 -1 -1 -1 597
+121 644 -35.547031 800 -1 -1 -1 597
+118 648 -35.545353 -1 -1 -1 -1 597
+113 655 -35.543674 751 -1 751 -1 681
+112 656 -35.565514 -1 -1 791 -1 751
+109 661 -35.589031 -1 -1 -1 -1 651
+109 662 -35.615910 -1 -1 -1 -1 714
+106 667 -35.641109 -1 -1 -1 -1 751
+105 669 -35.661270 -1 -1 714 -1 623
+104 670 -35.715031 -1 -1 -1 -1 651
+104 670 -35.751991 -1 -1 -1 714 681
+100 641 -36.575191 -1 -1 -1 -1 -1
+100 653 -37.472301 597 -1 447 -1 -1
+106 658 -38.112381 494 651 447 -1 -1
+97 663 -38.297184 494 574 434 -1 -1
+85 674 -38.492062 462 552 478 -1 -1
+85 674 -38.525661 397 494 397 -1 -1
+91 668 -38.527340 421 574 447 -1 -1
+94 665 -38.525661 375 512 478 -1 -1
+100 659 -38.529022 375 478 434 -1 -1
+102 656 -38.535744 421 552 512 751 -1
+106 652 -38.557587 434 478 386 -1 -1
+109 648 -38.589504 347 512 434 -1 -1
+110 647 -38.611343 397 447 447 -1 -1
+111 645 -38.660065 365 434 434 -1 751
+111 645 -38.693665 408 462 408 -1 681
+109 648 -38.784386 356 462 434 -1 434
+108 650 -38.836464 356 462 421 751 375
+106 652 -38.927185 375 421 375 -1 397
+104 656 -39.027985 347 447 375 -1 294
+104 658 -39.078384 282 397 447 -1 322
+104 666 -39.209427 330 386 375 -1 315
+104 670 -39.274948 315 375 408 -1 315
+105 681 -39.427826 294 330 408 -1 260
+104 674 -39.442947 288 386 397 751 356
+103 669 -39.439587 288 375 347 -1 338
+101 661 -39.447987 260 356 356 -1 397
+100 658 -39.458065 265 338 375 -1 375
+99 653 -39.486626 260 330 356 -1 365
+98 649 -39.525265 245 330 365 -1 447
+97 646 -39.531986 241 294 347 -1 512
+96 642 -39.568947 221 294 375 -1 462
+96 641 -39.599186 224 288 338 -1 421
+96 640 -39.713425 200 288 356 -1 800
+96 640 -39.780624 200 294 478 -1 597
+96 640 -39.921741 191 330 651 -1 494
+96 640 -40.064541 176 386 651 -1 462
+96 640 -40.136780 183 531 623 -1 365
+96 640 -40.279579 194 -1 574 -1 294
+96 640 -40.348457 194 597 623 -1 265
+96 640 -40.486214 224 408 681 -1 255
+96 640 -40.555092 232 512 791 -1 237
+97 640 -40.682770 260 651 -1 -1 213
+98 640 -40.744930 260 531 -1 -1 210
+100 640 -40.865891 301 597 -1 -1 200
+101 640 -40.958290 288 421 -1 -1 210
+102 640 -41.001968 294 714 -1 -1 203
+107 638 -41.117886 330 574 751 -1 191
+110 637 -41.176685 365 462 -1 -1 203
+116 634 -41.304367 356 531 -1 -1 200
+120 632 -41.369888 397 365 -1 -1 197
+131 623 -41.549648 462 552 -1 -1 200
+131 623 -41.583248 681 478 -1 -1 200
+123 630 -41.566448 751 478 -1 -1 197
+117 636 -41.573166 800 408 800 -1 200
+114 639 -41.573166 681 421 791 -1 200
+110 643 -41.593323 681 434 -1 -1 200
+108 645 -41.608444 478 397 -1 -1 194
+105 648 -41.647083 365 408 -1 -1 200
+104 649 -41.668922 282 397 -1 -1 200
+103 650 -41.729401 265 365 -1 -1 197
+104 648 -41.779800 232 375 597 -1 203
+105 646 -41.872200 245 338 714 -1 197
+107 642 -41.967960 232 315 800 -1 203
+108 640 -42.018360 217 338 681 -1 207
+109 636 -42.115799 228 330 597 -1 210
+110 631 -42.186359 232 322 552 -1 210
+111 623 -42.319080 245 301 552 -1 213
+111 612 -42.493797 250 294 478 -1 213
+111 612 -42.555958 250 276 531 -1 221
+111 612 -42.760918 250 276 623 -1 207
+111 612 -42.907078 224 276 651 -1 224
+121 620 -43.271637 197 462 -1 -1 276
+124 622 -43.372437 194 512 -1 -1 228
+125 623 -43.500114 200 597 -1 -1 260
+125 623 -43.568993 207 651 -1 -1 250
+129 624 -43.658031 210 714 -1 -1 250
+130 624 -43.705070 207 -1 -1 -1 241
+135 625 -43.763870 232 681 -1 -1 224
+137 625 -43.795792 241 -1 -1 -1 228
+141 625 -43.842831 241 -1 -1 -1 228
+143 625 -43.868031 245 -1 -1 -1 217
+145 625 -43.925148 245 751 -1 -1 213
+145 625 -43.960426 245 714 -1 -1 213
+144 625 -44.037704 245 -1 -1 -1 213
+143 625 -44.083065 241 -1 -1 -1 210
+141 625 -44.167065 245 -1 -1 -1 207
+140 625 -44.210743 245 751 -1 -1 210
+117 637 -44.696259 255 651 623 -1 200
+111 644 -44.839058 276 751 -1 -1 197
+111 644 -44.874336 288 751 791 -1 194
+121 633 -44.828976 288 791 -1 -1 186
+124 630 -44.832336 294 408 -1 -1 194
+128 624 -44.845779 307 574 -1 -1 194
+131 620 -44.870979 365 681 -1 -1 186
+132 618 -44.889458 356 651 -1 -1 191
+134 615 -44.934814 365 714 -1 -1 189
+134 614 -44.961693 338 714 -1 -1 189
+133 614 -45.035614 307 552 -1 -1 191
+132 616 -45.084335 276 574 -1 -1 186
+130 619 -45.185135 276 714 -1 -1 183
+130 620 -45.228813 265 751 -1 -1 186
+128 625 -45.334652 276 512 -1 -1 186
+128 630 -45.443851 250 597 -1 -1 186
+128 635 -45.514412 270 623 -1 -1 189
+128 644 -45.648811 270 512 -1 -1 186
+130 652 -45.747932 260 478 -1 -1 189
+130 652 -45.816814 260 462 -1 -1 189
+128 643 -45.778175 245 512 -1 -1 186
+126 636 -45.784897 237 512 -1 -1 186
+125 632 -45.783218 241 434 651 -1 186
+124 628 -45.821857 232 408 -1 -1 181
+123 619 -46.424969 186 574 -1 -1 200
+123 619 -46.497208 189 -1 -1 -1 203
+124 619 -46.640007 210 791 -1 -1 228
+124 619 -46.710567 224 -1 -1 -1 224
+123 619 -46.841606 255 -1 -1 -1 207
+124 619 -46.913845 265 -1 -1 -1 210
+128 619 -47.060001 307 -1 -1 -1 197
+130 619 -47.127201 356 -1 -1 -1 194
+156 610 -47.669838 478 -1 -1 -1 191
+146 615 -47.617760 512 -1 -1 -1 194
+138 619 -47.617760 531 -1 -1 -1 194
+135 621 -47.624481 751 -1 -1 -1 194
+129 624 -47.644638 -1 -1 -1 -1 194
+125 626 -47.681599 651 -1 -1 -1 200
+124 627 -47.703438 531 -1 -1 -1 191
+122 629 -47.755516 512 -1 -1 -1 203
+123 628 -47.797516 462 -1 -1 -1 203
+125 626 -47.891598 478 -1 -1 -1 207
+126 625 -47.940319 434 -1 -1 -1 210
+128 623 -48.037762 408 -1 -1 -1 210
+129 621 -48.093201 386 -1 -1 -1 203
+131 618 -48.195679 397 -1 -1 -1 213
+133 614 -48.262878 365 -1 -1 -1 203
+136 607 -48.397278 397 -1 -1 -1 213
+138 597 -48.511517 397 -1 -1 -1 217
+138 597 -48.582073 365 -1 -1 -1 210
+137 605 -48.553513 397 -1 -1 -1 221
+136 613 -48.558552 397 -1 -1 -1 217
+135 621 -48.568634 365 -1 -1 -1 194
+135 638 -48.696316 330 -1 -1 -1 237
+135 639 -48.758476 552 -1 -1 -1 245
+135 639 -48.795437 574 -1 -1 -1 255
+135 637 -48.881115 574 -1 791 -1 250
+135 636 -48.926476 552 -1 -1 -1 260
+135 634 -49.007114 421 -1 -1 -1 250
+135 633 -49.050793 -1 -1 -1 -1 260
+133 628 -49.156635 -1 -1 -1 -1 265
+131 625 -49.220474 -1 -1 -1 -1 260
+126 618 -49.351513 -1 -1 -1 -1 265
+123 615 -49.418713 -1 -1 -1 -1 270
+112 606 -49.596790 -1 -1 -1 -1 276
+112 606 -49.632069 -1 -1 -1 -1 276
+121 613 -49.613590 -1 -1 -1 -1 282
+125 616 -49.611912 -1 -1 -1 -1 276
+131 620 -49.621990 -1 -1 -1 -1 260
+134 622 -49.630390 -1 -1 -1 -1 294
+138 624 -49.663990 -1 -1 -1 -1 294
+140 625 -49.682468 -1 -1 791 -1 301
+142 627 -49.732868 -1 -1 -1 -1 301
+143 628 -49.756390 -1 -1 -1 -1 315
+140 627 -49.847111 -1 -1 -1 -1 315
+137 626 -49.902550 -1 -1 -1 -1 315
+133 624 -50.001671 -1 -1 -1 -1 315
+132 624 -50.047031 -1 -1 -1 -1 315
+127 624 -50.154552 -1 -1 800 -1 347
+122 624 -50.223431 -1 -1 -1 -1 338
+113 624 -50.362869 -1 -1 -1 -1 338
+103 626 -50.480469 -1 -1 -1 -1 347
+103 626 -50.549347 -1 -1 -1 -1 375
+111 624 -50.519108 597 -1 -1 -1 447
+120 622 -50.522469 -1 -1 -1 -1 462
+125 621 -50.519108 -1 -1 -1 -1 421
+129 619 -50.552708 -1 -1 800 -1 397
+132 618 -50.559429 -1 -1 -1 -1 338
+136 617 -50.599751 -1 -1 -1 -1 338
+138 616 -50.619911 -1 -1 751 -1 294
+141 615 -50.663589 -1 -1 -1 -1 330
+142 615 -50.692150 356 800 -1 -1 322
+142 615 -50.761028 -1 -1 -1 -1 322
+141 616 -50.806389 -1 -1 681 -1 322
+139 618 -50.895428 -1 -1 751 -1 330
+139 618 -50.930706 -1 -1 791 -1 338
+137 620 -51.019745 447 -1 791 -1 338
+135 622 -51.078545 -1 -1 791 -1 307
+131 627 -51.199501 -1 -1 -1 -1 338
+129 630 -51.263340 447 -1 751 -1 338
+125 638 -51.411182 -1 791 681 -1 322
+122 648 -51.567421 800 -1 681 -1 294
+122 648 -51.601021 -1 651 651 -1 301
+125 635 -51.565739 -1 -1 623 -1 597
+126 631 -51.567417 -1 -1 751 -1 -1
+128 624 -51.579174 -1 -1 651 -1 681
+129 621 -51.585896 -1 800 714 -1 714
+130 612 -51.681656 -1 552 574 -1 -1
+130 612 -51.720295 -1 714 597 -1 -1
+130 615 -51.816055 -1 714 714 -1 -1
+130 619 -51.915173 -1 597 597 -1 -1
+130 620 -51.963894 -1 714 651 -1 -1
+130 625 -52.069733 -1 623 574 -1 -1
+131 628 -52.130211 597 623 512 -1 -1
+135 636 -52.271328 -1 574 494 -1 -1
+137 640 -52.343567 -1 574 512 -1 -1
+141 646 -52.469566 -1 494 512 -1 -1
+141 646 -52.504845 -1 651 531 -1 -1
+132 634 -52.454445 -1 512 531 -1 -1
+130 631 -52.456123 -1 512 365 -1 -1
+128 628 -52.493084 -1 494 478 -1 -1
+125 623 -52.481323 751 462 447 -1 -1
+123 620 -52.523323 -1 447 478 -1 -1
+121 618 -52.538445 -1 397 434 -1 -1
+118 615 -52.577084 -1 434 421 -1 -1
+117 614 -52.672840 -1 421 408 681 -1
+118 614 -52.751801 800 408 375 -1 -1
+130 620 -53.104599 751 294 294 -1 -1
+155 622 -53.428841 623 315 288 552 -1
+118 620 -53.301159 -1 276 221 -1 -1
+126 620 -53.378441 -1 288 194 -1 -1
+131 620 -53.413719 681 294 189 651 -1
+155 616 -53.606918 -1 330 186 408 681
+133 617 -53.438919 -1 434 186 338 -1
+122 617 -53.356598 -1 447 186 270 800
+116 616 -53.312920 -1 714 200 241 800
+113 616 -53.292759 -1 -1 210 221 -1
+115 616 -53.311237 -1 447 245 213 -1
+119 616 -53.383476 -1 -1 250 194 -1
+130 615 -53.526276 -1 -1 270 194 -1
+136 614 -53.608597 -1 -1 282 191 -1
+151 608 -53.805157 -1 -1 288 186 -1
+151 608 -53.840435 -1 -1 282 186 -1
+141 613 -53.821953 -1 -1 270 186 -1
+126 619 -53.832031 -1 -1 260 186 -1
+122 621 -53.858910 -1 -1 255 183 -1
+120 622 -53.877388 -1 -1 255 183 -1
+117 623 -53.924427 -1 -1 245 181 -1
+116 624 -53.949627 -1 -1 250 171 -1
+119 622 -54.045383 -1 -1 250 181 -1
+120 621 -54.087383 -1 -1 241 181 -1
+123 618 -54.183140 -1 -1 237 169 -1
+124 616 -54.233540 -1 -1 237 178 -1
+127 612 -54.336018 -1 -1 237 173 -1
+129 608 -54.401539 -1 -1 237 173 -1
+133 600 -54.537617 -1 -1 224 171 -1
+136 590 -54.685455 -1 -1 228 171 -1
+136 590 -54.719055 -1 -1 224 160 -1
+133 603 -54.688816 -1 -1 224 169 -1
+132 607 -54.692177 -1 -1 203 171 -1
+130 614 -54.705616 -1 -1 221 164 -1
+130 616 -54.727455 -1 -1 221 164 574
+129 620 -54.759377 -1 -1 210 160 681
+128 624 -54.766098 -1 -1 207 160 -1
+128 628 -54.803055 -1 -1 210 160 -1
+128 629 -54.826576 -1 -1 203 158 -1
+128 630 -54.892094 -1 -1 191 154 -1
+128 630 -54.920654 -1 -1 197 156 -1
+128 625 -55.004654 -1 -1 210 151 -1
+128 622 -55.046654 -1 -1 228 139 -1
+126 611 -55.186092 -1 -1 260 142 714
+121 601 -55.320492 -1 -1 322 136 -1
+126 619 -55.192814 -1 -1 347 133 -1
+127 625 -55.149136 -1 -1 237 137 -1
+127 628 -55.128975 -1 -1 152 139 -1
+126 625 -55.154175 -1 -1 -1 147 -1
+124 617 -55.219692 -1 -1 800 164 -1
+121 608 -55.293613 -1 -1 791 191 -1
+114 594 -55.458252 -1 -1 751 210 -1
+118 603 -55.412891 -1 -1 751 224 -1
+124 615 -55.375931 -1 -1 681 255 -1
+125 616 -55.396091 -1 -1 714 265 -1
+128 623 -55.411213 -1 -1 791 294 -1
+129 625 -55.428013 -1 -1 791 307 -1
+132 629 -55.458252 -1 -1 791 322 -1
+133 631 -55.510334 -1 -1 714 307 -1
+133 631 -55.543934 -1 -1 651 330 -1
+132 630 -55.626255 -1 751 574 338 -1
+131 629 -55.666576 -1 -1 681 347 -1
+130 628 -55.747215 -1 -1 623 375 -1
+129 627 -55.792576 -1 -1 714 386 -1
+125 624 -55.900093 -1 -1 681 375 -1
+122 622 -55.962254 -1 -1 681 347 -1
+115 618 -56.089931 -1 800 681 375 531
+110 616 -56.167210 800 -1 623 397 -1
+98 612 -56.328491 -1 -1 597 347 -1
+98 612 -56.362091 -1 -1 512 397 -1
+111 615 -56.323452 -1 -1 597 375 -1
+116 616 -56.318413 -1 714 623 356 -1
+124 618 -56.323452 -1 -1 597 356 -1
+129 619 -56.352013 -1 -1 494 330 -1
+131 619 -56.370491 -1 -1 552 347 -1
+134 619 -56.412491 651 -1 512 338 -1
+135 619 -56.439369 -1 -1 512 315 -1
+132 619 -56.523369 -1 -1 494 307 -1
+129 619 -56.580490 -1 -1 531 294 -1
+125 619 -56.679607 -1 -1 494 294 -1
+123 619 -56.728329 -1 -1 494 265 597
+118 621 -56.832489 -1 -1 478 255 791
+113 623 -56.906410 -1 -1 408 245 -1
+105 627 -57.044170 -1 -1 478 237 -1
+98 632 -57.144970 -1 -1 462 241 -1
+98 632 -57.212170 -1 -1 462 245 -1
+107 626 -57.158409 -1 -1 447 245 -1
+113 622 -57.165131 -1 -1 434 237 -1
+116 620 -57.165131 -1 -1 447 288 -1
+120 617 -57.195370 -1 -1 434 315 597
+124 614 -57.227287 -1 -1 434 330 -1
+126 612 -57.237366 -1 -1 408 478 -1
+129 610 -57.276005 -1 -1 408 681 -1
+129 610 -57.311283 -1 -1 397 791 -1
+130 609 -57.373444 -1 -1 397 -1 -1
+129 610 -57.420483 -1 -1 397 -1 -1
+127 612 -57.507843 -1 -1 356 -1 -1
+127 612 -57.543121 -1 -1 356 -1 -1
+126 615 -57.628803 -1 -1 322 -1 -1
+125 618 -57.685925 -1 -1 365 -1 -1
+123 624 -57.806885 -1 -1 338 -1 -1
+122 628 -57.872406 -1 -1 330 -1 681
+120 639 -58.021927 -1 800 338 791 623
+120 648 -58.122726 -1 -1 330 800 597
+120 641 -58.134487 -1 -1 315 681 597
+120 637 -58.136166 -1 714 288 791 623
+120 627 -58.131123 -1 751 315 651 574
+120 620 -58.146244 651 714 301 651 512
+120 617 -58.156322 -1 574 294 651 597
+120 612 -58.189922 -1 623 294 574 651
+121 613 -58.413364 -1 574 250 512 651
+123 616 -58.510803 -1 512 241 447 462
+124 618 -58.561203 800 462 241 478 531
+127 623 -58.675442 -1 397 232 408 574
+133 631 -58.814880 -1 512 217 447 681
+141 639 -58.935841 -1 462 197 408 597
+141 639 -58.999680 -1 462 162 315 714
+131 630 -58.920719 -1 462 203 386 714
+123 622 -58.890480 -1 421 197 365 494
+119 618 -58.900562 -1 447 191 338 651
+115 614 -58.885441 -1 531 186 301 751
+113 612 -58.892162 -1 447 191 282 651
+114 613 -58.915684 -1 294 194 245 651
+129 625 -59.076965 494 -1 232 200 -1
+139 631 -59.172726 -1 -1 260 194 -1
+132 625 -59.098804 -1 -1 250 181 -1
+125 620 -59.033283 -1 -1 375 183 -1
+118 614 -59.001366 -1 -1 365 183 -1
+116 612 -59.009766 791 -1 270 173 -1
+116 612 -59.078648 -1 -1 241 181 -1
+117 613 -59.125687 574 -1 228 183 -1
+121 615 -59.228165 597 -1 207 183 -1
+123 616 -59.280243 651 -1 213 186 -1
+127 618 -59.384403 512 -1 213 186 791
+136 620 -59.522160 494 -1 200 183 -1
+142 621 -59.602798 651 651 237 191 714
+141 621 -59.654881 462 751 282 194 -1
+134 621 -59.631359 574 800 -1 200 -1
+124 621 -59.617920 574 751 -1 207 -1
+122 621 -59.633041 462 791 -1 207 -1
+117 621 -59.659924 531 651 791 217 800
+112 621 -59.686802 478 714 -1 210 -1
+110 621 -59.708641 478 681 681 217 -1
+110 621 -59.770802 512 714 574 217 -1
+110 621 -59.802723 462 494 623 221 -1
+112 621 -59.888405 531 597 597 228 -1
+114 621 -59.938805 512 531 552 241 -1
+115 621 -60.014404 447 597 531 237 -1
+119 619 -60.116886 462 651 478 245 -1
+122 617 -60.179047 434 574 512 232 -1
+142 599 -60.553688 434 574 434 255 -1
+137 604 -60.568806 408 574 447 260 -1
+134 608 -60.558727 375 531 478 250 -1
+128 614 -60.558727 421 552 421 265 -1
+125 617 -60.560406 447 574 434 260 -1
+121 621 -60.580566 397 574 408 270 -1
+120 623 -60.600727 408 421 408 265 -1
+118 626 -60.637688 386 552 365 270 -1
+118 627 -60.699848 408 512 386 270 -1
+119 626 -60.746887 408 512 375 276 681
+121 622 -60.844326 386 494 347 294 751
+122 620 -60.893047 397 478 365 282 531
+125 605 -61.185368 375 397 322 288 552
+124 591 -61.363445 365 386 315 301 512
+124 591 -61.397045 365 408 301 307 574
+125 601 -61.386967 386 386 307 322 574
+127 609 -61.388645 375 365 282 315 531
+128 614 -61.383606 356 322 265 301 512
+129 618 -61.413849 330 347 265 322 512
+129 622 -61.447449 356 315 250 322 531
+130 626 -61.455849 356 288 245 315 494
+130 629 -61.492809 315 307 237 338 512
+129 627 -61.590248 315 288 194 330 651
+128 623 -61.664169 276 294 186 301 478
+125 616 -61.739769 255 260 183 237 751
+109 596 -61.959850 276 237 181 347 -1
+114 602 -61.904411 255 191 178 -1 -1
+124 618 -61.756573 250 315 178 347 -1
+128 626 -61.680973 255 338 171 250 -1
+129 628 -61.669212 260 265 183 224 -1
+126 622 -61.721291 282 265 203 217 -1
+124 617 -61.761612 294 224 207 191 -1
+114 603 -61.894329 301 221 173 178 -1
+114 605 -61.875851 347 197 408 173 -1
+119 613 -61.798573 408 210 245 176 -1
+123 622 -61.721294 462 210 197 178 -1
+126 630 -61.650734 -1 210 169 181 -1
+126 630 -61.645695 -1 221 162 183 -1
+124 626 -61.675938 -1 265 154 200 -1
+123 623 -61.701138 -1 255 112 207 -1
+115 609 -61.830498 -1 156 147 191 -1
+104 596 -61.961536 -1 356 140 265 681
+114 611 -61.820415 -1 512 147 347 714
+121 623 -61.707855 -1 -1 162 224 681
+122 626 -61.680977 -1 -1 171 186 574
+122 625 -61.694416 800 -1 178 164 512
+120 622 -61.721294 -1 -1 228 162 531
+114 612 -61.817055 -1 -1 265 149 512
+109 605 -61.887615 -1 -1 315 149 597
+108 605 -61.929615 -1 -1 552 147 574
+116 616 -61.872494 -1 -1 -1 147 651
+118 619 -61.865772 -1 -1 -1 152 512
+125 630 -61.885933 651 -1 -1 152 365
+124 628 -61.932972 531 -1 -1 169 315
+122 626 -62.018650 651 800 -1 178 282
+121 625 -62.067371 651 751 -1 183 307
+115 620 -62.191689 512 -1 -1 191 322
+108 616 -62.327770 623 -1 -1 189 356
+103 614 -62.405048 552 800 -1 186 365
+93 611 -62.557930 623 597 -1 197 347
+93 611 -62.591530 574 -1 -1 207 408
+107 615 -62.546173 597 -1 -1 200 434
+112 616 -62.539452 597 714 -1 213 397
+120 618 -62.547852 512 681 -1 213 494
+130 621 -62.660412 531 -1 -1 237 478
+127 621 -62.749454 447 478 -1 245 552
+124 621 -62.804893 494 651 -1 245 574
+121 621 -62.893936 531 751 -1 250 552
+116 621 -62.998096 494 574 -1 260 478
+113 622 -63.056896 512 791 -1 260 651
+104 626 -63.201378 512 512 -1 260 552
+95 631 -63.318977 494 462 -1 276 574
+95 631 -63.384499 512 714 -1 288 574
+102 627 -63.350899 434 651 -1 282 574
+109 622 -63.350899 434 597 -1 282 512
+114 619 -63.369381 512 494 -1 301 597
+117 617 -63.377781 512 531 791 301 574
+121 614 -63.409698 478 651 800 315 478
+124 612 -63.413059 408 597 -1 338 531
+127 610 -63.448338 421 478 -1 408 397
+128 609 -63.505455 447 478 -1 -1 512
+128 609 -63.539055 447 597 -1 -1 574
+127 610 -63.616337 397 512 -1 -1 531
+126 612 -63.668415 434 494 -1 -1 552
+125 613 -63.745697 386 478 -1 -1 531
+125 613 -63.777618 397 462 -1 -1 531
+121 619 -63.898579 386 531 -1 -1 494
+118 626 -64.024574 386 552 -1 -1 478
+117 631 -64.095131 434 462 -1 -1 552
+115 646 -64.316887 397 512 714 -1 462
+117 619 -64.300087 397 408 714 -1 462
+117 613 -64.326965 365 462 -1 -1 434
+117 609 -64.362244 386 478 800 -1 478
+117 615 -64.599121 408 421 751 -1 447
+117 617 -64.647842 347 421 791 -1 462
+119 621 -64.746964 356 365 714 -1 408
+122 629 -64.881363 356 356 597 -1 408
+124 633 -64.951920 356 397 651 -1 434
+112 620 -65.143440 301 338 531 -1 421
+111 619 -65.163597 322 322 574 -1 408
+107 615 -65.185432 294 330 494 -1 397
+105 613 -65.229118 276 356 597 -1 397
+105 613 -65.261040 307 338 574 -1 375
+106 614 -65.370239 276 288 531 -1 397
+108 615 -65.523117 270 322 552 -1 365
+111 616 -65.655838 270 330 421 -1 322
+120 618 -65.857437 288 462 494 -1 338
+129 618 -66.001915 270 434 494 -1 322
+135 617 -66.082558 282 375 462 -1 330
+143 615 -66.215279 276 447 478 -1 322
+131 618 -66.183357 282 462 434 -1 288
+126 619 -66.180000 270 365 421 -1 288
+117 621 -66.181679 270 421 447 -1 288
+114 622 -66.186722 265 408 434 -1 301
+110 624 -66.215286 265 421 408 -1 276
+108 624 -66.232086 270 421 330 -1 307
+106 624 -66.277443 255 421 408 -1 307
+108 623 -66.363121 250 421 375 -1 294
+109 622 -66.408478 260 375 365 -1 294
+112 620 -66.502556 250 408 347 -1 294
+114 619 -66.556313 241 386 365 -1 265
+118 616 -66.662148 241 365 322 -1 288
+125 610 -66.803268 232 375 338 -1 282
+128 606 -66.875511 241 338 330 -1 282
+133 599 -67.011589 232 356 315 -1 276
+133 599 -67.046867 224 330 315 -1 276
+125 612 -66.994789 210 347 288 -1 265
+123 615 -66.999832 228 330 294 -1 265
+121 619 -67.028397 221 307 276 -1 250
+117 626 -67.033440 210 276 260 -1 260
+116 628 -67.058640 200 288 250 -1 265
+114 631 -67.144318 221 265 224 -1 255
+114 632 -67.199760 232 241 237 -1 241
+114 632 -67.337517 315 232 250 -1 232
+114 634 -67.463516 356 200 270 -1 200
+114 634 -67.523994 176 183 241 -1 189
+114 631 -67.661751 173 176 232 -1 200
+114 630 -67.733994 171 166 203 597 197
+109 620 -68.063278 171 124 194 -1 173
+107 617 -68.093521 160 117 178 -1 197
+102 608 -68.130478 162 112 162 -1 200
+96 600 -68.179199 160 115 149 -1 213
+106 633 -67.608002 178 176 114 386 347
+106 634 -67.611359 171 183 112 375 365
+106 637 -67.641602 173 178 101 330 365
+106 635 -67.722244 156 171 -1 330 322
+106 634 -67.765923 154 156 -1 307 347
+105 631 -67.861679 137 151 -1 307 322
+104 629 -67.908722 147 145 -1 301 294
+102 625 -67.920479 137 140 -1 260 338
+98 617 -67.938957 137 137 -1 210 386
+96 613 -67.942314 139 145 -1 200 574
+91 603 -67.965836 140 241 -1 181 -1
+91 603 -67.933914 147 166 -1 173 623
+101 636 -67.624794 152 121 119 114 -1
+101 638 -67.571037 154 119 122 107 -1
+101 639 -67.490402 203 121 183 -1 -1
+101 639 -67.386238 265 130 140 -1 -1
+101 638 -67.359360 375 137 129 -1 -1
+101 637 -67.303925 531 152 118 -1 -1
+102 633 -67.272003 800 156 114 -1 -1
+104 627 -67.295525 714 186 117 -1 -1
+108 608 -67.409767 -1 245 112 117 -1
+100 631 -67.184654 751 375 119 228 -1
+97 637 -67.130898 -1 -1 131 178 -1
+99 631 -67.181297 -1 -1 145 156 -1
+100 627 -67.214897 -1 552 158 142 -1
+103 613 -67.329140 -1 -1 213 127 -1
+104 601 -67.426582 -1 -1 260 124 -1
+101 617 -67.295540 -1 -1 322 119 651
+99 624 -67.238419 -1 -1 307 121 -1
+95 634 -67.149384 -1 -1 623 126 478
+94 637 -67.122505 -1 -1 791 127 347
+94 637 -67.122505 -1 -1 -1 139 134
+96 633 -67.154427 -1 -1 -1 164 260
+98 627 -67.204826 -1 -1 -1 183 250
+102 607 -67.374504 -1 -1 -1 210 245
+103 599 -67.460182 -1 800 -1 241 237
+101 616 -67.387947 -1 -1 -1 294 241
+100 622 -67.376190 -1 -1 791 315 245
+98 629 -67.386269 -1 -1 -1 330 250
+98 632 -67.399712 -1 -1 -1 347 245
+98 636 -67.438354 -1 -1 -1 347 270
+98 637 -67.465233 -1 -1 -1 365 270
+98 635 -67.549232 -1 -1 -1 397 270
+98 634 -67.591232 -1 -1 -1 421 276
+98 630 -67.693710 -1 -1 -1 494 282
+98 628 -67.747467 -1 -1 -1 421 294
+90 611 -68.064995 -1 -1 -1 623 315
+84 603 -68.174194 -1 -1 -1 597 315
+84 603 -68.241394 -1 -1 -1 531 315
+90 611 -68.194351 -1 -1 -1 651 322
+96 618 -68.190994 -1 -1 -1 651 322
+98 621 -68.194351 751 -1 -1 494 315
+102 625 -68.219551 -1 -1 -1 714 347
+103 626 -68.239708 -1 -1 -1 681 338
+107 630 -68.266586 -1 -1 -1 -1 338
+108 631 -68.286743 -1 -1 -1 -1 347
+109 632 -68.342186 -1 -1 -1 -1 365
+108 631 -68.459785 -1 -1 -1 791 365
+106 630 -68.543785 462 -1 -1 -1 347
+105 630 -68.585785 -1 -1 -1 623 386
+103 628 -68.678185 -1 -1 -1 -1 375
+100 627 -68.740341 -1 -1 -1 -1 397
+93 625 -68.868019 -1 -1 -1 597 408
+89 624 -68.933540 -1 -1 -1 751 408
+79 623 -69.084740 -1 -1 -1 -1 421
+72 623 -69.170418 -1 -1 -1 681 397
+82 623 -69.156975 -1 -1 -1 -1 434
+86 623 -69.160332 -1 -1 -1 597 365
+94 623 -69.160332 -1 -1 -1 -1 434
+98 623 -69.165375 -1 -1 -1 -1 462
+104 623 -69.190575 -1 -1 -1 -1 434
+106 623 -69.210732 -1 -1 -1 -1 478
+109 623 -69.254410 -1 -1 -1 651 478
+110 623 -69.277931 -1 -1 -1 597 462
+107 623 -69.373688 -1 -1 -1 -1 512
+105 624 -69.427444 -1 -1 -1 623 494
+101 626 -69.526566 -1 -1 -1 597 478
+99 627 -69.580322 -1 -1 -1 681 531
+94 630 -69.694557 -1 -1 -1 552 574
+90 633 -69.765114 -1 -1 623 597 494
+79 644 -69.958313 -1 -1 791 347 574
+79 644 -69.991913 -1 -1 421 531 512
+84 638 -69.995270 791 -1 512 434 574
+90 631 -69.991905 -1 -1 478 714 552
+93 627 -69.988548 -1 -1 478 408 597
+96 623 -70.017113 -1 -1 386 651 597
+98 620 -70.027191 -1 -1 365 421 623
+101 616 -70.059113 -1 -1 365 347 597
+102 615 -70.079269 -1 -1 347 408 597
+103 612 -70.129669 -1 -1 307 751 531
+103 612 -70.164948 -1 -1 301 597 681
+103 612 -70.237190 -1 -1 294 -1 751
+102 613 -70.282547 -1 -1 276 -1 791
+102 613 -70.721031 -1 -1 -1 -1 751
+102 612 -70.742874 -1 -1 -1 681 751
+102 619 -70.855431 -1 -1 -1 751 651
+103 621 -70.905830 -1 -1 -1 751 623
+105 627 -71.023430 -1 -1 -1 791 681
+107 632 -71.104073 -1 -1 -1 623 681
+116 645 -71.298950 -1 -1 -1 552 651
+116 645 -71.332550 -1 -1 -1 574 751
+111 639 -71.340950 -1 -1 597 494 751
+108 635 -71.334229 -1 -1 -1 552 681
+103 628 -71.332550 -1 -1 -1 681 623
+102 627 -71.354393 -1 -1 -1 623 651
+98 623 -71.374550 -1 -1 -1 597 751
+97 622 -71.394707 -1 -1 -1 531 574
+93 618 -71.419907 -1 -1 -1 462 623
+92 617 -71.440063 -1 -1 791 365 681
+91 616 -71.493820 -1 -1 -1 245 597
+91 616 -71.530777 -1 -1 -1 173 800
+92 617 -71.611412 -1 -1 -1 101 681
+93 618 -71.658455 -1 -1 -1 103 681
+96 620 -71.742455 -1 -1 -1 127 751
+101 623 -71.807976 -1 -1 -1 478 681
+120 629 -71.997818 -1 -1 -1 365 -1
+127 630 -72.076775 -1 -1 -1 365 -1
+97 622 -71.996140 -1 -1 -1 494 800
+93 621 -72.031418 -1 -1 -1 552 -1
+92 621 -72.056618 -1 -1 -1 531 800
+92 621 -72.125496 -1 -1 -1 531 -1
+94 621 -72.175896 -1 -1 -1 574 -1
+95 621 -72.217896 -1 -1 -1 597 751
+99 621 -72.317017 -1 -1 -1 597 -1
+104 621 -72.421173 -1 -1 -1 791 791
+107 620 -72.476616 -1 -1 -1 623 751
+115 617 -72.616051 -1 -1 -1 -1 714
+119 615 -72.684929 651 -1 -1 -1 791
+126 611 -72.821007 791 -1 -1 751 800
+126 611 -72.854607 -1 -1 -1 714 681
+113 619 -72.805893 -1 -1 -1 651 791
+98 628 -72.868057 -1 -1 -1 -1 651
+96 629 -72.884857 751 -1 -1 800 651
+93 631 -72.923500 -1 -1 -1 751 800
+93 631 -72.957100 -1 -1 -1 -1 791
+93 631 -73.020935 -1 -1 -1 -1 751
+94 630 -73.062935 -1 -1 -1 -1 751
+96 628 -73.146935 -1 -1 -1 -1 791
+96 627 -73.185577 -1 -1 -1 -1 597
+101 616 -73.451019 -1 -1 -1 -1 800
+102 612 -73.518219 -1 -1 -1 -1 791
+104 602 -73.664375 -1 -1 -1 -1 800
+105 594 -73.765175 -1 -1 -1 -1 800
+105 602 -73.775253 -1 -1 -1 -1 800
+105 606 -73.776932 -1 -1 -1 -1 597
+105 615 -73.770210 -1 -1 -1 -1 597
+105 619 -73.773567 -1 -1 -1 -1 751
+105 625 -73.797089 751 -1 -1 -1 751
+105 627 -73.812210 -1 -1 -1 -1 751
+105 631 -73.850853 -1 -1 -1 -1 623
+105 631 -73.882774 -1 -1 -1 -1 651
+105 630 -73.956696 -1 -1 -1 -1 800
+105 629 -74.000374 -1 -1 -1 -1 714
+104 625 -74.099495 -1 -1 -1 -1 651
+103 623 -74.146538 -1 -1 -1 -1 791
+101 619 -74.249016 597 -1 -1 -1 574
+99 615 -74.314537 -1 -1 -1 -1 714
+93 607 -74.459015 -1 -1 -1 -1 651
+86 600 -74.571571 -1 -1 -1 -1 623
+86 600 -74.640450 -1 -1 -1 -1 651
+92 606 -74.605171 -1 -1 -1 -1 -1
+99 613 -74.605171 -1 -1 -1 -1 -1
+102 617 -74.600128 -1 -1 -1 -1 751
+115 628 -74.736214 -1 -1 -1 -1 681
+116 629 -74.761414 -1 -1 -1 -1 681
+113 626 -74.996605 -1 -1 -1 -1 681
+109 625 -75.092361 -1 -1 -1 -1 681
+106 624 -75.149483 -1 -1 -1 -1 623
+98 623 -75.275482 -1 -1 -1 -1 681
+94 623 -75.342682 -1 -1 -1 -1 651
+77 625 -75.539238 -1 -1 -1 -1 751
+77 625 -75.574516 -1 -1 -1 -1 623
+87 623 -75.561073 -1 -1 -1 -1 574
+92 622 -75.559395 800 -1 -1 -1 681
+100 620 -75.562752 -1 -1 -1 -1 681
+103 619 -75.571152 -1 -1 -1 -1 714
+108 618 -75.594673 -1 -1 -1 -1 651
+110 618 -75.609795 -1 -1 791 -1 681
+113 618 -75.656830 -1 -1 -1 -1 651
+114 618 -75.683708 -1 -1 -1 -1 597
+111 619 -75.772751 -1 -1 -1 -1 751
+110 620 -75.816429 552 -1 -1 -1 574
+107 622 -75.913864 -1 -1 -1 -1 623
+105 624 -75.969307 -1 -1 -1 -1 681
+101 627 -76.076828 -1 -1 597 -1 681
+98 630 -76.149071 -1 -1 -1 -1 681
+92 638 -76.296913 -1 -1 -1 -1 623
+88 644 -76.384270 -1 -1 800 -1 651
+92 638 -76.392670 -1 -1 -1 -1 623
+95 634 -76.385948 623 -1 751 -1 623
+99 628 -76.390991 -1 -1 -1 -1 531
+101 624 -76.390991 -1 -1 651 -1 597
+108 612 -76.483391 -1 -1 714 -1 512
+108 610 -76.537148 -1 -1 800 -1 651
+108 611 -76.574104 531 597 681 -1 651
+107 613 -76.654747 -1 -1 597 751 651
+107 614 -76.737061 -1 -1 623 -1 574
+107 615 -76.777382 -1 791 714 -1 597
+107 619 -76.878181 -1 623 623 -1 574
+107 622 -76.935303 -1 681 623 -1 597
+107 630 -77.066345 -1 714 651 -1 512
+108 635 -77.136902 -1 681 623 -1 681
+113 650 -77.328423 791 714 478 -1 512
+113 650 -77.363701 -1 462 512 -1 681
+109 640 -77.346901 -1 -1 552 -1 623
+107 635 -77.340179 -1 681 597 -1 478
+105 627 -77.343536 -1 623 552 -1 597
+103 621 -77.362015 -1 714 531 -1 597
+102 619 -77.373772 -1 478 531 -1 574
+100 615 -77.410736 -1 574 421 681 512
+100 615 -77.439293 -1 623 447 -1 574
+101 617 -77.518257 -1 552 478 -1 597
+102 618 -77.561935 -1 531 397 -1 597
+104 621 -77.661057 -1 574 447 -1 574
+107 625 -77.768578 -1 447 478 -1 597
+109 626 -77.820656 -1 478 397 791 552
+117 632 -77.961777 -1 512 408 681 574
+121 634 -78.030655 -1 447 386 -1 574
+101 626 -78.205368 478 386 356 478 552
+99 625 -78.223846 462 386 322 791 531
+94 624 -78.250725 356 365 315 -1 531
+93 624 -78.272568 301 338 315 751 574
+92 624 -78.334724 276 347 282 651 574
+93 624 -78.412003 265 338 282 714 552
+94 624 -78.457359 265 307 270 651 574
+96 624 -78.539680 237 288 255 531 531
+98 624 -78.588402 217 294 232 791 574
+101 624 -78.729515 210 270 241 751 478
+107 622 -78.890793 217 255 232 800 574
+101 629 -79.283897 213 137 117 -1 478
+107 624 -79.293976 181 142 107 -1 651
+113 618 -79.299011 714 162 104 365 791
+118 613 -79.325890 478 181 104 322 -1
+125 605 -79.362846 462 232 103 276 -1
+114 614 -79.231804 421 276 108 194 -1
+104 621 -79.115883 386 210 115 183 -1
+94 626 -79.018440 397 462 124 166 -1
+92 627 -79.004997 386 800 147 151 -1
+94 626 -79.023476 434 494 158 129 338
+95 626 -79.030197 478 434 191 122 -1
+107 619 -79.134354 531 421 210 115 -1
+124 603 -79.314117 623 397 166 114 -1
+116 610 -79.228439 -1 408 200 114 -1
+102 620 -79.088997 651 397 597 117 -1
+97 623 -79.048676 -1 397 330 126 -1
+95 624 -79.026833 -1 386 245 133 -1
+123 601 -79.346039 -1 681 288 224 -1
+110 612 -79.272125 -1 -1 294 221 -1
+105 616 -79.255325 -1 -1 288 181 -1
+101 620 -79.272125 -1 -1 288 178 -1
+100 621 -79.290604 -1 800 282 169 -1
+96 625 -79.314125 -1 751 265 166 -1
+95 626 -79.332603 -1 800 255 178 -1
+94 627 -79.389717 -1 -1 255 194 -1
+94 627 -79.451881 -1 714 250 232 -1
+95 626 -79.498924 -1 751 237 434 -1
+96 624 -79.581245 -1 681 237 531 -1
+96 624 -79.616524 -1 -1 217 651 -1
+98 621 -79.708923 -1 623 213 751 -1
+99 618 -79.771080 -1 597 217 714 -1
+101 611 -79.895393 -1 512 200 651 -1
+102 605 -79.972672 -1 462 207 574 -1
+102 589 -80.150749 -1 623 200 338 -1
+102 598 -80.105392 -1 714 191 307 -1
+102 611 -80.065071 -1 623 197 294 -1
+102 621 -80.034828 -1 751 191 265 -1
+102 623 -80.044907 -1 -1 194 217 -1
+102 623 -80.083549 -1 -1 186 237 -1
+107 625 -80.609398 -1 -1 265 169 -1
+106 624 -80.683319 -1 -1 270 171 -1
+105 623 -80.725319 -1 -1 260 171 -1
+104 622 -80.804283 -1 -1 265 171 -1
+102 620 -80.895004 -1 -1 260 164 -1
+100 618 -80.948761 -1 -1 255 166 -1
+94 614 -81.074760 -1 -1 260 166 -1
+91 612 -81.140282 494 -1 250 164 -1
+74 605 -81.343567 -1 -1 250 169 -1
+74 605 -81.368767 -1 -1 265 164 -1
+92 613 -81.279732 -1 -1 276 160 -1
+96 615 -81.274689 -1 -1 282 152 -1
+103 618 -81.288124 -1 -1 282 158 -1
+105 619 -81.303246 -1 -1 288 154 -1
+108 621 -81.340202 -1 -1 294 156 -1
+109 621 -81.367081 -1 -1 294 158 -1
+107 621 -81.452759 -1 -1 294 158 -1
+105 621 -81.504837 -1 -1 288 154 -1
+101 621 -81.600594 -1 -1 288 160 -1
+99 621 -81.650993 -1 -1 294 156 -1
+93 621 -81.758507 -1 -1 294 158 -1
+89 622 -81.827385 -1 -1 294 154 -1
+79 624 -81.968506 -1 -1 301 156 -1
+71 627 -82.065948 -1 -1 294 156 -1
+71 627 -82.131470 -1 -1 294 152 -1
+82 623 -82.076027 -1 -1 315 147 -1
+91 619 -82.070984 -1 -1 282 156 -1
+94 618 -82.081062 -1 -1 294 151 -1
+100 615 -82.101219 -1 -1 307 156 -1
+100 615 -82.133141 -1 -1 294 154 -1
+105 612 -82.156662 -1 -1 301 154 -1
+108 610 -82.200340 -1 -1 315 154 -1
+109 610 -82.227219 -1 -1 315 156 -1
+109 610 -82.301140 -1 -1 322 154 -1
+104 616 -82.571617 -1 -1 322 154 -1
+102 618 -82.628738 -1 -1 301 156 -1
+98 625 -82.754738 714 -1 315 154 -1
+96 629 -82.821938 -1 -1 315 154 -1
+92 645 -83.015137 -1 -1 322 156 -1
+92 645 -83.048737 -1 -1 315 158 -1
+95 634 -83.026894 -1 -1 307 152 -1
+96 630 -83.025215 -1 -1 301 154 -1
+98 621 -83.030258 -1 -1 322 154 -1
+99 618 -83.036980 -1 -1 315 147 -1
+101 612 -83.053780 597 -1 315 156 -1
+102 609 -83.053780 -1 -1 322 154 -1
Index: branches/scout/projects/mapping/matlab/data/input4.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input4.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input4.txt	(revision 1346)
@@ -0,0 +1,1732 @@
+0 0 0.008400 166 171 -1 -1 112
+0 0 0.008400 154 166 -1 -1 110
+3 0 0.005040 127 -1 -1 -1 112
+6 0 0.042000 156 -1 -1 -1 113
+13 1 0.141120 120 112 597 -1 119
+38 11 0.277199 -1 315 462 -1 130
+38 11 0.139440 -1 800 714 -1 125
+38 11 0.070560 106 408 681 -1 109
+38 11 -0.068880 120 434 791 -1 104
+38 11 -0.139440 137 512 -1 -1 -1
+38 11 -0.283919 162 574 -1 494 -1
+38 11 -0.356159 265 531 -1 751 -1
+38 11 -0.500639 751 574 -1 -1 -1
+41 -5 -1.441436 574 -1 751 250 -1
+42 -9 -1.451516 512 -1 791 241 -1
+42 -17 -1.468316 478 -1 681 255 434
+42 -21 -1.468316 478 -1 714 255 375
+42 -29 -1.475036 531 -1 800 265 315
+42 -37 -1.476716 574 -1 -1 265 294
+42 -41 -1.480076 531 791 800 265 282
+42 -49 -1.485116 447 -1 791 265 282
+42 -53 -1.488476 494 -1 462 276 276
+42 -61 -1.493516 447 -1 714 276 315
+42 -65 -1.500236 494 -1 -1 276 322
+42 -73 -1.508636 494 -1 -1 276 330
+42 -110 -1.557356 531 -1 791 288 421
+42 -118 -1.562396 434 -1 462 282 434
+42 -126 -1.570796 447 -1 -1 294 397
+42 -130 -1.575836 408 791 478 294 434
+42 -138 -1.582556 494 -1 714 294 447
+42 -142 -1.582556 447 -1 597 288 434
+42 -150 -1.589276 447 714 -1 282 434
+42 -154 -1.590956 397 -1 651 270 478
+42 -162 -1.595996 397 -1 -1 301 408
+42 -166 -1.599356 397 714 434 307 365
+42 -174 -1.606076 397 -1 -1 301 434
+42 -178 -1.606076 447 -1 531 315 434
+42 -186 -1.612796 434 -1 462 307 408
+42 -194 -1.616156 421 -1 714 315 375
+42 -198 -1.617836 397 531 651 315 434
+42 -206 -1.621196 462 -1 375 315 408
+42 -210 -1.621196 462 -1 494 288 375
+42 -218 -1.624556 408 751 478 315 386
+42 -222 -1.626236 408 714 531 282 397
+42 -230 -1.627916 408 -1 462 315 397
+42 -234 -1.631276 421 -1 462 315 356
+42 -242 -1.632956 421 800 512 322 386
+42 -250 -1.639676 421 -1 322 307 408
+42 -254 -1.641356 397 494 552 330 597
+42 -262 -1.646396 397 651 301 330 462
+42 -266 -1.649756 434 800 386 330 434
+42 -274 -1.656476 386 597 375 301 408
+42 -278 -1.659836 397 -1 322 322 408
+42 -286 -1.666556 322 -1 294 330 365
+42 -294 -1.673276 408 800 301 338 397
+42 -298 -1.676636 338 -1 397 307 386
+42 -305 -1.688396 365 -1 375 322 397
+42 -309 -1.695116 408 -1 294 338 375
+42 -316 -1.703516 347 -1 322 338 397
+39 -328 -1.730396 408 -1 282 338 365
+37 -336 -1.740476 408 800 260 347 375
+35 -343 -1.750556 421 791 365 338 347
+34 -347 -1.753916 375 800 301 338 365
+32 -355 -1.762316 421 -1 356 338 365
+31 -359 -1.763996 447 -1 265 330 365
+29 -367 -1.770716 386 -1 260 330 356
+28 -371 -1.775756 421 -1 288 347 347
+26 -379 -1.782475 375 -1 260 347 338
+20 -403 -1.797596 408 -1 245 356 347
+14 -427 -1.811036 421 800 250 338 338
+9 -447 -1.826156 397 800 241 347 330
+7 -455 -1.832876 421 -1 245 330 330
+6 -459 -1.836236 365 -1 255 315 322
+4 -467 -1.841276 397 -1 255 347 330
+3 -471 -1.844636 408 714 270 330 315
+1 -479 -1.849676 421 574 288 322 322
+0 -483 -1.856396 365 800 250 338 347
+-2 -491 -1.861436 478 714 260 347 338
+-4 -499 -1.866476 478 714 294 338 315
+-7 -510 -1.874876 434 478 338 347 315
+-10 -519 -1.891676 478 714 322 347 315
+-11 -522 -1.895036 421 597 330 347 315
+-13 -528 -1.908476 574 651 330 356 307
+-15 -534 -1.920236 531 447 365 347 301
+-16 -537 -1.926956 597 714 338 347 307
+-18 -543 -1.938716 -1 574 338 338 294
+-19 -546 -1.945436 -1 375 322 347 301
+-21 -552 -1.955515 -1 531 322 338 288
+-22 -555 -1.960555 -1 462 330 338 307
+-24 -561 -1.970635 -1 494 356 356 301
+-27 -568 -1.979035 -1 512 365 330 301
+-29 -572 -1.982395 800 494 408 315 288
+-33 -580 -1.989115 651 478 494 338 288
+-40 -595 -1.997515 338 365 597 330 307
+-44 -602 -2.005915 307 421 -1 338 288
+-48 -610 -2.009275 237 386 -1 330 294
+-50 -613 -2.010955 232 386 -1 338 288
+-54 -619 -2.019355 207 386 -1 338 294
+-56 -622 -2.022715 217 356 -1 338 301
+-60 -629 -2.029435 217 338 -1 330 294
+-62 -632 -2.032795 210 307 -1 338 301
+-66 -639 -2.039515 210 330 800 338 294
+-70 -645 -2.047915 221 307 791 338 288
+-76 -655 -2.079835 245 288 574 338 282
+-77 -657 -2.123515 282 241 751 322 282
+-78 -659 -2.234395 288 237 681 347 315
+-78 -659 -2.303275 255 241 237 347 301
+-80 -661 -2.420874 241 245 241 397 282
+-88 -667 -2.466234 224 241 265 375 315
+-91 -669 -2.503194 221 217 270 397 330
+-95 -672 -2.603994 189 221 288 408 347
+-96 -673 -2.664474 176 221 282 447 478
+-97 -673 -2.800553 149 232 265 552 751
+-97 -673 -2.869433 152 347 260 651 221
+-101 -673 -2.968553 139 552 217 -1 191
+-102 -673 -3.092872 142 356 224 -1 301
+-102 -673 -3.165112 145 200 217 791 265
+-102 -673 -3.307912 152 217 213 -1 245
+-102 -673 -3.381831 162 232 210 -1 189
+-102 -673 -3.522951 164 217 213 -1 183
+-102 -673 -3.664071 210 173 228 -1 169
+-102 -673 -3.732951 158 173 228 -1 160
+-102 -673 -3.872390 164 164 255 -1 154
+-102 -673 -3.942950 181 158 265 -1 151
+-102 -673 -4.085750 152 152 347 -1 151
+-102 -673 -4.156310 139 156 447 -1 147
+-102 -673 -4.299109 127 154 -1 -1 160
+-102 -673 -4.369669 113 160 -1 -1 169
+-102 -673 -4.510789 110 186 -1 -1 176
+-102 -673 -4.579669 102 200 791 597 241
+-102 -673 -5.147508 121 -1 -1 552 142
+-102 -673 -5.290308 136 -1 800 574 131
+-102 -673 -5.567506 276 -1 -1 597 101
+-102 -673 -5.710306 365 -1 -1 651 104
+-102 -673 -5.780866 623 -1 714 -1 101
+-102 -673 -5.925346 791 751 597 408 109
+-102 -673 -5.997586 -1 462 597 221 131
+-102 -673 -6.138706 -1 -1 512 347 131
+-102 -673 -6.278145 -1 -1 462 397 151
+-101 -673 -6.343665 -1 -1 462 447 189
+-96 -673 -6.429345 -1 751 408 434 210
+-71 -681 -6.573824 512 597 365 408 408
+-68 -682 -6.582224 531 574 408 408 386
+-62 -684 -6.602384 386 552 386 408 623
+-59 -685 -6.614144 651 512 397 408 681
+-53 -687 -6.632624 -1 494 375 421 651
+-50 -688 -6.641024 531 512 347 421 -1
+-44 -690 -6.656144 -1 434 365 386 -1
+-38 -692 -6.671264 651 408 397 462 -1
+-35 -693 -6.677984 478 421 356 434 -1
+-26 -696 -6.698144 531 397 338 434 -1
+17 -720 -6.696465 -1 315 250 434 -1
+59 -736 -6.545265 365 276 203 301 -1
+68 -738 -6.484785 651 288 194 245 -1
+86 -740 -6.358785 -1 307 183 315 -1
+95 -740 -6.291585 -1 397 181 494 -1
+113 -739 -6.158866 -1 421 181 365 597
+121 -737 -6.091666 -1 512 183 315 512
+137 -732 -5.957267 -1 -1 189 255 494
+153 -725 -5.822867 574 -1 194 237 434
+160 -721 -5.760707 -1 386 213 213 494
+173 -711 -5.639748 494 -1 282 203 478
+178 -707 -5.607828 -1 -1 307 189 447
+187 -699 -5.570868 -1 -1 301 183 462
+191 -696 -5.565828 -1 -1 288 186 478
+197 -690 -5.564148 -1 -1 307 183 434
+200 -688 -5.570868 -1 -1 315 183 447
+212 -679 -5.592708 -1 -1 301 183 462
+215 -677 -5.599428 -1 -1 294 181 494
+221 -673 -5.616228 791 -1 282 178 478
+230 -667 -5.634708 -1 -1 288 181 478
+233 -665 -5.643108 421 -1 282 176 478
+239 -661 -5.658228 512 -1 250 178 494
+242 -659 -5.663269 462 -1 250 178 462
+248 -655 -5.676709 531 -1 250 181 512
+257 -649 -5.691829 531 -1 250 178 447
+266 -643 -5.706949 356 -1 237 173 434
+275 -637 -5.722069 494 -1 224 171 574
+287 -629 -5.743909 651 -1 207 166 531
+296 -623 -5.762389 651 -1 207 162 623
+299 -621 -5.769109 597 -1 200 160 512
+306 -616 -5.762390 681 -1 194 162 478
+312 -612 -5.735510 597 -1 197 154 531
+324 -604 -5.659910 447 -1 221 145 531
+335 -595 -5.611190 421 751 221 144 597
+341 -590 -5.570870 408 751 152 147 552
+353 -578 -5.465031 397 -1 282 147 574
+358 -572 -5.409591 -1 -1 330 145 531
+367 -560 -5.332311 -1 791 322 145 574
+382 -530 -5.110551 681 800 800 154 651
+387 -514 -4.987911 478 651 681 166 -1
+390 -500 -4.922391 512 512 681 176 -1
+391 -494 -4.908951 434 294 597 191 -1
+393 -485 -4.893832 512 356 574 191 -1
+394 -480 -4.890472 478 386 574 189 531
+396 -472 -4.897192 512 356 478 213 -1
+398 -464 -4.905592 478 375 552 213 -1
+399 -460 -4.908952 462 315 597 224 -1
+401 -453 -4.922392 478 330 552 228 -1
+402 -449 -4.927432 447 386 552 237 -1
+404 -442 -4.940872 478 365 478 241 -1
+405 -438 -4.947592 462 386 462 250 -1
+407 -431 -4.962712 434 397 447 250 -1
+409 -425 -4.977832 397 397 494 260 574
+410 -422 -4.984552 421 447 494 265 751
+412 -416 -4.997993 447 434 462 307 751
+413 -413 -5.008072 434 408 462 397 651
+415 -407 -5.021513 434 478 478 315 -1
+416 -404 -5.031592 478 447 408 282 597
+418 -398 -5.046712 375 434 434 260 512
+420 -392 -5.061832 434 512 434 294 531
+421 -389 -5.070232 434 552 434 282 681
+423 -383 -5.083673 434 494 408 282 651
+424 -380 -5.092072 434 478 365 265 597
+426 -374 -5.105512 447 478 408 276 597
+427 -371 -5.108872 462 512 397 288 651
+429 -365 -5.123992 434 478 375 301 494
+438 -348 -5.147512 434 447 365 315 531
+440 -345 -5.154232 421 478 347 307 512
+444 -339 -5.165992 408 397 347 294 531
+448 -333 -5.174392 397 375 338 301 478
+450 -330 -5.179432 397 397 322 315 447
+454 -324 -5.187832 397 386 322 322 494
+456 -321 -5.192873 397 365 301 301 512
+460 -315 -5.199593 434 347 288 322 462
+464 -309 -5.207993 375 315 288 338 478
+466 -306 -5.213033 434 338 255 338 434
+470 -300 -5.223113 386 322 265 338 434
+472 -297 -5.228153 434 315 265 356 434
+476 -291 -5.234873 512 255 250 347 462
+480 -284 -5.243273 462 294 241 338 408
+482 -280 -5.243273 597 260 237 338 478
+489 -267 -5.182794 462 270 120 338 462
+492 -260 -5.142474 375 265 203 365 408
+498 -244 -5.033274 294 260 194 322 512
+502 -228 -4.908955 294 245 186 241 512
+503 -219 -4.841755 270 245 178 494 651
+504 -202 -4.710715 282 207 173 478 -1
+503 -193 -4.643516 260 210 173 301 -1
+500 -176 -4.507436 282 512 173 276 -1
+491 -152 -4.302477 282 282 189 207 681
+482 -136 -4.168077 282 260 213 200 -1
+477 -129 -4.102558 307 232 194 191 -1
+453 -104 -3.832079 375 232 330 173 -1
+446 -99 -3.764879 434 228 237 162 -1
+430 -90 -3.625439 478 224 221 173 -1
+422 -86 -3.556560 623 228 197 183 681
+406 -81 -3.418800 791 224 173 191 -1
+397 -79 -3.349920 597 245 158 197 -1
+379 -77 -3.213841 -1 294 160 213 -1
+362 -77 -3.081121 -1 307 154 181 681
+353 -78 -3.013921 -1 386 145 191 -1
+337 -82 -2.877842 -1 512 158 397 751
+329 -85 -2.812322 -1 -1 164 224 681
+313 -92 -2.674562 751 -1 173 210 800
+305 -97 -2.604003 -1 751 194 181 574
+291 -108 -2.464563 -1 -1 203 171 597
+284 -114 -2.395683 -1 -1 250 164 574
+274 -126 -2.308323 -1 -1 307 160 531
+266 -136 -2.268003 -1 -1 347 160 531
+262 -141 -2.251204 -1 -1 347 158 531
+256 -149 -2.237764 681 -1 408 158 512
+253 -153 -2.231044 -1 -1 421 154 531
+247 -161 -2.226004 -1 -1 408 158 623
+244 -165 -2.222644 -1 -1 356 160 597
+238 -172 -2.222644 -1 -1 408 160 574
+235 -176 -2.219284 -1 -1 434 164 623
+231 -182 -2.222644 -1 -1 434 164 478
+228 -185 -2.224324 512 -1 408 162 552
+224 -191 -2.227684 -1 -1 421 169 623
+222 -197 -2.231044 -1 -1 434 169 597
+216 -200 -2.234404 -1 -1 375 164 623
+211 -206 -2.239444 651 -1 434 171 597
+209 -209 -2.244483 -1 -1 462 164 552
+204 -215 -2.252883 -1 -1 408 173 597
+202 -218 -2.256243 681 -1 434 173 597
+198 -224 -2.266323 -1 -1 408 171 597
+191 -233 -2.279763 -1 -1 397 173 623
+188 -236 -2.281443 -1 -1 397 178 512
+182 -242 -2.286483 -1 -1 386 178 512
+176 -248 -2.289843 -1 -1 447 178 597
+173 -251 -2.291523 714 -1 408 178 -1
+167 -257 -2.293203 -1 -1 434 173 681
+164 -260 -2.296563 -1 -1 397 171 714
+158 -266 -2.298243 -1 -1 386 181 714
+155 -269 -2.299923 -1 -1 408 173 651
+149 -275 -2.304963 574 -1 434 181 597
+146 -278 -2.308323 -1 -1 421 181 574
+140 -284 -2.311683 751 -1 434 181 574
+137 -287 -2.315043 -1 -1 375 181 574
+131 -293 -2.320083 -1 -1 386 181 531
+128 -296 -2.318403 -1 -1 408 183 597
+122 -302 -2.320083 714 -1 408 183 574
+116 -308 -2.323443 -1 -1 397 183 574
+113 -311 -2.323443 -1 -1 375 186 574
+107 -317 -2.321763 597 -1 447 181 531
+104 -320 -2.323443 -1 -1 434 183 651
+98 -326 -2.321763 -1 -1 434 189 623
+95 -329 -2.321763 -1 -1 347 183 597
+89 -335 -2.321763 -1 -1 386 186 512
+86 -338 -2.321763 -1 -1 434 186 512
+80 -344 -2.326803 751 -1 421 186 531
+77 -347 -2.326803 651 -1 397 186 552
+71 -353 -2.330163 681 -1 434 191 574
+68 -356 -2.331843 -1 -1 386 181 597
+62 -362 -2.336883 751 -1 356 183 512
+59 -365 -2.338563 681 -1 386 191 574
+53 -371 -2.345283 791 -1 386 191 531
+50 -374 -2.350323 -1 -1 365 189 462
+44 -380 -2.358723 681 -1 408 194 512
+38 -386 -2.368803 -1 -1 356 197 462
+35 -389 -2.370483 -1 -1 421 194 552
+29 -395 -2.375523 681 651 338 183 531
+26 -398 -2.377203 -1 791 347 183 531
+20 -404 -2.383923 -1 -1 347 191 531
+8 -416 -2.388962 -1 -1 288 197 462
+2 -422 -2.392322 -1 -1 330 200 574
+-1 -425 -2.395682 -1 -1 322 186 494
+-7 -431 -2.400722 -1 -1 338 194 494
+-10 -434 -2.399042 -1 -1 301 200 512
+-16 -440 -2.407442 -1 791 301 200 478
+-19 -443 -2.409122 -1 751 294 197 478
+-25 -449 -2.410802 -1 791 282 200 408
+-34 -458 -2.417522 -1 597 260 197 462
+-43 -467 -2.417522 -1 651 245 191 531
+-49 -473 -2.419202 -1 623 228 191 512
+-52 -476 -2.417522 -1 597 224 194 478
+-58 -482 -2.419202 -1 574 213 203 494
+-61 -485 -2.419202 -1 597 217 197 478
+-67 -491 -2.420882 -1 512 183 203 512
+-91 -516 -2.262962 -1 512 800 203 512
+-96 -523 -2.212562 408 478 597 207 597
+-104 -535 -2.152082 512 531 447 200 651
+-107 -540 -2.133602 462 574 386 210 512
+-113 -548 -2.121842 494 512 365 213 574
+-117 -556 -2.121842 365 421 282 224 552
+-119 -559 -2.126882 434 462 375 228 552
+-123 -565 -2.133602 408 494 356 232 447
+-135 -584 -2.138642 421 462 301 224 531
+-139 -591 -2.140322 462 375 294 245 552
+-141 -594 -2.143682 365 408 301 250 494
+-145 -601 -2.143682 375 386 294 255 478
+-147 -605 -2.145362 397 307 250 260 512
+-151 -611 -2.148722 375 356 245 260 408
+-169 -642 -2.058002 356 301 217 294 494
+-173 -651 -2.047922 347 322 213 301 512
+-177 -659 -2.046242 338 288 207 294 462
+-179 -664 -2.036162 338 282 186 301 597
+-185 -677 -1.972322 338 288 186 250 531
+-188 -685 -1.925282 301 265 176 237 651
+-193 -701 -1.811043 282 250 160 191 751
+-196 -719 -1.681683 288 191 164 681 -1
+-196 -728 -1.612803 265 217 169 322 800
+-195 -745 -1.481764 276 462 166 265 -1
+-194 -753 -1.412884 282 330 176 213 -1
+-190 -770 -1.278484 270 288 191 200 574
+-183 -786 -1.140724 294 270 207 191 -1
+-179 -793 -1.081925 115 237 183 173 -1
+-171 -807 -1.044965 307 213 160 173 -1
+-167 -814 -1.021445 282 207 169 171 -1
+-157 -828 -0.947525 294 200 421 152 -1
+-147 -841 -0.883685 330 183 276 160 -1
+-142 -847 -0.880325 307 171 210 156 -1
+-131 -859 -0.841685 270 151 173 162 -1
+-125 -866 -0.811445 255 129 152 164 -1
+-113 -878 -0.722406 276 126 133 171 -1
+-106 -883 -0.643446 301 125 118 176 714
+-95 -889 -0.488886 531 130 -1 181 -1
+-84 -893 -0.334327 -1 151 -1 191 -1
+-79 -894 -0.265447 512 169 -1 181 -1
+-69 -896 -0.115927 -1 203 -1 158 -1
+-62 -896 -0.033608 -1 241 -1 338 -1
+-46 -895 0.124312 -1 365 105 232 -1
+-38 -893 0.203272 -1 478 110 181 651
+-22 -888 0.354471 -1 -1 129 162 623
+-14 -884 0.423351 -1 462 142 134 478
+1 -875 0.561111 -1 -1 158 124 574
+8 -870 0.628311 791 -1 181 120 478
+21 -858 0.766070 -1 -1 245 114 552
+27 -851 0.834950 -1 -1 347 112 478
+38 -837 0.976070 -1 -1 574 108 356
+43 -829 1.046629 -1 -1 751 115 531
+50 -813 1.186069 597 -1 -1 120 -1
+57 -786 1.394388 512 -1 -1 151 365
+58 -777 1.463268 512 -1 -1 162 347
+58 -760 1.595988 397 -1 -1 191 294
+58 -753 1.631268 494 751 -1 250 322
+56 -740 1.671588 478 714 -1 270 322
+54 -730 1.686707 434 651 -1 294 322
+53 -726 1.688388 462 714 552 301 322
+53 -718 1.686707 421 651 791 338 347
+53 -714 1.686707 434 651 751 365 322
+52 -706 1.686707 421 574 -1 356 356
+51 -694 1.686707 408 552 -1 478 338
+51 -690 1.686707 386 531 651 478 375
+49 -682 1.688388 386 531 597 494 356
+48 -674 1.688388 386 462 791 681 365
+48 -670 1.686707 356 512 -1 651 375
+47 -662 1.688388 315 478 791 791 375
+47 -658 1.688388 365 408 -1 623 386
+46 -650 1.691748 356 462 -1 651 375
+45 -646 1.693428 338 447 -1 552 386
+44 -638 1.696788 322 421 791 -1 397
+42 -630 1.698468 330 397 -1 -1 397
+42 -626 1.698468 315 397 -1 791 375
+40 -618 1.701828 301 365 -1 -1 408
+39 -614 1.701828 294 375 -1 -1 434
+37 -606 1.703508 288 330 -1 791 434
+36 -602 1.703508 276 330 -1 408 462
+34 -594 1.705188 255 347 -1 751 447
+33 -590 1.705188 260 307 -1 714 478
+30 -572 1.632948 224 270 -1 -1 681
+30 -570 1.584228 213 294 -1 -1 -1
+30 -568 1.463268 200 288 574 512 375
+30 -568 1.391029 197 338 714 -1 217
+30 -568 1.034870 191 597 -1 478 301
+31 -567 0.908870 210 -1 -1 494 276
+33 -565 0.870230 213 -1 -1 462 260
+37 -561 0.814790 228 -1 -1 421 245
+40 -558 0.796310 217 -1 -1 447 237
+46 -552 0.774470 232 751 -1 447 224
+49 -549 0.766070 241 478 -1 494 232
+55 -543 0.755991 224 623 -1 478 224
+58 -540 0.750951 241 574 -1 447 224
+64 -534 0.744231 241 434 -1 408 224
+67 -531 0.740871 232 597 -1 447 217
+73 -525 0.735831 224 681 -1 447 217
+85 -513 0.730791 232 597 -1 478 213
+91 -507 0.730791 221 552 -1 478 213
+94 -504 0.730791 228 623 -1 494 213
+100 -498 0.730791 217 512 -1 462 213
+106 -492 0.732471 213 531 -1 478 213
+136 -462 0.740871 207 512 -1 478 186
+142 -456 0.742551 200 421 -1 531 203
+145 -453 0.737511 197 494 -1 512 197
+150 -449 0.668631 200 421 -1 574 191
+152 -448 0.621591 224 574 -1 494 183
+158 -444 0.556071 232 751 -1 494 178
+166 -440 0.522471 250 800 -1 478 171
+170 -438 0.510711 255 791 -1 494 173
+178 -434 0.500631 265 800 -1 494 166
+182 -432 0.500631 260 791 -1 531 173
+190 -428 0.500631 270 751 -1 531 166
+194 -426 0.498951 265 800 -1 531 176
+202 -422 0.497271 270 623 -1 494 181
+236 -400 0.458631 288 651 -1 494 166
+239 -398 0.456951 276 597 -1 494 176
+258 -388 0.450231 301 597 -1 494 178
+300 -366 0.450231 307 512 552 478 173
+312 -360 0.448551 270 386 531 512 183
+320 -356 0.446871 294 462 447 462 189
+324 -354 0.446871 330 421 512 494 186
+332 -350 0.446871 330 434 478 478 186
+336 -348 0.448551 330 421 478 552 186
+343 -344 0.448551 307 447 462 531 191
+347 -342 0.450231 356 356 462 531 191
+355 -338 0.451911 338 386 434 552 191
+362 -334 0.455271 365 365 447 574 189
+366 -332 0.455271 365 301 365 494 191
+374 -328 0.456951 386 375 386 478 189
+378 -326 0.458631 421 347 397 531 191
+386 -322 0.460311 434 315 375 494 178
+394 -318 0.460311 462 294 347 574 191
+397 -316 0.456951 462 270 365 -1 194
+406 -311 0.475431 512 294 330 -1 194
+412 -308 0.503991 397 265 282 494 200
+423 -301 0.547671 322 260 294 434 207
+429 -297 0.582951 260 232 270 494 203
+441 -287 0.656871 210 245 232 531 221
+451 -279 0.636711 207 221 224 478 224
+455 -276 0.609831 210 217 213 494 213
+462 -272 0.534231 270 191 197 494 194
+465 -270 0.497271 237 162 178 512 186
+485 -254 0.577911 171 147 186 531 183
+481 -256 0.497271 156 137 171 462 178
+469 -261 0.403191 166 125 134 478 200
+456 -265 0.344391 221 126 120 386 203
+462 -262 0.426711 173 127 113 347 224
+479 -249 0.722390 136 149 105 301 365
+487 -243 0.801350 127 178 -1 276 397
+489 -241 0.851750 127 276 -1 224 421
+490 -240 0.885350 121 200 108 210 597
+488 -242 0.803030 124 147 105 181 -1
+488 -242 0.772790 117 140 102 181 -1
+488 -242 0.720710 109 133 -1 181 623
+486 -244 0.713990 109 122 -1 171 -1
+481 -248 0.713990 112 111 101 149 714
+478 -251 0.712310 119 104 110 134 623
+472 -257 0.705590 126 101 124 131 -1
+468 -261 0.693830 137 103 120 124 -1
+459 -268 0.675350 166 102 171 115 -1
+459 -268 0.707270 178 105 183 113 -1
+469 -256 0.902150 217 106 125 109 -1
+474 -249 1.036549 245 111 112 107 -1
+476 -246 1.100389 347 127 111 105 -1
+478 -241 1.214629 462 136 102 107 -1
+478 -240 1.263349 -1 145 103 107 -1
+477 -247 1.391028 -1 288 110 139 -1
+473 -262 1.307029 -1 421 113 237 751
+468 -275 1.211269 -1 478 121 169 512
+472 -260 1.328869 -1 -1 145 147 681
+474 -248 1.429668 -1 -1 162 140 597
+475 -234 1.532148 -1 -1 250 122 365
+475 -233 1.538868 -1 -1 330 119 365
+475 -235 1.518708 597 -1 531 117 -1
+474 -241 1.471668 -1 -1 800 122 -1
+471 -259 1.323828 681 -1 315 121 375
+466 -272 1.212949 574 -1 -1 134 322
+471 -251 1.379268 494 -1 -1 154 276
+473 -238 1.468308 531 -1 -1 178 250
+473 -234 1.473348 531 -1 -1 191 250
+473 -235 1.404468 512 -1 -1 228 237
+472 -237 1.354068 494 -1 -1 250 250
+470 -242 1.246549 478 791 597 250 260
+462 -256 0.982789 447 -1 -1 322 255
+453 -266 0.767750 478 597 -1 338 294
+461 -257 0.792950 462 791 -1 356 301
+467 -250 0.792950 478 751 478 365 307
+470 -247 0.786230 375 623 791 397 315
+474 -243 0.764390 462 574 -1 408 330
+475 -242 0.740870 447 512 800 421 315
+480 -238 0.722390 356 623 800 447 338
+482 -237 0.705590 397 574 -1 434 338
+483 -236 0.650150 397 478 -1 447 338
+483 -236 0.616550 386 462 -1 552 356
+482 -237 0.535910 338 512 -1 494 315
+481 -238 0.460311 365 447 -1 552 365
+481 -238 0.423351 322 462 -1 623 365
+477 -240 0.317511 338 494 -1 574 330
+473 -241 0.250311 322 386 -1 800 375
+465 -242 0.117592 322 421 -1 531 375
+460 -242 0.045352 315 421 -1 751 408
+443 -240 -0.152888 294 421 -1 714 434
+454 -242 -0.166328 531 356 -1 -1 434
+460 -243 -0.154568 365 386 -1 -1 421
+468 -245 -0.156248 330 365 -1 -1 478
+472 -246 -0.161288 307 375 -1 651 462
+478 -247 -0.183127 265 356 -1 -1 434
+481 -247 -0.223447 260 338 -1 -1 397
+482 -247 -0.245287 260 330 -1 -1 478
+479 -246 -0.337687 245 301 -1 681 512
+477 -245 -0.389767 224 315 -1 -1 512
+473 -243 -0.490567 228 301 -1 -1 512
+471 -242 -0.544326 228 265 -1 -1 751
+466 -239 -0.672006 213 276 -1 -1 -1
+464 -237 -0.759366 200 270 -1 -1 800
+461 -234 -0.934085 178 255 681 -1 462
+460 -233 -1.013045 173 315 623 791 276
+459 -232 -1.162565 173 260 -1 681 347
+459 -232 -1.303684 158 365 -1 552 365
+459 -232 -1.375924 173 421 -1 574 315
+459 -232 -1.517044 178 -1 -1 494 255
+459 -232 -1.587603 186 -1 -1 494 265
+459 -232 -1.728723 232 -1 -1 512 228
+459 -231 -1.811043 210 751 531 531 203
+463 -222 -2.016002 232 -1 447 494 191
+459 -229 -2.101681 265 -1 -1 494 189
+456 -233 -2.101681 276 800 478 447 183
+451 -240 -2.106721 250 -1 681 512 178
+448 -245 -2.133601 288 -1 714 494 183
+447 -247 -2.150401 294 -1 714 512 183
+472 -243 -3.091199 307 -1 447 478 183
+451 -243 -3.084479 315 -1 365 478 194
+448 -243 -3.097919 307 -1 397 478 194
+443 -243 -3.129839 330 800 375 478 189
+451 -246 -3.514558 365 751 282 478 191
+458 -249 -3.640557 356 651 260 462 191
+462 -252 -3.712797 330 651 265 478 186
+473 -261 -3.953036 365 751 260 434 191
+465 -253 -3.897596 330 714 250 447 194
+451 -240 -3.956396 408 531 260 462 197
+447 -235 -3.976556 386 574 265 462 197
+444 -232 -4.016876 375 531 315 447 200
+443 -231 -4.043756 356 651 330 434 200
+443 -231 -4.114316 397 623 397 434 200
+444 -232 -4.157995 421 512 434 447 200
+444 -233 -4.231915 478 574 512 447 197
+445 -237 -4.362955 478 494 -1 434 203
+448 -264 -4.776233 800 434 -1 447 207
+447 -272 -4.908953 -1 434 -1 434 207
+449 -258 -4.868633 -1 421 -1 421 200
+450 -253 -4.865273 -1 434 -1 421 207
+452 -245 -4.870313 751 386 -1 434 207
+453 -242 -4.878713 434 375 -1 434 217
+453 -237 -4.908953 356 330 -1 408 213
+454 -235 -4.925753 330 347 -1 386 210
+454 -233 -4.976153 276 356 -1 434 213
+453 -235 -5.023193 232 330 -1 421 213
+451 -238 -5.123993 207 322 623 434 213
+449 -242 -5.219753 210 307 597 434 197
+446 -246 -5.421352 203 288 623 397 213
+443 -249 -5.510392 237 260 800 447 197
+439 -252 -5.683432 260 255 -1 447 210
+437 -253 -5.769111 265 237 301 434 221
+435 -253 -5.928711 241 210 228 478 224
+426 -254 -6.142070 221 245 260 531 224
+426 -254 -6.202550 203 237 307 478 237
+440 -253 -6.229430 186 228 322 531 276
+443 -253 -6.274790 169 228 338 478 294
+449 -253 -6.367190 166 200 338 751 315
+451 -253 -6.496550 140 228 330 -1 338
+451 -253 -6.565430 139 255 294 -1 183
+451 -253 -6.708230 140 512 307 -1 213
+451 -253 -6.778790 140 210 288 -1 265
+451 -253 -6.923269 147 228 276 -1 207
+451 -253 -7.062709 158 288 282 800 203
+451 -253 -7.133269 171 288 301 -1 194
+451 -253 -7.274389 237 270 322 -1 158
+451 -253 -7.343268 462 245 338 -1 152
+454 -267 -7.704468 207 200 375 -1 147
+454 -268 -7.766628 181 191 531 597 154
+454 -269 -7.897667 160 189 623 -1 134
+454 -269 -7.966547 151 162 -1 -1 137
+454 -269 -8.107667 142 200 -1 -1 169
+454 -269 -8.179907 137 213 -1 -1 186
+454 -269 -8.322706 126 250 -1 751 397
+454 -269 -8.463826 127 270 -1 681 194
+454 -269 -8.536066 125 338 -1 623 164
+454 -269 -8.673826 131 -1 512 531 194
+454 -269 -8.744386 144 -1 -1 531 160
+454 -269 -8.882146 152 -1 -1 552 169
+454 -269 -8.952705 178 800 -1 447 160
+454 -269 -9.097185 203 -1 -1 531 151
+454 -269 -9.169425 270 -1 651 531 131
+453 -269 -9.297104 338 -1 -1 552 133
+453 -269 -9.853183 -1 800 531 228 152
+453 -269 -9.922063 -1 -1 447 265 186
+453 -269 -10.046382 -1 -1 434 347 200
+454 -270 -10.111902 -1 -1 421 408 224
+455 -271 -10.222782 -1 -1 421 408 237
+455 -271 -10.269822 -1 -1 408 434 250
+457 -274 -10.375662 -1 -1 375 356 282
+461 -281 -10.515101 -1 791 386 408 294
+462 -284 -10.575582 -1 -1 365 408 322
+464 -293 -10.720061 -1 791 375 375 330
+465 -299 -10.802382 -1 791 356 365 322
+465 -276 -10.911581 -1 623 322 276 462
+465 -271 -10.943501 -1 531 315 270 434
+465 -269 -10.963660 -1 462 301 282 531
+465 -267 -11.015740 -1 552 301 276 714
+465 -270 -11.106460 -1 531 265 260 623
+464 -273 -11.165259 -1 478 270 245 512
+463 -277 -11.262698 -1 462 270 250 -1
+462 -279 -11.314778 -1 408 265 245 -1
+460 -283 -11.422297 -1 447 245 255 574
+457 -288 -11.502937 -1 397 245 255 597
+452 -296 -11.645737 -1 421 237 270 574
+447 -302 -11.773417 -1 375 221 282 -1
+452 -297 -11.754936 -1 365 200 301 -1
+460 -289 -11.736456 -1 356 207 338 751
+465 -283 -11.701176 -1 365 203 -1 -1
+476 -270 -11.692775 -1 408 186 375 681
+474 -273 -11.744855 -1 478 173 315 552
+472 -275 -11.771735 -1 478 178 265 512
+459 -286 -11.904455 -1 651 183 250 623
+442 -296 -12.060695 -1 494 228 221 447
+455 -286 -11.936375 478 791 255 203 462
+465 -277 -11.875895 434 -1 260 194 478
+468 -274 -11.874214 531 -1 270 186 494
+471 -271 -11.907814 574 -1 294 178 512
+470 -271 -11.988454 -1 -1 294 178 462
+469 -272 -12.033813 651 -1 288 181 462
+458 -277 -12.302612 397 -1 282 173 478
+449 -279 -12.443732 512 -1 294 173 494
+445 -279 -12.510932 512 -1 260 176 512
+436 -279 -12.650372 494 -1 265 162 462
+436 -279 -12.683971 386 -1 270 171 512
+452 -280 -12.631891 462 800 282 166 386
+456 -280 -12.633572 434 -1 276 169 512
+460 -280 -12.667171 322 -1 250 164 512
+448 -254 -13.621409 397 791 255 169 531
+453 -263 -13.616369 434 791 260 166 462
+458 -271 -13.609650 478 651 241 164 597
+460 -275 -13.609650 597 651 232 162 623
+463 -281 -13.628129 494 751 217 160 552
+464 -283 -13.639889 651 714 224 162 512
+466 -287 -13.676848 478 597 224 158 512
+467 -288 -13.728929 512 597 217 158 552
+465 -282 -13.883489 651 531 203 156 574
+465 -279 -13.975888 597 574 210 152 531
+465 -276 -14.027968 597 531 194 145 623
+465 -267 -14.160687 512 512 207 142 531
+466 -259 -14.251408 322 512 217 147 531
+467 -258 -14.293407 397 531 260 140 681
+466 -275 -14.187568 307 408 265 139 751
+466 -280 -14.148928 288 512 203 134 681
+466 -289 -14.076688 -1 531 552 126 651
+466 -288 -14.080048 -1 494 478 139 -1
+466 -288 -14.083407 800 531 421 147 434
+467 -271 -14.222846 531 447 365 166 -1
+469 -264 -14.390846 512 276 375 224 -1
+468 -276 -14.542047 478 800 330 421 478
+474 -265 -14.710047 421 552 347 597 -1
+482 -256 -14.841086 447 574 347 597 791
+482 -256 -14.908286 462 574 356 462 -1
+474 -265 -14.847806 421 478 347 434 -1
+468 -271 -14.846126 356 478 315 397 -1
+465 -274 -14.884766 397 338 347 386 -1
+460 -279 -14.864606 386 434 322 347 -1
+457 -282 -14.903246 397 434 315 365 -1
+455 -284 -14.916686 322 434 322 375 365
+453 -285 -14.965405 365 434 276 365 597
+452 -286 -15.027566 301 397 315 365 574
+452 -286 -15.061166 338 365 294 338 651
+454 -284 -15.151885 322 386 307 347 301
+454 -284 -15.220765 288 356 294 338 -1
+455 -283 -15.264445 307 356 265 338 751
+462 -281 -15.387085 288 322 282 322 276
+466 -280 -15.450925 288 330 265 322 462
+475 -278 -15.588684 288 307 270 322 791
+486 -278 -15.739883 260 294 250 315 714
+493 -279 -15.830604 260 294 255 307 -1
+461 -278 -15.780204 224 255 217 315 800
+454 -278 -15.837324 210 224 237 282 -1
+453 -278 -15.894444 191 210 228 288 -1
+456 -280 -16.064123 181 207 203 276 -1
+458 -281 -16.156523 171 197 200 282 -1
+461 -282 -16.317802 152 197 183 288 597
+464 -285 -16.470680 134 207 160 301 462
+465 -287 -16.541241 129 207 145 307 478
+470 -295 -16.709240 124 210 149 301 397
+472 -299 -16.793240 107 221 142 301 397
+476 -308 -16.951159 105 210 129 294 375
+473 -299 -16.949478 -1 191 122 282 347
+471 -294 -16.944439 -1 178 117 276 330
+468 -286 -16.944439 -1 166 106 260 322
+468 -285 -16.967958 -1 160 -1 255 301
+466 -279 -16.988119 -1 133 -1 245 301
+465 -274 -16.988119 -1 125 -1 245 307
+464 -272 -16.954519 -1 105 -1 224 294
+463 -270 -16.880600 -1 -1 -1 191 375
+463 -270 -16.850361 -1 -1 -1 178 574
+463 -270 -16.783161 -1 -1 106 164 574
+463 -271 -16.756281 -1 -1 111 140 -1
+463 -272 -16.689081 -1 -1 108 131 -1
+464 -273 -16.662201 -1 -1 156 126 -1
+467 -277 -16.638681 113 -1 -1 119 -1
+469 -280 -16.635321 129 -1 -1 115 -1
+474 -287 -16.635321 149 -1 -1 111 -1
+477 -291 -16.637001 173 -1 -1 108 -1
+486 -305 -16.700842 260 -1 -1 107 -1
+486 -305 -16.667242 322 -1 -1 108 -1
+478 -297 -16.514362 478 -1 -1 112 -1
+470 -291 -16.368204 -1 105 -1 117 -1
+467 -289 -16.302685 531 130 -1 121 -1
+461 -286 -16.183405 -1 164 -1 127 -1
+459 -285 -16.127966 -1 197 -1 120 -1
+466 -289 -16.055725 -1 -1 245 -1 -1
+455 -285 -15.968367 -1 -1 447 -1 -1
+451 -284 -15.936447 -1 -1 681 -1 338
+451 -284 -15.938127 552 -1 623 -1 315
+452 -284 -15.943167 681 -1 -1 102 260
+461 -286 -16.017086 751 -1 -1 114 245
+469 -289 -16.087646 552 -1 -1 147 224
+488 -300 -16.252287 597 -1 -1 173 213
+465 -291 -16.075888 531 512 -1 203 213
+459 -289 -16.052368 494 791 -1 282 213
+453 -287 -16.060768 408 751 -1 322 228
+452 -287 -16.087648 462 623 -1 356 224
+453 -288 -16.169968 434 681 -1 397 232
+457 -291 -16.277487 408 574 -1 408 232
+458 -292 -16.326206 397 597 -1 494 237
+462 -296 -16.437084 434 597 -1 494 245
+465 -299 -16.504284 462 623 -1 552 250
+471 -306 -16.650444 447 597 -1 651 250
+476 -315 -16.838604 434 447 -1 791 245
+469 -302 -16.793243 434 434 -1 597 265
+467 -298 -16.793243 434 552 -1 552 260
+465 -294 -16.821802 421 512 -1 -1 270
+457 -280 -16.902441 421 478 -1 -1 294
+457 -280 -16.971321 386 462 -1 791 282
+457 -280 -17.004921 386 397 597 651 294
+457 -282 -17.092281 386 397 -1 -1 315
+457 -282 -17.120842 365 386 -1 -1 307
+457 -284 -17.206520 347 386 -1 -1 307
+457 -288 -17.270359 338 330 -1 -1 330
+461 -295 -17.942354 237 255 681 751 397
+461 -295 -18.150673 210 315 -1 -1 651
+462 -294 -18.271633 197 347 -1 751 245
+464 -293 -18.318672 186 408 -1 751 221
+469 -291 -18.812590 203 -1 -1 494 245
+468 -291 -18.950350 221 -1 -1 531 224
+470 -291 -18.997389 265 714 791 494 191
+468 -291 -19.118349 276 -1 531 494 217
+466 -290 -19.180510 203 -1 751 494 210
+462 -288 -19.299788 217 -1 -1 531 207
+458 -286 -19.412348 250 -1 447 447 203
+456 -285 -19.467787 245 -1 623 494 183
+449 -279 -19.610586 245 -1 597 494 203
+446 -275 -19.684505 260 -1 531 494 203
+440 -266 -19.839066 241 -1 791 494 200
+440 -266 -19.872665 250 800 651 494 200
+448 -278 -19.830666 245 791 494 478 181
+453 -285 -19.834026 255 -1 365 447 200
+454 -286 -19.860907 245 800 478 531 200
+458 -292 -19.877707 245 -1 494 494 200
+459 -294 -19.891146 241 -1 478 531 191
+462 -299 -19.918026 245 -1 434 494 197
+463 -301 -19.968426 250 -1 365 512 203
+463 -299 -20.198587 245 800 315 494 200
+463 -296 -20.296028 241 791 347 512 200
+463 -292 -20.363228 237 -1 347 494 200
+463 -284 -20.495947 250 531 356 478 191
+464 -280 -20.564827 245 -1 356 447 186
+470 -262 -20.848745 255 681 315 434 194
+462 -280 -20.798346 255 791 330 531 194
+454 -299 -20.912586 260 800 315 512 194
+455 -297 -20.962986 255 -1 315 478 194
+458 -294 -21.063786 260 651 322 462 194
+460 -291 -21.161226 250 800 347 478 194
+462 -289 -21.216665 245 623 347 447 194
+467 -285 -21.330906 228 623 375 447 183
+476 -280 -21.482105 255 751 434 462 181
+486 -276 -21.608105 260 791 494 447 200
+486 -276 -21.676985 245 751 -1 462 181
+460 -286 -21.656824 260 714 -1 408 181
+457 -287 -21.697144 260 651 -1 434 183
+453 -288 -21.700504 265 623 -1 478 178
+449 -289 -21.740824 255 623 -1 478 181
+449 -289 -21.769384 260 597 -1 462 178
+448 -289 -21.829863 260 597 -1 447 176
+449 -289 -21.910503 260 623 -1 421 183
+451 -289 -21.959223 250 574 -1 408 183
+451 -289 -22.029783 245 552 -1 478 171
+453 -289 -22.081863 270 494 -1 494 183
+461 -291 -22.211222 260 531 791 462 176
+469 -293 -22.345621 250 462 -1 478 176
+474 -295 -22.419540 255 478 791 447 178
+487 -304 -22.609379 276 478 623 365 183
+487 -304 -22.644659 288 478 597 478 189
+477 -297 -22.614420 282 386 651 447 176
+470 -292 -22.606020 294 408 531 478 181
+467 -290 -22.609381 315 462 597 447 186
+462 -286 -22.624500 330 421 494 408 181
+458 -284 -22.658100 322 397 462 447 183
+457 -283 -22.683300 347 365 434 397 183
+457 -283 -22.748819 365 365 434 478 171
+458 -284 -22.797539 408 338 434 421 183
+461 -288 -22.903378 408 338 408 478 183
+464 -293 -23.059618 552 288 365 447 186
+468 -303 -23.207457 651 307 421 447 181
+470 -311 -23.301537 408 288 315 434 191
+468 -306 -23.294817 282 250 282 447 191
+463 -292 -23.197378 207 228 265 447 207
+461 -288 -23.172178 181 270 241 494 224
+458 -280 -23.210817 183 245 213 478 232
+458 -279 -23.333456 166 221 203 494 207
+458 -279 -23.400656 173 210 186 434 203
+458 -281 -23.555214 181 181 176 494 191
+458 -281 -23.617374 203 164 176 478 186
+458 -282 -23.746733 386 149 171 531 178
+455 -290 -23.908012 265 129 151 494 176
+452 -296 -23.997051 237 115 137 531 173
+440 -314 -24.146570 245 117 120 462 176
+440 -314 -24.121370 173 118 105 322 200
+446 -300 -23.944971 156 133 102 265 213
+448 -292 -23.803850 133 140 -1 -1 255
+449 -288 -23.741690 131 154 -1 681 255
+449 -283 -23.657690 120 131 102 365 288
+449 -281 -23.652651 121 131 -1 315 347
+449 -278 -23.662731 118 133 -1 255 322
+449 -280 -23.640892 114 144 -1 250 356
+449 -280 -23.615692 114 241 -1 232 397
+449 -284 -23.605612 117 166 105 191 597
+449 -286 -23.639212 115 147 105 183 -1
+449 -290 -23.704731 111 127 101 181 -1
+447 -302 -23.733292 111 115 118 149 -1
+444 -316 -23.751772 130 101 125 131 -1
+444 -306 -23.605614 156 -1 194 118 -1
+444 -298 -23.474573 169 -1 194 118 -1
+443 -294 -23.412413 189 106 134 114 -1
+442 -289 -23.306572 250 111 114 111 -1
+441 -287 -23.256172 315 119 105 111 -1
+439 -281 -23.135212 397 125 101 111 -1
+438 -279 -23.088173 512 147 101 117 -1
+437 -277 -23.000813 -1 158 -1 121 -1
+436 -275 -22.918493 -1 189 102 129 -1
+438 -277 -22.911774 -1 217 101 139 800
+440 -280 -22.900015 -1 294 108 142 597
+445 -287 -22.948734 -1 434 113 250 751
+457 -312 -23.141935 -1 -1 121 178 597
+454 -306 -23.083136 -1 -1 126 137 478
+443 -290 -22.925217 -1 -1 171 134 574
+436 -282 -22.846258 -1 -1 191 125 408
+439 -286 -22.888256 751 -1 365 113 347
+442 -290 -22.926895 -1 -1 512 115 751
+451 -305 -23.059614 552 -1 681 117 -1
+455 -314 -23.133533 574 -1 478 127 512
+445 -296 -22.977293 531 -1 -1 136 322
+438 -287 -22.891613 462 -1 -1 151 250
+434 -282 -22.844574 447 -1 -1 181 255
+434 -281 -22.975613 434 -1 -1 265 255
+435 -283 -23.056253 421 623 574 294 241
+436 -286 -23.111692 434 651 -1 301 265
+439 -294 -23.247772 421 574 -1 307 270
+440 -298 -23.313292 421 512 -1 338 265
+442 -309 -23.462811 421 681 -1 356 294
+442 -320 -23.620729 397 623 -1 338 294
+442 -320 -23.652649 397 597 -1 386 307
+442 -304 -23.595528 347 574 800 375 315
+442 -299 -23.593847 347 552 -1 375 301
+442 -292 -23.605608 356 494 800 408 315
+442 -286 -23.629128 338 574 -1 408 338
+442 -284 -23.647608 338 434 -1 434 356
+442 -281 -23.698008 338 512 -1 421 330
+442 -281 -23.734968 330 494 681 447 347
+442 -284 -23.829048 330 478 681 462 365
+440 -288 -23.933208 315 478 791 447 365
+439 -290 -23.983608 288 462 -1 597 386
+437 -294 -24.091129 294 447 791 751 386
+434 -298 -24.161690 282 408 -1 597 408
+428 -306 -24.304489 265 447 791 574 408
+421 -312 -24.445608 265 421 651 623 434
+421 -312 -24.479208 250 397 791 -1 447
+432 -303 -24.432167 255 315 651 681 478
+436 -300 -24.427128 237 386 -1 -1 421
+444 -293 -24.448969 224 330 623 800 681
+447 -290 -24.489288 210 322 714 714 -1
+451 -287 -24.519527 221 315 552 -1 -1
+453 -286 -24.539688 210 301 751 -1 -1
+454 -286 -24.605209 194 276 623 -1 -1
+454 -286 -24.645529 189 288 751 -1 -1
+453 -286 -24.776567 178 276 -1 -1 270
+451 -286 -24.917686 169 224 623 -1 189
+451 -286 -24.984886 171 330 -1 681 276
+451 -286 -25.122646 169 338 -1 552 338
+451 -286 -25.193207 166 447 -1 552 265
+451 -286 -25.337687 178 -1 -1 531 265
+451 -286 -25.406567 111 -1 -1 478 232
+451 -286 -25.547688 200 -1 -1 478 197
+451 -286 -25.678726 232 791 434 447 200
+450 -286 -25.744246 265 -1 623 447 189
+448 -285 -25.875284 276 -1 -1 462 183
+446 -283 -25.944164 301 800 714 478 183
+442 -277 -26.090322 307 -1 -1 478 178
+438 -269 -26.238161 294 -1 791 462 173
+436 -263 -26.322161 307 -1 -1 478 178
+433 -253 -26.473360 347 -1 623 462 178
+433 -253 -26.508640 356 -1 800 447 181
+437 -269 -26.449841 338 -1 597 447 183
+438 -274 -26.444801 338 -1 462 478 183
+440 -281 -26.456560 330 -1 -1 478 181
+442 -287 -26.485119 315 -1 597 447 176
+442 -289 -26.505280 356 -1 681 434 186
+442 -286 -26.695118 397 -1 552 447 189
+442 -280 -26.846317 365 -1 531 421 191
+444 -274 -26.958876 338 -1 623 434 194
+446 -269 -27.031115 356 651 552 447 194
+451 -260 -27.178955 375 -1 447 447 194
+455 -254 -27.269674 408 751 434 447 186
+442 -280 -28.685911 597 478 651 447 213
+444 -281 -28.741350 408 494 -1 397 232
+452 -286 -28.884150 386 397 -1 447 237
+462 -295 -29.062227 338 462 -1 434 224
+462 -295 -29.097507 282 447 -1 408 232
+454 -287 -29.079027 276 397 -1 434 221
+451 -284 -29.084066 260 408 -1 447 245
+445 -277 -29.084066 245 386 -1 434 245
+443 -275 -29.099186 228 386 -1 434 245
+440 -272 -29.127747 228 365 681 447 245
+437 -268 -29.157986 207 330 597 421 255
+436 -266 -29.178146 217 347 552 462 255
+435 -265 -29.278946 245 315 494 434 241
+435 -264 -29.388145 260 294 597 447 245
+435 -264 -29.453665 294 301 -1 375 255
+435 -265 -29.593103 294 276 478 494 232
+435 -265 -29.656942 276 276 791 462 245
+435 -266 -29.782942 260 270 282 478 260
+435 -267 -29.925741 221 260 245 447 462
+435 -268 -30.001341 245 265 265 574 276
+435 -268 -30.145821 207 276 386 552 315
+435 -268 -30.213020 191 294 365 597 307
+435 -268 -30.350780 189 356 397 800 250
+435 -268 -30.495258 181 512 338 -1 213
+435 -268 -30.562458 191 512 338 -1 250
+435 -268 -30.706936 194 375 338 -1 276
+435 -268 -30.775816 203 365 282 -1 250
+416 -273 -31.641014 365 232 288 -1 200
+430 -276 -31.609095 301 237 245 -1 197
+435 -277 -31.607414 288 200 213 -1 210
+434 -276 -31.676294 307 197 217 -1 221
+430 -275 -31.733414 237 178 171 -1 221
+420 -270 -31.856052 200 169 162 -1 237
+404 -259 -32.037491 181 186 149 -1 221
+411 -264 -31.995491 171 183 136 681 250
+424 -272 -31.940052 154 178 118 574 260
+427 -274 -31.948452 151 164 111 651 265
+432 -277 -31.968613 152 156 103 494 270
+439 -281 -31.951813 127 154 -1 301 282
+437 -279 -31.928293 124 191 -1 241 347
+437 -279 -31.958534 122 197 -1 213 347
+436 -278 -31.998854 117 191 -1 213 338
+431 -275 -32.109734 108 178 -1 210 365
+428 -273 -32.168533 103 176 -1 194 330
+422 -267 -32.301250 -1 158 -1 200 338
+416 -258 -32.457489 -1 154 -1 203 330
+412 -250 -32.561649 -1 142 -1 173 294
+415 -257 -32.546528 -1 134 -1 171 282
+418 -262 -32.487728 -1 124 -1 152 315
+424 -269 -32.361729 -1 112 -1 137 322
+426 -272 -32.301250 -1 101 -1 118 294
+430 -276 -32.190369 -1 -1 -1 106 245
+432 -277 -32.139969 -1 -1 -1 -1 255
+434 -278 -32.055969 -1 -1 -1 -1 -1
+435 -279 -32.008930 108 -1 149 -1 751
+433 -277 -31.965250 119 -1 133 -1 800
+430 -275 -31.928289 129 -1 106 -1 -1
+428 -274 -31.908129 173 -1 -1 -1 -1
+424 -272 -31.877890 203 -1 -1 -1 651
+421 -271 -31.864450 232 -1 -1 -1 -1
+413 -267 -31.867809 288 -1 -1 -1 -1
+408 -265 -31.874529 224 112 -1 -1 -1
+401 -261 -31.871168 203 122 -1 -1 -1
+401 -261 -31.837568 800 142 -1 -1 -1
+415 -265 -31.649408 -1 189 -1 -1 -1
+417 -265 -31.600689 282 228 -1 -1 -1
+429 -266 -31.454529 800 288 -1 115 531
+435 -266 -31.383968 -1 307 -1 151 -1
+442 -266 -31.303329 597 250 112 140 -1
+439 -266 -31.301649 -1 -1 119 117 -1
+439 -266 -31.296610 -1 -1 151 111 -1
+425 -266 -31.404129 -1 651 213 107 -1
+415 -265 -31.483089 -1 -1 265 -1 -1
+409 -263 -31.533489 -1 800 237 -1 282
+420 -263 -31.449490 -1 -1 213 -1 245
+434 -263 -31.336931 386 714 681 101 213
+438 -263 -31.308372 -1 -1 681 111 194
+434 -263 -31.338612 -1 -1 552 118 181
+426 -263 -31.404131 -1 -1 597 131 151
+418 -263 -31.469650 -1 -1 574 171 169
+401 -261 -31.617491 -1 -1 597 200 169
+439 -264 -31.780451 800 -1 531 228 203
+440 -264 -31.809011 -1 512 574 213 194
+438 -263 -31.893011 -1 -1 552 210 217
+433 -260 -32.010612 -1 751 552 210 221
+429 -257 -32.082851 -1 -1 512 203 221
+423 -251 -32.217251 -1 -1 462 194 224
+419 -247 -32.294529 -1 434 531 213 213
+412 -237 -32.460850 -1 -1 512 237 191
+412 -237 -32.494450 -1 -1 494 250 213
+420 -250 -32.444050 -1 -1 494 276 245
+422 -254 -32.444050 -1 -1 494 294 255
+426 -260 -32.454128 -1 651 478 408 255
+429 -265 -32.474289 -1 623 462 434 260
+430 -267 -32.491089 -1 -1 478 597 276
+431 -269 -32.544849 751 -1 447 800 270
+431 -270 -32.571728 512 397 397 -1 282
+428 -255 -32.927891 791 -1 408 751 294
+428 -251 -32.995090 -1 574 421 751 301
+429 -241 -33.139572 -1 -1 408 597 315
+432 -231 -33.252132 447 -1 365 574 315
+432 -231 -33.319332 -1 800 397 531 315
+428 -245 -33.275650 751 494 386 494 322
+427 -250 -33.273972 751 531 386 478 322
+426 -254 -33.307571 -1 751 365 434 330
+424 -260 -33.299171 -1 597 356 447 322
+420 -268 -33.391575 -1 552 347 462 347
+420 -269 -33.453732 791 714 347 434 347
+420 -269 -33.485653 -1 574 347 408 338
+422 -267 -33.574692 714 651 322 408 365
+422 -267 -33.645252 -1 386 315 408 365
+422 -267 -33.682213 -1 714 322 365 365
+427 -262 -33.801491 478 681 322 375 365
+430 -260 -33.863651 -1 751 301 375 397
+448 -252 -34.258446 -1 791 282 365 386
+443 -254 -34.251724 -1 791 270 365 397
+435 -256 -34.250046 -1 462 255 365 434
+428 -258 -34.258446 -1 714 255 322 408
+426 -259 -34.275246 -1 531 260 356 365
+422 -261 -34.310524 -1 574 245 307 421
+422 -261 -34.340763 -1 714 237 356 447
+422 -261 -34.411324 -1 434 228 322 434
+427 -261 -34.512123 -1 574 213 322 397
+428 -261 -34.554123 -1 597 217 294 434
+433 -261 -34.659962 -1 434 213 315 494
+435 -261 -34.712040 -1 421 210 294 512
+444 -263 -34.849800 -1 447 194 294 478
+449 -265 -34.925400 -1 552 203 294 531
+458 -270 -35.063160 -1 421 191 270 512
+438 -262 -34.957321 -1 347 197 250 462
+434 -260 -34.943882 -1 241 207 237 512
+424 -256 -34.888443 574 -1 203 232 512
+420 -255 -34.868282 434 -1 241 200 478
+423 -257 -35.053082 681 -1 270 181 462
+429 -261 -35.180763 -1 751 276 181 512
+432 -264 -35.246284 597 -1 270 181 512
+439 -271 -35.394123 574 714 270 181 531
+447 -283 -35.578922 623 800 270 178 512
+447 -283 -35.612522 531 -1 250 178 434
+440 -273 -35.583961 294 800 250 181 494
+437 -269 -35.577240 356 -1 255 178 512
+433 -262 -35.577240 338 714 255 178 494
+430 -257 -35.597401 294 800 245 173 478
+429 -255 -35.612522 322 751 241 166 512
+427 -252 -35.654522 315 623 245 171 512
+428 -254 -35.773800 294 681 241 169 512
+430 -258 -35.874599 322 597 241 169 512
+430 -260 -35.921638 307 681 228 164 531
+430 -265 -36.027477 288 597 228 166 512
+430 -273 -36.158520 315 574 232 164 434
+430 -277 -36.227398 322 512 232 160 494
+427 -289 -36.398758 338 574 237 151 531
+427 -289 -36.430679 347 597 224 152 512
+430 -277 -36.402119 330 574 228 158 531
+432 -268 -36.402119 347 512 228 156 462
+433 -264 -36.407158 315 531 232 152 494
+435 -258 -36.427319 365 512 232 152 531
+437 -251 -36.477718 397 462 224 151 494
+439 -248 -36.518040 386 494 217 147 531
+439 -248 -36.549961 408 421 224 147 462
+439 -247 -36.610443 447 434 228 147 574
+438 -249 -36.687721 365 421 228 137 574
+436 -252 -36.731400 282 421 213 140 597
+425 -265 -36.890999 250 447 162 136 651
+417 -271 -36.985077 681 397 210 133 651
+434 -251 -36.778439 531 421 307 134 681
+436 -248 -36.753239 512 462 307 149 -1
+435 -249 -36.764999 447 462 282 160 -1
+429 -255 -36.845638 447 338 315 176 -1
+426 -258 -36.906116 447 250 315 213 -1
+409 -270 -37.132915 434 282 307 224 -1
+409 -270 -37.156437 434 800 301 221 -1
+427 -256 -37.011955 386 -1 276 183 512
+434 -250 -37.000195 397 651 322 241 651
+437 -248 -37.000195 421 447 294 512 -1
+441 -245 -37.027073 365 478 307 597 -1
+441 -245 -37.055634 397 421 301 421 -1
+440 -246 -37.127876 397 434 294 397 -1
+439 -246 -37.169876 397 421 294 338 -1
+438 -246 -37.247158 386 408 294 322 -1
+435 -247 -37.339558 356 397 301 315 -1
+432 -248 -37.401718 338 365 270 315 -1
+424 -250 -37.532757 347 386 282 294 462
+419 -250 -37.606678 315 356 282 294 512
+409 -250 -37.759556 330 356 265 294 -1
+400 -249 -37.898994 301 347 265 282 623
+409 -250 -37.863716 294 347 250 294 574
+418 -252 -37.855316 288 301 250 282 512
+430 -255 -37.856998 245 288 237 265 791
+437 -256 -37.856998 255 276 237 241 -1
+437 -256 -37.888920 260 255 228 250 791
+430 -254 -37.984680 237 228 203 232 -1
+421 -250 -38.097240 241 210 186 224 -1
+412 -245 -38.187962 245 200 173 213 -1
+412 -244 -38.199722 276 194 408 203 -1
+421 -248 -38.129162 276 186 221 200 -1
+431 -252 -38.129162 307 166 194 200 -1
+439 -256 -38.130840 301 154 178 203 -1
+440 -256 -38.154362 282 145 142 186 681
+438 -255 -38.203083 307 133 126 203 714
+437 -254 -38.196362 386 134 113 221 -1
+428 -250 -38.221561 -1 142 101 224 -1
+417 -243 -38.258522 -1 181 -1 186 -1
+405 -234 -38.344200 651 207 -1 207 -1
+418 -241 -38.181240 -1 255 -1 397 751
+427 -245 -38.088840 -1 307 105 228 531
+438 -248 -37.972923 -1 -1 112 169 597
+440 -249 -37.946045 -1 -1 119 152 462
+435 -248 -37.979645 -1 791 145 136 597
+427 -245 -38.046844 -1 -1 164 124 574
+418 -241 -38.125805 -1 -1 194 118 800
+406 -234 -38.233326 -1 -1 282 115 512
+421 -240 -38.110687 -1 -1 347 114 512
+434 -245 -38.004848 -1 -1 597 115 330
+444 -247 -37.924210 681 -1 597 117 338
+445 -247 -37.914131 597 -1 -1 122 -1
+443 -247 -37.925892 574 -1 -1 142 597
+442 -247 -37.930931 531 -1 -1 152 434
+428 -242 -38.055252 397 -1 -1 181 386
+421 -239 -38.140930 421 623 -1 203 397
+408 -230 -38.322369 421 800 651 237 347
+427 -242 -38.248447 447 751 714 282 421
+433 -246 -38.255165 397 800 791 301 397
+435 -248 -38.268604 421 574 -1 322 356
+438 -250 -38.305565 365 714 751 322 397
+440 -252 -38.355965 397 800 651 338 434
+439 -251 -38.403004 421 574 623 365 386
+437 -249 -38.503803 375 531 -1 434 434
+435 -247 -38.554203 375 574 800 447 447
+433 -244 -38.660042 386 462 800 447 478
+430 -238 -38.779324 307 597 751 512 462
+428 -234 -38.851562 330 494 -1 447 462
+424 -218 -39.044762 338 462 531 478 447
+424 -218 -39.078362 338 421 574 494 531
+426 -227 -39.075001 322 478 623 552 462
+428 -236 -39.071640 315 434 623 751 574
+429 -241 -39.068279 315 462 681 800 447
+429 -246 -39.098518 265 408 791 -1 531
+430 -250 -39.103558 301 408 597 623 574
+431 -255 -39.135475 294 408 494 -1 512
+431 -259 -39.172436 294 347 552 623 751
+431 -259 -39.202675 276 347 651 -1 -1
+431 -259 -39.264835 270 356 597 -1 -1
+431 -258 -39.308514 260 330 623 -1 -1
+431 -256 -39.394192 245 338 623 597 -1
+431 -255 -39.473152 237 315 681 681 -1
+431 -254 -39.516830 232 294 597 -1 -1
+433 -247 -39.659630 221 301 597 -1 -1
+434 -245 -39.736908 210 307 791 -1 494
+437 -241 -39.898190 200 322 681 -1 217
+443 -235 -40.072910 194 330 651 800 260
+447 -232 -40.163631 173 315 681 -1 338
+455 -227 -40.366909 176 356 -1 651 408
+455 -227 -40.437469 173 397 -1 552 315
+455 -227 -40.580269 176 531 -1 434 330
+455 -227 -40.649147 186 -1 -1 494 294
+421 -217 -41.185062 322 -1 651 462 191
+419 -216 -41.208584 375 -1 623 447 186
+418 -215 -41.260666 356 -1 623 447 191
+420 -216 -41.311066 386 -1 597 421 194
+424 -219 -41.415226 356 -1 512 408 183
+427 -221 -41.507626 386 800 494 447 194
+429 -223 -41.563065 347 -1 397 447 194
+434 -228 -41.684025 386 800 494 447 197
+437 -232 -41.757946 365 -1 375 447 200
+444 -245 -41.941067 347 -1 386 462 197
+444 -245 -42.009945 356 800 397 462 207
+439 -236 -41.964584 397 -1 315 421 203
+435 -228 -41.961224 397 800 301 421 200
+433 -224 -41.964584 397 -1 294 447 210
+431 -218 -41.984745 386 714 288 447 210
+430 -215 -42.023388 365 791 270 421 210
+429 -213 -42.040188 434 681 294 478 213
+428 -210 -42.080505 397 -1 270 434 200
+428 -211 -42.256905 386 791 356 512 221
+428 -211 -42.293865 447 751 597 447 213
+433 -220 -42.959137 -1 397 681 397 224
+434 -218 -42.977615 -1 531 -1 447 221
+435 -215 -43.024654 -1 494 -1 462 224
+435 -215 -43.091854 751 421 -1 447 224
+434 -216 -43.138893 574 494 -1 462 224
+430 -219 -43.239693 447 434 -1 447 228
+429 -220 -43.286732 434 462 800 434 232
+425 -223 -43.394253 356 434 -1 434 237
+417 -227 -43.532013 330 408 -1 434 237
+413 -229 -43.600891 307 386 800 478 232
+402 -232 -43.762169 265 386 791 447 237
+402 -232 -43.797447 260 386 597 434 237
+416 -229 -43.757126 237 375 597 434 241
+424 -227 -43.760483 224 365 494 434 245
+426 -227 -43.778961 213 330 478 447 232
+431 -226 -43.804161 217 338 478 434 255
+434 -226 -43.817600 210 322 447 434 250
+440 -226 -43.844482 221 294 408 397 237
+442 -226 -43.891521 213 288 397 447 250
+442 -226 -43.930161 213 294 375 375 255
+442 -226 -44.046082 250 265 375 408 224
+442 -226 -44.114960 288 237 478 397 260
+441 -226 -44.261120 265 245 597 397 255
+441 -226 -44.368637 241 228 751 462 260
+440 -225 -44.385437 207 237 478 512 265
+439 -225 -44.487915 210 232 597 478 255
+439 -225 -44.615593 203 232 255 447 276
+439 -225 -44.682793 191 237 315 623 294
+439 -225 -44.823910 181 250 315 681 322
+439 -225 -44.892788 169 255 375 -1 478
+439 -225 -45.033909 164 408 375 -1 200
+439 -225 -45.175030 166 512 365 -1 228
+439 -225 -45.248951 166 408 365 -1 276
+439 -225 -45.391750 171 397 330 -1 245
+439 -225 -45.460629 197 338 307 -1 221
+439 -225 -45.600067 194 365 347 -1 213
+439 -225 -45.668945 221 421 338 -1 194
+439 -226 -45.798306 315 330 408 -1 176
+439 -225 -45.936066 386 315 160 -1 176
+439 -225 -45.998226 397 276 421 -1 171
+441 -222 -46.156147 224 270 478 -1 169
+442 -221 -46.231747 276 245 447 681 178
+443 -220 -46.381264 260 241 597 -1 164
+443 -220 -46.525742 224 232 -1 -1 186
+443 -220 -46.592941 228 288 -1 -1 194
+443 -220 -46.730701 197 301 -1 -1 200
+443 -220 -46.801262 194 322 -1 651 224
+447 -220 -46.957500 189 347 -1 714 322
+448 -220 -47.103661 186 408 -1 623 301
+448 -220 -47.175900 176 597 -1 447 301
+448 -220 -47.320381 203 494 -1 447 237
+448 -220 -47.392620 217 -1 -1 531 265
+449 -221 -47.537098 228 -1 623 531 232
+451 -222 -47.619419 232 -1 651 494 232
+457 -227 -47.790779 260 -1 800 531 221
+467 -239 -48.007500 260 -1 597 512 210
+467 -239 -48.049500 276 -1 -1 552 213
+460 -230 -48.037743 265 -1 -1 531 203
+457 -226 -48.036064 294 -1 -1 512 210
+452 -219 -48.041107 265 -1 -1 494 210
+450 -216 -48.046146 282 -1 -1 478 203
+447 -212 -48.076389 315 -1 -1 494 210
+446 -210 -48.093189 315 -1 714 494 186
+445 -211 -48.229271 307 -1 -1 408 203
+446 -213 -48.281349 322 -1 -1 478 203
+447 -216 -48.373749 330 -1 -1 478 203
+448 -218 -48.429188 330 -1 -1 447 186
+449 -223 -48.538387 315 -1 -1 478 169
+449 -228 -48.608948 276 -1 447 478 210
+449 -238 -48.751747 255 -1 800 494 237
+447 -247 -48.894547 232 -1 -1 574 260
+447 -247 -48.931507 250 -1 751 494 213
+450 -232 -48.884468 260 -1 552 494 213
+451 -227 -48.882790 260 -1 -1 408 213
+457 -205 -49.060867 276 -1 751 462 207
+457 -205 -49.092789 270 -1 651 478 207
+455 -207 -49.181828 282 -1 751 462 207
+455 -207 -49.220467 260 -1 447 494 207
+454 -208 -49.299427 265 800 597 386 210
+450 -213 -49.415348 270 -1 434 494 207
+447 -216 -49.482548 265 -1 623 434 207
+440 -221 -49.616947 260 -1 574 462 210
+435 -224 -49.697586 270 -1 512 478 210
+443 -221 -49.862225 294 800 531 478 203
+446 -220 -49.868946 288 -1 512 462 189
+451 -218 -49.892467 294 -1 386 478 203
+455 -216 -49.927750 307 -1 434 478 203
+429 -213 -50.537579 288 -1 260 447 213
+418 -208 -50.700539 301 800 276 494 203
+418 -208 -50.735817 294 -1 270 447 210
+430 -213 -50.703896 294 651 288 462 213
+437 -217 -50.705578 282 -1 270 447 210
+439 -218 -50.725739 288 681 282 462 210
+444 -221 -50.742538 288 -1 245 447 213
+450 -225 -50.787899 315 651 255 478 186
+452 -227 -50.834938 276 800 282 447 210
+453 -227 -50.861816 301 800 282 408 197
+453 -227 -50.930698 322 751 282 447 194
+439 -205 -51.471653 315 552 397 434 197
+437 -200 -51.550613 330 651 447 434 197
+435 -188 -51.711891 322 651 447 434 194
+435 -188 -51.748852 365 597 478 434 200
+438 -203 -51.698452 365 552 434 408 191
+440 -212 -51.695091 347 478 462 447 200
+440 -216 -51.700130 447 531 552 478 194
+440 -222 -51.723648 494 552 512 421 200
+440 -226 -51.758926 478 512 800 434 200
+440 -226 -51.790848 623 421 -1 408 194
+440 -226 -51.863091 800 478 -1 421 203
+440 -225 -51.910130 791 462 -1 375 200
+440 -221 -52.012611 -1 408 -1 434 203
+440 -219 -52.059650 -1 408 -1 434 203
+442 -214 -52.168850 -1 447 -1 434 210
+446 -206 -52.309967 -1 397 -1 434 203
+449 -202 -52.385567 -1 421 -1 434 210
+456 -193 -52.541805 -1 386 -1 386 200
+456 -193 -52.577084 681 386 791 375 210
+447 -203 -52.538445 512 356 681 408 213
+445 -206 -52.543484 397 338 597 434 213
+440 -212 -52.551884 294 322 512 434 210
+436 -217 -52.572044 270 307 494 408 221
+432 -221 -52.622440 203 301 375 375 200
+430 -222 -52.694679 200 288 421 408 210
+429 -223 -52.746758 197 260 434 375 213
+429 -223 -52.882839 255 255 -1 434 221
+429 -223 -52.953400 265 228 791 408 221
+429 -223 -53.225559 210 245 294 494 221
+431 -223 -53.302837 200 228 301 597 232
+433 -223 -53.452358 191 224 301 531 250
+434 -223 -53.603558 162 197 347 574 232
+435 -223 -53.682518 158 207 347 681 265
+436 -223 -53.837078 144 237 315 -1 397
+437 -223 -53.916039 137 265 301 -1 186
+437 -223 -54.057156 130 714 270 681 221
+437 -223 -54.199955 134 322 301 -1 228
+437 -223 -54.268833 142 210 288 -1 203
+437 -223 -54.404911 144 265 301 -1 194
+437 -223 -54.475471 164 282 322 -1 191
+437 -223 -54.616592 178 288 322 -1 160
+437 -223 -54.687153 260 260 347 -1 152
+437 -223 -54.828274 186 232 -1 -1 149
+437 -223 -54.971073 191 237 421 -1 145
+437 -223 -55.041634 224 232 714 -1 139
+437 -223 -55.182755 210 237 -1 791 142
+437 -223 -55.249954 194 217 791 -1 152
+437 -223 -55.389393 173 270 -1 -1 169
+437 -223 -55.528831 173 250 -1 791 171
+437 -223 -55.601070 173 338 -1 531 213
+437 -223 -55.747231 173 421 -1 478 386
+437 -223 -55.816109 178 512 -1 494 178
+437 -223 -55.955547 191 -1 -1 478 210
+437 -223 -56.024426 203 -1 -1 462 224
+437 -223 -56.158825 228 -1 -1 447 203
+432 -225 -56.316746 237 -1 -1 447 194
+429 -225 -56.395706 265 -1 -1 421 191
+421 -225 -56.558666 276 -1 800 447 197
+415 -224 -56.646027 276 -1 -1 408 186
+403 -221 -56.819065 301 -1 -1 478 189
+403 -221 -56.856026 315 -1 -1 462 186
+416 -225 -56.819065 330 -1 -1 434 189
+420 -226 -56.820744 307 -1 -1 434 186
+427 -228 -56.829144 338 -1 -1 421 189
+432 -230 -56.850986 356 -1 574 421 186
+434 -231 -56.866108 347 -1 791 421 186
+437 -232 -56.909786 338 -1 -1 408 186
+427 -225 -57.272663 330 -1 681 447 191
+425 -223 -57.333141 421 -1 -1 408 194
+420 -216 -57.472580 386 -1 -1 447 181
+418 -213 -57.539780 347 -1 -1 447 194
+413 -204 -57.690979 386 -1 -1 447 191
+413 -204 -57.726257 386 -1 -1 434 194
+419 -217 -57.685936 421 -1 -1 434 200
+422 -224 -57.689297 447 -1 552 408 197
+423 -227 -57.701057 462 -1 -1 447 176
+425 -232 -57.721218 408 -1 714 447 203
+425 -232 -57.751457 434 -1 -1 408 200
+427 -238 -57.771618 365 -1 714 408 207
+428 -240 -57.790096 421 -1 681 447 203
+428 -241 -57.850574 421 -1 -1 421 210
+428 -241 -57.912735 494 -1 623 408 210
+428 -239 -57.959774 462 -1 -1 434 203
+428 -238 -58.035374 531 -1 -1 421 213
+428 -238 -58.072334 478 -1 -1 397 213
+428 -234 -58.169773 375 -1 800 408 213
+428 -230 -58.235294 531 -1 -1 434 210
+430 -223 -58.361294 478 -1 -1 408 210
+431 -219 -58.430172 751 -1 681 434 221
+436 -209 -58.583054 714 -1 623 421 221
+441 -201 -58.724174 531 -1 -1 434 217
+441 -201 -58.759453 574 -1 681 375 213
+431 -215 -58.693932 651 -1 651 434 210
+429 -219 -58.692253 623 -1 751 408 221
+425 -225 -58.700653 -1 -1 597 408 224
+422 -229 -58.725853 -1 -1 512 421 228
+421 -231 -58.746014 -1 800 531 408 224
+420 -233 -58.796413 -1 -1 597 408 228
+420 -233 -58.826653 -1 -1 552 375 224
+422 -230 -58.922409 -1 -1 651 408 232
+424 -228 -58.981209 597 -1 597 408 232
+427 -226 -59.076965 -1 -1 552 397 237
+429 -225 -59.130726 -1 -1 478 397 232
+431 -221 -59.544006 -1 597 478 397 260
+426 -221 -59.575928 -1 -1 447 408 255
+417 -221 -59.614571 -1 -1 552 408 265
+413 -221 -59.649849 -1 681 478 386 270
+412 -221 -59.678410 -1 651 531 375 270
+426 -228 -60.226089 294 597 386 397 270
+430 -231 -60.298328 288 651 397 397 282
+438 -238 -60.447845 270 623 434 397 276
+444 -245 -60.550323 276 623 338 347 288
+439 -240 -60.560406 288 623 356 421 282
+433 -232 -60.550327 276 574 375 386 282
+430 -229 -60.548649 276 574 365 408 294
+425 -223 -60.558731 282 531 356 386 288
+423 -221 -60.570492 288 531 397 386 294
+421 -217 -60.602413 301 574 386 375 294
+420 -216 -60.659534 301 478 330 347 301
+419 -215 -60.686413 315 462 330 397 322
+421 -218 -60.783852 315 478 330 375 307
+422 -222 -60.886330 365 408 307 365 315
+423 -224 -60.938408 330 434 282 365 315
+425 -229 -61.047607 338 462 294 365 315
+425 -232 -61.108086 365 408 265 375 307
+425 -242 -61.252563 347 447 237 356 322
+424 -253 -61.410480 386 397 250 375 315
+424 -253 -61.444080 365 375 241 338 315
+426 -239 -61.408802 386 375 228 356 315
+427 -235 -61.413841 347 386 213 356 330
+429 -227 -61.420559 356 365 224 347 322
+431 -212 -61.554962 307 307 447 330 330
+430 -214 -61.660801 315 276 462 338 338
+430 -214 -61.724640 294 265 276 315 347
+430 -216 -61.865761 232 255 386 315 375
+428 -218 -62.032078 224 224 375 301 365
+427 -219 -62.109356 200 232 241 338 397
+427 -219 -62.252155 221 232 288 365 434
+427 -219 -62.321033 191 250 307 447 651
+427 -219 -62.467194 183 245 276 447 552
+427 -219 -62.609993 164 294 265 597 142
+427 -219 -62.682232 166 386 250 574 294
+427 -219 -62.821671 166 356 237 -1 330
+427 -219 -62.888870 171 241 241 -1 260
+427 -219 -63.031670 169 282 237 -1 213
+427 -219 -63.174469 189 245 217 -1 207
+427 -219 -63.241669 260 224 210 791 181
+424 -217 -63.406307 245 197 250 -1 181
+420 -214 -63.508785 288 200 228 -1 186
+405 -195 -63.801105 265 164 194 -1 183
+416 -210 -63.737267 260 156 186 -1 217
+421 -216 -63.705345 228 126 164 -1 194
+428 -224 -63.654945 207 127 142 -1 191
+429 -225 -63.624706 194 130 127 -1 203
+425 -221 -63.619667 169 134 117 -1 232
+423 -219 -63.612946 160 145 105 552 250
+419 -215 -63.591106 152 171 104 365 282
+412 -207 -63.633106 145 197 105 322 330
+409 -204 -63.678467 139 250 101 276 356
+410 -205 -63.811192 122 207 -1 255 330
+415 -212 -63.811192 119 207 -1 224 330
+417 -215 -63.822952 115 194 -1 232 338
+421 -220 -63.843113 105 183 -1 224 315
+422 -221 -63.868313 -1 166 -1 210 301
+425 -226 -63.895191 -1 166 -1 203 315
+426 -229 -63.938873 -1 162 -1 191 282
+426 -230 -63.965752 -1 151 -1 181 276
+426 -231 -64.032951 -1 145 -1 166 282
+426 -230 -64.073273 -1 129 -1 173 265
+426 -229 -64.064873 -1 121 -1 154 282
+426 -229 -64.036316 -1 105 -1 127 307
+425 -226 -63.994316 -1 -1 -1 112 338
+422 -219 -63.985916 -1 -1 -1 103 315
+420 -215 -63.982555 -1 -1 -1 -1 228
+416 -207 -63.984238 -1 -1 -1 -1 531
+414 -202 -63.995998 -1 -1 -1 -1 -1
+410 -192 -64.017838 -1 -1 149 -1 751
+410 -192 -63.984238 120 -1 109 -1 751
+418 -205 -63.804478 136 -1 -1 -1 751
+421 -209 -63.737278 152 -1 -1 -1 -1
+426 -214 -63.612961 210 -1 -1 -1 651
+428 -216 -63.554161 245 -1 -1 -1 -1
+432 -219 -63.450001 265 -1 -1 -1 -1
+433 -220 -63.402962 294 -1 -1 -1 751
+435 -221 -63.317280 232 111 -1 -1 -1
+434 -221 -63.290401 681 142 -1 -1 -1
+431 -220 -63.243362 -1 164 -1 -1 -1
+430 -220 -63.221523 714 191 -1 -1 -1
+423 -217 -63.233284 714 232 -1 -1 494
+416 -214 -63.275284 -1 307 -1 151 -1
+401 -205 -63.389523 -1 270 -1 140 -1
+419 -214 -63.229923 597 228 104 129 -1
+425 -216 -63.179523 -1 -1 120 106 -1
+435 -219 -63.095524 -1 -1 154 102 -1
+439 -220 -63.063602 -1 681 191 -1 -1
+438 -220 -63.066963 -1 791 241 -1 -1
+438 -220 -63.068642 -1 714 255 -1 301
+429 -218 -63.137524 -1 -1 203 -1 210
+411 -210 -63.297123 408 751 421 -1 203
+402 -204 -63.382801 -1 -1 552 107 164
+423 -214 -63.199680 -1 -1 408 117 166
+430 -216 -63.145920 -1 -1 552 129 164
+437 -218 -63.087120 -1 -1 597 147 181
+436 -218 -63.095520 -1 -1 552 200 164
+417 -210 -63.307201 -1 294 681 270 164
+404 -200 -63.596161 -1 -1 751 221 183
+404 -200 -63.661682 -1 751 651 245 181
+414 -210 -63.683525 -1 -1 623 294 183
+416 -213 -63.718803 -1 -1 494 301 191
+420 -219 -63.772564 -1 -1 494 282 200
+423 -224 -63.816242 512 -1 531 282 210
+424 -225 -63.846481 -1 -1 494 301 200
+427 -229 -63.880081 800 -1 494 315 245
+428 -231 -63.898560 -1 -1 421 294 245
+428 -233 -63.957359 -1 -1 421 270 250
+428 -233 -63.992638 -1 -1 434 255 245
+428 -232 -64.069916 -1 -1 478 260 255
+428 -230 -64.152237 574 681 478 245 270
+428 -229 -64.197594 -1 -1 421 224 265
+428 -224 -64.306793 -1 -1 434 228 282
+428 -220 -64.368950 -1 -1 434 221 282
+428 -212 -64.503349 -1 -1 365 213 294
+431 -201 -64.787277 -1 -1 397 232 307
+427 -210 -64.780563 -1 -1 397 241 315
+426 -214 -64.783920 -1 -1 356 232 322
+421 -226 -64.856163 -1 -1 307 347 322
+421 -227 -64.886406 -1 -1 347 531 347
+422 -226 -64.965363 -1 -1 322 681 365
+424 -223 -65.066162 -1 -1 330 -1 365
+425 -222 -65.116562 -1 714 322 -1 375
+428 -219 -65.222404 -1 -1 322 -1 365
+430 -217 -65.277847 -1 -1 294 -1 386
+437 -211 -65.418968 -1 651 347 -1 397
+428 -213 -65.649124 -1 751 260 478 462
+423 -214 -65.674324 -1 597 250 447 512
+420 -215 -65.682724 -1 574 241 421 386
+415 -217 -65.711288 -1 574 232 447 434
+413 -217 -65.761688 -1 494 224 421 434
+413 -217 -65.798645 -1 552 213 365 408
+414 -217 -65.874245 -1 447 210 375 512
+415 -217 -65.917923 -1 478 210 386 478
+418 -217 -66.087608 -1 494 191 347 512
+423 -218 -66.158165 -1 421 181 365 552
+437 -223 -66.331200 -1 512 181 301 791
+451 -231 -66.477356 -1 512 178 282 552
+435 -224 -66.363121 -1 552 171 250 478
+420 -219 -66.255608 681 421 183 255 531
+416 -218 -66.228729 -1 294 207 213 531
+418 -219 -66.238815 -1 -1 232 194 512
+422 -220 -66.270737 -1 -1 265 186 531
+433 -225 -66.363136 -1 -1 356 178 574
+450 -234 -66.514336 -1 -1 478 176 531
+441 -229 -66.433693 751 -1 315 176 751
+426 -223 -66.306015 552 597 330 178 -1
+420 -221 -66.264015 574 512 -1 183 623
+412 -219 -66.238815 447 751 -1 191 714
+411 -219 -66.290894 512 -1 -1 207 751
+412 -220 -66.337936 421 -1 -1 213 751
+413 -220 -66.415215 408 -1 -1 221 462
+414 -221 -66.460571 434 -1 714 228 751
+420 -224 -66.583206 434 -1 -1 237 597
+423 -227 -66.652084 386 -1 751 245 494
+429 -233 -66.788162 397 -1 -1 250 512
+436 -243 -66.947762 397 -1 800 255 651
+439 -249 -67.033440 386 -1 791 265 597
+434 -240 -67.019997 365 -1 791 245 791
+432 -236 -67.019997 386 -1 651 260 681
+425 -222 -67.033440 365 -1 681 282 -1
+424 -220 -67.045197 365 -1 791 288 -1
+422 -216 -67.083832 356 -1 791 294 681
+424 -238 -67.844864 294 -1 574 347 531
+426 -230 -67.846542 282 -1 552 375 597
+426 -229 -67.871742 270 -1 552 375 574
+428 -223 -67.896942 260 -1 552 397 478
+429 -220 -67.907021 265 -1 552 375 552
+431 -215 -67.932220 265 -1 552 397 531
+432 -213 -67.984299 250 -1 552 365 574
+432 -213 -68.017899 250 -1 512 375 574
+432 -214 -68.091820 241 -1 478 408 478
+431 -215 -68.133820 237 -1 447 434 478
+431 -216 -68.207741 232 -1 531 421 494
+419 -226 -68.500053 217 -1 447 408 408
+415 -228 -68.573975 210 800 478 462 462
+405 -232 -68.726852 213 -1 478 447 434
+397 -234 -68.859573 200 -1 447 478 421
+405 -231 -68.824295 191 -1 434 478 397
+413 -229 -68.842773 191 -1 434 494 408
+416 -228 -68.884773 183 -1 408 397 397
+419 -228 -68.993973 186 375 386 447 330
+419 -228 -69.130051 191 294 375 397 265
+419 -228 -69.200607 210 375 375 434 245
+420 -228 -69.319885 250 408 408 397 213
+422 -229 -69.363564 255 421 375 447 213
+426 -231 -69.435799 270 330 434 397 210
+430 -233 -69.501320 421 397 375 421 210
+432 -234 -69.529877 494 356 408 408 203
+431 -233 -69.659241 791 288 365 434 203
+428 -231 -69.756683 751 301 375 434 200
+422 -226 -69.874283 681 282 294 421 207
+416 -219 -69.963326 315 288 307 375 207
+408 -207 -70.102760 241 260 265 447 221
+422 -224 -69.973404 213 260 237 434 241
+426 -228 -69.985161 194 260 210 447 237
+429 -233 -70.064117 194 270 210 447 232
+431 -235 -70.114517 207 221 181 478 210
+432 -238 -70.228760 294 176 183 478 194
+432 -238 -70.342995 307 160 173 478 203
+431 -236 -70.410194 338 154 145 447 210
+430 -230 -70.549637 255 127 129 397 210
+430 -213 -70.720993 210 121 114 356 210
+432 -198 -70.823471 162 119 -1 288 224
+432 -211 -70.672272 151 137 -1 -1 237
+433 -217 -70.591629 130 145 -1 447 282
+435 -226 -70.457230 129 151 -1 282 365
+437 -231 -70.346352 129 194 -1 228 408
+438 -233 -70.297630 133 288 -1 189 478
+438 -235 -70.235474 136 191 105 189 623
+438 -235 -70.252274 137 166 105 171 -1
+437 -232 -70.322830 126 147 105 169 -1
+436 -229 -70.383308 122 142 103 164 -1
+436 -228 -70.379951 122 133 103 156 -1
+434 -223 -70.364830 126 115 113 137 -1
+430 -210 -70.374908 152 108 119 122 -1
+427 -199 -70.358109 183 117 232 109 -1
+433 -212 -70.181709 232 118 134 106 -1
+435 -215 -70.122910 276 124 121 104 791
+439 -220 -70.010345 347 137 118 105 -1
+441 -223 -69.949867 597 142 110 102 -1
+445 -227 -69.840668 -1 166 109 108 681
+450 -231 -69.723068 751 181 107 120 714
+452 -232 -69.681068 -1 237 110 154 -1
+452 -231 -69.649147 -1 276 108 142 -1
+451 -231 -69.640747 -1 338 115 224 714
+442 -225 -69.701233 -1 -1 124 203 574
+426 -211 -69.859154 -1 -1 144 164 531
+421 -205 -69.919632 -1 408 164 139 397
+441 -220 -69.718033 -1 -1 181 133 478
+452 -226 -69.622269 -1 -1 270 121 356
+447 -223 -69.670990 -1 -1 356 122 397
+443 -220 -69.709633 -1 -1 365 119 -1
+430 -210 -69.835632 597 -1 623 131 791
+423 -202 -69.919632 462 -1 -1 137 301
+438 -214 -69.773468 434 -1 -1 149 434
+444 -218 -69.716347 478 -1 -1 166 260
+457 -226 -69.696190 434 -1 -1 213 255
+457 -226 -69.726433 462 -1 -1 232 260
+456 -225 -69.800354 408 651 681 250 260
+455 -224 -69.845711 397 651 -1 276 276
+454 -223 -69.919632 397 714 -1 294 270
+451 -219 -70.030518 365 751 -1 294 288
+449 -217 -70.089317 397 574 -1 322 276
+445 -209 -70.225395 365 512 791 294 315
+443 -205 -70.297638 397 597 -1 347 315
+439 -188 -70.499237 386 623 574 338 315
+439 -188 -70.532837 330 597 -1 375 315
+441 -199 -70.512672 315 597 800 356 322
+443 -209 -70.505959 347 574 -1 397 338
+444 -213 -70.509315 338 597 791 397 365
+446 -219 -70.526115 338 494 -1 397 375
+446 -223 -70.559715 288 574 791 408 375
+446 -225 -70.578194 330 447 681 421 375
+446 -226 -70.638672 307 512 -1 494 347
+446 -223 -70.692429 301 478 -1 512 386
+446 -219 -70.791550 294 386 791 478 408
+446 -215 -70.894028 276 434 714 574 434
+447 -213 -70.947784 288 434 791 494 494
+450 -205 -71.078827 270 408 791 512 478
+459 -190 -71.325783 260 421 552 681 714
+459 -190 -71.396339 228 386 791 751 751
+452 -199 -71.339218 232 386 651 800 -1
+447 -205 -71.345932 224 338 751 751 -1
+444 -209 -71.342575 221 338 681 751 -1
+440 -214 -71.361053 221 330 531 681 -1
+437 -217 -71.398010 217 294 512 -1 597
+436 -219 -71.414810 210 315 681 -1 478
+434 -222 -71.492096 191 288 531 -1 241
+434 -222 -71.608009 160 276 751 -1 203
+434 -222 -71.676888 176 330 714 751 237
+434 -222 -71.821365 166 356 -1 651 365
+434 -222 -71.967529 171 386 -1 552 347
+434 -222 -72.039772 166 531 -1 574 276
+434 -222 -72.180893 186 -1 -1 494 237
+434 -222 -72.249771 224 -1 -1 478 221
+434 -222 -72.389206 200 714 -1 447 203
+436 -222 -72.521919 237 800 421 434 194
+436 -222 -72.575676 270 -1 365 494 189
+439 -223 -72.696640 265 800 494 478 191
+442 -224 -72.765518 276 -1 552 447 189
+448 -228 -72.908318 294 -1 623 462 183
+454 -234 -73.056160 288 -1 -1 462 178
+458 -239 -73.138481 307 -1 597 478 183
+464 -248 -73.296394 315 -1 574 447 183
+464 -248 -73.331673 315 800 408 434 183
+455 -234 -73.272873 282 -1 478 478 183
+451 -227 -73.271194 294 -1 462 494 183
+447 -220 -73.304794 315 -1 408 478 186
+444 -216 -73.366959 347 -1 574 408 186
+446 -224 -73.607193 347 -1 434 447 194
+446 -226 -73.660950 315 -1 408 478 189
+446 -232 -73.775192 322 714 434 478 191
+446 -237 -73.849113 322 -1 347 447 191
+445 -246 -73.993591 347 800 365 478 194
+443 -254 -74.163269 356 800 294 478 194
+449 -229 -74.129669 356 -1 282 408 194
+455 -216 -74.282555 338 714 597 397 203
+452 -219 -74.531181 386 651 623 408 207
+447 -223 -74.648781 356 714 791 421 210
+441 -228 -74.783180 356 552 -1 478 200
Index: branches/scout/projects/mapping/matlab/data/input5.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input5.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input5.txt	(revision 1346)
@@ -0,0 +1,624 @@
+0 0 0.001680 -1 478 597 462 213
+9 0 -0.006720 -1 512 -1 478 213
+13 0 -0.006720 -1 512 294 462 213
+20 0 -0.036960 800 -1 -1 462 217
+23 0 -0.072240 270 434 -1 462 203
+30 0 -0.080640 250 462 597 462 210
+34 0 -0.052080 255 447 597 478 217
+42 0 -0.033600 265 434 800 447 221
+46 0 -0.035280 270 421 -1 408 217
+54 0 -0.036960 250 386 -1 462 224
+58 0 -0.038640 245 408 -1 434 210
+62 0 -0.040320 245 365 -1 447 224
+70 0 -0.042000 241 386 -1 434 224
+74 0 -0.043680 232 347 -1 434 232
+82 0 -0.043680 228 338 -1 408 228
+86 0 -0.043680 217 356 791 462 232
+94 0 -0.047040 221 347 681 447 228
+98 0 -0.047040 221 347 597 462 237
+106 0 -0.048720 232 330 478 447 228
+110 0 -0.050400 232 301 447 434 237
+118 0 -0.053760 245 270 462 408 245
+126 0 -0.082320 237 294 434 169 250
+129 0 -0.124320 282 276 434 447 228
+133 0 -0.233519 288 250 714 478 255
+134 0 -0.295679 260 260 531 434 245
+134 0 -0.430079 245 260 397 478 250
+134 0 -0.500639 213 265 347 531 282
+134 0 -0.640078 203 282 397 597 294
+134 0 -0.710638 194 301 397 751 276
+134 0 -0.855118 191 338 397 -1 294
+134 0 -0.925677 186 288 347 -1 203
+134 -32 -1.646395 301 260 330 -1 200
+134 -39 -1.624555 347 276 330 -1 203
+134 -55 -1.557356 347 255 288 -1 210
+134 -63 -1.513676 294 250 270 -1 213
+136 -79 -1.411196 237 228 241 -1 210
+141 -97 -1.285196 221 221 207 -1 245
+144 -105 -1.221357 181 245 189 -1 224
+152 -120 -1.093677 178 232 186 -1 245
+156 -126 -1.058397 164 213 181 478 294
+163 -137 -1.014717 158 207 164 597 294
+169 -147 -0.996237 147 221 154 552 282
+172 -151 -0.992877 140 276 147 478 294
+177 -159 -0.987837 136 270 134 397 255
+179 -163 -0.987837 124 276 129 397 301
+183 -171 -0.989517 122 260 121 386 282
+185 -174 -0.989517 117 241 110 365 276
+195 -193 -0.997917 102 210 -1 322 260
+199 -201 -1.001277 -1 207 -1 307 224
+201 -205 -1.002957 -1 207 -1 315 232
+205 -213 -1.006317 -1 178 -1 255 232
+207 -217 -1.007997 -1 181 -1 270 221
+211 -224 -1.013037 -1 152 -1 265 210
+213 -227 -1.014717 -1 158 -1 260 210
+217 -233 -1.021437 -1 194 -1 237 200
+219 -236 -1.026477 -1 134 -1 224 191
+225 -245 -0.976078 -1 140 -1 213 183
+229 -251 -0.935758 -1 134 -1 181 200
+231 -254 -0.892078 -1 119 -1 164 210
+237 -260 -0.781198 -1 -1 -1 144 224
+240 -263 -0.717358 -1 -1 -1 129 301
+246 -267 -0.594719 -1 -1 -1 104 322
+250 -269 -0.527519 -1 -1 -1 -1 301
+258 -273 -0.398159 -1 -1 -1 -1 245
+262 -274 -0.332639 -1 -1 -1 -1 213
+270 -276 -0.199920 -1 -1 171 -1 800
+274 -277 -0.132720 -1 -1 109 -1 791
+283 -277 0.003360 -1 -1 -1 -1 751
+287 -277 0.070560 115 -1 -1 -1 681
+295 -275 0.208319 133 -1 -1 -1 -1
+299 -274 0.273839 160 -1 -1 -1 -1
+307 -271 0.406559 191 -1 -1 -1 -1
+311 -269 0.478798 276 -1 -1 -1 -1
+317 -265 0.609838 245 -1 -1 -1 -1
+320 -262 0.677038 217 -1 -1 -1 751
+326 -256 0.804717 315 120 -1 -1 -1
+333 -247 0.994557 751 169 -1 -1 -1
+346 -205 1.446476 791 228 -1 105 -1
+346 -197 1.517035 -1 651 105 -1 -1
+345 -179 1.654795 -1 751 124 -1 -1
+344 -171 1.721995 -1 791 142 -1 -1
+324 -124 2.123514 478 791 203 -1 171
+313 -110 2.259593 -1 -1 531 -1 164
+301 -98 2.395673 -1 -1 597 -1 154
+294 -93 2.461193 -1 -1 597 112 154
+280 -84 2.595592 -1 -1 531 133 149
+273 -80 2.654392 -1 -1 574 156 140
+260 -74 2.662792 -1 -1 791 203 151
+255 -71 2.642632 -1 -1 714 213 162
+246 -66 2.593912 -1 -1 552 221 171
+242 -64 2.568712 -1 -1 552 221 178
+234 -59 2.535112 -1 -1 531 237 186
+230 -56 2.523352 -1 -1 478 245 200
+223 -50 2.506552 -1 -1 462 245 210
+220 -47 2.499832 -1 -1 494 255 210
+214 -41 2.494792 -1 -1 494 270 210
+211 -38 2.493113 623 -1 512 276 228
+145 14 2.425913 -1 -1 347 315 322
+142 17 2.422553 -1 681 365 282 356
+136 23 2.417513 -1 -1 356 260 315
+133 26 2.417513 -1 800 347 260 375
+127 32 2.412473 -1 623 307 245 375
+124 35 2.410793 -1 531 322 228 365
+115 44 2.407433 -1 597 288 217 386
+103 56 2.404073 -1 681 294 213 408
+100 59 2.402394 -1 512 301 228 462
+94 65 2.400714 -1 597 282 237 478
+91 68 2.400714 -1 512 270 250 478
+85 74 2.399034 -1 512 265 315 512
+82 77 2.397354 -1 478 255 365 531
+76 83 2.393994 -1 462 245 478 512
+73 86 2.393994 -1 478 237 791 597
+67 92 2.390634 -1 478 237 -1 494
+64 95 2.390634 -1 478 232 -1 512
+46 113 2.380554 -1 386 200 574 574
+40 119 2.373834 -1 397 189 597 531
+37 122 2.377194 -1 408 173 447 681
+26 131 2.432634 -1 356 181 375 -1
+20 136 2.476314 -1 375 178 322 651
+6 146 2.583834 -1 462 173 315 478
+-10 154 2.708153 -1 651 178 250 597
+-18 157 2.777033 -1 -1 186 232 531
+-34 162 2.911433 681 356 213 203 421
+-43 163 2.981993 -1 -1 237 200 462
+-60 164 3.102952 -1 -1 255 181 531
+-68 164 3.141592 -1 -1 282 176 574
+-81 164 3.188632 -1 -1 347 173 597
+-87 164 3.202072 -1 -1 347 173 623
+-133 164 3.218872 -1 -1 356 171 623
+-137 164 3.218872 -1 -1 347 173 512
+-145 164 3.215512 -1 -1 356 173 597
+-149 164 3.213832 597 -1 347 173 574
+-157 164 3.212152 681 -1 397 169 597
+-161 164 3.210473 800 -1 386 173 574
+-169 164 3.203753 -1 -1 347 166 623
+-173 164 3.200393 -1 -1 365 173 597
+-181 164 3.191993 751 -1 347 178 574
+-185 164 3.188633 -1 -1 347 178 531
+-193 164 3.176873 -1 -1 356 178 574
+-197 164 3.171833 -1 -1 330 178 552
+-205 164 3.163433 800 -1 347 178 512
+-213 164 3.158393 -1 751 338 171 478
+-217 164 3.156713 -1 -1 322 178 597
+-225 164 3.151673 -1 -1 338 178 531
+-229 164 3.151673 -1 -1 322 178 478
+-237 164 3.148313 -1 -1 315 169 574
+-241 164 3.148313 -1 800 330 178 574
+-249 164 3.144953 -1 -1 338 173 574
+-253 164 3.141593 -1 -1 322 173 462
+-265 164 3.139914 -1 800 301 173 574
+-273 164 3.139914 -1 751 330 173 494
+-281 164 3.138234 -1 800 315 176 494
+-285 164 3.138234 -1 751 330 183 512
+-293 164 3.136554 -1 800 322 178 531
+-297 164 3.134874 -1 800 307 178 478
+-305 164 3.131514 -1 714 322 178 512
+-310 164 3.129834 -1 681 322 178 531
+-318 164 3.128154 -1 751 315 178 531
+-326 164 3.126474 -1 651 294 178 552
+-330 164 3.124794 -1 681 301 178 512
+-338 164 3.121434 -1 597 315 176 512
+-343 164 3.123114 -1 597 270 178 531
+-351 164 3.121434 651 681 276 178 512
+-355 164 3.119754 681 623 282 178 531
+-363 164 3.118074 434 574 270 171 512
+-371 164 3.111355 434 574 265 178 531
+-375 164 3.109675 375 512 250 178 512
+-383 164 3.101275 301 552 241 171 574
+-387 164 3.099595 260 434 224 176 531
+-395 164 3.089515 237 478 237 178 408
+-403 164 3.079435 250 478 237 176 531
+-407 164 3.074395 245 434 224 178 478
+-415 164 3.067675 245 408 221 178 512
+-419 164 3.064315 241 421 217 178 494
+-427 164 3.059275 255 386 207 178 447
+-435 164 3.052555 245 397 191 169 512
+-440 164 3.062635 260 375 194 178 447
+-455 164 3.129834 245 315 169 178 531
+-463 164 3.175194 232 356 347 173 531
+-500 159 3.349914 -1 347 265 181 597
+-511 157 3.371753 -1 356 282 181 574
+-516 156 3.378474 -1 288 265 186 574
+-525 154 3.385193 -1 330 250 189 651
+-529 153 3.385193 -1 322 241 191 597
+-538 151 3.386873 -1 265 221 186 623
+-549 148 3.412073 -1 276 224 203 651
+-556 146 3.442313 681 265 210 200 681
+-629 91 4.114311 375 714 183 260 -1
+-638 75 4.252070 330 751 207 217 -1
+-641 67 4.320950 375 375 203 203 -1
+-646 51 4.445270 421 365 245 186 -1
+-648 44 4.482230 434 330 250 183 -1
+-650 30 4.527589 434 265 224 178 -1
+-651 24 4.541029 397 282 186 176 -1
+-655 -4 4.641829 365 276 178 173 -1
+-655 -13 4.690549 421 276 288 173 -1
+-654 -31 4.799749 478 270 307 171 -1
+-653 -40 4.856869 478 265 255 173 -1
+-651 -55 4.885429 681 255 250 178 -1
+-649 -63 4.903909 651 237 221 181 -1
+-645 -79 4.974469 -1 228 189 191 -1
+-643 -87 5.014789 531 221 181 183 -1
+-637 -103 5.108869 -1 207 169 200 -1
+-629 -119 5.219748 -1 213 149 224 -1
+-624 -126 5.283588 -1 237 142 221 -1
+-593 -157 5.622946 -1 421 137 301 574
+-586 -162 5.690146 -1 494 137 221 651
+-553 -176 5.972385 -1 651 169 164 478
+-544 -178 6.041265 -1 -1 173 158 574
+-526 -181 6.182385 -1 -1 213 145 434
+-517 -181 6.251265 -1 -1 250 137 531
+-499 -180 6.390704 751 -1 386 139 531
+-491 -179 6.457904 -1 -1 552 131 462
+-475 -174 6.590623 531 -1 462 142 315
+-452 -163 6.790543 512 -1 -1 160 -1
+-407 -127 7.008941 408 -1 -1 241 552
+-401 -121 7.010621 397 -1 -1 260 478
+-398 -118 7.008941 397 651 -1 276 574
+-392 -112 7.007261 397 -1 -1 276 434
+-386 -106 7.010621 365 -1 -1 288 597
+-383 -103 7.008941 365 -1 -1 315 681
+-377 -97 7.010621 375 597 -1 294 800
+-374 -94 7.010621 365 800 -1 315 -1
+-368 -88 7.013981 365 -1 -1 338 -1
+-365 -85 7.012301 338 651 -1 365 -1
+-359 -79 7.015661 356 714 -1 365 -1
+-356 -76 7.020701 338 552 -1 408 -1
+-350 -70 7.022381 347 651 800 434 -1
+-347 -67 7.022381 322 681 -1 365 -1
+-341 -61 7.020701 322 597 -1 408 -1
+-338 -58 7.022381 315 574 800 397 -1
+-332 -52 7.019021 301 478 800 478 -1
+-305 -26 6.990462 228 434 597 494 224
+-299 -20 6.987102 260 434 791 478 221
+-296 -18 6.982062 245 421 791 574 217
+-290 -13 6.980382 228 434 791 574 224
+-287 -11 6.980382 237 397 791 597 232
+-281 -7 6.975342 228 397 681 574 232
+-275 -1 6.977022 221 421 681 531 260
+-272 2 6.978702 207 408 623 681 294
+-266 8 6.977022 217 375 714 651 307
+-263 11 6.975342 207 338 597 597 322
+-244 27 6.881262 189 330 265 597 447
+-243 28 6.827502 178 330 597 597 408
+-241 29 6.703182 158 375 800 552 365
+-241 29 6.635983 178 574 -1 552 294
+-241 29 6.496543 191 -1 800 494 260
+-241 29 6.425983 200 -1 -1 494 232
+-240 29 6.293263 217 434 -1 494 224
+-237 29 6.249583 224 597 -1 478 203
+-230 29 6.189104 250 714 -1 478 191
+-222 28 6.157184 232 751 -1 447 186
+-218 27 6.147104 237 800 -1 447 194
+-210 25 6.135344 276 791 -1 478 189
+-186 19 6.131984 255 623 -1 478 194
+-182 18 6.135344 265 791 -1 494 191
+-174 16 6.133664 276 751 -1 478 191
+-170 15 6.133664 276 623 -1 478 191
+-162 13 6.130304 276 681 -1 478 191
+-158 12 6.131984 276 714 -1 434 189
+-150 10 6.128624 265 791 -1 478 191
+-142 8 6.125265 276 800 -1 478 186
+-138 7 6.121905 245 751 -1 494 189
+-130 5 6.113505 255 714 -1 478 191
+-126 4 6.111825 265 714 -1 494 194
+-118 2 6.103425 276 681 -1 494 194
+-114 1 6.096705 276 651 -1 494 183
+-106 -1 6.089985 260 574 -1 494 186
+-94 -4 6.083265 270 623 -1 494 194
+-90 -5 6.079906 288 651 -1 494 191
+-82 -7 6.076546 260 597 -1 494 178
+-78 -8 6.074866 294 651 -1 531 191
+-70 -10 6.071506 276 462 -1 512 191
+-58 -13 6.073186 276 623 791 462 189
+-54 -14 6.066466 282 574 791 531 194
+-46 -16 6.063106 276 574 751 512 194
+-42 -17 6.063106 276 494 751 494 194
+-34 -19 6.059746 276 434 681 512 194
+-26 -21 6.054706 265 494 681 494 197
+-22 -22 6.054706 260 494 623 478 197
+-14 -24 6.054706 282 478 597 494 194
+-10 -25 6.053026 294 494 478 512 194
+-2 -27 6.053026 265 512 462 478 194
+2 -28 6.053026 288 421 494 494 194
+10 -30 6.053026 307 434 494 512 194
+14 -31 6.054706 307 434 434 531 200
+22 -33 6.053026 294 294 478 512 200
+26 -34 6.054706 315 421 462 462 200
+34 -36 6.054706 307 386 421 494 186
+42 -38 6.053026 301 397 408 512 197
+46 -39 6.051346 338 356 434 512 200
+54 -41 6.049666 330 307 397 531 200
+79 -48 5.913587 210 255 421 434 189
+84 -50 5.831267 189 270 375 494 183
+86 -51 5.711987 245 245 365 531 183
+86 -51 5.641428 245 241 800 531 183
+86 -51 5.498628 224 245 -1 531 197
+86 -51 5.426388 213 245 307 714 200
+86 -51 5.281908 191 250 322 751 203
+86 -51 5.209668 189 288 421 623 232
+86 -51 5.071908 183 307 434 -1 356
+86 -51 5.001348 178 338 434 -1 294
+86 -51 4.861909 169 574 375 -1 191
+86 -51 4.791349 181 -1 421 -1 221
+86 -51 4.646869 183 315 531 -1 245
+83 -60 4.331030 276 365 462 -1 197
+79 -69 4.272230 375 386 478 -1 191
+55 -114 4.163030 347 288 375 -1 194
+53 -117 4.060550 224 250 434 -1 189
+52 -118 4.000071 245 255 421 -1 191
+52 -118 3.865671 265 237 531 623 203
+47 -120 3.622071 200 255 -1 -1 213
+47 -120 3.494392 191 270 -1 -1 245
+47 -120 3.428872 181 270 -1 -1 245
+47 -120 3.286072 173 315 -1 681 294
+47 -120 3.213832 158 365 -1 574 338
+47 -120 3.074393 145 462 -1 597 213
+46 -120 2.587194 265 -1 -1 434 194
+39 -115 2.467915 347 -1 -1 552 171
+33 -109 2.429275 322 -1 -1 512 176
+30 -106 2.415835 301 -1 -1 531 178
+24 -100 2.399035 288 -1 -1 531 178
+21 -97 2.393995 330 -1 -1 512 178
+15 -91 2.387275 330 -1 800 434 169
+-4 -71 2.273036 -1 -1 623 531 191
+-10 -65 2.251196 -1 -1 681 597 189
+-13 -62 2.246156 751 -1 714 531 183
+-19 -55 2.239436 -1 -1 512 531 194
+-25 -49 2.236076 -1 -1 597 552 191
+-28 -46 2.234396 -1 -1 574 552 194
+-31 -40 2.231036 -1 -1 651 531 200
+-36 -37 2.229356 -1 -1 651 531 203
+-38 -34 2.229356 -1 -1 651 494 203
+-44 -25 2.220956 -1 -1 597 512 207
+-58 -4 2.187356 -1 -1 531 512 213
+-60 -1 2.180636 -1 -1 574 462 228
+-64 5 2.170556 -1 -1 494 478 221
+-66 8 2.167196 -1 -1 512 447 228
+-68 12 2.163836 -1 -1 574 462 228
+-72 19 2.157116 -1 -1 512 531 228
+-76 26 2.155436 -1 -1 574 478 237
+-78 29 2.155436 -1 -1 447 434 245
+-82 36 2.153756 791 -1 552 494 224
+-84 39 2.150396 791 -1 531 434 250
+-88 46 2.148716 791 -1 478 447 255
+-90 50 2.150396 800 -1 447 478 260
+-94 56 2.145356 751 -1 447 447 270
+-96 60 2.141996 597 -1 478 408 260
+-100 66 2.138636 478 -1 462 447 260
+-102 70 2.138636 434 -1 462 421 276
+-106 77 2.135276 408 -1 434 434 276
+-108 81 2.131916 462 -1 478 397 276
+-112 88 2.130236 408 -1 408 408 276
+-114 92 2.130236 397 -1 434 408 250
+-118 99 2.126876 462 -1 397 434 276
+-134 128 2.120156 375 -1 421 397 294
+-136 131 2.120156 356 -1 375 386 294
+-144 145 2.111757 347 -1 397 397 301
+-146 149 2.108397 408 800 375 397 276
+-150 156 2.099997 322 -1 397 375 315
+-152 159 2.094957 397 -1 338 365 315
+-156 165 2.084877 462 -1 347 375 330
+-158 168 2.076477 462 751 322 375 315
+-162 174 2.066397 434 -1 315 375 294
+-164 177 2.063037 494 -1 375 365 301
+-168 184 2.052957 494 -1 330 365 315
+-172 192 2.046237 447 -1 347 365 315
+-174 195 2.039517 512 791 338 347 338
+-178 203 2.037837 512 -1 301 356 347
+-180 207 2.036157 597 -1 322 347 338
+-184 214 2.034477 574 -1 301 347 347
+-186 218 2.032797 574 751 315 347 347
+-190 226 2.029437 597 751 301 347 330
+-192 230 2.027757 574 -1 301 338 322
+-196 238 2.024397 512 -1 301 322 365
+-200 246 2.019357 597 791 288 315 375
+-202 250 2.017678 574 800 265 282 356
+-212 270 2.010958 531 597 265 276 397
+-216 278 2.007598 447 574 260 301 397
+-218 282 2.004238 447 623 260 288 375
+-222 290 2.004238 478 574 250 270 386
+-224 294 2.002558 397 531 232 270 365
+-228 302 2.002558 375 512 245 282 397
+-230 306 2.002558 434 552 237 276 434
+-234 314 2.005918 462 434 237 265 375
+-238 322 2.005918 375 462 232 265 421
+-240 326 2.004238 386 434 224 260 386
+-246 338 2.002558 386 386 213 237 421
+-250 346 1.999198 330 408 210 245 434
+-254 354 1.990798 365 356 203 237 462
+-256 358 1.987438 365 356 200 237 462
+-260 366 1.979038 338 356 194 228 462
+-262 370 1.977358 322 330 194 228 478
+-268 383 2.031118 347 315 186 213 434
+-272 390 2.074798 330 282 191 203 478
+-292 418 2.299917 322 245 194 176 531
+-298 424 2.365437 347 250 154 171 397
+-312 435 2.501517 315 245 250 169 512
+-327 444 2.637596 228 241 237 164 574
+-334 448 2.689676 210 237 217 164 574
+-347 454 2.698076 294 232 191 164 512
+-353 457 2.686316 221 197 181 173 552
+-392 473 2.788796 322 173 126 189 623
+-410 478 2.877836 574 173 114 200 800
+-419 480 2.923195 681 173 106 203 597
+-437 482 3.025675 434 171 -1 200 791
+-445 483 3.081115 397 183 -1 164 -1
+-462 482 3.205435 365 191 -1 365 -1
+-504 471 3.548154 386 189 -1 140 512
+-512 467 3.613673 386 552 -1 127 -1
+-534 451 3.820313 478 356 139 -1 -1
+-547 439 3.961432 494 338 164 -1 -1
+-553 432 4.030312 512 356 186 -1 791
+-563 417 4.169752 531 338 194 -1 751
+-571 401 4.310871 -1 294 397 -1 -1
+-574 393 4.376391 -1 338 597 -1 -1
+-578 376 4.515831 -1 282 260 -1 -1
+-579 367 4.581350 791 397 203 112 -1
+-580 350 4.714070 -1 276 250 126 597
+-579 341 4.781270 -1 552 250 145 338
+-576 325 4.913989 -1 651 265 181 462
+-574 317 4.979509 -1 -1 265 178 365
+-570 302 5.053429 -1 -1 250 156 397
+-568 296 5.078629 -1 -1 270 173 397
+-564 285 5.102149 -1 -1 265 447 365
+-560 276 5.112228 -1 -1 265 531 386
+-558 272 5.113908 -1 -1 260 494 375
+-554 264 5.115588 -1 -1 255 434 365
+-552 260 5.113908 386 -1 250 307 421
+-548 252 5.112228 -1 -1 245 315 397
+-546 248 5.112228 -1 597 228 294 375
+-542 240 5.112228 800 -1 237 288 434
+-540 236 5.113908 -1 -1 232 276 421
+-536 228 5.112228 -1 -1 232 265 397
+-534 224 5.110548 -1 -1 217 265 365
+-530 216 5.112228 651 -1 217 241 447
+-528 212 5.112228 651 -1 213 250 434
+-524 204 5.112228 -1 574 213 250 462
+-520 196 5.108869 -1 -1 200 237 462
+-518 192 5.108869 -1 -1 194 224 478
+-514 184 5.105509 -1 -1 186 232 434
+-512 179 5.108869 -1 -1 191 224 375
+-506 166 5.172708 421 -1 194 217 512
+-502 159 5.213028 -1 800 207 194 462
+-494 146 5.307108 -1 -1 221 183 462
+-490 140 5.333988 -1 -1 232 181 478
+-482 130 5.362547 -1 -1 241 176 478
+-447 88 5.381027 -1 -1 224 160 494
+-438 79 5.372627 -1 -1 260 162 478
+-432 73 5.370947 -1 -1 245 160 512
+-406 43 5.365908 -1 -1 250 152 494
+-404 40 5.365908 -1 -1 250 151 478
+-398 33 5.369267 651 -1 228 151 531
+-395 29 5.372627 -1 -1 241 145 512
+-386 18 5.433107 -1 -1 282 144 531
+-380 12 5.480147 -1 -1 294 140 597
+-367 0 5.589346 -1 -1 347 139 574
+-346 -14 5.775826 -1 -1 478 136 791
+-322 -24 5.974065 623 531 -1 136 791
+-296 -28 6.175664 462 -1 -1 197 386
+-281 -29 6.246224 494 -1 791 194 288
+-249 -29 6.299984 408 800 -1 282 276
+-245 -29 6.298304 462 751 -1 322 315
+-237 -29 6.294944 421 -1 -1 315 265
+-229 -29 6.291584 386 800 800 315 307
+-215 -29 6.291584 421 597 791 338 282
+-182 -29 6.291584 347 651 791 386 386
+-178 -29 6.291584 347 651 800 408 397
+-170 -29 6.289904 338 478 681 421 512
+-166 -29 6.286544 330 597 791 434 434
+-154 -29 6.279825 330 531 681 478 512
+-146 -29 6.273105 301 552 751 447 552
+-138 -29 6.266385 301 512 623 478 597
+-134 -29 6.261344 307 462 651 478 751
+-126 -29 6.251264 282 512 681 531 434
+-122 -29 6.247904 282 512 651 512 651
+-114 -29 6.239504 276 494 681 421 681
+-106 -29 6.232784 270 478 681 494 531
+-102 -29 6.231104 270 421 714 386 751
+-94 -29 6.226065 260 494 623 434 597
+-89 -29 6.227745 255 447 597 494 574
+-81 -29 6.224385 245 447 597 408 651
+-77 -29 6.224385 237 386 531 478 478
+-69 -29 6.222705 224 386 681 478 531
+-65 -29 6.222705 221 421 552 478 512
+-57 -29 6.217665 221 375 597 462 651
+-49 -29 6.214305 217 365 552 408 597
+-45 -29 6.214305 200 347 531 434 531
+-37 -29 6.209265 200 330 512 375 531
+-33 -29 6.204225 186 338 552 408 478
+-25 -29 6.182385 178 330 512 375 597
+-22 -29 6.148785 176 330 531 397 531
+-17 -29 6.049665 176 386 512 512 421
+-16 -29 5.990865 164 478 531 494 315
+-15 -29 5.856465 173 -1 447 494 294
+-15 -29 5.715345 183 434 494 597 260
+-15 -29 5.644785 197 282 478 512 245
+-15 -29 5.500306 217 397 462 494 119
+-15 -29 5.431426 232 512 552 478 197
+-13 -33 5.333986 322 512 462 494 189
+-12 -34 5.281907 397 462 -1 478 171
+-7 -42 5.187827 347 434 714 531 178
+-3 -50 5.155907 255 397 -1 494 171
+-1 -54 5.144147 250 421 751 478 183
+3 -62 5.134068 232 397 -1 494 171
+7 -70 5.127348 232 408 -1 531 189
+9 -74 5.123988 224 386 -1 531 186
+13 -82 5.122308 232 386 -1 494 191
+26 -110 5.100469 245 301 -1 494 203
+30 -121 5.085349 265 282 791 494 203
+32 -126 5.004709 282 288 -1 434 203
+32 -127 4.949269 265 276 494 531 217
+32 -127 4.809830 250 288 282 574 232
+32 -127 4.667030 224 434 347 681 178
+32 -127 4.603190 213 301 338 651 250
+32 -131 4.500710 210 330 434 681 307
+32 -132 4.443591 194 356 408 -1 462
+30 -137 4.366311 189 365 375 -1 462
+29 -140 4.336071 178 434 386 -1 232
+27 -145 4.243671 176 681 397 -1 213
+26 -146 4.186552 186 462 365 -1 241
+26 -146 4.048792 183 301 365 -1 276
+-13 -169 3.608634 375 260 338 -1 194
+-25 -175 3.610314 294 255 338 -1 200
+-40 -183 3.659034 294 241 282 -1 173
+-47 -187 3.687594 307 217 255 -1 213
+-60 -195 3.694314 307 200 224 -1 207
+-67 -200 3.709434 282 186 217 -1 210
+-81 -210 3.768234 276 156 160 -1 213
+-88 -216 3.803514 265 144 158 -1 217
+-102 -228 3.884153 210 142 144 -1 221
+-113 -240 4.001753 191 140 119 -1 217
+-118 -246 4.079032 178 142 108 -1 265
+-125 -258 4.235272 160 164 103 434 294
+-127 -263 4.302472 152 178 -1 338 330
+-131 -272 4.352871 149 173 -1 294 347
+-132 -276 4.361271 140 207 -1 265 347
+-134 -284 4.364631 137 210 -1 260 322
+-140 -304 4.361271 120 186 -1 232 322
+-141 -308 4.361271 109 171 -1 221 330
+-143 -316 4.356232 105 169 -1 217 294
+-144 -320 4.356232 102 162 -1 197 288
+-147 -328 4.349512 -1 133 -1 183 288
+-151 -336 4.346152 -1 145 -1 200 265
+-153 -340 4.351192 -1 136 -1 194 270
+-147 -397 5.256709 133 -1 125 -1 -1
+-145 -401 5.323909 152 -1 114 -1 -1
+-139 -407 5.458308 173 -1 -1 -1 -1
+-136 -410 5.525508 237 -1 -1 -1 -1
+-129 -416 5.659907 288 -1 -1 -1 -1
+-126 -418 5.725427 294 105 -1 -1 -1
+-118 -422 5.859827 255 117 -1 -1 -1
+-114 -424 5.925346 221 144 -1 -1 -1
+-106 -426 6.056386 -1 169 -1 -1 -1
+-101 -427 6.126946 714 197 -1 -1 -1
+-87 -428 6.288226 -1 228 -1 -1 623
+-79 -427 6.368865 681 276 -1 -1 623
+-55 -421 6.587265 -1 228 106 137 -1
+-39 -414 6.725025 -1 681 130 119 -1
+-31 -410 6.795585 -1 -1 151 112 -1
+-17 -400 6.931664 -1 681 183 103 -1
+-10 -394 6.998864 -1 751 221 -1 -1
+2 -382 7.133263 -1 714 276 -1 276
+12 -368 7.267663 -1 -1 210 -1 213
+16 -360 7.338223 -1 -1 260 -1 213
+23 -344 7.475982 -1 -1 791 105 210
+26 -335 7.546542 -1 -1 623 114 171
+30 -318 7.643982 -1 -1 597 137 164
+31 -311 7.652382 -1 -1 531 142 169
+33 -295 7.704462 -1 -1 552 164 176
+35 -272 7.783421 -1 -1 512 217 186
+35 -266 7.796861 -1 -1 494 217 189
+35 -250 7.810301 -1 -1 512 260 207
+35 -242 7.806942 -1 -1 531 282 213
+35 -238 7.806942 -1 -1 478 288 221
+35 -230 7.805262 -1 -1 494 294 221
+35 -226 7.801902 -1 -1 478 294 207
+35 -218 7.800222 -1 -1 478 288 221
+35 -214 7.798542 -1 -1 478 301 265
+35 -206 7.796862 -1 -1 397 307 245
+35 -202 7.793502 -1 -1 447 301 260
+35 -194 7.790143 -1 -1 447 294 265
+35 -186 7.786783 -1 -1 462 282 276
+35 -182 7.785103 -1 -1 462 276 276
+35 -174 7.778383 -1 -1 386 276 282
+35 -158 7.775023 -1 -1 365 224 315
+35 -138 7.773342 -1 -1 365 200 330
+35 -134 7.773342 -1 -1 397 217 338
+35 -126 7.773342 -1 -1 365 224 322
+35 -122 7.773342 -1 751 365 250 338
+35 -114 7.773342 -1 -1 347 294 365
+35 -110 7.771662 -1 -1 338 347 347
+35 -101 7.771662 -1 -1 338 478 338
+35 -97 7.769982 -1 -1 330 751 375
+35 -89 7.764943 -1 714 322 -1 365
+35 -85 7.766623 -1 -1 307 -1 365
+35 -77 7.759903 -1 -1 307 -1 421
+35 -73 7.758223 -1 751 294 800 397
+35 -65 7.748143 -1 623 294 -1 434
+35 -61 7.746463 -1 651 307 681 397
+35 -53 7.738063 -1 800 288 651 408
+35 -45 7.731343 -1 800 265 531 434
+35 -41 7.727983 -1 800 265 574 434
+37 -33 7.721263 791 512 255 574 447
+38 -29 7.719584 -1 597 228 462 478
+40 -21 7.716224 -1 597 245 478 447
+41 -17 7.712864 -1 478 224 434 531
+43 -9 7.709504 -1 574 228 434 478
+44 -5 7.709504 -1 447 224 375 512
+54 45 7.769984 -1 434 186 315 421
+54 54 7.817024 -1 531 183 307 531
+53 72 7.932943 -1 800 186 260 531
+52 81 7.996783 -1 623 181 217 574
+47 99 8.136223 462 597 203 221 478
+44 107 8.206782 714 -1 217 189 512
+38 122 8.287422 -1 -1 265 186 552
+35 128 8.315982 -1 -1 276 181 574
+29 139 8.344543 -1 -1 301 178 531
+25 149 8.357982 -1 -1 315 178 574
+23 153 8.357982 -1 -1 301 173 462
+19 161 8.347902 -1 -1 288 178 531
+17 165 8.344543 -1 791 301 169 574
+13 173 8.337823 -1 -1 276 178 574
+11 176 8.337823 -1 -1 276 178 531
Index: branches/scout/projects/mapping/matlab/data/input6.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input6.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input6.txt	(revision 1346)
@@ -0,0 +1,1567 @@
+6 0 0.075600 597 -1 -1 -1 207
+12 1 0.141120 512 -1 -1 -1 365
+22 4 0.277199 288 -1 -1 -1 322
+27 6 0.349439 512 -1 -1 -1 125
+35 10 0.485519 221 -1 -1 -1 -1
+39 12 0.552718 -1 -1 -1 -1 186
+42 14 0.619918 108 791 -1 -1 166
+48 20 0.750958 110 -1 -1 -1 154
+51 23 0.814798 119 294 -1 -1 144
+56 29 0.910557 129 714 -1 -1 139
+58 31 0.895437 131 623 -1 -1 137
+60 33 0.794638 114 301 -1 -1 142
+60 33 0.729118 103 791 -1 -1 152
+60 33 0.589678 -1 462 494 -1 178
+60 33 0.517439 -1 462 -1 -1 183
+60 33 0.376319 -1 -1 -1 -1 -1
+60 33 0.305759 -1 -1 -1 -1 282
+60 33 0.235199 120 -1 -1 -1 301
+60 33 0.095760 200 -1 -1 -1 330
+60 33 0.028560 221 -1 -1 -1 213
+71 33 -0.006720 494 -1 -1 -1 164
+79 33 0.003360 386 -1 -1 -1 164
+96 33 0.050400 250 -1 -1 -1 217
+105 34 0.082320 113 -1 -1 -1 276
+122 36 0.131040 136 -1 -1 -1 288
+129 37 0.126000 109 -1 -1 -1 294
+141 38 0.085680 -1 -1 -1 -1 260
+146 38 0.055440 -1 -1 -1 -1 276
+150 38 0.018480 111 -1 -1 -1 203
+156 38 -0.077280 125 -1 -1 -1 147
+158 38 -0.134400 338 651 -1 -1 112
+159 38 -0.268799 375 -1 -1 -1 -1
+159 38 -0.341039 -1 -1 -1 -1 -1
+159 38 -0.769438 651 -1 -1 -1 -1
+159 38 -0.910557 751 -1 -1 -1 -1
+159 38 -1.051677 -1 -1 -1 751 207
+165 21 -1.377596 -1 -1 -1 531 421
+166 17 -1.392716 -1 -1 -1 462 -1
+168 9 -1.412876 -1 -1 -1 574 -1
+169 5 -1.422956 -1 -1 -1 478 -1
+171 -3 -1.436396 -1 -1 -1 531 -1
+171 -7 -1.441436 -1 -1 -1 574 -1
+172 -15 -1.448156 -1 -1 -1 531 574
+172 -47 -1.485116 791 -1 -1 597 -1
+172 -55 -1.490156 751 -1 -1 597 -1
+172 -59 -1.496876 574 -1 -1 552 -1
+172 -71 -1.503596 751 -1 -1 597 -1
+172 -79 -1.510316 597 -1 -1 531 -1
+172 -91 -1.520396 574 751 -1 597 -1
+172 -95 -1.522076 651 714 -1 597 597
+172 -103 -1.528796 478 800 -1 531 -1
+172 -107 -1.532156 574 -1 -1 623 -1
+172 -115 -1.537196 574 714 -1 597 -1
+172 -123 -1.542236 623 714 -1 651 -1
+172 -127 -1.547276 597 714 -1 531 -1
+172 -135 -1.559036 574 791 -1 597 751
+172 -139 -1.565755 651 574 -1 681 -1
+172 -151 -1.577515 512 597 -1 597 597
+172 -159 -1.582555 462 623 -1 597 -1
+172 -163 -1.587595 597 574 -1 651 597
+172 -171 -1.597675 531 552 -1 681 -1
+172 -179 -1.607755 512 597 -1 552 791
+172 -183 -1.611115 574 623 -1 714 -1
+172 -191 -1.624555 512 512 -1 651 -1
+172 -195 -1.629595 531 478 -1 597 -1
+172 -202 -1.644715 531 512 -1 623 -1
+172 -206 -1.649755 512 531 -1 681 651
+172 -214 -1.664875 434 421 -1 623 -1
+172 -218 -1.668235 494 494 -1 751 -1
+172 -226 -1.679995 462 494 -1 681 -1
+172 -230 -1.685035 434 494 -1 681 681
+171 -238 -1.695115 434 478 -1 623 -1
+169 -246 -1.696795 434 421 -1 681 -1
+168 -250 -1.703515 397 386 -1 651 -1
+166 -258 -1.711915 421 421 -1 651 -1
+165 -262 -1.715275 408 397 -1 681 -1
+163 -270 -1.720315 386 421 -1 597 -1
+145 -342 -1.782475 260 260 -1 791 -1
+143 -348 -1.851355 232 250 -1 681 651
+141 -352 -1.960554 221 250 -1 681 791
+141 -353 -2.026074 197 255 -1 623 574
+141 -353 -2.162154 181 270 531 651 301
+141 -353 -2.234394 178 260 356 791 365
+141 -353 -2.377193 171 408 623 800 347
+141 -353 -2.449433 176 531 -1 -1 338
+141 -353 -2.593913 189 -1 552 -1 294
+141 -353 -2.736712 191 -1 681 -1 245
+141 -353 -2.803912 200 347 651 -1 375
+141 -353 -2.946712 250 356 597 751 186
+141 -353 -3.012232 276 494 651 478 194
+136 -353 -3.099591 307 574 552 623 181
+133 -353 -3.131511 356 751 552 -1 183
+125 -353 -3.180231 365 494 597 -1 183
+117 -353 -3.215511 462 751 574 -1 181
+105 -353 -3.244071 623 597 552 494 181
+101 -353 -3.245751 751 623 512 751 186
+93 -353 -3.264231 681 597 494 714 186
+89 -353 -3.265911 791 651 552 -1 191
+74 -351 -3.289431 -1 552 462 -1 191
+70 -350 -3.292791 -1 597 494 -1 186
+62 -348 -3.302871 -1 421 494 552 191
+58 -347 -3.309591 -1 623 462 800 200
+50 -345 -3.317991 -1 512 462 -1 200
+46 -344 -3.323030 -1 531 408 -1 197
+38 -342 -3.329751 -1 494 434 -1 207
+-53 -319 -3.521269 232 282 270 -1 250
+-54 -318 -3.652309 330 250 282 -1 260
+-54 -318 -3.721189 315 221 307 -1 265
+-56 -317 -3.840468 276 221 307 -1 322
+-64 -309 -3.879108 260 197 330 791 338
+-67 -306 -3.912708 213 166 307 681 375
+-72 -301 -4.005108 197 173 330 -1 408
+-73 -299 -4.057188 173 149 365 800 408
+-75 -296 -4.144547 166 158 434 -1 -1
+-77 -294 -4.127747 147 149 408 -1 -1
+-79 -290 -4.163027 140 151 494 597 531
+-82 -286 -4.154627 136 149 356 -1 623
+-83 -284 -4.171427 131 144 386 651 552
+-87 -280 -4.100868 130 130 338 -1 421
+-89 -277 -4.048788 133 122 301 -1 791
+-94 -271 -3.927828 140 122 260 -1 447
+-97 -269 -3.863988 158 120 203 800 462
+-160 -259 -2.946711 -1 203 113 347 397
+-168 -261 -2.889591 623 197 107 322 397
+-184 -267 -2.756871 408 255 105 241 434
+-192 -271 -2.689672 375 270 105 221 408
+-206 -280 -2.553592 365 255 105 194 462
+-226 -297 -2.345273 294 597 125 142 597
+-237 -311 -2.202473 282 714 151 131 -1
+-246 -327 -2.064713 282 365 178 115 -1
+-250 -336 -1.990794 294 365 207 106 -1
+-255 -352 -1.853034 276 338 181 107 -1
+-257 -361 -1.782474 301 294 156 109 -1
+-259 -378 -1.646395 301 260 386 111 -1
+-259 -387 -1.577515 330 255 597 115 -1
+-258 -404 -1.446475 365 255 265 129 597
+-254 -421 -1.310396 434 245 265 144 -1
+-251 -429 -1.241516 462 232 260 162 -1
+-244 -445 -1.103756 -1 241 207 197 597
+-239 -453 -1.033196 -1 250 194 213 -1
+-215 -480 -0.752637 751 276 160 386 347
+-208 -486 -0.678717 -1 207 176 494 681
+-168 -506 -0.322558 -1 800 183 241 -1
+-105 -511 0.067201 -1 -1 294 183 386
+-100 -511 0.073921 751 -1 294 183 512
+-91 -511 0.075601 -1 -1 288 178 447
+-87 -511 0.073921 -1 -1 288 171 408
+-79 -511 0.073921 -1 -1 282 176 597
+-75 -511 0.070561 462 -1 301 176 651
+-51 -511 0.065521 -1 -1 301 176 681
+-47 -511 0.063841 623 -1 294 173 -1
+-39 -511 0.060481 -1 -1 288 173 531
+-34 -511 0.062161 -1 -1 301 171 -1
+-26 -511 0.060481 -1 -1 301 176 -1
+-22 -511 0.058801 -1 -1 294 171 -1
+-14 -511 0.057121 751 -1 307 169 -1
+-10 -511 0.057121 -1 -1 301 171 -1
+-2 -511 0.055441 681 -1 294 164 -1
+3 -511 0.052081 -1 -1 294 171 531
+11 -511 0.048721 -1 -1 294 169 -1
+16 -511 0.047041 531 -1 288 171 -1
+25 -511 0.047041 -1 -1 301 166 -1
+30 -511 0.042001 552 -1 301 169 -1
+38 -511 0.038641 -1 -1 301 169 -1
+43 -511 0.036961 -1 -1 288 166 -1
+48 -511 0.038641 -1 -1 282 173 -1
+57 -511 0.036961 791 -1 294 166 574
+61 -511 0.033601 -1 -1 294 160 -1
+69 -511 0.033601 -1 -1 288 166 -1
+74 -511 0.031921 -1 -1 301 166 -1
+82 -511 0.026881 -1 -1 265 169 -1
+86 -511 0.023521 -1 -1 270 166 -1
+94 -511 0.015121 -1 -1 276 156 -1
+98 -511 0.008401 421 -1 276 160 597
+122 -511 -0.018479 -1 -1 265 162 -1
+130 -511 -0.026879 714 -1 255 162 -1
+134 -511 -0.028559 -1 -1 265 160 -1
+146 -511 -0.033599 -1 -1 237 154 221
+155 -511 -0.035279 397 -1 250 160 681
+159 -511 -0.038639 -1 -1 250 158 531
+167 -511 -0.040319 -1 -1 245 158 512
+171 -511 -0.043679 -1 -1 250 158 531
+179 -511 -0.041999 -1 -1 250 147 552
+183 -511 -0.041999 -1 -1 245 -1 597
+197 -511 0.006721 -1 -1 260 149 255
+203 -511 0.025201 434 -1 276 151 552
+216 -511 0.058801 623 800 276 151 531
+224 -510 0.092401 -1 -1 294 151 -1
+238 -508 0.136080 -1 -1 282 147 -1
+244 -507 0.147840 -1 -1 315 147 -1
+292 -492 0.435120 -1 -1 494 160 -1
+307 -484 0.552719 -1 574 597 147 -1
+313 -480 0.586319 -1 -1 651 178 -1
+325 -470 0.666959 -1 -1 623 189 -1
+330 -465 0.692159 -1 651 800 213 -1
+338 -457 0.717359 -1 -1 791 224 -1
+377 -421 0.727439 597 -1 800 294 -1
+380 -418 0.727439 -1 -1 623 294 -1
+386 -412 0.710639 -1 -1 462 301 -1
+389 -410 0.678719 -1 651 791 301 -1
+399 -401 0.690479 714 -1 531 322 800
+407 -393 0.809759 791 -1 -1 307 751
+423 -364 1.301997 -1 -1 478 421 -1
+425 -356 1.436397 -1 -1 -1 447 -1
+425 -351 1.506957 -1 714 -1 478 531
+425 -343 1.609436 -1 -1 -1 531 791
+425 -339 1.624556 -1 -1 -1 574 408
+425 -331 1.631276 -1 408 -1 462 681
+425 -327 1.632956 -1 -1 791 681 791
+425 -319 1.627916 -1 -1 421 623 574
+425 -315 1.624556 -1 512 751 651 791
+425 -307 1.617836 -1 -1 -1 623 651
+425 -303 1.611116 791 751 -1 651 447
+425 -295 1.599356 681 751 681 681 651
+425 -291 1.597676 -1 -1 -1 597 -1
+425 -283 1.590956 -1 -1 -1 681 -1
+425 -279 1.587596 -1 800 322 531 -1
+425 -271 1.582556 -1 -1 -1 651 800
+425 -267 1.582556 -1 623 -1 531 -1
+425 -259 1.580876 -1 800 531 597 681
+425 -255 1.577516 -1 -1 800 751 751
+425 -246 1.579196 -1 -1 791 597 651
+425 -238 1.575836 800 751 574 478 -1
+425 -234 1.575836 -1 597 365 714 -1
+425 -226 1.575836 -1 -1 478 623 791
+425 -222 1.574156 -1 -1 574 597 -1
+425 -210 1.567436 -1 -1 462 597 714
+425 -196 1.565756 -1 -1 338 447 -1
+425 -187 1.564076 -1 -1 365 681 -1
+425 -183 1.564076 -1 597 307 597 -1
+425 -174 1.557356 -1 651 322 651 -1
+425 -169 1.560716 714 -1 338 681 552
+425 -160 1.557356 800 791 301 597 751
+425 -151 1.559036 651 -1 282 -1 -1
+425 -147 1.559036 623 751 282 597 -1
+417 -12 1.814395 494 791 -1 -1 -1
+416 -7 1.817755 531 714 408 552 -1
+414 1 1.817755 494 -1 714 -1 651
+413 5 1.819435 447 751 -1 751 651
+411 13 1.817755 434 -1 447 -1 623
+410 17 1.816075 397 -1 -1 -1 -1
+408 25 1.812715 397 -1 623 531 -1
+404 41 1.807675 462 -1 294 714 -1
+401 53 1.802635 408 714 250 -1 -1
+399 61 1.799275 421 -1 245 -1 -1
+398 65 1.797595 421 -1 183 -1 -1
+396 75 1.807675 447 623 169 714 -1
+378 122 2.079834 386 104 103 276 623
+368 135 2.217594 397 255 -1 181 -1
+363 141 2.298234 307 421 149 -1 -1
+350 152 2.459513 494 375 221 -1 -1
+343 157 2.533433 597 365 397 -1 -1
+330 164 2.612393 597 365 228 -1 -1
+324 167 2.637593 597 330 164 -1 -1
+289 182 2.813992 -1 338 158 127 -1
+272 186 2.931592 -1 338 294 104 -1
+263 187 2.998791 -1 330 232 103 -1
+245 188 3.139911 791 338 241 103 -1
+236 187 3.210471 -1 397 237 111 -1
+218 184 3.349910 -1 434 237 288 -1
+210 182 3.418790 -1 552 237 574 -1
+195 178 3.489350 -1 531 228 434 -1
+189 176 3.512870 -1 597 228 330 -1
+179 172 3.531350 -1 -1 213 -1 -1
+174 170 3.534710 -1 651 224 -1 -1
+166 166 3.536390 -1 800 213 -1 -1
+162 164 3.533030 -1 -1 207 -1 -1
+154 160 3.529670 -1 462 203 152 -1
+149 158 3.534710 -1 791 200 178 -1
+136 152 3.586790 -1 714 183 237 -1
+129 148 3.632149 -1 791 197 294 -1
+97 125 3.805189 -1 397 210 210 -1
+92 121 3.821989 -1 -1 210 200 -1
+84 113 3.838789 -1 791 217 194 -1
+80 110 3.842149 -1 478 210 189 -1
+72 104 3.850549 -1 512 217 186 -1
+68 101 3.853909 -1 338 213 186 -1
+62 95 3.853909 -1 356 213 181 -1
+59 92 3.853909 -1 651 217 181 -1
+53 86 3.852229 681 651 203 183 -1
+50 83 3.852229 -1 386 203 181 -1
+44 77 3.848869 -1 356 200 169 -1
+41 74 3.843829 -1 434 200 171 -1
+35 68 3.842149 -1 531 191 171 -1
+20 56 3.889189 -1 -1 197 166 -1
+14 50 3.932869 -1 -1 207 152 -1
+4 38 4.021909 -1 -1 203 147 -1
+-1 32 4.057189 -1 -1 265 145 -1
+-11 19 4.139508 -1 -1 294 136 -1
+-15 12 4.191588 -1 -1 338 140 -1
+-23 -5 4.312548 -1 -1 347 139 -1
+-26 -13 4.376388 -1 -1 434 140 791
+-30 -31 4.514147 -1 -1 301 147 -1
+-31 -40 4.588067 -1 -1 -1 151 -1
+-31 -58 4.719106 597 -1 -1 166 -1
+-31 -66 4.757746 -1 714 -1 186 -1
+-28 -87 4.829986 -1 791 -1 200 -1
+-26 -99 4.853506 -1 -1 -1 228 574
+-25 -104 4.855186 800 -1 -1 250 597
+-23 -113 4.863585 -1 714 -1 260 -1
+-22 -117 4.861906 -1 -1 -1 265 -1
+-20 -126 4.861906 -1 714 714 276 -1
+-19 -130 4.860226 -1 714 681 282 -1
+-17 -138 4.851826 -1 800 681 294 -1
+-16 -142 4.850146 -1 751 751 301 751
+-14 -150 4.843426 -1 597 800 322 512
+-13 -154 4.838386 574 751 714 322 -1
+-13 -162 4.829986 -1 751 751 322 681
+-13 -166 4.824946 -1 714 597 338 -1
+-13 -174 4.818226 -1 751 651 338 -1
+-13 -178 4.818226 -1 552 531 315 -1
+-13 -186 4.813186 -1 597 552 315 -1
+-13 -190 4.809826 -1 597 574 356 -1
+-13 -214 4.809826 597 574 462 338 597
+-13 -230 4.804787 791 462 478 386 -1
+-13 -234 4.804787 -1 512 478 447 330
+-13 -292 4.798067 751 375 365 531 623
+-13 -296 4.799747 462 365 347 494 -1
+-13 -304 4.803107 -1 365 356 447 531
+-13 -312 4.801427 -1 338 322 397 330
+-13 -316 4.798067 -1 330 322 478 -1
+-13 -324 4.799747 791 330 315 478 -1
+-13 -328 4.796387 791 294 294 434 -1
+-11 -338 4.809827 531 276 307 478 -1
+-10 -345 4.838387 478 288 260 288 -1
+-7 -361 4.920707 651 288 232 237 651
+-5 -369 4.974467 347 270 210 245 -1
+1 -385 5.085347 -1 294 194 397 -1
+9 -401 5.221427 -1 288 189 -1 800
+14 -409 5.291987 -1 330 189 494 421
+45 -440 5.639745 -1 365 189 294 -1
+53 -445 5.711985 -1 462 191 265 -1
+69 -453 5.854785 -1 623 213 232 -1
+77 -456 5.927025 -1 -1 245 207 -1
+99 -463 6.039585 -1 -1 260 186 800
+111 -465 6.069824 -1 -1 288 194 330
+273 -504 6.044626 -1 574 228 162 623
+282 -506 6.044626 -1 512 241 164 494
+286 -507 6.042946 -1 574 228 166 -1
+294 -509 6.044626 552 447 228 160 512
+302 -511 6.044626 -1 494 228 160 -1
+306 -512 6.044626 -1 512 217 152 -1
+314 -514 6.042946 -1 421 217 154 751
+318 -515 6.046306 -1 478 213 151 800
+326 -517 6.046306 -1 434 210 158 -1
+330 -518 6.046306 -1 421 203 154 651
+338 -520 6.046306 681 434 194 147 -1
+396 -525 6.301665 -1 478 228 147 597
+403 -525 6.325185 531 552 241 147 347
+419 -523 6.407505 -1 574 224 154 574
+427 -522 6.456224 -1 574 237 154 -1
+442 -518 6.516704 -1 386 245 164 -1
+479 -508 6.568784 -1 714 228 191 -1
+487 -506 6.567104 -1 -1 213 194 -1
+491 -505 6.568784 -1 -1 224 191 -1
+499 -503 6.568784 -1 -1 221 197 -1
+503 -502 6.570464 -1 -1 207 191 -1
+512 -500 6.573823 -1 -1 207 194 -1
+516 -499 6.575503 -1 -1 207 194 -1
+524 -497 6.573823 -1 -1 203 200 -1
+528 -496 6.575503 -1 -1 194 221 -1
+538 -493 6.588943 -1 -1 186 203 -1
+552 -488 6.656143 -1 -1 191 217 -1
+560 -485 6.704863 -1 -1 197 203 -1
+575 -477 6.814063 -1 -1 221 186 -1
+582 -472 6.867823 -1 -1 245 173 -1
+607 -451 6.968623 -1 714 288 166 -1
+610 -448 6.970303 -1 681 307 162 -1
+617 -442 6.973662 -1 574 288 162 -1
+621 -439 6.975342 -1 462 260 164 -1
+627 -433 6.973662 -1 356 288 160 -1
+630 -430 6.971982 397 375 294 160 -1
+637 -425 6.973662 -1 356 282 162 -1
+643 -419 6.970303 -1 356 282 162 -1
+646 -416 6.973662 -1 260 282 160 -1
+652 -411 6.951823 -1 301 270 162 -1
+655 -409 6.918223 -1 250 265 154 -1
+661 -405 6.845983 -1 434 255 156 -1
+667 -401 6.847663 447 408 241 162 -1
+677 -395 6.834223 434 228 250 166 -1
+688 -388 6.851023 800 260 241 164 -1
+694 -384 6.882943 -1 197 255 158 -1
+706 -375 7.017343 -1 200 282 156 -1
+712 -369 7.091262 -1 241 -1 147 -1
+722 -356 7.220622 315 245 531 147 -1
+727 -349 7.289502 -1 574 347 154 -1
+734 -335 7.413821 -1 -1 255 158 -1
+737 -329 7.445741 -1 -1 181 158 -1
+741 -317 7.496141 -1 -1 129 181 -1
+743 -309 7.536461 462 800 131 183 -1
+748 -247 7.969899 -1 -1 171 -1 -1
+746 -238 8.038779 -1 494 276 -1 -1
+741 -221 8.169819 -1 751 213 751 -1
+738 -213 8.210138 -1 421 224 386 -1
+732 -200 8.262218 -1 -1 245 531 478
+730 -195 8.277338 -1 365 237 221 -1
+725 -185 8.300858 -1 200 131 183 -1
+723 -180 8.304218 -1 228 173 224 -1
+719 -171 8.267259 -1 365 154 250 -1
+713 -157 8.287418 -1 397 160 338 -1
+701 -134 8.386539 -1 164 152 103 -1
+696 -127 8.425179 -1 574 142 -1 -1
+686 -113 8.519258 -1 -1 260 -1 -1
+680 -107 8.574698 -1 -1 164 -1 -1
+668 -95 8.690619 -1 -1 330 -1 -1
+661 -90 8.757818 -1 -1 714 -1 -1
+646 -81 8.897258 -1 -1 434 105 531
+638 -77 8.966138 751 -1 232 -1 574
+621 -71 9.105577 -1 -1 213 -1 681
+612 -69 9.177817 -1 -1 434 101 -1
+594 -66 9.318936 -1 -1 -1 117 -1
+585 -66 9.392857 -1 -1 800 166 478
+567 -67 9.537336 -1 -1 800 330 651
+558 -69 9.606216 -1 -1 -1 462 462
+542 -73 9.638136 -1 681 -1 -1 623
+536 -74 9.626376 -1 -1 -1 494 574
+525 -76 9.572617 -1 -1 -1 651 478
+516 -77 9.497017 -1 -1 -1 -1 574
+513 -77 9.451657 -1 -1 -1 494 623
+508 -77 9.344137 -1 -1 800 347 -1
+507 -77 9.276937 -1 -1 791 408 -1
+507 -77 9.134138 791 -1 791 -1 574
+505 -76 9.078698 -1 -1 186 397 574
+494 -71 9.048459 -1 -1 -1 531 681
+487 -68 9.058539 -1 -1 -1 531 714
+471 -62 9.103899 -1 -1 -1 -1 714
+463 -59 9.135818 -1 -1 751 623 434
+419 -51 9.362617 -1 -1 574 -1 512
+410 -51 9.414698 -1 751 714 791 714
+392 -53 9.535658 -1 -1 791 -1 -1
+384 -54 9.572618 -1 597 681 -1 -1
+370 -56 9.626377 -1 -1 -1 478 -1
+364 -57 9.639817 681 -1 714 322 751
+353 -59 9.661656 681 356 681 133 791
+347 -60 9.673416 -1 -1 651 178 -1
+332 -64 9.730536 791 -1 751 288 -1
+325 -66 9.752377 751 -1 714 -1 -1
+313 -70 9.780936 651 -1 800 -1 -1
+308 -72 9.789336 751 -1 -1 -1 597
+298 -76 9.796056 681 -1 -1 -1 -1
+294 -78 9.794375 597 -1 714 -1 -1
+286 -82 9.787655 681 -1 791 714 800
+282 -83 9.784295 574 -1 791 -1 -1
+274 -85 9.779256 651 -1 714 -1 -1
+258 -89 9.770856 597 -1 494 -1 -1
+250 -91 9.769176 574 -1 -1 791 -1
+246 -92 9.767495 597 -1 791 751 791
+238 -94 9.764135 574 -1 791 681 -1
+234 -95 9.760776 597 -1 494 462 -1
+226 -98 9.760776 478 -1 651 751 751
+218 -100 9.750695 462 -1 714 651 800
+214 -101 9.747335 531 -1 623 791 478
+206 -103 9.749016 421 -1 714 651 531
+202 -104 9.749016 447 -1 574 651 434
+194 -106 9.745656 478 -1 623 597 574
+190 -107 9.745656 447 -1 512 651 651
+138 -124 9.750697 434 -1 462 552 421
+134 -125 9.749017 397 -1 531 597 651
+126 -127 9.749017 397 -1 512 552 714
+118 -129 9.745656 365 -1 552 531 512
+114 -130 9.745656 338 -1 574 531 651
+106 -132 9.738936 365 -1 512 531 751
+102 -133 9.735577 397 -1 494 478 597
+94 -135 9.733896 365 -1 478 434 751
+90 -136 9.730536 386 -1 462 494 623
+82 -138 9.723816 365 -1 512 552 651
+74 -140 9.717095 338 -1 494 494 512
+62 -143 9.710375 356 -1 434 494 681
+58 -144 9.705335 365 -1 462 478 597
+50 -146 9.700294 356 -1 531 512 751
+46 -147 9.700294 347 -1 434 494 434
+38 -149 9.696934 338 -1 408 494 574
+34 -150 9.693574 322 -1 447 434 512
+26 -152 9.691894 301 -1 434 494 574
+22 -153 9.691894 288 -1 421 478 512
+-11 -161 9.681814 260 -1 408 408 462
+-19 -163 9.683495 270 -1 408 434 512
+-24 -164 9.680135 270 -1 397 447 478
+-32 -166 9.685175 250 751 347 421 434
+-40 -168 9.681815 260 800 356 408 434
+-45 -169 9.683496 250 714 408 434 478
+-53 -171 9.681816 245 714 365 408 447
+-58 -172 9.685176 245 800 365 397 408
+-66 -174 9.683496 232 623 330 421 434
+-70 -175 9.683496 221 447 386 408 408
+-78 -177 9.680136 221 574 322 397 408
+-86 -179 9.680136 217 574 356 386 397
+-98 -182 9.673415 213 462 330 375 408
+-110 -185 9.670055 191 512 330 347 386
+-119 -187 9.594457 181 714 315 338 347
+-122 -187 9.478537 178 -1 294 375 288
+-122 -187 9.407977 194 494 294 447 276
+-123 -187 9.273578 213 210 255 478 237
+-126 -187 9.167738 210 260 245 597 224
+-127 -187 9.103898 260 356 237 -1 200
+-128 -186 8.977899 276 276 213 -1 191
+-126 -212 8.920778 478 270 194 -1 194
+-131 -209 8.920778 651 255 186 714 200
+-144 -202 8.961098 531 237 164 -1 197
+-160 -195 9.031657 338 200 162 -1 176
+-168 -192 9.075337 265 245 151 531 210
+-263 -191 9.675096 144 434 139 166 322
+-275 -195 9.710375 134 245 134 156 307
+-285 -199 9.725494 133 260 140 152 338
+-290 -201 9.730535 120 241 134 147 322
+-298 -203 9.725494 115 228 133 145 322
+-306 -205 9.725494 109 207 131 134 315
+-342 -214 9.696933 -1 166 105 125 245
+-350 -216 9.695252 -1 147 103 122 224
+-354 -217 9.691893 -1 140 -1 119 228
+-362 -219 9.718772 -1 131 -1 118 221
+-366 -220 9.765812 -1 119 -1 106 228
+-378 -226 9.957332 -1 -1 136 -1 315
+-385 -231 10.091731 -1 -1 118 -1 375
+-388 -234 10.157251 -1 -1 136 -1 791
+-394 -240 10.291652 -1 -1 265 -1 -1
+-397 -244 10.362211 -1 -1 133 -1 -1
+-401 -252 10.499970 -1 -1 109 -1 -1
+-403 -256 10.567170 -1 -1 -1 -1 -1
+-406 -264 10.699890 115 -1 -1 -1 -1
+-407 -268 10.770450 133 -1 -1 -1 -1
+-408 -276 10.903170 160 -1 -1 -1 -1
+-408 -280 10.970369 237 -1 -1 119 714
+-379 -334 11.914526 531 494 -1 120 478
+-372 -338 11.998526 -1 714 -1 102 164
+-357 -345 12.164845 -1 -1 120 -1 140
+-342 -350 12.270685 -1 -1 144 -1 127
+-336 -352 12.270685 -1 -1 169 -1 139
+-326 -356 12.223645 -1 -1 164 -1 158
+-321 -358 12.198445 623 -1 145 -1 183
+-306 -364 12.200125 -1 -1 145 -1 186
+-298 -367 12.216925 -1 -1 151 -1 228
+-281 -373 12.272365 -1 -1 162 -1 232
+-272 -375 12.307645 -1 -1 183 -1 237
+-254 -379 12.391644 -1 -1 203 -1 237
+-236 -381 12.497484 -1 -1 307 -1 224
+-227 -381 12.557964 -1 -1 421 -1 224
+-182 -373 12.895643 -1 -1 -1 -1 213
+-174 -369 12.966203 -1 -1 -1 120 221
+-158 -360 13.103963 -1 -1 -1 140 232
+-151 -355 13.172843 462 -1 791 164 245
+-138 -345 13.293802 338 -1 -1 241 250
+-128 -335 13.355962 330 -1 -1 315 250
+-124 -330 13.376122 301 -1 -1 294 270
+-117 -322 13.394601 307 -1 800 347 265
+-114 -318 13.401320 265 -1 574 434 245
+-108 -310 13.406361 294 651 597 478 270
+-102 -304 13.404680 276 -1 338 434 265
+-99 -301 13.404680 276 -1 -1 651 265
+-93 -295 13.401320 265 -1 751 791 270
+-90 -292 13.397960 276 -1 494 -1 270
+-84 -286 13.396279 276 -1 -1 -1 260
+-81 -283 13.391239 265 651 800 651 260
+-75 -277 13.391239 265 751 -1 714 255
+-69 -271 13.389559 276 -1 408 -1 255
+-66 -268 13.386199 260 -1 714 -1 250
+-60 -262 13.387879 241 -1 -1 -1 250
+-57 -259 13.387879 260 -1 552 623 232
+-51 -253 13.367720 276 -1 -1 -1 260
+-49 -251 13.334120 276 574 623 -1 245
+-45 -247 13.246759 294 -1 552 714 237
+-28 -237 13.150999 330 -1 -1 791 221
+-24 -235 13.144279 356 -1 -1 -1 221
+-12 -229 13.132520 386 -1 -1 681 221
+13 -213 13.110680 338 800 552 -1 213
+16 -211 13.105639 386 -1 623 -1 213
+23 -207 13.100599 397 -1 714 -1 221
+30 -203 13.095559 421 -1 681 -1 203
+34 -201 13.092199 397 -1 681 791 221
+41 -197 13.087159 356 -1 -1 -1 221
+45 -195 13.088840 375 -1 651 -1 217
+53 -191 13.082120 365 -1 -1 -1 217
+57 -189 13.080440 386 -1 -1 -1 221
+65 -185 13.077079 375 -1 681 -1 217
+69 -183 13.075398 447 -1 -1 -1 224
+77 -179 13.070358 397 -1 -1 -1 224
+121 -157 13.068678 434 -1 751 681 237
+125 -155 13.068678 408 -1 681 -1 237
+133 -151 13.066998 365 512 -1 -1 232
+137 -149 13.066998 478 552 651 -1 221
+145 -145 13.065318 397 681 -1 651 224
+157 -139 13.065318 408 552 -1 -1 237
+165 -135 13.063638 494 574 681 -1 237
+169 -133 13.063638 478 574 -1 -1 237
+177 -129 13.063638 494 512 -1 -1 237
+181 -127 13.058598 494 434 408 -1 232
+189 -123 13.056918 397 421 -1 -1 245
+220 -105 13.033398 552 421 714 -1 245
+227 -101 13.028358 408 421 800 -1 245
+234 -97 13.023317 462 397 791 -1 228
+238 -95 13.019958 714 356 -1 -1 245
+246 -91 13.013237 447 375 -1 -1 250
+250 -89 13.009877 791 322 714 -1 255
+258 -85 13.008197 714 315 -1 -1 245
+262 -83 13.006516 347 356 800 -1 250
+270 -79 13.003157 386 307 800 -1 255
+274 -77 13.001476 137 315 -1 -1 250
+282 -73 12.986356 189 301 623 -1 260
+287 -71 12.907396 183 356 -1 -1 250
+289 -70 12.858677 -1 447 -1 -1 245
+292 -70 12.749477 597 356 -1 681 255
+295 -70 12.709158 -1 -1 494 -1 250
+303 -70 12.660439 -1 574 -1 -1 241
+307 -70 12.643639 751 -1 -1 -1 260
+315 -70 12.620119 -1 -1 -1 -1 276
+328 -70 12.605000 -1 -1 -1 -1 288
+332 -70 12.605000 -1 574 -1 -1 288
+340 -70 12.603319 -1 386 -1 800 294
+344 -70 12.603319 791 -1 597 -1 270
+353 -70 12.605000 552 -1 651 -1 294
+357 -70 12.605000 -1 421 -1 -1 307
+366 -70 12.606680 -1 356 -1 -1 294
+370 -70 12.605000 -1 800 -1 -1 301
+378 -70 12.606680 -1 421 -1 -1 315
+382 -70 12.606680 -1 651 574 681 315
+390 -70 12.601640 714 356 -1 -1 322
+394 -70 12.601640 462 186 494 -1 322
+403 -70 12.606679 478 250 -1 -1 315
+416 -70 12.630198 791 130 -1 -1 322
+421 -70 12.620118 356 115 800 -1 365
+430 -69 12.704118 270 -1 574 -1 315
+434 -68 12.757877 255 -1 681 -1 338
+446 -64 12.951077 574 -1 597 -1 347
+453 -60 13.088837 -1 112 213 -1 338
+457 -57 13.156036 -1 160 288 -1 397
+463 -53 13.260197 -1 265 162 800 408
+469 -47 13.255157 791 250 127 751 434
+474 -43 13.280356 365 140 -1 -1 356
+508 5 13.817956 301 307 -1 597 791
+510 17 13.985955 294 189 -1 681 -1
+511 25 14.071635 276 245 -1 -1 512
+510 43 14.249715 307 101 151 191 651
+472 107 14.975473 -1 294 250 102 -1
+458 117 15.113233 512 315 250 -1 -1
+451 121 15.182113 -1 294 237 -1 -1
+435 128 15.323232 -1 356 228 107 -1
+426 131 15.392112 -1 375 217 131 -1
+369 136 15.739872 -1 -1 217 -1 -1
+363 136 15.756672 -1 -1 213 -1 -1
+351 136 15.776832 -1 -1 217 110 -1
+345 136 15.788591 -1 -1 213 237 -1
+331 134 15.845712 -1 -1 213 260 -1
+324 133 15.864192 -1 791 217 245 -1
+311 131 15.886031 -1 -1 203 221 -1
+306 130 15.892751 -1 -1 213 224 -1
+296 128 15.896111 -1 494 213 217 -1
+276 123 15.882672 -1 651 186 217 -1
+271 122 15.886032 800 -1 189 144 -1
+257 119 15.948193 -1 330 194 203 -1
+249 117 15.988512 -1 494 203 186 -1
+233 111 16.094351 -1 -1 207 178 -1
+225 107 16.154831 -1 -1 250 171 -1
+211 99 16.232111 -1 -1 260 164 -1
+205 95 16.255630 -1 -1 307 160 -1
+194 88 16.285872 -1 -1 276 158 -1
+189 85 16.295952 -1 -1 315 158 -1
+180 79 16.307713 -1 -1 322 158 -1
+176 76 16.311073 -1 -1 347 160 -1
+168 71 16.309393 -1 -1 375 158 -1
+164 68 16.309393 -1 -1 365 160 -1
+157 63 16.311073 -1 -1 347 160 -1
+153 60 16.309393 -1 -1 330 160 -1
+145 54 16.312754 -1 -1 347 164 681
+142 52 16.312754 -1 -1 330 162 -1
+134 46 16.307713 -1 -1 338 164 -1
+130 43 16.311073 -1 -1 347 164 -1
+122 37 16.311073 -1 -1 375 164 -1
+118 34 16.312754 -1 -1 347 166 -1
+110 29 16.312754 -1 -1 397 166 -1
+103 25 16.309393 -1 -1 397 166 -1
+99 23 16.306032 -1 -1 397 171 -1
+95 21 16.304352 -1 -1 301 164 -1
+89 17 16.295952 791 800 356 171 -1
+83 13 16.289230 -1 -1 375 166 -1
+80 11 16.282511 751 -1 365 171 -1
+73 7 16.269072 -1 -1 365 171 -1
+69 5 16.270752 -1 -1 356 173 -1
+66 3 16.265713 751 -1 375 176 -1
+59 -1 16.258993 751 -1 375 173 -1
+55 -3 16.260674 597 -1 330 173 -1
+47 -7 16.255634 681 -1 322 173 -1
+43 -9 16.252274 623 -1 356 178 -1
+35 -13 16.257315 597 -1 375 173 -1
+27 -17 16.257315 651 714 365 178 -1
+23 -19 16.257315 531 -1 375 178 -1
+15 -23 16.255634 651 -1 347 173 -1
+11 -25 16.255634 531 -1 347 171 -1
+3 -29 16.252274 574 791 338 178 -1
+-1 -31 16.252274 552 574 338 178 -1
+-9 -35 16.248913 512 681 356 171 -1
+-13 -37 16.248913 597 574 307 181 -1
+-21 -41 16.247232 623 623 347 181 -1
+-25 -43 16.248913 531 714 356 173 -1
+-33 -47 16.243872 462 552 356 181 -1
+-41 -51 16.247232 512 623 288 183 -1
+-53 -57 16.248913 512 478 322 178 -1
+-65 -63 16.250593 462 512 322 183 -1
+-77 -69 16.248913 434 512 288 186 -1
+-80 -71 16.248913 408 512 288 186 -1
+-88 -75 16.245552 365 478 276 183 -1
+-96 -79 16.238831 408 462 265 178 -1
+-99 -81 16.233791 397 434 265 186 -1
+-106 -85 16.223711 375 447 265 186 -1
+-110 -87 16.220350 365 447 255 183 -1
+-117 -91 16.208591 330 386 265 186 -1
+-121 -93 16.203552 347 421 250 186 -1
+-129 -97 16.198511 338 421 255 186 -1
+-137 -101 16.191790 338 375 260 189 -1
+-141 -103 16.190109 315 397 241 186 -1
+-149 -107 16.191790 294 365 241 191 -1
+-153 -109 16.190109 288 338 228 194 462
+-161 -113 16.190109 288 338 221 194 -1
+-169 -117 16.188429 265 338 207 194 751
+-173 -119 16.190109 265 282 200 186 -1
+-182 -124 16.205229 260 294 186 191 751
+-188 -128 16.235468 245 276 178 194 -1
+-202 -138 16.322828 245 255 210 191 -1
+-216 -150 16.435387 237 241 681 191 -1
+-222 -156 16.492506 241 224 397 207 -1
+-292 -243 17.213223 531 140 104 156 -1
+-291 -257 17.426582 -1 200 105 421 -1
+-286 -272 17.606342 -1 228 102 301 -1
+-283 -280 17.692022 -1 288 111 245 -1
+-274 -295 17.858341 -1 356 110 186 -1
+-269 -302 17.933941 -1 800 129 166 597
+-257 -315 18.083460 -1 -1 145 152 -1
+-250 -321 18.155699 -1 -1 164 111 -1
+-192 -346 18.654657 -1 -1 447 120 338
+-183 -347 18.721857 -1 597 751 124 347
+-165 -348 18.861298 -1 -1 -1 129 315
+-156 -347 18.926817 -1 -1 -1 142 322
+-139 -344 19.062897 -1 -1 -1 160 301
+-123 -339 19.177135 -1 552 -1 178 301
+-116 -336 19.210735 -1 -1 -1 217 322
+-104 -331 19.252735 -1 -1 -1 245 282
+-99 -329 19.262815 -1 -1 -1 265 322
+-89 -325 19.271215 -1 -1 -1 276 338
+-85 -323 19.276255 714 -1 -1 315 338
+-77 -319 19.276255 -1 -1 -1 322 338
+-73 -317 19.274574 -1 -1 -1 315 338
+-65 -313 19.274574 408 -1 -1 347 338
+-57 -309 19.274574 -1 -1 800 356 338
+-53 -307 19.272894 -1 -1 -1 397 338
+-45 -303 19.272894 -1 -1 -1 365 338
+-41 -301 19.274574 -1 800 800 408 330
+-33 -297 19.274574 -1 -1 -1 434 338
+-29 -295 19.274574 -1 -1 -1 408 338
+-21 -291 19.274574 681 -1 597 478 338
+-9 -285 19.272894 -1 -1 681 462 347
+15 -273 19.261133 -1 -1 -1 681 322
+19 -271 19.259453 751 -1 -1 531 338
+27 -267 19.251053 681 -1 552 574 356
+35 -263 19.246012 681 -1 478 494 347
+38 -262 19.239292 -1 -1 -1 -1 338
+46 -259 19.235931 -1 -1 -1 800 347
+50 -258 19.230892 -1 -1 751 681 356
+58 -256 19.222492 -1 -1 -1 494 330
+62 -255 19.222492 -1 -1 791 512 338
+69 -253 19.214092 -1 -1 -1 791 347
+73 -252 19.210732 -1 -1 397 791 322
+81 -250 19.205690 -1 -1 552 -1 301
+85 -249 19.205690 -1 -1 -1 -1 347
+93 -247 19.202330 -1 -1 -1 -1 347
+97 -246 19.200649 -1 -1 -1 714 356
+105 -244 19.195608 -1 -1 -1 -1 347
+141 -234 19.185526 -1 751 597 751 365
+149 -231 19.185526 -1 -1 791 651 365
+153 -230 19.185526 -1 -1 800 494 347
+161 -227 19.188887 -1 714 -1 597 347
+169 -225 19.187206 421 -1 356 751 347
+173 -223 19.188887 791 751 651 751 365
+181 -221 19.187206 -1 574 -1 -1 365
+185 -219 19.188887 751 597 800 -1 365
+197 -216 19.185526 -1 531 386 -1 365
+205 -214 19.182165 478 512 -1 -1 365
+209 -213 19.180485 260 512 623 -1 365
+217 -211 19.175444 574 421 597 -1 365
+225 -209 19.173763 462 462 791 -1 375
+229 -208 19.168724 434 462 800 -1 365
+237 -206 19.165365 276 386 494 -1 365
+281 -195 18.970484 791 386 -1 -1 365
+287 -195 18.901604 -1 -1 -1 494 375
+299 -195 18.844482 -1 397 751 494 365
+307 -195 18.829361 -1 462 -1 800 397
+319 -195 18.820961 -1 800 -1 -1 397
+323 -195 18.819281 -1 714 -1 -1 397
+355 -195 18.814240 -1 365 -1 -1 408
+359 -195 18.812559 -1 -1 -1 -1 434
+367 -195 18.809198 -1 330 -1 -1 397
+372 -195 18.810879 -1 494 -1 -1 434
+386 -195 18.857918 494 270 -1 -1 408
+401 -195 18.913357 512 282 531 -1 434
+409 -194 18.941917 -1 136 386 -1 462
+422 -193 18.926798 -1 144 574 -1 462
+428 -193 18.909998 -1 117 -1 -1 447
+438 -192 18.982237 375 107 751 -1 462
+446 -190 19.098156 512 121 462 -1 397
+450 -189 19.161995 -1 140 494 -1 478
+458 -186 19.289675 -1 176 651 -1 512
+461 -184 19.335035 -1 -1 250 -1 494
+465 -182 19.316555 531 -1 322 651 574
+468 -181 19.304794 791 651 245 791 531
+474 -179 19.291355 386 356 224 -1 531
+481 -175 19.284634 623 338 255 681 494
+493 -169 19.276232 681 217 156 512 512
+524 -151 19.449272 512 -1 -1 791 512
+530 -147 19.521511 166 -1 -1 -1 651
+539 -138 19.679430 105 -1 -1 623 714
+543 -133 19.758390 531 101 -1 -1 -1
+548 -125 19.902868 434 228 -1 714 -1
+550 -120 19.978468 434 386 -1 338 -1
+554 -106 20.153187 462 494 -1 397 751
+554 -62 20.571505 397 512 -1 -1 -1
+552 -53 20.643744 531 386 191 -1 -1
+546 -36 20.784863 531 421 347 -1 -1
+542 -28 20.853743 -1 386 397 -1 -1
+534 -15 20.932701 -1 365 134 104 -1
+531 -9 20.957901 -1 408 -1 -1 -1
+522 4 21.031820 478 397 112 -1 -1
+517 11 21.078859 -1 365 250 -1 -1
+505 24 21.193100 -1 375 276 -1 -1
+498 30 21.258619 -1 408 294 -1 -1
+483 40 21.393019 -1 408 330 105 -1
+467 49 21.532459 -1 512 282 210 -1
+459 52 21.603020 -1 623 282 197 -1
+442 57 21.730700 -1 -1 245 245 714
+434 59 21.771019 -1 -1 288 462 -1
+421 61 21.819738 -1 -1 294 124 -1
+414 62 21.841578 160 -1 301 -1 -1
+388 64 21.969257 -1 531 294 260 -1
+371 63 22.068377 -1 315 315 260 -1
+363 62 22.100296 -1 -1 338 276 791
+349 60 22.143976 -1 -1 347 265 -1
+343 59 22.154057 -1 -1 347 255 -1
+297 48 22.147337 -1 -1 338 250 -1
+288 46 22.149017 -1 -1 338 245 -1
+284 45 22.150698 -1 -1 338 245 -1
+280 44 22.150698 791 -1 338 241 -1
+263 40 22.149017 -1 -1 322 245 -1
+259 39 22.145657 -1 -1 330 237 -1
+251 37 22.145657 623 -1 338 237 -1
+247 36 22.138937 -1 -1 330 232 -1
+238 34 22.137257 -1 -1 307 237 -1
+234 33 22.137257 -1 -1 315 232 -1
+225 31 22.132215 -1 -1 338 232 -1
+221 30 22.130535 -1 -1 294 232 -1
+212 28 22.133896 -1 -1 307 224 -1
+208 27 22.135576 -1 -1 315 228 -1
+162 16 22.135576 -1 -1 301 203 -1
+158 15 22.130537 800 -1 301 203 -1
+150 13 22.127176 714 -1 301 210 -1
+146 12 22.125496 751 -1 301 210 -1
+138 11 22.117096 791 -1 282 207 -1
+130 10 22.108696 714 -1 294 197 -1
+126 10 22.105335 574 -1 282 194 -1
+118 10 22.096935 651 -1 270 203 -1
+114 10 22.093575 623 -1 260 203 -1
+106 10 22.090214 574 -1 265 200 -1
+102 10 22.088533 651 -1 265 200 -1
+94 10 22.088533 574 -1 241 200 -1
+90 10 22.086853 651 -1 260 194 -1
+82 10 22.088533 597 -1 250 200 -1
+78 10 22.088533 478 -1 260 186 -1
+70 10 22.088533 494 -1 255 189 714
+66 10 22.086853 512 -1 241 189 574
+58 10 22.085173 574 800 250 189 -1
+54 10 22.083492 574 -1 260 178 -1
+45 10 22.081812 552 -1 250 181 751
+37 10 22.080132 531 -1 245 178 -1
+33 10 22.076771 512 -1 241 178 -1
+24 10 22.073410 531 -1 228 181 447
+20 10 22.073410 494 -1 241 178 -1
+11 10 22.073410 462 -1 232 176 -1
+7 10 22.075090 478 -1 237 178 751
+-80 10 22.044851 347 791 197 154 -1
+-88 10 22.036451 322 651 200 154 -1
+-96 10 22.031410 356 552 186 147 -1
+-101 10 22.038130 356 800 191 151 -1
+-116 8 22.105330 356 574 194 142 -1
+-124 7 22.152369 322 478 217 140 478
+-139 4 22.217888 315 397 228 136 -1
+-179 -12 22.496765 307 276 158 126 -1
+-187 -17 22.567326 330 270 224 134 -1
+-202 -29 22.713484 338 282 434 142 -1
+-208 -36 22.784044 397 255 330 151 651
+-219 -50 22.926844 397 255 301 181 -1
+-224 -58 22.999083 397 260 241 200 791
+-232 -74 23.138523 791 260 224 224 -1
+-237 -90 23.276283 -1 265 213 250 -1
+-241 -124 23.548443 -1 338 186 681 -1
+-240 -142 23.682842 -1 397 183 347 681
+-236 -159 23.822283 -1 434 186 315 -1
+-233 -167 23.887802 -1 623 189 282 -1
+-220 -192 24.099483 -1 -1 213 207 -1
+-205 -212 24.267483 751 -1 255 194 478
+-195 -222 24.317883 -1 -1 301 186 651
+-186 -231 24.346443 -1 -1 294 189 597
+-182 -235 24.354843 -1 -1 322 181 597
+-175 -242 24.361563 -1 -1 322 183 531
+-157 -260 24.356524 597 -1 315 181 751
+-151 -266 24.351484 478 -1 330 181 -1
+-148 -269 24.351484 -1 -1 322 181 -1
+-142 -275 24.344765 -1 -1 330 181 -1
+-139 -278 24.343084 -1 -1 330 178 751
+-133 -284 24.334684 -1 -1 315 181 -1
+-130 -287 24.331324 651 -1 237 181 -1
+-124 -293 24.326283 447 -1 288 183 623
+-118 -299 24.321241 -1 -1 301 181 -1
+-115 -302 24.317881 -1 -1 307 181 681
+-109 -308 24.314520 681 -1 301 181 -1
+-106 -311 24.311159 -1 -1 288 173 -1
+-100 -317 24.311159 -1 -1 307 178 -1
+-97 -320 24.307798 -1 -1 294 176 -1
+-91 -326 24.307798 -1 -1 294 173 -1
+-82 -335 24.304438 -1 -1 322 178 -1
+-79 -338 24.304438 -1 -1 301 178 -1
+-73 -344 24.301077 -1 -1 294 178 -1
+-70 -347 24.302757 -1 -1 294 178 -1
+-64 -353 24.301077 -1 -1 301 173 -1
+-61 -356 24.301077 -1 -1 307 171 -1
+-55 -362 24.304438 -1 -1 301 171 -1
+-52 -365 24.302757 494 -1 288 169 -1
+-46 -371 24.304438 -1 -1 294 173 -1
+-40 -377 24.304438 681 -1 294 171 -1
+-37 -380 24.304438 -1 -1 301 171 -1
+-31 -386 24.306118 -1 -1 307 171 -1
+-28 -389 24.306118 -1 -1 294 171 -1
+-4 -413 24.296036 -1 -1 294 169 751
+-1 -416 24.296036 -1 -1 288 166 623
+5 -422 24.292675 -1 -1 301 169 714
+8 -425 24.289314 -1 -1 294 166 241
+14 -431 24.284273 -1 -1 270 164 494
+17 -434 24.277554 -1 -1 282 169 -1
+22 -440 24.274195 -1 -1 282 166 338
+25 -443 24.270834 -1 -1 265 166 375
+64 -482 24.248991 -1 -1 282 164 447
+67 -485 24.250671 -1 791 260 158 597
+73 -491 24.247311 751 681 245 156 552
+76 -494 24.247311 -1 623 265 162 250
+82 -500 24.247311 597 800 265 162 -1
+88 -506 24.245630 -1 -1 260 160 597
+91 -509 24.247311 -1 574 250 156 -1
+97 -515 24.247311 -1 552 232 160 -1
+100 -518 24.245630 -1 552 241 162 -1
+106 -524 24.247311 -1 651 245 158 -1
+109 -527 24.248991 -1 597 228 158 751
+115 -533 24.247311 751 574 228 158 397
+118 -536 24.248991 531 552 207 162 -1
+124 -542 24.247311 -1 512 203 156 -1
+130 -548 24.245630 -1 574 197 144 651
+143 -563 24.302750 714 552 301 149 681
+147 -568 24.321230 -1 462 315 152 408
+155 -576 24.339710 434 574 307 156 375
+161 -582 24.343071 -1 574 260 156 552
+164 -585 24.341391 -1 512 276 158 800
+170 -591 24.338030 751 462 276 156 -1
+173 -594 24.334669 -1 421 255 162 751
+179 -600 24.329628 -1 462 250 160 -1
+185 -606 24.321228 -1 462 241 162 791
+188 -609 24.319548 681 434 228 164 397
+194 -615 24.312826 408 386 224 162 -1
+197 -618 24.309465 -1 397 221 158 -1
+203 -624 24.304424 -1 397 194 164 -1
+206 -627 24.307785 -1 365 194 160 623
+244 -659 24.544666 681 447 181 166 494
+260 -667 24.674026 791 531 186 178 597
+268 -670 24.742907 -1 -1 197 171 -1
+286 -675 24.889065 -1 -1 203 194 -1
+295 -677 24.959625 -1 -1 241 203 -1
+310 -679 25.036905 -1 -1 282 191 -1
+317 -679 25.063786 -1 -1 288 183 -1
+329 -679 25.097385 597 -1 294 181 -1
+334 -679 25.102425 -1 531 307 181 -1
+344 -679 25.110825 -1 -1 301 178 -1
+348 -679 25.110825 -1 800 347 171 -1
+356 -679 25.107464 -1 -1 294 171 -1
+380 -679 25.088982 -1 -1 282 178 -1
+388 -679 25.083941 -1 597 301 178 -1
+392 -679 25.085621 -1 623 265 178 -1
+400 -679 25.080582 -1 -1 294 173 -1
+404 -679 25.077221 751 512 282 173 -1
+412 -679 25.075541 -1 651 301 173 -1
+416 -679 25.075541 -1 751 288 169 -1
+424 -679 25.072180 -1 307 288 173 -1
+428 -679 25.068819 -1 434 294 173 -1
+436 -679 25.068819 -1 478 288 173 -1
+445 -679 25.070499 -1 338 270 173 -1
+450 -679 25.077219 531 347 270 173 -1
+464 -679 25.130980 -1 270 322 162 -1
+471 -679 25.152819 597 260 375 171 -1
+487 -678 25.231779 -1 315 -1 169 -1
+496 -677 25.283859 -1 315 -1 171 -1
+513 -673 25.398100 574 714 -1 171 -1
+528 -669 25.461939 -1 494 -1 178 -1
+534 -667 25.482100 -1 -1 -1 181 -1
+545 -663 25.505619 -1 -1 147 178 -1
+550 -661 25.512339 -1 -1 189 181 -1
+560 -656 25.534180 260 552 288 197 -1
+566 -653 25.561060 -1 791 173 203 -1
+578 -647 25.603060 -1 651 129 210 -1
+592 -639 25.687059 -1 531 119 210 -1
+599 -634 25.734098 597 751 125 241 -1
+630 -603 26.060017 -1 -1 142 -1 -1
+635 -596 26.130577 -1 574 228 -1 -1
+643 -580 26.253216 -1 651 203 597 -1
+646 -573 26.296896 -1 651 194 800 -1
+652 -559 26.359055 -1 552 171 421 -1
+656 -542 26.453135 -1 237 183 224 -1
+658 -533 26.506895 791 207 221 164 -1
+660 -515 26.636255 -1 307 191 107 -1
+660 -506 26.705135 -1 -1 338 108 -1
+658 -488 26.842896 -1 -1 531 111 751
+656 -479 26.913456 -1 -1 574 127 -1
+651 -463 27.047855 -1 -1 623 191 531
+644 -448 27.163774 -1 -1 217 178 512
+641 -442 27.195694 -1 -1 178 154 375
+634 -430 27.251133 -1 -1 288 200 531
+630 -423 27.288094 -1 -1 -1 191 597
+622 -411 27.345213 -1 -1 -1 217 -1
+618 -406 27.358652 -1 -1 -1 347 -1
+611 -397 27.382172 -1 -1 -1 288 -1
+608 -393 27.383852 -1 -1 -1 347 -1
+602 -386 27.392252 -1 -1 -1 221 651
+599 -383 27.392252 -1 -1 -1 365 791
+593 -377 27.392252 -1 -1 -1 315 -1
+590 -374 27.392252 -1 -1 651 447 751
+584 -368 27.392252 -1 -1 -1 478 751
+578 -362 27.390572 -1 -1 -1 478 751
+575 -358 27.393932 -1 -1 -1 597 714
+569 -352 27.392252 -1 -1 -1 651 462
+566 -349 27.392252 -1 -1 -1 681 531
+560 -343 27.390572 -1 -1 -1 531 531
+557 -339 27.395611 -1 -1 -1 356 597
+551 -332 27.397291 -1 -1 800 751 531
+548 -329 27.397291 -1 -1 800 791 574
+542 -322 27.398972 -1 -1 -1 531 597
+539 -319 27.398972 -1 -1 791 -1 512
+533 -313 27.398972 -1 -1 751 462 512
+527 -307 27.393930 -1 -1 -1 714 651
+524 -304 27.393930 -1 -1 681 478 623
+519 -298 27.387211 -1 -1 681 397 574
+517 -295 27.380491 -1 -1 714 597 681
+513 -289 27.373772 -1 -1 714 -1 681
+511 -286 27.368732 -1 -1 791 597 494
+505 -280 27.368732 -1 -1 791 -1 462
+502 -277 27.365372 -1 -1 714 -1 681
+496 -271 27.360331 -1 -1 597 -1 681
+494 -268 27.360331 -1 -1 597 597 751
+489 -261 27.362011 -1 -1 597 494 597
+486 -257 27.360331 -1 -1 574 681 651
+480 -250 27.363691 -1 -1 597 -1 681
+474 -243 27.365372 -1 -1 531 -1 623
+471 -240 27.365372 -1 751 552 -1 714
+409 -166 27.372093 -1 -1 447 462 800
+403 -159 27.375454 -1 714 462 -1 681
+397 -152 27.377134 -1 -1 447 -1 -1
+394 -148 27.378815 -1 -1 447 478 800
+388 -142 27.375456 -1 791 397 322 800
+385 -139 27.378817 -1 -1 421 -1 -1
+361 -109 27.350258 -1 714 397 347 681
+359 -106 27.350258 -1 651 356 447 597
+353 -100 27.343538 -1 531 347 434 791
+350 -96 27.346899 -1 574 347 307 714
+344 -88 27.351940 -1 434 330 250 800
+338 -80 27.355299 -1 531 330 200 651
+335 -77 27.353619 -1 531 322 245 800
+330 -70 27.356979 -1 421 315 171 681
+327 -66 27.358660 -1 434 301 237 791
+321 -59 27.358660 -1 421 288 365 -1
+318 -56 27.358660 -1 462 265 365 751
+312 -49 27.360340 -1 462 282 597 714
+309 -45 27.363701 -1 462 270 -1 651
+303 -38 27.360340 791 434 255 751 714
+297 -30 27.362020 -1 434 255 -1 791
+285 -15 27.365381 -1 397 232 751 751
+276 -3 27.368742 -1 356 207 681 751
+270 5 27.370422 -1 365 200 597 800
+263 14 27.395622 -1 356 197 623 800
+242 35 27.524982 -1 315 178 322 -1
+229 45 27.619062 -1 365 169 322 -1
+222 50 27.677862 751 421 173 260 -1
+207 58 27.803862 651 375 183 217 -1
+191 64 27.939941 597 217 166 217 -1
+182 66 28.010502 531 -1 203 181 -1
+164 69 28.151621 574 -1 228 183 -1
+155 69 28.222181 574 -1 265 171 -1
+137 68 28.363300 597 714 330 160 -1
+128 67 28.432180 531 597 307 169 -1
+32 29 28.739616 531 447 623 224 -1
+29 27 28.739616 574 421 623 224 -1
+21 23 28.732897 552 386 623 232 -1
+15 19 28.731216 478 365 447 237 -1
+11 17 28.729536 421 375 531 237 -1
+3 13 28.727856 494 365 531 245 512
+-1 11 28.724495 338 356 494 250 -1
+-9 7 28.722815 434 356 462 255 -1
+-13 5 28.722815 478 307 447 245 -1
+-21 1 28.726175 356 315 421 265 -1
+-25 -1 28.721136 421 294 365 276 -1
+-34 -5 28.674095 375 294 421 270 -1
+-40 -8 28.677456 356 276 397 265 -1
+-51 -12 28.640495 307 255 397 282 -1
+-60 -15 28.574976 307 213 386 294 -1
+-64 -16 28.538015 260 213 386 288 -1
+-70 -18 28.445616 213 207 434 282 -1
+-72 -18 28.388496 210 197 512 294 -1
+-84 -14 27.566978 131 714 265 347 232
+-84 -14 27.424179 137 462 255 397 210
+-84 -14 27.350260 152 217 250 494 169
+-84 -14 27.205780 164 232 221 681 160
+-84 -14 27.133541 191 307 213 -1 125
+-84 -14 26.994101 250 288 203 -1 152
+-84 -13 26.933620 421 265 203 -1 139
+-86 -2 26.888260 574 221 189 -1 139
+-87 3 26.858021 255 207 181 -1 136
+-87 11 26.774021 169 186 173 375 139
+-87 18 26.688341 166 169 162 791 144
+-87 22 26.654741 207 137 158 -1 147
+-87 30 26.634581 217 127 149 -1 154
+-87 35 26.676580 197 121 139 -1 158
+-87 43 26.787460 200 118 119 -1 156
+-105 81 27.362020 183 217 106 301 200
+-111 87 27.447701 160 210 105 224 210
+-239 154 28.101215 -1 -1 131 -1 315
+-243 154 28.170095 -1 -1 126 -1 447
+-252 154 28.301134 -1 -1 120 -1 574
+-256 154 28.368334 -1 -1 217 -1 597
+-264 152 28.502733 -1 -1 145 -1 681
+-269 151 28.576653 -1 -1 117 -1 -1
+-277 148 28.709373 -1 -1 -1 -1 -1
+-310 104 29.630007 -1 136 -1 276 -1
+-311 100 29.695526 -1 197 -1 203 -1
+-311 90 29.846725 -1 245 -1 169 -1
+-310 83 29.934086 -1 322 -1 127 301
+-307 67 30.098724 478 -1 -1 114 197
+-304 59 30.184404 751 -1 102 103 130
+-296 44 30.312084 -1 -1 133 -1 129
+-293 38 30.322165 -1 -1 147 -1 142
+-288 27 30.293606 -1 -1 149 -1 158
+-286 22 30.270086 -1 -1 139 -1 176
+-280 9 30.265047 478 -1 134 -1 224
+-264 -22 30.367527 -1 -1 166 -1 255
+-254 -37 30.449846 751 -1 191 -1 176
+-243 -51 30.548965 -1 -1 265 -1 241
+-237 -58 30.606085 -1 -1 322 -1 186
+-224 -70 30.727043 -1 -1 494 -1 224
+-217 -75 30.794243 681 -1 681 -1 224
+-202 -84 30.930323 597 -1 -1 -1 228
+-194 -88 31.000883 -1 -1 -1 -1 221
+-178 -93 31.135283 -1 -1 -1 106 232
+-170 -95 31.204163 -1 791 -1 147 232
+-152 -97 31.340242 531 -1 751 176 245
+-144 -97 31.404081 347 -1 -1 221 260
+-129 -97 31.483042 276 -1 681 265 265
+-122 -96 31.504881 282 -1 -1 365 270
+-110 -94 31.535122 288 -1 447 434 270
+-100 -92 31.548561 282 447 -1 478 276
+-95 -91 31.553600 276 512 651 -1 265
+-85 -89 31.558641 260 -1 -1 574 270
+-81 -88 31.558641 265 512 -1 -1 276
+-72 -86 31.562002 245 -1 -1 623 276
+-68 -85 31.560322 260 651 531 -1 276
+-60 -83 31.563683 260 397 315 681 276
+-56 -82 31.562002 260 800 681 -1 265
+-48 -80 31.562002 250 -1 -1 -1 265
+-44 -79 31.556963 250 -1 -1 -1 265
+-36 -77 31.551924 245 -1 751 -1 260
+-28 -76 31.545204 241 408 -1 681 265
+-24 -75 31.541843 245 623 651 791 250
+-16 -75 31.533443 245 -1 681 -1 250
+-12 -75 31.525043 232 434 408 -1 250
+-4 -75 31.520004 245 651 681 651 250
+0 -75 31.513285 245 386 681 -1 245
+8 -75 31.506565 232 282 714 791 245
+12 -75 31.508245 228 -1 -1 -1 224
+20 -75 31.506565 221 574 -1 478 237
+24 -75 31.506565 221 -1 791 714 237
+32 -75 31.504885 213 462 365 800 237
+40 -75 31.504885 224 -1 623 751 232
+44 -75 31.504885 228 574 -1 -1 232
+53 -75 31.504885 221 751 552 -1 232
+127 -75 31.363768 207 -1 386 -1 197
+136 -75 31.365448 228 -1 681 -1 194
+140 -75 31.363768 221 -1 714 -1 194
+149 -75 31.365448 210 -1 -1 -1 197
+153 -75 31.363768 217 -1 -1 -1 189
+162 -75 31.360407 217 -1 651 -1 191
+166 -75 31.360407 217 -1 -1 -1 191
+174 -75 31.353687 217 -1 462 -1 191
+290 -77 31.296568 207 751 -1 -1 176
+294 -78 31.299929 200 -1 -1 -1 176
+370 -95 30.995848 221 434 -1 -1 145
+373 -97 30.900087 315 478 -1 -1 156
+374 -98 30.770727 356 574 -1 -1 152
+374 -98 30.706888 462 270 -1 -1 156
+377 -100 30.604408 -1 -1 -1 -1 178
+378 -101 30.542248 408 -1 -1 -1 173
+378 -101 30.401129 213 714 -1 -1 189
+378 -101 30.333929 191 -1 -1 -1 203
+380 -105 30.234808 191 800 -1 -1 224
+380 -106 30.181047 210 -1 -1 -1 250
+382 -111 30.107128 136 -1 -1 -1 189
+383 -114 30.076889 221 -1 -1 -1 110
+383 -117 29.979448 597 -1 -1 -1 142
+383 -118 29.915609 800 -1 -1 -1 623
+383 -119 29.784569 -1 -1 -1 -1 -1
+383 -121 29.735849 -1 -1 -1 -1 -1
+382 -127 29.670330 800 -1 -1 -1 386
+381 -131 29.648491 -1 800 -1 -1 512
+376 -151 29.593052 -1 -1 751 -1 322
+371 -171 29.582970 -1 791 800 -1 276
+370 -175 29.581289 -1 -1 -1 -1 301
+368 -183 29.577929 434 -1 -1 -1 315
+367 -187 29.572889 -1 -1 -1 -1 294
+365 -195 29.572889 -1 -1 -1 -1 294
+364 -199 29.572889 791 -1 552 -1 315
+362 -207 29.569529 -1 -1 -1 -1 282
+361 -211 29.566168 -1 -1 -1 -1 322
+359 -219 29.564487 -1 -1 714 -1 301
+358 -223 29.564487 651 -1 -1 -1 322
+356 -231 29.562807 -1 751 800 -1 330
+355 -235 29.564487 -1 -1 462 -1 322
+353 -243 29.564487 -1 791 -1 -1 307
+352 -247 29.564487 -1 800 462 -1 322
+350 -255 29.566168 -1 -1 -1 -1 322
+344 -279 29.564487 -1 681 -1 -1 408
+342 -287 29.562807 -1 800 -1 -1 512
+341 -291 29.561127 -1 -1 -1 -1 375
+339 -299 29.556087 -1 791 -1 -1 365
+338 -303 29.556087 -1 -1 -1 -1 462
+336 -311 29.549366 447 -1 -1 -1 282
+314 -391 29.498964 791 714 623 -1 260
+313 -395 29.497284 531 574 681 -1 260
+310 -403 29.495604 -1 800 681 -1 245
+308 -407 29.492243 -1 623 623 -1 232
+305 -415 29.493923 531 714 623 -1 260
+304 -419 29.493923 -1 574 681 -1 255
+302 -427 29.492243 751 552 531 791 260
+299 -435 29.492243 -1 597 531 -1 260
+298 -439 29.492243 -1 531 512 -1 250
+295 -447 29.493923 -1 552 552 -1 250
+294 -451 29.492243 -1 574 512 -1 265
+290 -459 29.492243 276 531 494 -1 245
+288 -463 29.495604 -1 478 462 -1 245
+277 -491 29.492243 -1 462 447 -1 255
+276 -495 29.488882 -1 434 434 -1 270
+272 -503 29.485521 307 421 447 -1 282
+271 -507 29.485521 -1 421 386 -1 260
+268 -515 29.480480 -1 408 375 800 288
+267 -519 29.473761 -1 375 375 651 294
+264 -527 29.473761 791 386 347 -1 282
+262 -535 29.468719 -1 356 365 -1 245
+261 -539 29.463680 -1 356 347 -1 255
+258 -547 29.456959 512 322 330 -1 260
+246 -579 29.527517 -1 294 270 681 -1
+242 -592 29.562798 -1 282 255 751 574
+240 -600 29.596397 791 270 232 651 -1
+237 -617 29.692156 397 270 207 494 651
+236 -635 29.811434 494 288 194 447 478
+236 -644 29.870234 142 282 191 408 -1
+238 -661 30.002953 115 347 181 494 751
+240 -669 30.044952 -1 -1 176 408 791
+244 -683 30.097033 -1 -1 164 347 800
+248 -695 30.127272 -1 -1 160 338 365
+249 -700 30.130632 -1 -1 154 322 751
+251 -709 30.137352 -1 574 147 294 -1
+252 -714 30.140713 -1 -1 142 294 -1
+254 -722 30.142393 -1 375 134 250 574
+255 -726 30.139032 -1 434 130 265 -1
+257 -734 30.135672 -1 245 122 270 791
+258 -738 30.133991 -1 154 115 255 307
+263 -758 30.117189 -1 114 -1 237 -1
+265 -766 30.132309 -1 102 -1 224 -1
+266 -770 30.175989 -1 -1 -1 200 651
+269 -778 30.291908 -1 -1 -1 186 386
+271 -781 30.355747 -1 -1 -1 178 -1
+275 -787 30.481747 -1 -1 113 154 434
+278 -790 30.545586 -1 -1 152 140 375
+284 -796 30.679985 124 -1 -1 136 270
+319 -811 31.279741 651 112 -1 111 -1
+328 -811 31.414141 -1 171 -1 114 -1
+332 -811 31.486380 421 183 -1 118 -1
+347 -808 31.659418 330 -1 -1 136 -1
+355 -805 31.746778 294 -1 -1 189 751
+386 -784 32.190296 -1 462 255 -1 -1
+396 -772 32.333096 -1 322 145 -1 -1
+408 -751 32.494373 -1 265 -1 -1 751
+412 -743 32.559895 -1 -1 102 -1 -1
+417 -727 32.694294 651 -1 166 -1 494
+419 -719 32.759815 -1 -1 265 -1 791
+421 -701 32.895893 -1 -1 347 -1 478
+421 -692 32.963093 -1 -1 250 156 365
+420 -674 33.104214 -1 -1 183 221 315
+416 -657 33.238613 -1 -1 -1 171 250
+413 -648 33.310852 -1 -1 -1 -1 250
+406 -632 33.450291 -1 -1 -1 -1 245
+402 -624 33.520851 681 -1 -1 115 232
+391 -609 33.665329 681 -1 -1 322 232
+385 -602 33.735889 494 -1 714 574 228
+372 -591 33.851807 494 -1 241 597 228
+366 -586 33.861885 421 -1 -1 623 250
+357 -577 33.833324 478 -1 -1 597 237
+349 -570 33.776203 462 -1 -1 651 241
+346 -567 33.734203 408 -1 -1 478 241
+342 -563 33.641804 531 -1 -1 265 260
+341 -561 33.588043 552 -1 -1 -1 260
+340 -559 33.462044 -1 -1 -1 512 282
+340 -559 33.389805 -1 -1 -1 800 315
+340 -559 33.248684 -1 751 -1 -1 315
+340 -559 33.176445 -1 -1 -1 365 347
+340 -554 33.077324 -1 -1 -1 -1 462
+340 -519 32.947964 -1 -1 -1 -1 434
+340 -511 32.941246 -1 -1 -1 478 397
+340 -507 32.941246 -1 -1 -1 -1 447
+340 -498 32.937889 -1 -1 -1 597 434
+340 -493 32.939568 -1 -1 -1 -1 447
+340 -484 32.937885 -1 -1 -1 791 512
+340 -446 32.932850 -1 -1 -1 347 574
+340 -442 32.931171 -1 -1 -1 -1 574
+340 -434 32.931171 -1 -1 -1 681 552
+340 -429 32.932850 -1 -1 -1 -1 552
+340 -420 32.936211 -1 -1 -1 -1 574
+340 -416 32.934532 -1 -1 -1 597 462
+340 -407 32.936214 -1 -1 -1 -1 574
+340 -402 32.937893 -1 -1 -1 531 512
+340 -392 32.939575 -1 -1 -1 531 574
+340 -388 32.939575 -1 -1 800 -1 574
+340 -380 32.939575 -1 -1 681 -1 531
+340 -376 32.936214 -1 -1 800 791 597
+340 -367 32.934536 -1 -1 791 -1 574
+340 -359 32.931175 -1 -1 -1 -1 574
+340 -355 32.927814 -1 -1 791 -1 597
+340 -347 32.926136 -1 -1 791 651 597
+340 -343 32.922775 -1 -1 681 -1 574
+340 -335 32.917736 -1 -1 597 651 597
+340 -331 32.916058 -1 -1 681 751 531
+340 -319 32.904297 -1 -1 681 -1 574
+340 -311 32.897579 -1 -1 751 -1 574
+340 -279 32.882458 -1 751 531 -1 651
+340 -267 32.877419 681 651 574 -1 531
+340 -255 32.875740 478 681 531 791 574
+340 -251 32.875740 681 597 462 800 681
+340 -243 32.874062 574 791 552 751 714
+341 -235 32.875744 800 651 478 -1 651
+341 -231 32.874065 421 623 447 651 714
+356 -93 32.833744 447 322 241 -1 751
+357 -89 32.833744 531 315 241 478 681
+359 -81 32.827023 462 307 237 -1 574
+361 -73 32.830383 365 294 232 791 751
+362 -68 32.833744 421 288 217 375 574
+363 -26 33.050461 447 288 164 651 -1
+360 -8 33.178143 -1 294 171 552 -1
+358 1 33.250381 -1 288 171 397 -1
+347 26 33.465420 -1 421 173 265 -1
+337 41 33.608219 -1 462 183 241 -1
+331 48 33.678780 623 250 186 221 -1
+318 60 33.816536 681 -1 197 181 -1
+250 97 34.147491 597 751 322 166 -1
+242 101 34.147491 478 574 330 171 -1
+230 107 34.147491 552 681 347 181 -1
+222 111 34.149170 512 623 330 173 -1
+218 113 34.145809 531 651 315 178 -1
+210 117 34.142448 494 623 322 183 -1
+206 119 34.144127 478 574 315 181 -1
+198 123 34.140770 512 531 265 183 -1
+190 127 34.139088 494 574 270 183 -1
+186 129 34.142448 434 478 255 189 -1
+178 133 34.140766 512 512 237 189 -1
+174 135 34.142445 462 512 245 189 -1
+157 143 34.149162 408 494 203 189 -1
+141 151 34.147480 386 434 194 189 -1
+131 155 34.164280 397 386 194 194 -1
+124 158 34.194519 356 375 186 200 -1
+108 163 34.280197 397 386 681 207 -1
+92 166 34.374279 408 330 -1 207 -1
+85 167 34.397800 386 347 574 207 -1
+72 169 34.433083 397 330 494 221 -1
+66 170 34.444843 375 322 462 232 -1
+56 171 34.453243 375 288 397 228 -1
+51 172 34.456604 356 276 365 241 -1
+44 173 34.392761 356 270 397 245 -1
+39 175 34.293640 282 241 397 224 -1
+37 176 34.236519 265 241 512 241 -1
+14 198 33.623318 140 255 260 260 397
+13 200 33.574596 134 260 260 250 330
+11 203 33.458679 130 356 245 282 276
+11 204 33.322601 129 714 213 301 224
+11 204 33.250362 136 447 200 315 221
+11 205 33.121002 147 181 186 365 194
+11 208 33.077324 166 228 173 397 169
+11 215 33.020206 160 228 162 397 160
+11 224 32.988289 171 250 152 408 162
+11 228 32.978210 171 232 139 408 158
+11 264 32.964771 169 181 103 330 151
+11 277 32.961414 169 162 -1 315 147
+11 307 33.052135 151 136 -1 250 154
+7 323 33.228535 113 137 -1 169 186
+5 331 33.250374 112 134 -1 162 186
+-3 349 33.502373 -1 330 -1 120 245
+-5 353 33.515812 -1 245 -1 114 250
+-11 364 33.524212 -1 207 -1 108 245
+-36 406 33.705654 -1 -1 -1 -1 245
+-39 409 33.767815 -1 -1 -1 -1 288
+-46 415 33.902214 -1 -1 110 -1 408
+-50 417 33.967735 -1 -1 105 -1 651
+-58 421 34.103813 -1 -1 130 -1 651
+-62 423 34.174374 -1 -1 147 -1 751
+-71 425 34.315495 -1 -1 108 -1 -1
+-75 426 34.382694 -1 -1 -1 -1 -1
+-84 426 34.525494 104 -1 -1 -1 -1
+-89 426 34.599415 122 -1 -1 -1 -1
+-120 415 35.140369 552 -1 -1 119 -1
+-123 413 35.204208 -1 101 -1 117 -1
+-129 407 35.328529 -1 121 -1 217 751
+-132 404 35.390690 -1 166 -1 210 -1
+-137 398 35.513329 -1 200 -1 178 751
+-142 389 35.656128 -1 260 -1 129 203
+-145 382 35.733406 512 330 -1 111 160
+-149 367 35.896362 -1 751 -1 102 124
+-150 359 35.965240 751 -1 101 -1 103
+-152 346 35.990440 -1 -1 108 -1 112
+-153 340 35.971962 -1 -1 110 -1 137
+-155 331 35.914841 623 -1 -1 -1 164
+-158 321 35.864441 -1 462 -1 -1 183
+-160 314 35.856041 651 -1 -1 -1 282
+-164 301 35.830841 -1 -1 -1 -1 322
+-166 293 35.834202 -1 751 -1 -1 365
+-170 276 35.871162 651 -1 -1 -1 478
+-176 240 36.019005 -1 -1 -1 -1 347
+-177 222 36.119804 714 -1 -1 -1 338
+-177 213 36.176926 597 -1 118 -1 288
+-174 195 36.301243 -1 -1 183 -1 294
+-172 186 36.366764 -1 -1 276 -1 270
+-153 147 36.704441 -1 -1 -1 -1 260
+-148 140 36.773319 -1 -1 -1 -1 270
+-136 127 36.909397 597 -1 -1 -1 255
+-122 116 37.047157 651 -1 -1 -1 276
+-115 111 37.114357 494 -1 -1 117 294
+-99 103 37.253796 397 -1 651 194 301
+-69 93 37.426834 265 -1 -1 -1 315
+-57 90 37.460434 260 751 322 -1 330
+-52 89 37.468834 270 -1 800 651 322
+-42 87 37.478916 265 -1 800 -1 322
+-33 85 37.480598 250 -1 800 -1 322
+-29 84 37.482277 250 -1 623 751 330
+-21 82 37.478920 245 -1 714 574 315
+-17 81 37.475559 228 -1 -1 -1 315
+-9 79 37.472198 245 -1 447 -1 315
+-5 78 37.470520 245 -1 597 -1 301
+3 76 37.463802 241 -1 447 -1 315
+7 75 37.460442 232 -1 800 -1 301
+15 73 37.450363 232 -1 -1 -1 301
+19 72 37.447002 232 -1 791 -1 294
+27 70 37.438602 224 -1 -1 -1 288
+31 69 37.435242 221 -1 356 -1 294
+39 67 37.431885 221 751 751 -1 282
+43 66 37.430206 213 -1 -1 -1 282
+51 64 37.426846 210 -1 714 -1 288
+55 63 37.426846 213 -1 714 -1 288
+64 61 37.426846 207 -1 574 -1 276
+68 60 37.426846 197 -1 751 -1 276
+78 57 37.369728 197 -1 462 -1 270
+84 55 37.307568 200 -1 -1 -1 245
+87 54 37.265568 213 330 -1 -1 217
+93 50 37.203411 221 447 751 -1 224
+97 48 37.188290 224 -1 800 -1 213
+105 44 37.159733 221 -1 714 623 207
+109 42 37.151333 232 -1 531 434 210
+149 22 37.139576 224 -1 -1 -1 200
+153 20 37.141254 210 -1 597 552 197
+165 14 37.141258 213 -1 494 -1 200
+172 10 37.139576 210 478 -1 -1 191
+176 8 37.136215 203 -1 -1 -1 191
+211 -16 36.991737 224 -1 552 -1 171
+217 -22 36.981655 250 -1 -1 751 178
+220 -24 36.974934 250 800 681 -1 176
+226 -30 36.966534 260 800 -1 800 176
+229 -33 36.961494 260 751 791 386 178
+235 -39 36.956455 250 751 -1 -1 178
+250 -54 36.946377 260 651 -1 -1 171
+253 -57 36.946377 260 651 714 -1 166
+268 -72 36.944698 255 574 681 -1 169
+271 -75 36.944698 265 574 434 -1 181
+301 -105 36.939663 260 531 -1 -1 178
+310 -114 36.937984 245 512 623 -1 183
+316 -120 36.939663 255 512 800 -1 183
+319 -123 36.939663 260 478 800 -1 183
+328 -132 36.936306 250 421 800 -1 181
+334 -138 36.937984 260 462 -1 -1 183
+352 -156 36.934628 265 386 651 -1 183
+373 -177 36.911102 270 315 307 -1 183
+376 -180 36.906063 265 294 434 -1 183
+381 -186 36.879185 276 307 -1 -1 178
+383 -188 36.838863 224 221 -1 -1 176
+387 -193 36.778385 -1 200 -1 -1 171
+389 -196 36.677586 224 194 152 -1 164
+390 -197 36.617107 -1 183 -1 -1 171
+390 -197 36.479347 -1 434 -1 800 171
+390 -197 36.407108 276 -1 408 -1 164
+390 -197 36.267670 237 -1 -1 -1 183
+390 -197 36.197109 173 -1 -1 -1 183
+390 -197 36.052631 149 -1 -1 -1 217
+390 -197 35.982071 120 531 -1 -1 255
+390 -197 35.842632 108 -1 -1 -1 183
+390 -197 35.768711 151 -1 -1 -1 169
+390 -197 35.632633 434 -1 -1 -1 512
+390 -197 35.560394 250 -1 -1 -1 347
+317 -272 35.348721 375 -1 -1 -1 307
+305 -284 35.348721 651 -1 -1 -1 250
+302 -287 35.348721 791 478 -1 -1 294
+296 -293 35.347042 494 -1 -1 -1 288
+293 -296 35.345364 356 -1 -1 -1 265
+287 -302 35.342003 322 531 -1 -1 307
+284 -305 35.342003 714 494 -1 -1 315
+278 -311 35.340324 800 574 -1 -1 301
+275 -314 35.340324 574 714 -1 -1 365
+269 -320 35.333603 356 714 -1 -1 301
+266 -323 35.331924 478 494 -1 -1 315
+260 -329 35.325207 -1 681 -1 -1 232
+257 -332 35.320168 260 714 -1 -1 282
+251 -338 35.311768 -1 531 -1 -1 276
+242 -347 35.298328 -1 574 -1 -1 237
+233 -356 35.288246 -1 651 -1 -1 210
+224 -365 35.283207 751 512 -1 -1 189
+215 -374 35.279850 574 597 -1 -1 197
+209 -380 35.279850 494 574 791 -1 213
+203 -386 35.278168 512 531 751 -1 207
+199 -389 35.279846 -1 512 714 -1 186
+193 -395 35.276489 494 512 714 -1 200
+190 -398 35.276489 751 512 597 -1 183
+184 -404 35.274811 169 531 623 -1 183
+178 -409 35.244572 512 494 751 -1 210
+175 -411 35.209293 -1 494 597 -1 178
+157 -421 35.012730 597 512 -1 -1 113
+154 -422 34.891769 -1 531 552 -1 -1
+154 -422 34.826248 -1 512 531 -1 -1
+154 -422 34.688492 681 512 651 -1 -1
+154 -422 34.545692 447 574 623 -1 133
+154 -422 34.471771 397 531 800 447 186
+153 -422 34.342411 462 597 260 531 250
+150 -421 34.300411 397 800 681 552 397
+142 -419 34.243294 397 800 681 -1 386
+134 -417 34.211376 386 751 791 -1 -1
+130 -415 34.197937 386 -1 -1 -1 751
+122 -411 34.184498 356 -1 -1 -1 -1
+118 -409 34.181137 356 651 714 -1 -1
+110 -405 34.171059 338 478 -1 -1 -1
+106 -403 34.172737 330 552 714 -1 434
+98 -399 34.164337 338 574 552 -1 651
+94 -397 34.160976 338 512 681 -1 800
+86 -393 34.149216 330 462 651 -1 800
+75 -388 34.137455 307 478 552 -1 623
+67 -384 34.130737 307 462 623 -1 -1
+63 -382 34.127377 307 462 623 791 -1
+55 -378 34.122337 288 434 681 -1 -1
+51 -376 34.118977 276 408 512 -1 -1
+43 -372 34.117298 276 397 531 -1 -1
+35 -368 34.118977 260 421 434 -1 -1
+31 -366 34.117298 260 397 478 -1 -1
+23 -362 34.118977 260 338 512 -1 -1
+19 -360 34.117298 232 347 512 -1 -1
+-25 -338 34.097145 194 307 375 651 462
+-43 -325 33.196663 191 301 -1 -1 176
+-43 -325 33.058907 186 338 623 -1 178
+-43 -325 32.986668 183 397 -1 -1 176
+-43 -325 32.843868 186 375 -1 347 169
+-43 -325 32.768269 183 -1 -1 681 186
Index: branches/scout/projects/mapping/matlab/data/input7.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input7.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input7.txt	(revision 1346)
@@ -0,0 +1,626 @@
+0 0 0.001680 531 714 194 197 -1
+0 0 -0.020160 574 791 191 197 -1
+0 0 -0.073920 574 375 166 203 -1
+-73 67 -0.742558 531 241 162 224 434
+-72 66 -0.735838 651 322 147 237 -1
+-62 59 -0.641758 531 365 124 232 -1
+-48 51 -0.514078 651 322 117 217 -1
+-41 47 -0.450239 531 294 117 207 -1
+-25 41 -0.324239 478 270 111 197 -1
+-17 39 -0.258719 421 241 110 169 -1
+-1 36 -0.127680 356 191 107 156 -1
+47 41 0.260399 421 552 176 111 800
+63 47 0.393119 462 512 221 108 -1
+71 51 0.460319 478 434 232 104 -1
+83 58 0.572879 478 408 232 104 -1
+89 63 0.635038 462 421 197 108 -1
+102 75 0.769438 447 301 171 108 -1
+113 89 0.903838 397 365 158 111 -1
+118 96 0.972717 365 338 531 113 -1
+106 86 0.781198 421 330 751 122 -1
+123 107 0.982797 681 288 322 151 -1
+132 123 1.125597 -1 294 301 166 -1
+135 131 1.192797 751 315 276 217 -1
+140 146 1.268397 -1 322 232 241 -1
+144 158 1.298637 -1 301 237 270 -1
+145 163 1.301997 -1 301 228 276 -1
+147 172 1.298637 -1 276 207 265 -1
+148 177 1.300317 -1 255 213 294 -1
+152 192 1.357436 -1 232 200 255 -1
+154 243 1.668236 -1 255 166 714 -1
+151 259 1.799275 -1 347 164 447 -1
+145 275 1.933675 -1 260 169 356 -1
+142 283 1.999195 -1 478 169 288 597
+134 298 2.131915 -1 -1 183 241 751
+129 305 2.195755 -1 462 194 232 -1
+118 317 2.323434 -1 -1 232 207 -1
+106 328 2.430954 -1 -1 213 197 800
+101 332 2.456154 791 -1 276 191 751
+92 339 2.479674 -1 -1 288 189 681
+88 342 2.481354 -1 -1 301 189 651
+81 348 2.474634 -1 -1 282 189 623
+95 274 1.910156 -1 -1 255 189 -1
+92 282 1.972316 -1 714 255 189 -1
+90 286 2.002556 -1 -1 265 189 -1
+76 308 2.222635 -1 -1 232 186 -1
+73 311 2.254555 -1 -1 232 181 -1
+64 320 2.350315 -1 -1 213 171 -1
+58 326 2.412474 -1 -1 210 186 531
+55 329 2.444394 -1 -1 200 181 397
+47 335 2.521674 -1 -1 194 178 408
+40 339 2.582154 -1 -1 200 171 408
+51 326 2.399035 -1 -1 224 169 791
+40 335 2.441035 -1 -1 221 158 -1
+36 339 2.451115 -1 -1 232 162 -1
+20 354 2.437675 -1 -1 210 156 751
+17 357 2.430954 -1 -1 224 152 408
+5 369 2.404074 -1 791 213 152 421
+2 372 2.397354 -1 651 210 152 386
+-4 378 2.383914 -1 -1 197 152 397
+-2 299 1.752236 -1 800 178 152 552
+-12 327 1.985756 -1 -1 237 140 322
+-25 348 2.178955 -1 552 282 134 800
+-94 395 2.837513 -1 -1 574 169 -1
+-112 399 2.980313 -1 -1 623 194 -1
+-121 400 3.052552 -1 -1 462 207 -1
+-125 400 3.086152 -1 791 552 221 -1
+-137 400 3.181912 751 791 574 237 -1
+-145 400 3.244072 800 -1 512 228 -1
+-149 399 3.275992 -1 800 494 245 -1
+-157 397 3.338152 791 -1 512 255 -1
+-165 395 3.400311 651 800 512 260 -1
+-156 394 3.123112 800 681 447 288 -1
+-164 394 3.109672 -1 714 434 288 -1
+-168 394 3.101272 512 714 512 294 -1
+-176 394 3.087832 651 791 478 301 -1
+-180 394 3.079432 623 681 447 315 -1
+-188 394 3.067672 552 751 434 307 -1
+-196 394 3.052552 574 531 408 322 -1
+-200 394 3.044152 552 681 478 315 -1
+-212 394 3.023992 574 714 447 330 -1
+-164 341 2.528394 552 681 397 347 -1
+-182 351 2.691353 478 623 347 356 -1
+-226 363 3.049192 408 751 322 375 330
+-234 363 3.111352 356 751 322 356 322
+-206 354 2.835833 397 751 322 356 408
+-214 356 2.822393 386 -1 301 365 375
+-222 358 2.810633 365 -1 282 356 494
+-226 359 2.805593 330 714 282 322 375
+-234 361 2.793833 356 791 282 356 494
+-242 363 2.778713 347 494 276 356 574
+-246 365 2.775353 315 623 255 347 714
+-254 368 2.760233 322 597 237 365 714
+-262 371 2.745113 307 434 245 356 751
+-266 373 2.738393 301 462 245 347 597
+-274 377 2.723273 294 434 217 347 714
+-282 381 2.708153 276 347 224 347 714
+-238 297 2.059675 265 282 217 356 714
+-243 305 2.135275 270 270 203 322 681
+-252 317 2.254554 241 322 197 447 651
+-258 323 2.318394 241 322 200 494 791
+-268 332 2.425914 237 386 191 408 651
+-279 340 2.528394 217 365 194 356 714
+-286 344 2.590554 217 322 189 322 651
+-301 351 2.723273 213 270 181 288 421
+-338 360 3.017272 194 183 200 221 375
+-343 360 3.057592 154 160 191 210 421
+-351 360 3.118072 152 171 183 224 447
+-359 360 3.180231 147 151 171 228 552
+-363 360 3.212151 137 151 164 213 512
+-347 356 2.948392 112 136 145 224 494
+-351 357 2.993752 107 122 151 197 512
+-359 357 3.106311 112 118 156 203 623
+-367 357 3.232311 120 108 169 181 447
+-371 356 3.299511 139 106 194 169 574
+-413 337 3.617030 162 103 164 158 -1
+-420 333 3.677510 197 105 131 156 -1
+-426 329 3.739670 224 112 119 156 -1
+-429 327 3.771590 228 126 115 158 -1
+-435 322 3.832069 301 134 108 160 -1
+-441 316 3.895909 651 140 105 169 -1
+-455 299 4.063909 -1 191 111 189 -1
+-463 286 4.191588 -1 237 112 260 -1
+-470 270 4.327667 -1 241 133 207 -1
+-473 262 4.393187 -1 408 140 183 -1
+-477 246 4.525907 -1 597 154 160 -1
+-478 238 4.591426 -1 -1 194 147 681
+-478 222 4.720786 -1 -1 191 145 365
+-477 214 4.782946 -1 -1 217 137 434
+-474 198 4.912306 751 -1 294 133 408
+-469 182 5.043345 -1 -1 315 136 791
+-466 174 5.107185 -1 -1 397 142 478
+-458 159 5.236545 -1 -1 -1 144 375
+-453 152 5.302065 -1 -1 -1 164 330
+-443 139 5.429745 -1 751 -1 194 270
+-434 130 5.532225 552 714 -1 191 301
+-430 126 5.575904 714 -1 -1 213 301
+-422 120 5.651505 -1 -1 -1 217 288
+-418 118 5.685104 751 -1 -1 213 322
+-410 114 5.752304 -1 800 -1 228 322
+-406 112 5.785904 -1 651 -1 232 330
+-399 108 5.849744 -1 -1 -1 213 356
+-391 105 5.915264 -1 -1 -1 232 356
+-387 104 5.948864 -1 800 -1 232 375
+-379 102 6.014383 -1 434 -1 237 386
+-375 101 6.046303 714 408 -1 237 421
+-367 99 6.113503 -1 -1 -1 255 447
+-363 98 6.147103 -1 -1 -1 260 494
+-386 109 5.893424 -1 -1 -1 255 552
+-378 105 5.879983 -1 -1 -1 315 681
+-374 103 5.873263 -1 -1 -1 347 623
+-362 97 5.856463 -1 -1 -1 397 447
+-350 91 5.837983 -1 597 -1 307 434
+-343 87 5.822863 681 -1 -1 315 434
+-335 83 5.809423 -1 -1 -1 330 478
+-331 81 5.802703 -1 -1 791 307 478
+-324 77 5.789263 623 -1 751 322 478
+-320 75 5.780863 -1 -1 651 315 478
+-312 71 5.764063 -1 -1 -1 330 574
+-349 154 5.167665 -1 -1 751 322 494
+-347 150 5.199584 -1 -1 751 347 531
+-343 143 5.261744 -1 -1 714 347 531
+-341 139 5.295344 800 -1 791 347 531
+-336 132 5.362544 -1 -1 751 356 531
+-328 123 5.456624 -1 -1 751 356 531
+-303 101 5.717023 -1 -1 751 386 531
+-296 97 5.780863 -1 -1 791 365 552
+-292 95 5.814463 -1 -1 597 408 531
+-284 91 5.878303 -1 -1 714 408 531
+-306 110 5.574224 -1 -1 651 386 478
+-300 104 5.562464 -1 751 623 356 512
+-294 98 5.550704 -1 751 574 397 552
+-291 95 5.547344 -1 800 651 397 552
+-285 89 5.537264 574 714 597 421 574
+-282 86 5.530544 -1 714 494 421 512
+-276 80 5.518784 714 791 651 421 552
+-270 74 5.507024 397 751 651 365 574
+-267 71 5.498624 494 681 597 447 552
+-261 65 5.483504 265 623 574 447 574
+-255 59 5.468384 288 597 531 375 597
+-252 56 5.461664 462 574 552 434 597
+-260 147 4.843425 462 597 531 434 623
+-259 143 4.875345 494 531 574 447 623
+-257 135 4.939185 651 531 552 447 597
+-255 127 5.004705 791 574 447 447 651
+-254 123 5.034945 -1 447 478 434 494
+-251 115 5.100465 -1 531 531 462 681
+-247 107 5.164305 -1 531 397 434 597
+-245 103 5.196225 552 421 462 462 597
+-241 96 5.258385 -1 462 478 447 714
+-239 93 5.290305 -1 462 447 447 623
+-235 87 5.354145 -1 462 462 462 681
+-229 81 5.419664 714 447 434 462 791
+-220 72 5.515424 -1 434 447 478 791
+-217 69 5.547344 597 408 408 494 800
+-230 90 5.249985 623 397 408 462 681
+-226 82 5.236545 623 356 397 494 800
+-224 78 5.233185 494 347 408 494 -1
+-220 70 5.218065 512 347 375 462 791
+-165 -13 5.512064 597 237 221 494 -1
+-152 -23 5.627984 574 241 183 462 -1
+-138 -32 5.755663 714 228 191 330 -1
+-131 -36 5.819503 365 255 171 260 800
+-115 -42 5.950543 -1 265 162 -1 -1
+-107 -44 6.014383 -1 282 164 651 -1
+-91 -47 6.145422 -1 282 164 386 -1
+-66 -47 6.343662 -1 386 166 270 -1
+-41 -42 6.543581 791 255 197 232 800
+-108 -19 6.137022 800 -1 241 194 -1
+-89 -20 6.286542 -1 -1 276 183 -1
+-75 -20 6.397422 651 -1 260 181 -1
+-71 -19 6.432702 751 -1 276 178 -1
+-63 -17 6.498221 574 -1 282 181 -1
+-55 -15 6.562061 574 623 265 181 -1
+-51 -14 6.593981 574 -1 260 181 -1
+-43 -12 6.657821 597 -1 255 183 -1
+-39 -10 6.691421 651 -1 255 181 -1
+-31 -6 6.755261 531 -1 250 183 -1
+-27 -4 6.787181 623 800 237 178 -1
+-20 0 6.851021 597 791 232 181 -1
+-14 4 6.914861 494 -1 224 181 -1
+-11 7 6.948461 531 -1 228 181 -1
+-35 -2 6.688061 462 -1 217 181 791
+-31 0 6.683021 574 -1 207 178 751
+-23 3 6.669581 447 -1 200 178 -1
+-19 5 6.662861 478 -1 203 171 791
+-11 8 6.649421 478 -1 197 173 -1
+-1 12 6.661180 447 -1 191 173 -1
+20 22 6.765340 408 552 186 156 -1
+40 35 6.903100 434 365 237 151 -1
+56 47 6.963580 365 -1 255 145 -1
+74 64 7.072780 386 347 210 147 -1
+85 76 7.163499 447 365 173 149 -1
+106 112 7.428938 397 322 397 173 651
+26 66 6.803980 478 301 356 186 751
+36 72 6.896380 478 288 347 194 -1
+51 85 7.050940 494 255 276 207 -1
+61 98 7.181979 462 265 260 228 -1
+66 105 7.247499 791 245 228 276 -1
+86 166 7.754857 -1 200 158 282 -1
+86 184 7.889256 -1 191 142 191 -1
+84 200 8.021976 -1 189 131 250 -1
+82 208 8.085816 -1 191 125 751 -1
+77 224 8.213496 -1 207 106 552 -1
+74 231 8.277336 -1 210 108 356 -1
+66 245 8.405016 -1 237 108 301 -1
+56 258 8.536056 -1 255 106 260 -1
+50 264 8.601576 -1 338 108 203 -1
+38 275 8.729256 714 397 114 189 791
+31 280 8.794776 -1 714 126 169 597
+17 289 8.925816 -1 -1 142 142 -1
+-16 301 9.196295 -1 597 260 121 597
+-21 302 9.234935 -1 751 307 112 512
+-32 304 9.320614 -1 800 375 112 434
+-40 304 9.379414 -1 -1 -1 115 408
+-57 303 9.510453 -1 -1 -1 126 386
+-81 298 9.708694 -1 -1 447 158 375
+-96 292 9.831333 -1 -1 -1 217 408
+-102 289 9.883413 -1 -1 -1 245 408
+-111 283 9.969092 -1 -1 -1 282 421
+-115 280 10.006052 -1 -1 -1 301 375
+-123 274 10.076612 -1 791 -1 322 356
+-129 268 10.140451 -1 -1 -1 330 434
+-132 265 10.172371 494 -1 -1 347 434
+-138 259 10.234530 -1 -1 -1 356 434
+-141 256 10.266450 -1 -1 -1 386 408
+-146 250 10.328609 -1 -1 -1 365 434
+-148 247 10.360529 -1 -1 -1 375 408
+-127 262 10.100129 -1 -1 -1 386 434
+-133 257 10.085010 -1 791 -1 375 397
+-136 255 10.076610 -1 -1 -1 408 408
+-157 241 10.032930 -1 -1 -1 421 375
+-160 239 10.026211 -1 800 -1 447 421
+-166 235 10.011091 -1 -1 -1 462 397
+-169 233 10.004372 651 -1 -1 462 421
+-175 229 9.990932 714 -1 -1 552 434
+-181 225 9.974133 512 -1 -1 494 421
+-184 223 9.965733 375 751 -1 494 421
+-94 214 9.359254 386 751 -1 512 365
+-102 214 9.423094 421 714 -1 494 397
+-106 214 9.455013 408 800 -1 512 478
+-114 214 9.520533 421 791 -1 531 447
+-118 213 9.552452 434 751 -1 531 447
+-126 211 9.619652 447 791 751 494 421
+-134 209 9.683491 494 751 623 531 478
+-138 208 9.717091 552 800 597 552 434
+-146 206 9.780930 714 714 531 531 478
+-154 202 9.844769 531 512 434 512 478
+-158 200 9.876688 552 623 512 574 478
+-165 196 9.938848 512 597 512 574 447
+-171 192 10.002687 512 651 386 512 478
+-174 190 10.034606 791 597 434 574 478
+-150 198 9.785967 681 574 408 574 494
+-158 196 9.772528 651 597 347 574 478
+-162 195 9.767488 681 597 397 574 531
+-170 193 9.755728 623 512 330 574 531
+-178 191 9.742288 651 574 322 681 531
+-182 190 9.737247 651 597 307 651 531
+-190 188 9.720448 651 552 322 552 531
+-198 186 9.707008 447 552 301 574 552
+-202 185 9.700289 552 531 338 714 552
+-143 141 9.035011 462 552 282 714 597
+-151 143 9.098851 434 512 315 574 597
+-159 145 9.164371 494 552 315 651 681
+-163 146 9.196290 386 478 315 597 751
+-171 148 9.258450 397 494 330 651 651
+-179 149 9.322289 408 494 330 651 714
+-183 149 9.354209 408 494 330 651 791
+-191 149 9.419728 365 478 347 681 751
+-199 149 9.483567 365 462 365 714 800
+-203 149 9.517167 356 462 397 651 791
+-211 147 9.582686 330 462 397 681 -1
+-219 145 9.648206 322 447 386 597 -1
+-223 144 9.683486 347 447 397 597 -1
+-231 142 9.747326 307 447 365 651 -1
+-235 141 9.777566 315 434 365 714 -1
+-210 142 9.463408 307 434 408 651 -1
+-218 142 9.449967 288 397 421 651 597
+-222 142 9.441567 276 421 434 714 282
+-262 142 9.377728 210 356 478 714 347
+-270 142 9.362608 210 347 397 651 347
+-278 142 9.344128 194 365 434 651 421
+-207 78 8.690610 197 301 494 681 447
+-213 83 8.749410 183 338 552 800 447
+-216 86 8.783010 181 375 751 597 447
+-216 86 8.784690 203 397 552 800 397
+-217 87 8.793090 200 800 478 714 365
+-222 90 8.835090 210 -1 512 791 294
+-225 92 8.861970 210 623 447 651 288
+-232 96 8.922449 217 356 462 751 265
+-235 98 8.952689 210 315 512 751 255
+-243 102 9.016528 245 282 478 751 241
+-250 104 9.071968 210 294 478 -1 237
+-226 85 8.741009 228 294 512 -1 213
+-228 87 8.635169 241 288 434 -1 213
+-231 90 8.547810 255 478 462 -1 194
+-232 91 8.495729 294 531 478 -1 183
+-236 96 8.430210 288 408 531 -1 189
+-238 99 8.406691 552 408 651 -1 203
+-242 106 8.374771 714 408 651 -1 203
+-246 114 8.349571 800 365 597 -1 203
+-248 118 8.341171 512 365 597 -1 191
+-262 28 7.738053 447 365 597 -1 200
+-262 36 7.803573 386 356 597 -1 207
+-262 40 7.837173 338 347 552 -1 200
+-262 49 7.904372 245 338 574 -1 213
+-262 53 7.936292 241 315 447 -1 213
+-263 61 8.000132 221 301 478 800 213
+-265 69 8.065651 213 282 531 -1 217
+-266 73 8.095891 221 288 421 -1 228
+-269 46 7.553253 210 330 421 -1 397
+-267 51 7.465893 197 421 462 -1 531
+-265 57 7.395333 191 365 478 -1 232
+-264 58 7.341573 178 330 434 -1 213
+-264 59 7.207173 194 434 494 -1 221
+-360 35 6.530135 200 237 512 -1 288
+-360 35 6.530135 210 347 791 -1 276
+-359 35 6.543575 228 356 -1 -1 265
+-356 36 6.565415 322 347 -1 -1 232
+-350 38 6.619174 301 347 -1 -1 228
+-330 47 6.777094 245 347 -1 -1 217
+-326 49 6.810694 245 322 -1 -1 221
+-319 53 6.874534 237 322 -1 -1 210
+-316 55 6.904774 224 322 -1 -1 210
+-340 47 6.642695 213 322 800 -1 213
+-332 49 6.629255 207 307 -1 -1 213
+-328 50 6.624215 200 294 -1 -1 217
+-320 52 6.610775 194 265 -1 -1 210
+-317 53 6.599015 191 288 -1 -1 210
+-312 54 6.513335 178 282 462 -1 210
+-311 54 6.385655 173 322 421 -1 189
+-311 54 6.315095 176 356 800 408 194
+-311 54 6.177336 183 552 -1 -1 207
+-380 125 5.481818 189 -1 -1 -1 237
+-380 125 5.481818 203 -1 -1 -1 221
+-380 125 5.483498 217 -1 -1 714 213
+-377 122 5.518778 255 -1 -1 751 203
+-372 118 5.570858 245 -1 -1 791 213
+-369 116 5.601098 276 447 -1 800 207
+-363 112 5.663258 294 681 -1 751 207
+-360 110 5.695178 307 -1 800 681 203
+-353 106 5.760697 330 -1 -1 714 194
+-345 102 5.824537 347 -1 -1 800 203
+-341 100 5.856457 386 -1 -1 791 197
+-333 98 5.918617 356 -1 -1 751 191
+-355 116 5.612858 408 -1 -1 597 200
+-349 111 5.597738 397 791 -1 651 200
+-343 105 5.587658 365 -1 -1 751 200
+-340 103 5.580938 494 791 -1 714 197
+-334 97 5.575899 421 -1 -1 714 200
+-331 94 5.569179 365 -1 -1 714 203
+-325 88 5.555738 623 -1 681 800 203
+-312 150 4.910620 -1 751 -1 800 221
+-310 142 4.972780 512 -1 800 651 210
+-309 138 5.004700 -1 -1 -1 800 213
+-307 130 5.068540 -1 -1 681 714 213
+-305 126 5.100460 -1 -1 -1 751 228
+-301 118 5.164300 -1 -1 800 791 224
+-299 114 5.196220 -1 -1 791 751 224
+-295 108 5.258380 -1 800 714 751 237
+-291 101 5.322220 -1 800 597 800 255
+-288 98 5.355820 -1 791 597 -1 241
+-282 92 5.419660 -1 -1 681 800 250
+-279 89 5.451580 -1 -1 751 800 255
+-264 74 5.609499 574 791 714 800 276
+-276 91 5.285260 421 681 791 751 282
+-272 84 5.275180 421 597 681 800 282
+-268 78 5.261740 375 531 623 791 294
+-266 74 5.258380 315 681 574 -1 294
+-262 67 5.244940 338 552 714 791 307
+-258 59 5.234860 276 574 597 800 315
+-256 55 5.224780 330 552 552 -1 301
+-246 35 5.194541 512 597 574 800 338
+-228 125 4.541022 574 552 623 800 347
+-229 121 4.574622 512 552 597 -1 347
+-229 113 4.640142 651 531 512 -1 365
+-229 93 4.798061 478 478 597 -1 386
+-228 85 4.860221 597 434 552 -1 408
+-225 73 4.955981 574 408 494 651 421
+-224 69 4.987901 623 408 512 -1 421
+-222 61 5.051741 623 386 478 -1 447
+-219 53 5.115581 478 386 434 -1 447
+-217 49 5.147501 552 375 512 800 478
+-213 41 5.211341 531 347 531 791 434
+-211 38 5.241581 512 347 462 -1 531
+-207 32 5.303741 421 347 462 791 478
+-214 56 4.977822 408 322 478 -1 552
+-213 52 4.971102 397 322 434 -1 494
+-211 44 4.959342 356 301 447 751 574
+-209 37 4.915662 375 288 447 -1 791
+-209 35 4.866942 330 276 552 714 -1
+-209 34 4.739263 282 265 751 -1 -1
+-209 34 4.670383 288 282 -1 -1 -1
+-209 34 4.530944 245 282 307 -1 270
+-131 96 3.811906 245 301 347 -1 207
+-132 96 3.818626 228 322 356 -1 434
+-136 93 3.858946 213 365 574 -1 462
+-138 91 3.882466 210 386 531 -1 531
+-142 88 3.919425 207 421 462 -1 421
+-144 86 3.942945 203 462 462 -1 397
+-148 80 4.000065 203 531 512 651 347
+-152 74 4.062225 200 791 512 574 356
+-154 71 4.094145 197 -1 512 494 347
+-158 65 4.149585 189 -1 478 597 322
+-135 84 3.853906 191 681 434 -1 307
+-135 84 3.788386 203 288 512 574 276
+-147 80 3.455747 301 462 597 -1 213
+-151 79 3.437267 338 462 531 -1 203
+-159 77 3.410387 397 421 552 -1 210
+-163 76 3.398627 408 434 494 -1 210
+-80 38 2.745109 421 386 478 -1 203
+-84 39 2.777029 494 397 494 -1 210
+-92 41 2.842549 478 375 478 -1 207
+-100 43 2.906389 478 365 478 -1 207
+-104 44 2.938308 447 375 512 -1 210
+-112 46 3.000468 375 347 462 -1 213
+-116 46 3.030708 365 347 478 -1 213
+-124 46 3.092868 217 322 447 -1 213
+-132 46 3.155028 210 315 434 -1 213
+-136 46 3.186948 210 301 434 -1 213
+-144 46 3.250787 221 301 421 -1 221
+-148 45 3.281027 237 288 462 -1 221
+-155 43 3.339827 255 241 512 -1 217
+-158 43 3.366707 307 224 408 -1 210
+-158 43 3.370067 282 265 681 -1 213
+-125 38 2.921509 270 260 651 -1 186
+-125 38 2.854309 245 282 623 -1 245
+-125 38 2.718229 221 288 -1 -1 265
+-125 38 2.649349 221 322 434 -1 282
+-126 38 2.521670 207 356 -1 -1 356
+-130 41 2.439350 194 365 -1 -1 386
+-132 43 2.407430 207 421 -1 -1 178
+-116 -51 1.752232 197 623 -1 -1 241
+-117 -48 1.775752 200 -1 -1 -1 276
+-117 -45 1.799271 207 -1 800 -1 288
+-117 -44 1.812711 200 -1 -1 -1 270
+-118 -42 1.832871 228 714 597 -1 265
+-180 -17 1.290234 478 -1 597 -1 213
+-179 -13 1.320474 494 800 574 -1 213
+-177 -5 1.384313 -1 681 714 -1 213
+-176 -1 1.416233 386 552 623 -1 213
+-176 7 1.481753 -1 714 623 -1 217
+-176 15 1.545593 -1 714 597 -1 217
+-176 19 1.577513 -1 651 623 -1 217
+-176 27 1.641353 -1 751 552 -1 213
+-176 31 1.674953 -1 597 574 -1 224
+-178 39 1.738793 -1 574 531 -1 224
+-180 47 1.802633 -1 623 597 -1 224
+-181 51 1.832873 -1 681 531 -1 228
+-182 26 1.542233 791 597 552 -1 228
+-182 30 1.537193 447 552 623 -1 228
+-182 38 1.525434 494 574 478 -1 228
+-182 78 1.468314 282 434 478 -1 276
+-182 82 1.461594 265 478 462 -1 282
+-181 90 1.448154 315 408 434 -1 294
+-180 94 1.439754 307 447 447 -1 288
+-236 39 0.895436 421 447 434 -1 282
+-223 62 1.128955 421 408 365 -1 322
+-219 70 1.164235 421 397 397 -1 330
+-217 78 1.228075 365 375 375 -1 347
+-214 90 1.323835 365 365 347 -1 322
+-212 98 1.389355 330 365 356 -1 356
+-211 110 1.485115 322 330 307 -1 356
+-209 130 1.355755 232 237 276 -1 421
+-206 145 1.369195 260 207 255 -1 447
+-204 157 1.332235 224 203 241 -1 447
+-203 162 1.298635 217 186 237 -1 356
+-201 167 1.206235 181 186 217 -1 315
+-287 121 0.492237 166 178 210 -1 791
+-287 121 0.492237 156 203 200 -1 347
+-287 121 0.492237 126 194 224 751 241
+-287 121 0.492237 127 162 282 -1 -1
+-317 115 0.147838 139 160 375 -1 164
+-316 115 0.058798 133 160 574 -1 142
+-316 115 -0.072241 115 169 -1 -1 154
+-316 115 -0.277201 105 200 -1 -1 140
+-316 115 -0.346080 104 203 751 800 124
+-316 115 -0.485520 -1 322 -1 574 140
+-353 207 -1.189438 111 397 623 800 147
+-353 207 -1.189438 117 531 -1 -1 166
+-353 207 -1.189438 137 -1 -1 -1 149
+-353 207 -1.189438 156 -1 -1 -1 142
+-353 207 -1.189438 171 -1 -1 -1 133
+-353 207 -1.189438 191 552 800 -1 130
+-353 207 -1.189438 356 -1 -1 -1 115
+-353 207 -1.189438 531 -1 -1 -1 114
+-353 207 -1.189438 -1 -1 -1 -1 119
+-354 240 -1.537197 -1 -1 -1 800 119
+-354 240 -1.742157 -1 -1 751 -1 131
+-354 236 -1.837916 -1 -1 -1 -1 173
+-355 233 -1.947116 -1 -1 -1 -1 194
+-356 230 -1.985756 -1 -1 651 -1 213
+-359 224 -2.041196 -1 -1 552 751 265
+-278 258 -2.691354 -1 -1 597 347 315
+-295 248 -2.533434 -1 -1 531 338 421
+-340 186 -1.923596 -1 421 421 -1 -1
+-350 89 -2.063036 651 -1 322 421 -1
+-353 70 -2.034476 623 681 288 447 -1
+-357 63 -2.047916 574 791 265 421 -1
+-359 60 -2.056316 552 791 276 421 -1
+-363 53 -2.068076 421 681 260 386 -1
+-367 45 -2.081516 512 714 250 347 -1
+-369 42 -2.088236 462 -1 232 375 597
+-373 35 -2.101676 531 -1 250 356 462
+-375 31 -2.110076 408 -1 245 375 397
+-379 25 -2.121836 447 751 232 365 386
+-383 19 -2.136956 447 791 228 356 301
+-385 15 -2.141996 462 651 221 322 250
+-297 43 -2.807274 322 552 213 356 276
+-309 38 -2.711514 386 478 194 347 322
+-317 34 -2.647674 386 375 194 338 386
+-321 31 -2.609034 375 322 164 365 421
+-333 22 -2.494795 315 356 186 330 478
+-345 11 -2.363755 356 531 183 294 294
+-351 5 -2.298235 307 397 183 241 347
+-361 -8 -2.170555 330 330 191 237 447
+-371 -125 -1.194478 651 250 200 207 -1
+-367 -133 -1.128958 494 307 197 213 -1
+-321 -184 -0.594720 -1 681 194 330 -1
+-307 -192 -0.465360 -1 307 217 270 -1
+-300 -195 -0.404880 -1 397 237 265 -1
+-287 -199 -0.295680 714 651 255 232 -1
+-281 -200 -0.250321 -1 -1 260 228 -1
+-271 -202 -0.173041 -1 -1 241 224 -1
+-263 -203 -0.104161 -1 -1 260 221 -1
+-259 -203 -0.068881 -1 -1 255 210 -1
+-251 -203 -0.005041 -1 -1 245 213 -1
+-247 -203 0.026879 -1 -1 245 217 -1
+-235 -203 0.120958 -1 -1 232 221 -1
+-260 -197 -0.159601 -1 478 224 217 -1
+-256 -198 -0.166321 791 462 213 213 -1
+-248 -200 -0.179761 800 478 194 213 -1
+-238 -202 -0.164641 800 356 197 203 -1
+-230 -203 -0.134401 -1 -1 213 203 -1
+-214 -205 -0.065521 -1 -1 217 189 -1
+-207 -205 -0.047041 -1 -1 224 189 -1
+-195 -205 -0.026881 -1 -1 237 181 -1
+-190 -205 -0.025201 681 -1 237 173 -1
+-180 -205 -0.031921 -1 -1 232 183 -1
+-171 -205 -0.042001 -1 -1 237 186 -1
+-167 -205 -0.047041 651 -1 221 183 -1
+-212 -157 -0.529200 800 -1 194 173 -1
+-190 -166 -0.347760 651 -1 224 164 -1
+-168 -171 -0.171361 623 -1 265 151 -1
+-152 -172 -0.040321 574 751 260 152 -1
+-143 -172 0.031919 623 800 250 152 -1
+-135 -172 0.097438 512 791 265 156 -1
+-131 -171 0.129358 597 714 241 152 -1
+-123 -169 0.194878 681 751 245 151 -1
+-119 -168 0.226798 552 751 232 152 -1
+-111 -166 0.292318 623 714 245 147 -1
+-134 -167 0.060479 512 791 228 152 -1
+-127 -166 0.085678 623 574 260 151 -1
+-115 -164 0.110878 552 552 237 151 -1
+-105 -162 0.112558 512 574 255 149 -1
+-99 -161 0.119278 494 623 288 144 -1
+-24 -136 0.500637 623 408 365 154 -1
+-11 -128 0.584637 531 365 800 164 531
+-6 -124 0.606477 597 322 494 171 714
+3 -117 0.626637 447 330 512 173 681
+7 -114 0.626637 478 322 434 186 531
+14 -108 0.618237 494 315 365 194 751
+-77 -105 -0.003361 447 315 386 197 623
+-73 -105 0.028559 421 288 421 197 -1
+-63 -104 0.109198 386 282 447 207 531
+-56 -103 0.164638 397 270 365 217 597
+4 -73 0.692157 -1 232 183 307 -1
+21 -54 0.893756 -1 250 171 197 -1
+30 -40 1.026476 800 -1 171 -1 -1
+37 -24 1.159195 -1 347 176 -1 -1
+40 -16 1.223035 -1 322 166 531 -1
+44 0 1.350715 -1 338 164 421 -1
+45 8 1.412875 -1 356 162 288 -1
+46 25 1.543914 -1 681 176 270 714
+46 33 1.607754 -1 -1 186 250 386
+44 49 1.737114 -1 791 207 228 597
+42 57 1.800953 -1 -1 237 203 -1
+38 70 1.910153 -1 -1 245 197 -1
+19 105 2.229352 -1 -1 237 178 -1
+-7 138 2.168872 189 -1 186 169 478
+-12 145 2.205832 -1 -1 203 164 791
+-22 157 2.279752 -1 -1 224 158 -1
+-26 161 2.294872 -1 -1 237 158 -1
+-33 168 2.301592 -1 -1 232 156 -1
+-36 171 2.296552 -1 -1 241 158 -1
+-42 177 2.281432 -1 714 237 158 -1
+-48 183 2.267992 -1 -1 213 152 -1
Index: branches/scout/projects/mapping/matlab/data/input8.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input8.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input8.txt	(revision 1346)
@@ -0,0 +1,479 @@
+21 1 0.156240 -1 -1 241 142 -1
+24 1 0.178080 -1 -1 270 142 -1
+37 4 0.280559 -1 -1 276 144 -1
+45 7 0.344399 -1 552 294 142 -1
+60 14 0.475439 751 494 288 139 -1
+67 18 0.540959 -1 478 270 142 -1
+81 28 0.673678 791 -1 714 144 800
+93 40 0.806398 -1 -1 651 152 -1
+98 46 0.871918 -1 -1 623 152 -1
+106 57 0.979437 -1 -1 651 173 -1
+109 62 1.024797 -1 -1 651 181 791
+115 75 1.137357 -1 -1 651 203 800
+118 83 1.202877 -1 -1 574 203 -1
+119 87 1.234797 -1 751 651 210 -1
+121 95 1.296957 -1 -1 651 221 -1
+122 99 1.328876 -1 -1 597 224 751
+125 111 1.421276 -1 -1 574 241 791
+125 119 1.483436 -1 -1 552 241 -1
+114 96 1.179357 -1 -1 623 245 -1
+136 137 1.103758 714 800 494 282 -1
+138 141 1.098718 681 -1 494 288 -1
+142 148 1.080238 681 -1 478 276 -1
+144 152 1.075198 574 714 512 288 -1
+148 159 1.056718 681 -1 434 270 -1
+64 125 0.423360 552 -1 462 301 -1
+67 127 0.453600 714 -1 434 315 -1
+74 131 0.517439 751 -1 434 307 -1
+77 133 0.549359 574 791 447 288 -1
+84 137 0.613199 574 -1 397 322 -1
+87 139 0.645119 597 -1 375 322 -1
+93 145 0.708959 478 -1 421 322 -1
+99 151 0.771119 574 -1 397 307 552
+108 160 0.870238 552 -1 375 330 282
+111 163 0.903838 531 -1 375 330 288
+115 170 0.969358 462 -1 356 338 270
+119 177 1.034878 462 681 347 347 322
+121 181 1.068478 512 651 365 338 347
+125 189 1.133998 434 714 347 356 347
+127 193 1.167597 434 574 356 347 365
+111 174 0.860158 462 494 322 338 494
+117 180 0.846718 552 347 330 322 494
+120 183 0.838318 421 322 322 365 447
+133 197 0.834958 421 260 301 386 651
+138 203 0.863518 386 397 282 356 681
+148 215 0.932398 408 552 294 356 478
+156 226 0.965998 375 791 294 356 408
+159 230 0.972718 397 791 288 338 531
+165 238 0.967678 408 800 265 347 478
+169 246 0.954238 356 791 276 347 478
+171 249 0.945838 356 574 270 330 552
+84 224 0.310800 356 681 250 301 597
+92 226 0.372960 347 552 260 347 681
+96 228 0.403200 301 681 237 322 714
+104 232 0.467039 307 531 237 338 751
+108 234 0.500639 315 386 228 330 714
+114 238 0.562799 294 347 221 330 681
+120 242 0.626639 294 356 210 347 681
+123 244 0.658559 288 270 203 322 681
+130 251 0.737519 250 265 191 347 714
+145 269 0.929038 255 421 183 462 800
+153 283 1.060078 237 421 191 315 623
+157 291 1.125597 245 322 213 282 494
+162 306 1.251597 245 260 203 265 447
+166 320 1.365837 232 224 203 228 597
+167 328 1.427997 228 200 200 228 408
+168 345 1.559036 217 194 186 210 -1
+167 361 1.688396 210 183 176 194 -1
+165 369 1.753916 232 169 232 189 -1
+160 385 1.883275 210 162 210 189 -1
+157 393 1.950475 250 154 183 191 -1
+149 408 2.081515 255 158 162 191 -1
+122 439 2.407434 714 166 109 232 -1
+110 448 2.525034 421 181 106 237 -1
+86 460 2.728313 -1 200 102 356 -1
+78 463 2.793833 -1 213 106 260 -1
+62 467 2.924872 -1 447 110 207 -1
+46 469 3.052552 -1 338 131 173 -1
+38 469 3.116392 -1 478 131 158 -1
+22 468 3.245752 -1 397 137 147 -1
+-2 463 3.440631 -1 -1 194 122 681
+-79 386 4.341109 -1 -1 -1 171 386
+-81 380 4.389829 -1 -1 -1 183 386
+-83 370 4.468789 -1 791 -1 213 408
+-85 361 4.541028 751 -1 -1 270 434
+-72 386 4.226870 651 494 -1 315 434
+-76 378 4.215110 -1 -1 791 288 421
+-78 374 4.208390 -1 -1 -1 237 447
+-82 366 4.194950 -1 -1 -1 232 421
+-84 363 4.186550 -1 -1 800 241 478
+-88 356 4.169750 -1 434 -1 245 478
+-92 349 4.157990 651 -1 -1 255 494
+-94 346 4.149590 -1 552 -1 245 552
+-98 339 4.134470 -1 623 -1 301 681
+-100 336 4.127749 512 408 -1 276 714
+-104 329 4.112629 -1 -1 800 288 714
+-15 353 3.433911 -1 -1 -1 307 651
+-19 352 3.465831 -1 -1 681 315 494
+-27 348 3.531351 -1 -1 -1 322 462
+-31 346 3.563271 -1 623 791 322 478
+-39 342 3.627111 -1 -1 -1 330 447
+-43 340 3.660711 -1 -1 714 322 512
+-49 336 3.722871 -1 -1 -1 338 494
+-56 332 3.788390 -1 -1 800 347 531
+-59 329 3.820310 751 -1 791 330 574
+-65 323 3.885830 -1 -1 681 356 494
+-68 320 3.919430 -1 -1 791 347 552
+-74 314 3.983270 -1 -1 -1 375 531
+-77 311 4.015190 -1 -1 714 347 597
+-82 305 4.080709 -1 -1 623 365 552
+-86 298 4.146229 -1 -1 623 386 597
+-88 294 4.178149 -1 -1 651 386 597
+-69 310 3.885830 -1 -1 714 386 597
+-72 307 3.880790 -1 597 651 397 597
+-78 301 3.869030 -1 -1 623 408 531
+-105 274 3.816950 -1 -1 597 447 597
+-111 269 3.800150 -1 -1 574 421 478
+-117 265 3.781670 -1 651 531 434 574
+-29 260 3.146632 -1 714 512 447 574
+-33 260 3.176872 -1 751 512 434 597
+-41 260 3.242392 -1 791 574 434 597
+-49 258 3.306232 -1 651 531 462 623
+-53 257 3.338152 800 623 434 447 552
+-61 255 3.403672 386 623 531 462 494
+-65 254 3.435591 421 623 462 462 597
+-73 252 3.499431 512 512 462 462 531
+-81 249 3.563271 288 512 478 462 597
+-84 247 3.593511 315 531 478 447 494
+-92 243 3.659031 330 531 434 494 597
+-99 239 3.724550 307 494 462 421 623
+-102 237 3.754790 800 494 421 478 597
+-108 232 3.818630 651 478 462 462 597
+-111 229 3.850550 408 478 408 462 597
+-88 237 3.548151 800 462 408 478 597
+-96 234 3.533031 -1 421 386 478 651
+-100 232 3.527991 597 421 375 478 714
+-108 229 3.512871 -1 408 375 512 651
+-116 227 3.501111 791 386 386 531 681
+-120 226 3.492711 552 375 365 552 751
+-128 224 3.477591 -1 356 365 531 791
+-75 186 2.849273 462 294 307 512 -1
+-79 187 2.884553 494 265 294 574 -1
+-93 189 2.995432 -1 255 276 512 -1
+-109 190 3.123112 434 228 260 552 -1
+-117 190 3.186952 681 245 221 -1 -1
+-133 188 3.317992 531 228 210 447 800
+-149 184 3.447351 651 224 194 531 -1
+-157 181 3.511191 552 224 171 288 -1
+-172 173 3.642231 307 241 164 270 800
+-179 169 3.707751 -1 197 164 512 714
+-193 158 3.840470 -1 276 154 462 -1
+-205 146 3.973190 -1 307 154 375 651
+-210 140 4.037030 800 322 152 322 -1
+-219 126 4.171429 -1 365 164 270 -1
+-233 86 4.507428 623 330 210 191 -1
+-234 78 4.571268 714 -1 224 183 -1
+-235 64 4.680467 714 -1 245 178 -1
+-235 58 4.725827 651 -1 255 178 -1
+-235 48 4.806467 751 800 255 176 -1
+-233 40 4.875347 714 651 245 176 -1
+-232 36 4.908947 512 714 250 176 -1
+-230 28 4.976146 531 681 237 173 -1
+-229 24 5.008066 531 -1 255 176 -1
+-226 16 5.073586 623 -1 228 173 -1
+-224 12 5.107186 574 -1 224 173 -1
+-220 4 5.171026 597 751 228 173 751
+-223 29 4.850147 597 -1 224 171 -1
+-222 25 4.843427 512 -1 207 171 800
+-221 17 4.829987 512 -1 207 171 791
+-221 13 4.823267 494 791 200 171 -1
+-221 5 4.809826 434 800 200 164 -1
+-220 -6 4.819906 447 -1 191 169 -1
+-219 -13 4.841746 552 -1 197 164 -1
+-216 -29 4.917346 447 623 210 158 -1
+-214 -37 4.961026 462 531 228 144 -1
+-210 -51 5.018146 494 494 245 147 -1
+-204 -66 5.100465 408 462 265 139 -1
+-200 -74 5.142465 462 447 232 142 -1
+-192 -89 5.244945 478 408 166 142 -1
+-182 -103 5.357505 434 375 124 147 -1
+-165 -121 5.533904 494 245 494 160 -1
+-159 -126 5.594384 574 347 408 166 -1
+-178 -41 4.984545 597 338 386 183 -1
+-174 -51 5.066865 623 294 315 194 -1
+-172 -55 5.103825 434 294 322 197 -1
+-167 -64 5.186145 552 276 408 210 751
+-159 -77 5.305425 478 270 307 224 -1
+-154 -84 5.372624 -1 265 375 237 -1
+-142 -96 5.503664 623 241 265 270 -1
+-136 -101 5.569184 681 197 213 288 -1
+-122 -111 5.701903 -1 260 213 294 -1
+-108 -119 5.832943 -1 241 200 294 -1
+-100 -122 5.901823 -1 245 178 210 -1
+-83 -127 6.036222 -1 265 176 207 -1
+-75 -129 6.103422 -1 288 169 -1 -1
+-59 -130 6.234461 -1 330 160 597 -1
+-50 -130 6.301661 -1 255 166 421 -1
+-34 -128 6.431021 -1 494 -1 375 -1
+-18 -124 6.558701 714 681 171 276 681
+-10 -121 6.622540 -1 651 186 250 751
+6 -114 6.753580 -1 597 203 237 800
+13 -110 6.815740 -1 -1 207 203 -1
+24 -102 6.923260 -1 -1 237 197 -1
+32 -95 7.008940 -1 -1 250 197 -1
+35 -92 7.044219 -1 -1 245 197 -1
+44 -83 7.146699 -1 -1 241 191 -1
+49 -77 7.210539 -1 -1 237 183 -1
+51 -74 7.242459 -1 -1 232 191 -1
+55 -67 7.307979 -1 -1 213 189 -1
+33 -87 7.019020 -1 -1 213 191 -1
+39 -81 7.008940 -1 -1 210 186 -1
+91 -25 7.220619 -1 -1 255 158 -1
+97 -17 7.220619 -1 791 260 151 -1
+100 -13 7.217259 -1 -1 255 158 -1
+105 -6 7.205499 -1 -1 237 160 -1
+107 -3 7.195419 -1 -1 250 158 -1
+19 -26 6.558701 -1 -1 245 152 -1
+23 -25 6.593981 -1 -1 245 158 -1
+40 -17 6.743500 -1 -1 265 151 -1
+62 -3 6.951820 -1 -1 276 151 -1
+68 2 7.013980 -1 791 294 151 -1
+77 12 7.118140 -1 494 301 149 -1
+81 17 7.170219 -1 -1 338 151 -1
+89 30 7.291179 651 462 315 152 -1
+93 37 7.356699 -1 512 241 152 -1
+99 50 7.465899 -1 800 265 158 -1
+101 56 7.512938 -1 -1 397 158 -1
+103 66 7.590219 -1 -1 531 160 -1
+105 74 7.659098 -1 375 512 173 -1
+106 78 7.692698 -1 714 531 171 -1
+107 86 7.758218 -1 574 478 171 -1
+96 59 7.477659 -1 330 494 173 -1
+100 67 7.469259 -1 307 494 178 -1
+102 71 7.462539 -1 276 478 176 -1
+106 80 7.465899 -1 347 531 181 -1
+111 93 7.506219 -1 421 531 189 -1
+113 98 7.517979 -1 478 531 186 -1
+117 107 7.519659 -1 447 494 189 -1
+120 115 7.511259 -1 447 478 191 -1
+121 119 7.504539 791 386 462 197 -1
+123 127 7.487739 -1 408 462 197 -1
+125 131 7.482698 -1 315 447 200 -1
+129 139 7.467578 597 270 397 197 -1
+51 95 6.822460 714 294 397 210 -1
+57 99 6.879580 -1 270 408 207 -1
+69 109 7.007260 714 531 421 213 -1
+75 115 7.072780 791 -1 397 224 -1
+84 125 7.181979 681 -1 386 232 -1
+90 134 7.265979 791 -1 397 241 -1
+93 138 7.304619 791 -1 408 250 -1
+97 146 7.373499 751 -1 421 250 -1
+99 150 7.405419 651 -1 397 245 -1
+103 158 7.469259 651 -1 365 265 -1
+104 162 7.502859 574 -1 386 270 -1
+102 178 7.544859 512 -1 322 282 356
+103 182 7.541499 478 597 307 301 315
+105 190 7.528059 512 447 301 265 347
+107 198 7.516299 478 330 301 294 375
+108 202 7.511259 478 301 294 288 434
+110 210 7.496139 494 301 270 315 478
+114 220 7.509579 494 260 282 294 597
+116 227 7.539819 478 347 276 322 552
+120 242 7.605339 462 -1 265 322 322
+122 249 7.625498 447 791 265 294 322
+124 260 7.638938 462 -1 237 301 322
+126 269 7.632218 434 800 250 288 338
+127 273 7.623818 434 623 250 288 397
+58 215 7.012300 386 597 241 282 356
+67 224 7.106380 365 597 224 294 597
+73 230 7.171899 356 751 224 288 597
+77 236 7.234059 330 552 210 294 552
+79 239 7.264299 347 447 210 347 791
+83 245 7.326459 330 386 200 356 681
+87 253 7.391979 315 356 191 386 -1
+89 258 7.432299 307 282 183 478 681
+94 272 7.548219 301 270 181 421 751
+98 314 7.882537 288 301 173 241 531
+97 322 7.948057 800 270 203 217 386
+94 338 8.079098 288 237 203 203 -1
+89 354 8.206778 288 237 203 191 -1
+86 361 8.270617 288 217 221 189 -1
+78 375 8.399978 276 210 282 186 -1
+73 382 8.463818 276 207 260 181 -1
+62 395 8.596538 408 203 203 181 -1
+50 406 8.724217 408 194 173 183 -1
+43 411 8.789738 574 213 181 200 -1
+-138 376 10.389096 -1 -1 338 160 552
+-118 390 10.111897 651 -1 356 166 552
+-121 387 10.105177 -1 -1 347 173 597
+-127 382 10.090057 681 -1 338 176 623
+-130 379 10.085017 512 -1 315 189 651
+-136 375 10.068217 -1 -1 315 197 651
+-142 371 10.056458 -1 -1 307 181 651
+-145 369 10.049738 531 -1 307 166 681
+-151 365 10.036299 -1 -1 301 176 714
+-157 361 10.021179 -1 -1 307 171 714
+-99 344 9.512139 -1 -1 255 178 800
+-103 343 9.545739 -1 -1 241 186 -1
+-154 324 9.970776 -1 -1 210 178 -1
+-160 320 10.032935 -1 -1 203 178 -1
+-163 318 10.064855 -1 -1 191 176 -1
+-141 325 9.809495 -1 800 194 171 -1
+-148 322 9.833014 -1 751 197 160 -1
+-159 317 9.851494 -1 681 207 139 800
+-170 312 9.876694 -1 552 213 137 -1
+-177 308 9.903574 -1 623 221 137 -1
+-191 300 9.989254 -1 375 250 134 -1
+-198 295 10.032934 -1 714 270 131 -1
+-211 285 10.133734 -1 478 265 129 800
+-223 273 10.239573 -1 552 207 127 -1
+-228 266 10.305094 751 714 397 130 -1
+-249 228 10.632693 -1 -1 512 169 -1
+-253 215 10.696532 -1 -1 462 178 -1
+-256 204 10.715013 -1 791 478 210 751
+-184 233 10.027896 -1 -1 421 260 -1
+-208 210 10.284934 -1 623 347 282 -1
+-213 204 10.348773 -1 651 375 288 -1
+-217 198 10.410933 -1 681 365 294 -1
+-219 195 10.442852 -1 597 347 294 -1
+-223 187 10.508371 -1 512 347 315 -1
+-225 183 10.540291 -1 494 338 288 791
+-229 175 10.604130 -1 494 315 294 791
+-231 167 10.667969 375 462 322 322 -1
+-232 163 10.699888 552 447 307 322 -1
+-234 155 10.763727 552 434 307 338 -1
+-221 177 10.454608 270 408 288 347 -1
+-223 174 10.447888 250 375 288 338 800
+-227 167 10.436129 386 375 288 356 -1
+-231 160 10.422689 356 338 265 347 -1
+-233 156 10.419330 714 315 241 356 -1
+-237 150 10.400849 651 338 228 338 -1
+-241 142 10.390770 681 301 232 397 -1
+-243 138 10.384050 -1 294 237 375 -1
+-248 129 10.389091 597 270 221 375 -1
+-256 116 10.446210 421 245 210 386 -1
+-260 109 10.483170 322 265 186 356 -1
+-267 95 10.565490 245 250 173 330 -1
+-194 137 9.995971 386 282 173 221 -1
+-201 132 10.059811 -1 276 171 447 -1
+-213 121 10.189171 -1 347 164 751 -1
+-219 115 10.254691 -1 365 156 421 -1
+-229 101 10.384051 -1 434 160 315 -1
+-237 87 10.515092 -1 597 171 241 -1
+-240 79 10.580612 -1 270 133 228 714
+-245 63 10.711652 -1 307 207 217 800
+-247 10 11.140051 -1 791 294 186 -1
+-240 -15 11.348371 -1 -1 294 173 -1
+-230 -34 11.513010 791 -1 270 181 -1
+-228 -37 11.544930 623 -1 265 183 -1
+-224 -44 11.610449 751 -1 250 186 -1
+-219 -50 11.674288 623 -1 260 183 -1
+-216 -53 11.706207 714 -1 241 176 -1
+-226 -30 11.459248 623 -1 241 183 -1
+-224 -33 11.450848 574 -1 232 173 -1
+-220 -41 11.435728 623 -1 228 183 -1
+-216 -49 11.420609 552 -1 221 183 -1
+-214 -53 11.415568 434 -1 217 178 -1
+-210 -61 11.402129 574 -1 207 183 -1
+-208 -65 11.395410 512 -1 203 178 -1
+-205 -73 11.378610 494 -1 197 173 800
+-202 -81 11.366850 531 -1 189 171 -1
+-200 -86 11.363490 512 -1 186 178 791
+-194 -99 11.410530 751 -1 186 171 681
+-186 -114 11.487810 478 791 203 158 -1
+-182 -121 11.526450 494 512 221 156 -1
+-172 -35 10.926692 462 651 224 147 -1
+-172 -49 11.034211 294 597 245 149 -1
+-168 -74 11.227410 408 478 250 145 -1
+-166 -81 11.286210 421 434 270 147 -1
+-159 -97 11.418930 462 408 217 139 -1
+-151 -111 11.548290 386 397 166 151 -1
+-146 -118 11.612130 512 347 315 152 -1
+-122 -142 11.880929 447 307 478 171 -1
+-114 -148 11.958208 552 307 462 181 751
+-110 -150 11.993488 356 282 408 186 -1
+-103 -154 12.057328 386 255 397 191 651
+-95 -157 12.121167 347 265 531 194 -1
+-89 -160 12.174927 338 250 408 191 -1
+-106 -145 11.927967 288 228 434 200 791
+-101 -149 11.843967 245 221 681 203 -1
+-99 -150 11.793568 232 200 681 197 -1
+-98 -151 11.664207 200 200 265 213 597
+-98 -151 11.529807 203 210 171 203 -1
+-66 -68 10.698210 154 162 149 322 221
+-68 -75 10.751969 162 176 133 330 221
+-69 -79 10.780529 160 200 124 338 213
+-71 -87 10.846048 162 210 119 330 194
+-71 -95 10.909887 171 203 106 338 197
+-71 -99 10.943487 158 203 -1 322 189
+-71 -107 11.007326 166 186 -1 307 186
+-63 -84 10.683087 164 176 -1 307 176
+-64 -88 10.678047 164 166 -1 301 178
+-66 -96 10.666287 166 142 -1 288 176
+-67 -100 10.657887 164 130 -1 288 173
+-69 -108 10.662927 166 124 -1 282 173
+-71 -116 10.762046 160 133 -1 228 173
+-72 -120 10.820846 131 152 -1 203 186
+-72 -128 10.960285 130 151 -1 189 210
+-72 -136 11.056045 115 133 -1 144 241
+-72 -140 11.076204 111 183 -1 144 260
+-71 -148 11.153484 102 307 -1 136 276
+-70 -152 11.165244 101 347 -1 121 282
+-68 -160 11.166924 -1 365 -1 120 270
+-66 -168 11.161883 -1 338 -1 118 241
+-65 -172 11.153483 -1 322 -1 112 255
+-63 -180 11.141724 -1 307 -1 110 228
+-61 -188 11.129964 -1 255 -1 107 232
+-60 -192 11.124924 -1 241 -1 102 217
+-60 -200 11.111485 -1 203 -1 -1 207
+-60 -204 11.103085 -1 203 -1 -1 194
+-60 -212 11.089644 -1 183 -1 -1 178
+-60 -218 11.066125 -1 133 -1 -1 171
+-60 -221 11.064445 -1 111 -1 104 156
+-60 -226 11.129965 -1 109 -1 -1 162
+-59 -229 11.180365 -1 194 -1 -1 181
+-57 -235 11.286204 -1 129 -1 -1 203
+-55 -242 11.339964 -1 107 -1 -1 210
+-54 -245 11.388683 -1 -1 -1 -1 241
+-50 -252 11.513003 -1 -1 -1 -1 265
+-48 -255 11.576843 -1 -1 -1 -1 315
+-43 -261 11.709563 -1 -1 -1 -1 531
+-40 -264 11.778443 -1 -1 -1 -1 681
+-34 -269 11.916203 -1 -1 136 -1 -1
+-31 -271 11.985084 -1 -1 109 -1 -1
+-25 -274 12.104363 -1 -1 -1 -1 -1
+-19 -276 12.206842 -1 -1 -1 -1 -1
+-16 -277 12.255562 -1 -1 -1 -1 -1
+-11 -279 12.351321 109 -1 -1 -1 -1
+-8 -280 12.406761 126 -1 -1 -1 -1
+-1 -280 12.519320 144 -1 -1 -1 -1
+3 -280 12.574760 191 -1 -1 -1 -1
+11 -280 12.688999 237 -1 -1 -1 -1
+72 -242 13.303878 -1 162 -1 232 -1
+78 -236 13.360997 -1 194 -1 203 714
+85 -228 13.441636 800 228 -1 160 531
+89 -222 13.498755 -1 288 -1 115 160
+97 -208 13.626435 -1 494 -1 103 129
+100 -201 13.688595 -1 -1 -1 -1 107
+117 -105 14.182512 -1 -1 142 -1 250
+116 -96 14.249712 -1 -1 237 -1 241
+113 -80 14.380752 -1 -1 301 -1 228
+97 -43 14.698271 -1 -1 -1 -1 224
+92 -36 14.762111 -1 -1 -1 -1 232
+63 -7 15.088030 386 -1 -1 140 255
+49 2 15.220750 322 -1 -1 228 260
+42 5 15.277869 276 -1 -1 288 276
+30 10 15.336669 255 -1 -1 375 288
+25 12 15.346749 237 -1 -1 397 282
+16 16 15.351789 237 -1 -1 447 265
+8 20 15.346749 241 -1 -1 552 282
+4 22 15.341709 241 -1 -1 462 282
+-4 24 15.328269 232 -1 -1 714 270
+-8 26 15.323229 241 -1 -1 623 276
+-16 30 15.306429 232 -1 -1 714 255
+-20 32 15.303069 237 -1 -1 751 260
+-29 19 15.103147 250 681 -1 623 237
+-32 21 15.135066 241 681 800 -1 224
+-38 25 15.195546 255 574 -1 -1 213
+-42 27 15.227466 241 623 -1 -1 228
+-50 31 15.291305 245 494 -1 -1 221
+-58 33 15.353464 255 651 -1 -1 221
+-62 34 15.385384 245 623 -1 -1 228
+-41 20 15.116585 260 681 -1 751 207
+-45 22 15.111545 260 714 -1 800 213
+-52 26 15.098104 270 714 -1 -1 203
+-58 30 15.082985 255 751 -1 -1 213
+-61 32 15.076265 265 800 -1 -1 213
+-67 36 15.062826 260 714 -1 751 203
+-70 38 15.056107 288 531 -1 751 210
+-76 43 15.042667 282 714 -1 -1 207
+-82 48 15.027548 330 791 -1 -1 203
+-85 51 15.019148 276 800 -1 -1 189
+-91 56 15.005709 294 714 -1 -1 203
+-94 59 14.997309 330 714 -1 -1 203
+-100 65 14.980509 338 -1 -1 800 200
+-81 -24 14.384110 330 751 -1 -1 210
+-82 -20 14.416030 375 714 -1 -1 203
+-84 -13 14.478189 356 552 -1 597 194
+-85 -9 14.510109 356 597 -1 -1 200
+-89 -1 14.573949 408 623 -1 -1 194
Index: branches/scout/projects/mapping/matlab/data/input9.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input9.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input9.txt	(revision 1346)
@@ -0,0 +1,353 @@
+0 0 0.000000 -1 651 -1 -1 207
+77 28 0.648478 200 347 597 597 282
+89 39 0.777838 169 447 447 800 322
+98 50 0.895437 156 301 -1 -1 356
+101 55 0.940797 158 330 512 -1 347
+106 62 1.009677 147 322 462 -1 307
+107 64 1.031517 151 421 447 651 270
+83 45 0.702238 151 714 447 651 265
+83 45 0.633358 149 288 421 -1 221
+83 45 0.497278 178 330 478 -1 203
+83 45 0.359519 194 447 597 -1 186
+83 45 0.290639 183 494 531 -1 169
+83 45 0.152879 315 408 512 751 158
+83 45 0.085680 421 408 751 -1 158
+7 101 -0.626638 356 408 -1 -1 158
+10 99 -0.601438 255 397 -1 -1 154
+16 95 -0.544319 270 421 -1 -1 164
+62 78 -0.171360 356 338 -1 -1 197
+70 77 -0.105840 315 338 -1 -1 203
+74 77 -0.073920 322 338 -1 -1 207
+82 77 -0.008400 307 338 -1 -1 213
+86 77 0.025200 276 322 -1 -1 224
+94 77 0.090720 288 322 -1 -1 228
+70 83 -0.241919 265 307 -1 -1 228
+74 82 -0.250319 255 276 -1 -1 241
+81 80 -0.285599 241 288 -1 -1 207
+83 79 -0.327599 241 282 -1 -1 255
+85 79 -0.446879 217 232 681 -1 282
+85 79 -0.517439 203 307 791 -1 330
+86 78 -0.643438 200 365 574 -1 421
+90 74 -0.719038 189 397 681 -1 375
+71 168 -1.365836 197 421 -1 -1 210
+73 161 -1.313756 197 447 -1 -1 217
+74 159 -1.298637 191 623 -1 -1 250
+74 158 -1.286877 197 -1 -1 -1 301
+74 158 -1.286877 200 -1 -1 -1 282
+74 158 -1.286877 228 -1 -1 -1 237
+74 158 -1.285197 245 462 -1 -1 228
+76 153 -1.249917 260 714 651 -1 221
+78 147 -1.196157 276 -1 800 -1 217
+80 143 -1.164237 282 -1 597 -1 207
+79 169 -1.454876 408 -1 681 -1 210
+79 165 -1.464956 421 -1 681 -1 213
+79 157 -1.481756 421 -1 791 -1 217
+79 153 -1.490156 494 -1 681 -1 210
+79 145 -1.501916 552 -1 751 -1 213
+79 137 -1.515356 574 -1 623 -1 200
+79 133 -1.523756 494 -1 623 -1 200
+79 125 -1.537196 651 800 681 -1 213
+79 121 -1.545596 531 -1 651 -1 210
+79 113 -1.559035 -1 -1 681 -1 213
+79 105 -1.574155 -1 -1 714 -1 203
+79 101 -1.582555 -1 -1 751 -1 217
+79 93 -1.597675 -1 -1 651 -1 213
+115 143 -2.197433 -1 -1 681 -1 224
+111 137 -2.135274 -1 -1 623 -1 241
+109 133 -2.103354 -1 -1 651 -1 221
+105 125 -2.037834 -1 -1 751 -1 228
+103 122 -2.009274 -1 791 651 -1 228
+100 114 -1.945434 -1 -1 651 -1 237
+98 106 -1.881594 -1 714 531 -1 237
+97 102 -1.849674 714 714 552 -1 237
+95 94 -1.785834 512 -1 574 -1 241
+94 90 -1.753914 375 800 552 -1 241
+93 82 -1.688395 315 800 597 -1 245
+93 78 -1.653115 338 714 512 -1 250
+93 70 -1.587595 294 -1 531 -1 270
+93 62 -1.523755 282 714 462 -1 255
+93 58 -1.491835 301 681 574 -1 241
+99 83 -1.777434 307 681 531 -1 245
+98 79 -1.782474 288 651 494 -1 270
+96 71 -1.795914 375 681 494 -1 250
+94 63 -1.809354 386 681 531 -1 270
+93 59 -1.817754 478 574 447 -1 282
+91 51 -1.829514 494 681 512 -1 282
+90 47 -1.836234 651 512 462 -1 315
+88 39 -1.849674 574 623 462 -1 288
+86 31 -1.864794 574 681 421 -1 288
+85 27 -1.871513 462 623 421 -1 347
+83 19 -1.888313 552 623 375 -1 347
+82 15 -1.896713 462 651 408 -1 356
+80 7 -1.913513 552 681 386 -1 356
+130 43 -2.518312 512 681 347 -1 375
+124 39 -2.456152 494 623 386 -1 375
+118 33 -2.392312 478 651 365 -1 397
+115 30 -2.360392 462 531 375 -1 408
+109 24 -2.298232 494 421 338 -1 408
+103 18 -2.234392 434 421 365 -1 375
+100 15 -2.200793 447 386 347 -1 408
+96 9 -2.138633 447 365 338 -1 447
+94 5 -2.105033 408 322 307 -1 447
+90 -3 -2.041193 408 282 294 -1 478
+88 -7 -2.005913 408 294 301 -1 421
+83 -19 -1.900073 386 307 288 -1 494
+80 -30 -1.809354 347 338 301 -1 397
+79 -35 -1.770714 347 338 282 -1 494
+77 -43 -1.700154 338 315 294 -1 531
+89 -17 -2.005913 330 276 265 -1 531
+85 -26 -1.999193 322 255 255 -1 512
+79 -40 -1.938714 288 270 250 -1 681
+76 -48 -1.901754 322 260 224 -1 552
+72 -63 -1.816074 294 288 217 -1 574
+70 -70 -1.790874 276 270 221 -1 531
+67 -102 -1.616155 294 224 191 574 552
+67 -110 -1.562395 288 191 191 512 552
+69 -126 -1.446475 322 183 197 447 531
+73 -142 -1.317115 356 197 183 365 597
+76 -150 -1.248236 330 194 210 315 597
+83 -166 -1.115516 241 200 139 270 597
+92 -180 -0.982796 301 200 152 250 800
+97 -187 -0.917277 800 207 147 241 751
+109 -199 -0.782877 791 181 136 221 800
+144 -223 -0.450238 447 255 130 210 531
+152 -226 -0.386398 462 200 134 207 552
+168 -231 -0.260398 -1 494 149 224 375
+184 -234 -0.129359 478 552 158 189 -1
+192 -235 -0.067199 421 462 171 176 -1
+208 -234 0.063841 462 386 207 162 -1
+232 -229 0.258720 751 375 221 142 -1
+248 -223 0.391440 574 375 224 145 -1
+283 -199 0.719039 -1 408 315 154 -1
+289 -193 0.781199 -1 386 282 171 -1
+299 -183 0.845039 -1 386 288 194 651
+303 -179 0.860159 552 356 265 194 -1
+309 -172 0.865198 751 356 270 207 552
+315 -166 0.861839 322 322 255 213 -1
+318 -163 0.855119 288 330 241 217 -1
+324 -157 0.843359 714 301 241 228 -1
+234 -173 0.206640 552 301 241 232 -1
+238 -172 0.236880 751 294 224 245 -1
+289 -145 0.693839 -1 494 191 197 623
+301 -133 0.824879 -1 301 194 245 -1
+306 -127 0.887038 -1 347 191 552 -1
+315 -113 1.019758 -1 512 183 330 -1
+319 -106 1.085278 -1 623 189 288 -1
+325 -90 1.216317 -1 623 197 260 -1
+329 -74 1.350717 -1 -1 194 217 -1
+330 -66 1.414557 -1 -1 301 221 791
+331 -49 1.543916 -1 -1 265 210 751
+331 -42 1.597676 -1 -1 294 207 552
+330 -30 1.690076 -1 -1 294 207 681
+329 -25 1.728716 -1 -1 301 207 651
+327 -16 1.800956 -1 -1 288 207 623
+325 -8 1.869835 -1 -1 301 207 681
+324 -4 1.903435 -1 -1 282 213 714
+321 4 1.967275 -1 800 288 217 681
+319 8 1.999195 -1 -1 294 213 714
+315 16 2.064715 -1 -1 276 228 800
+313 19 2.094955 -1 -1 260 228 681
+309 25 2.158795 -1 -1 276 207 800
+317 1 1.868155 -1 -1 265 203 -1
+316 5 1.859756 -1 -1 255 203 623
+314 13 1.847996 -1 -1 232 210 -1
+313 17 1.839596 -1 -1 250 203 -1
+311 25 1.829516 -1 800 250 203 800
+310 29 1.821116 -1 -1 237 197 -1
+308 37 1.807676 -1 -1 232 203 -1
+306 45 1.792556 -1 -1 232 200 -1
+305 49 1.782476 -1 -1 221 210 -1
+303 57 1.767356 -1 -1 210 200 714
+302 61 1.758956 -1 -1 207 203 -1
+277 31 1.226398 -1 -1 213 189 -1
+283 57 1.439757 -1 -1 221 189 -1
+283 62 1.480077 -1 791 210 151 -1
+281 90 1.703516 -1 552 232 144 -1
+280 96 1.752236 -1 714 255 147 791
+275 112 1.879916 -1 651 265 142 -1
+268 128 2.009275 -1 512 260 142 -1
+264 135 2.071435 -1 462 237 144 800
+255 149 2.200795 714 800 207 144 -1
+250 155 2.266315 714 791 276 137 -1
+212 176 2.513274 -1 681 408 213 -1
+164 219 2.414154 315 447 386 260 -1
+158 225 2.399034 282 447 338 260 -1
+155 228 2.393994 356 434 294 270 -1
+168 172 1.831196 347 434 307 260 -1
+166 180 1.895036 512 375 301 276 800
+164 184 1.928635 494 397 282 288 -1
+160 192 1.992475 421 375 294 294 -1
+156 200 2.057995 800 356 282 294 -1
+154 204 2.089915 -1 347 255 301 -1
+150 210 2.152075 651 338 260 307 -1
+148 214 2.185675 -1 288 255 282 714
+143 220 2.249515 751 294 237 307 -1
+136 228 2.335194 -1 282 241 322 -1
+130 233 2.395674 751 347 217 330 -1
+118 243 2.519994 -1 265 210 307 -1
+73 263 2.903033 447 270 166 245 -1
+87 254 2.729993 -1 288 158 365 255
+79 257 2.792153 -1 338 158 651 -1
+45 263 3.057592 -1 375 160 294 -1
+36 263 3.126472 -1 531 169 255 -1
+19 262 3.257512 -1 421 178 237 -1
+11 260 3.324711 -1 260 194 189 -1
+-5 255 3.455751 -1 -1 224 194 -1
+-19 249 3.580071 -1 -1 245 166 -1
+-26 245 3.645591 800 -1 301 173 -1
+-46 230 3.840470 -1 681 338 176 447
+-58 218 3.971510 -1 478 301 176 -1
+-63 212 4.030310 714 751 552 186 -1
+-74 196 4.107590 -1 800 -1 200 -1
+-80 188 4.115990 -1 791 -1 207 -1
+-85 180 4.107590 -1 791 -1 213 800
+-87 176 4.104230 -1 681 -1 213 -1
+-91 169 4.092470 -1 714 -1 224 -1
+-93 166 4.085750 -1 714 -1 224 -1
+-98 160 4.073989 791 552 -1 232 -1
+-101 157 4.068949 -1 552 -1 237 -1
+-106 151 4.052149 -1 552 -1 245 -1
+-112 145 4.037029 714 597 -1 250 -1
+-115 142 4.030309 -1 574 -1 237 -1
+-93 139 3.685910 714 512 -1 276 434
+-100 135 3.751430 -1 494 -1 276 552
+-103 132 3.785029 574 462 -1 288 552
+-109 127 3.848869 494 462 -1 288 791
+-112 124 3.879109 478 421 -1 288 -1
+-118 118 3.944629 531 421 -1 301 -1
+-124 112 4.008469 531 421 -1 301 800
+-127 109 4.040389 447 365 -1 294 -1
+-132 103 4.105908 512 375 -1 294 -1
+-134 100 4.137828 447 386 -1 315 -1
+-115 115 3.833749 386 365 714 282 -1
+-124 106 3.813589 408 213 -1 307 -1
+-130 101 3.800149 386 322 751 322 -1
+-133 99 3.793429 375 338 -1 322 -1
+-139 95 3.781669 322 338 651 330 -1
+-145 90 3.766549 338 338 623 307 -1
+-148 88 3.759829 330 322 651 330 -1
+-155 84 3.746389 307 307 623 294 -1
+-159 82 3.741349 315 301 552 330 -1
+-166 78 3.712789 270 288 512 147 -1
+-73 68 3.044151 276 288 294 322 -1
+-76 68 3.069351 245 282 200 330 681
+-84 68 3.126471 232 250 191 338 791
+-91 68 3.181911 217 270 183 330 714
+-107 66 3.307910 217 250 186 338 800
+-124 62 3.442310 181 217 213 322 800
+-132 59 3.507830 186 200 322 338 -1
+-145 53 3.615350 176 200 478 322 597
+-154 48 3.692629 149 183 301 330 -1
+-157 46 3.719509 140 173 241 322 478
+-129 53 3.418790 131 173 181 347 494
+-131 53 3.363350 113 176 207 356 447
+-136 53 3.275991 106 183 237 365 408
+-139 53 3.158391 -1 207 276 397 301
+-139 53 3.087831 -1 217 294 421 270
+-139 53 2.951752 101 408 250 462 228
+-139 53 2.810632 101 800 228 421 178
+-139 53 2.740072 117 288 221 714 164
+-105 -4 2.108394 131 217 221 -1 147
+-105 -4 2.108394 147 270 191 714 127
+-105 -4 2.108394 171 232 194 -1 104
+-105 -4 2.110074 232 270 191 -1 118
+-107 0 2.140314 462 203 186 -1 112
+-107 1 2.148714 365 191 176 597 112
+-107 1 2.148714 178 189 191 -1 112
+-108 2 2.162154 228 162 191 -1 121
+-99 -28 1.853035 228 149 200 -1 127
+-99 -25 1.770715 210 142 210 -1 122
+-100 -22 1.790875 189 129 207 -1 145
+-102 -16 1.883275 191 131 164 -1 142
+-105 -8 2.004235 203 133 162 -1 137
+-107 -5 2.066394 178 139 152 -1 134
+-111 1 2.200794 149 147 139 -1 137
+-140 24 2.462873 217 156 136 -1 140
+-146 28 2.519993 386 158 131 -1 149
+-149 30 2.546873 462 162 122 -1 151
+-150 31 2.558633 356 147 121 -1 145
+-137 13 2.261274 176 136 114 -1 140
+-143 20 2.362073 276 129 -1 -1 145
+-146 23 2.422553 434 133 -1 597 158
+-153 28 2.550233 221 144 -1 462 171
+-157 30 2.614073 189 176 -1 347 176
+-197 40 2.919832 173 203 -1 322 194
+-205 42 2.978631 171 203 -1 288 183
+-209 42 3.007191 151 186 -1 260 189
+-186 31 2.758552 149 183 -1 265 197
+-190 33 2.756872 144 189 -1 250 194
+-198 36 2.741752 142 181 -1 241 181
+-206 40 2.731672 145 160 -1 241 186
+-210 42 2.726632 142 149 -1 237 181
+-218 46 2.740072 137 137 -1 241 178
+-222 47 2.783752 133 144 -1 197 189
+-230 49 2.901352 129 154 -1 186 200
+-238 51 2.998791 120 136 -1 164 224
+-242 51 3.020631 105 139 -1 144 232
+-250 51 3.121431 102 241 -1 131 255
+-254 51 3.181911 -1 365 -1 122 276
+-262 51 3.215510 -1 217 -1 108 301
+-270 51 3.218870 -1 203 -1 107 301
+-274 51 3.217191 -1 197 -1 104 294
+-282 51 3.205431 -1 186 -1 -1 270
+-286 51 3.198710 -1 181 -1 -1 265
+-294 51 3.186950 -1 178 -1 -1 250
+-298 51 3.180230 -1 176 -1 -1 232
+-306 51 3.163430 -1 169 -1 -1 217
+-310 51 3.160070 -1 164 -1 -1 207
+-318 51 3.143270 -1 166 -1 -1 197
+-322 51 3.138231 -1 160 -1 -1 183
+-329 51 3.121431 -1 160 -1 -1 171
+-334 51 3.092871 -1 183 -1 -1 162
+-281 14 2.533432 -1 176 -1 -1 137
+-284 17 2.572072 -1 115 -1 107 119
+-287 19 2.600632 -1 -1 102 112 113
+-289 20 2.615752 -1 105 -1 107 115
+-294 22 2.659432 -1 154 -1 -1 129
+-297 24 2.687992 -1 -1 -1 -1 145
+-303 26 2.740072 -1 -1 -1 -1 162
+-307 27 2.770312 -1 -1 -1 -1 173
+-314 29 2.829111 -1 -1 -1 -1 200
+-318 30 2.861031 -1 -1 -1 -1 224
+-326 32 2.923191 -1 -1 -1 -1 330
+-413 -23 3.707749 -1 -1 -1 -1 447
+-419 -28 3.847188 -1 -1 107 -1 574
+-425 -34 3.979908 -1 -1 -1 -1 -1
+-427 -37 4.045428 -1 -1 -1 -1 714
+-431 -43 4.164708 -1 -1 -1 -1 -1
+-433 -46 4.218468 -1 -1 -1 -1 -1
+-435 -52 4.322628 -1 -1 -1 -1 -1
+-436 -55 4.379747 -1 -1 -1 -1 681
+-438 -63 4.497347 -1 -1 -1 -1 -1
+-439 -67 4.554467 117 -1 -1 -1 -1
+-439 -75 4.672066 169 -1 -1 -1 -1
+-439 -79 4.732546 217 -1 -1 -1 -1
+-438 -87 4.856866 301 -1 -1 -1 -1
+-437 -91 4.913986 356 -1 -1 107 -1
+-410 -131 5.392785 -1 -1 -1 109 -1
+-408 -133 5.416305 -1 -1 -1 191 -1
+-398 -143 5.523824 -1 129 -1 156 -1
+-395 -145 5.552383 -1 149 -1 120 531
+-389 -149 5.611183 -1 191 -1 -1 207
+-385 -152 5.646463 -1 301 -1 -1 160
+-374 -160 5.755662 -1 494 -1 -1 -1
+-367 -164 5.819502 -1 -1 -1 -1 -1
+-356 -169 5.915262 -1 -1 -1 -1 -1
+-352 -171 5.952222 -1 -1 -1 -1 -1
+-346 -173 6.000942 -1 -1 -1 -1 166
+-372 -156 5.701902 -1 -1 -1 -1 207
+-325 -184 5.873262 -1 512 -1 -1 270
+-313 -188 6.005982 -1 -1 -1 -1 237
+-308 -189 6.079902 -1 -1 -1 -1 213
+-299 -190 6.210941 751 -1 119 -1 189
+-293 -190 6.320141 -1 -1 147 -1 169
+-290 -190 6.367181 -1 494 197 -1 162
+-282 -189 6.473021 -1 -1 237 -1 152
+-276 -187 6.540220 -1 -1 260 -1 142
+-262 -182 6.646060 -1 -1 -1 -1 142
+-150 -137 6.929980 -1 -1 651 121 221
+-137 -125 7.059340 -1 -1 -1 140 213
+-126 -112 7.193739 597 -1 -1 164 237
+-121 -105 7.255899 408 -1 -1 245 250
+-113 -91 7.366779 365 751 -1 301 221
+-110 -85 7.397019 282 -1 -1 356 265
Index: branches/scout/projects/mapping/matlab/data/input_obstacle_0.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input_obstacle_0.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input_obstacle_0.txt	(revision 1346)
@@ -0,0 +1,393 @@
+40 0 0.375241 494 -1 -1 -1 -1
+40 0 0.375241 421 -1 -1 -1 -1
+40 0 0.375241 512 -1 751 -1 -1
+40 0 0.375241 447 -1 552 -1 -1
+40 0 0.375241 375 -1 597 -1 -1
+40 0 0.375241 462 -1 623 -1 -1
+40 0 0.375241 462 -1 -1 -1 -1
+40 0 0.375241 462 -1 -1 -1 -1
+40 0 0.375241 478 -1 -1 -1 -1
+40 0 0.375241 397 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 421 -1 574 -1 -1
+40 0 0.366307 447 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 434 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 397 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 478 -1 -1 -1 -1
+40 0 0.366307 494 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 462 -1 -1 -1 -1
+40 0 0.366307 478 -1 -1 -1 -1
+40 0 0.366307 386 -1 -1 -1 -1
+40 0 0.366307 462 -1 -1 -1 -1
+40 0 0.366307 462 -1 -1 -1 -1
+40 0 0.366307 408 -1 -1 -1 -1
+40 0 0.366307 494 -1 -1 -1 -1
+40 0 0.366307 397 -1 -1 -1 -1
+40 0 0.366307 462 -1 681 -1 -1
+40 0 0.366307 421 -1 512 -1 -1
+40 0 0.366307 512 -1 -1 -1 -1
+40 0 0.376730 462 -1 751 -1 -1
+40 0 0.396088 552 -1 -1 -1 -1
+40 0 0.433314 494 -1 -1 -1 -1
+41 0 0.442248 434 -1 -1 -1 -1
+48 0 0.305256 -1 -1 -1 -1 -1
+48 0 0.305256 447 -1 681 -1 -1
+48 0 0.375241 714 -1 -1 -1 -1
+48 0 0.381197 714 -1 -1 -1 -1
+48 0 0.335037 751 -1 -1 -1 -1
+48 0 0.294832 -1 -1 -1 -1 -1
+48 0 0.282920 478 -1 -1 -1 -1
+51 0 0.315679 -1 -1 -1 -1 -1
+76 2 0.309723 494 -1 -1 -1 -1
+80 2 0.288876 574 -1 -1 -1 -1
+85 2 0.266540 434 -1 -1 -1 -1
+88 2 0.262073 434 -1 -1 -1 -1
+93 2 0.265051 552 -1 -1 -1 751
+97 2 0.275474 552 -1 -1 -1 -1
+102 2 0.266540 462 -1 -1 -1 -1
+106 2 0.251650 365 -1 -1 -1 -1
+110 2 0.239737 552 -1 -1 -1 -1
+114 2 0.230803 462 -1 -1 -1 -1
+133 2 0.233781 408 -1 -1 -1 -1
+182 5 0.190598 -1 -1 -1 -1 -1
+195 6 0.187620 -1 -1 -1 -1 -1
+200 6 0.181664 -1 -1 -1 -1 -1
+204 6 0.174219 -1 -1 623 -1 -1
+209 6 0.168263 -1 -1 -1 -1 -1
+215 6 0.166774 -1 -1 -1 -1 -1
+222 6 0.172730 -1 -1 -1 -1 -1
+226 6 0.183153 -1 -1 -1 -1 -1
+234 6 0.187620 -1 -1 -1 -1 -1
+240 6 0.190598 -1 -1 -1 -1 -1
+253 7 0.186131 -1 -1 -1 -1 -1
+257 7 0.174219 -1 -1 -1 -1 -1
+266 7 0.151883 -1 -1 -1 -1 597
+344 8 0.145927 -1 681 -1 -1 270
+351 8 0.138481 -1 681 -1 -1 270
+367 8 0.126569 -1 623 -1 -1 270
+376 8 0.125080 -1 597 681 751 270
+391 9 0.123591 -1 552 -1 -1 276
+395 9 0.125080 -1 574 -1 -1 276
+405 9 0.126569 -1 512 -1 -1 265
+414 9 0.129547 -1 512 -1 -1 270
+422 9 0.134014 -1 462 -1 -1 276
+428 9 0.132525 -1 512 681 -1 276
+434 9 0.132525 -1 462 -1 -1 255
+439 9 0.142949 -1 494 751 -1 265
+443 9 0.154861 -1 478 408 -1 270
+447 9 0.172730 -1 494 512 -1 270
+451 9 0.189109 -1 462 512 -1 276
+463 9 0.230803 -1 478 228 -1 301
+465 9 0.248671 -1 408 294 -1 265
+475 9 0.279941 -1 421 322 -1 260
+477 9 0.290365 751 421 338 -1 301
+477 9 0.311212 -1 375 338 -1 301
+477 9 0.340993 -1 386 315 -1 301
+478 9 0.373752 -1 408 315 -1 288
+482 9 0.402044 -1 397 307 -1 307
+487 9 0.434803 -1 434 294 -1 322
+490 9 0.457139 651 434 294 -1 322
+490 9 0.500321 -1 408 276 -1 330
+490 9 0.521168 -1 397 270 512 322
+490 9 0.546482 -1 421 276 -1 322
+492 9 0.616467 -1 408 265 -1 386
+492 9 0.626891 -1 447 255 -1 386
+492 9 0.634336 -1 447 250 681 375
+492 9 0.643270 -1 447 241 -1 347
+493 9 0.658161 -1 478 232 -1 375
+496 9 0.677518 -1 421 232 681 375
+500 9 0.748993 -1 478 228 -1 447
+500 9 0.766861 -1 421 221 -1 375
+500 9 0.784730 -1 552 217 494 447
+501 11 0.830890 -1 714 213 375 478
+501 11 0.829401 -1 574 210 397 421
+501 11 0.829401 -1 494 213 386 478
+501 11 0.829401 -1 623 213 338 478
+501 11 0.829401 -1 651 217 386 494
+501 11 0.829401 -1 714 221 322 552
+501 11 0.829401 -1 574 210 386 574
+501 11 0.829401 -1 597 210 356 552
+501 11 0.829401 -1 597 221 386 552
+501 11 0.829401 -1 552 217 338 494
+501 11 0.829401 -1 651 200 347 447
+501 11 0.829401 -1 681 221 386 512
+501 11 0.829401 -1 623 221 375 574
+501 11 0.829401 -1 597 217 386 421
+501 11 0.829401 -1 512 217 375 447
+501 11 0.829401 -1 681 221 365 447
+501 11 0.829401 -1 681 221 386 597
+501 11 0.829401 -1 494 213 365 552
+501 11 0.829401 -1 681 213 375 574
+501 11 0.829401 -1 597 217 347 512
+501 11 0.829401 -1 597 217 356 574
+501 11 0.829401 -1 574 221 375 552
+501 11 0.829401 -1 623 203 386 512
+501 11 0.829401 -1 751 213 338 478
+501 11 0.829401 -1 651 213 375 478
+501 11 0.829401 -1 597 221 386 552
+501 11 0.829401 -1 574 210 365 512
+501 11 0.829401 -1 714 221 408 478
+501 11 0.829401 -1 714 213 307 494
+501 11 0.829401 -1 623 217 356 552
+501 11 0.829401 -1 512 210 386 434
+501 11 0.829401 -1 552 221 397 447
+501 11 0.829401 -1 552 213 386 623
+501 11 0.829401 -1 623 217 386 478
+501 11 0.829401 -1 494 210 375 478
+501 11 0.829401 -1 574 224 365 447
+501 11 0.829401 -1 623 217 375 478
+501 11 0.829401 -1 623 207 365 512
+501 11 0.875562 -1 714 217 356 552
+503 18 0.869606 -1 623 197 347 574
+504 22 0.859183 -1 651 203 338 421
+22088 16228 0.000000 189 307 408 32281 6400
+514 36 0.939591 -1 681 173 270 434
+514 36 0.952992 -1 397 171 260 397
+514 37 0.967883 -1 494 176 255 397
+514 41 0.979795 -1 494 173 245 478
+516 59 1.009576 -1 434 171 217 421
+517 60 1.018510 -1 347 164 217 447
+517 60 1.027445 -1 288 171 213 347
+517 61 1.039357 -1 397 169 207 447
+517 61 1.054247 -1 397 166 203 447
+517 61 1.049780 -1 288 171 197 494
+517 61 0.994686 -1 322 158 189 347
+517 61 0.982773 -1 330 166 191 356
+517 61 0.933635 -1 408 156 181 255
+517 61 0.924700 -1 347 154 194 255
+517 61 0.918744 -1 356 154 197 255
+517 61 0.918744 -1 338 154 189 232
+517 61 0.918744 -1 322 156 197 241
+517 61 0.918744 -1 375 154 194 260
+517 61 0.918744 -1 288 154 197 250
+517 61 0.918744 -1 265 154 197 260
+517 61 0.918744 -1 315 152 194 228
+517 61 0.918744 -1 386 154 194 260
+517 61 0.918744 -1 276 149 197 250
+517 61 0.918744 -1 356 151 197 260
+517 61 0.918744 -1 307 147 194 260
+517 61 0.918744 -1 301 152 197 255
+517 61 0.918744 -1 397 154 181 260
+517 61 0.918744 -1 330 154 197 255
+517 61 0.918744 -1 270 152 189 255
+517 62 0.985752 -1 -1 169 183 347
+517 62 1.025956 -1 -1 173 171 651
+517 62 1.046803 -1 -1 189 169 574
+517 62 1.081051 -1 -1 183 166 -1
+517 65 1.095941 -1 -1 191 164 714
+521 73 1.103386 -1 -1 203 173 -1
+525 81 1.131678 -1 -1 213 241 421
+528 132 1.232933 -1 714 270 147 288
+532 176 1.261225 -1 681 265 144 265
+533 202 1.274626 -1 552 260 158 255
+535 221 1.296962 -1 552 224 160 294
+535 221 1.296962 -1 512 224 156 288
+535 226 1.322276 -1 447 203 160 294
+535 230 1.338655 -1 512 224 164 288
+535 234 1.343123 -1 494 237 171 294
+535 241 1.347590 -1 462 294 169 265
+535 245 1.356524 -1 408 434 173 288
+535 251 1.378860 -1 421 494 173 294
+535 268 1.429487 -1 386 338 191 294
+535 272 1.430976 -1 375 356 197 288
+535 277 1.444378 -1 365 322 191 288
+535 281 1.466713 -1 375 294 203 301
+535 285 1.497983 -1 356 294 207 301
+535 289 1.532231 -1 338 276 217 315
+535 293 1.578392 408 365 260 232 322
+530 298 1.630508 681 347 260 241 330
+526 302 1.679647 -1 375 237 260 347
+522 306 1.716873 -1 338 245 260 375
+518 310 1.737720 -1 386 245 288 386
+514 314 1.754099 -1 330 228 288 347
+510 323 1.757077 -1 375 213 294 338
+506 329 1.768990 -1 375 210 294 365
+502 334 1.813661 -1 356 200 260 386
+498 342 1.885136 -1 434 200 270 421
+478 369 2.063822 -1 -1 176 301 -1
+474 373 2.107005 -1 552 178 260 -1
+442 393 2.206772 -1 408 178 213 -1
+434 398 2.221662 -1 330 181 197 -1
+394 421 2.342276 -1 -1 191 166 -1
+386 425 2.358656 -1 -1 200 166 -1
+377 430 2.364612 -1 -1 197 162 -1
+363 440 2.364612 -1 -1 183 160 -1
+343 456 2.366101 -1 -1 200 164 -1
+331 464 2.373547 -1 -1 191 158 -1
+323 468 2.383970 -1 -1 191 154 -1
+315 470 2.398861 -1 -1 210 151 -1
+169 522 2.431621 -1 597 232 145 207
+160 527 2.425664 -1 623 232 147 213
+118 548 2.455446 -1 552 228 142 213
+79 557 2.461402 751 478 255 139 221
+70 561 2.459913 -1 494 232 142 213
+62 561 2.467358 -1 478 237 142 221
+54 561 2.482249 -1 478 245 147 217
+48 561 2.497139 -1 462 224 151 207
+40 562 2.509052 -1 447 217 144 207
+31 564 2.512030 -1 421 213 140 217
+21 566 2.512030 -1 356 207 144 207
+15 567 2.520964 -1 386 194 142 221
+12 567 2.526921 -1 421 191 142 217
+12 567 2.526921 -1 408 183 142 213
+12 567 2.526921 -1 408 186 142 213
+12 567 2.526921 -1 408 191 142 207
+12 567 2.526921 -1 408 194 142 217
+12 567 2.526921 -1 408 173 142 213
+12 567 2.526921 -1 365 183 142 217
+11 567 2.525432 -1 408 183 144 203
+8 567 2.497140 -1 397 186 145 203
+4 567 2.436089 -1 375 197 147 210
+0 567 2.388439 478 356 224 147 173
+-27 591 2.395884 597 276 191 152 -1
+-34 595 2.398862 447 270 183 147 -1
+-40 600 2.395884 462 255 173 149 -1
+-41 601 2.388438 421 237 171 151 -1
+-48 604 2.389927 386 241 171 154 -1
+-54 607 2.392906 408 228 166 151 -1
+-55 607 2.401840 365 228 171 147 -1
+-56 608 2.400351 356 217 169 152 -1
+-58 610 2.398862 356 207 169 147 -1
+-67 618 2.395884 330 191 176 152 -1
+-68 619 2.388438 330 200 178 152 -1
+-69 620 2.382482 276 183 191 147 -1
+-70 621 2.378015 301 181 200 152 -1
+-71 622 2.370569 276 173 197 154 -1
+-73 623 2.369080 245 160 183 154 -1
+-75 624 2.376526 250 154 189 152 -1
+-79 627 2.375036 221 147 203 152 -1
+-79 627 2.370569 232 134 221 152 -1
+-79 627 2.385460 228 130 210 147 -1
+-79 627 2.489694 237 120 133 149 -1
+-79 627 2.529898 255 117 126 144 -1
+-79 627 2.620730 270 113 104 149 -1
+-79 627 2.660935 347 114 -1 151 -1
+-79 627 2.695183 434 114 -1 160 -1
+-79 627 2.805373 -1 110 -1 164 -1
+-80 627 2.867913 -1 112 -1 164 -1
+-82 627 2.933431 -1 129 -1 183 623
+-84 627 2.988526 -1 134 -1 181 681
+-84 627 3.037664 -1 145 -1 164 597
+-84 627 3.079358 -1 149 -1 307 574
+-84 627 3.147854 -1 176 -1 245 623
+-84 624 3.232730 -1 210 -1 191 -1
+-84 622 3.307183 -1 276 -1 152 -1
+-84 618 3.359299 -1 375 -1 144 -1
+-84 614 3.395037 -1 462 -1 140 -1
+-84 610 3.427796 -1 512 -1 131 -1
+-84 606 3.465022 -1 -1 -1 124 -1
+-84 602 3.514161 -1 -1 -1 122 -1
+-84 592 3.621373 -1 -1 118 107 -1
+-84 592 3.621373 -1 -1 122 105 -1
+-84 592 3.621373 -1 -1 122 106 -1
+-84 589 3.636264 623 -1 125 105 -1
+-85 585 3.682424 -1 -1 140 103 -1
+-95 571 3.718161 -1 -1 154 -1 -1
+-101 562 3.741986 -1 -1 164 -1 -1
+-105 554 3.789636 -1 -1 178 -1 -1
+-109 546 3.804527 -1 -1 191 -1 -1
+-115 537 3.798570 651 -1 197 -1 -1
+-121 528 3.804527 421 -1 194 -1 -1
+-125 520 3.820906 552 -1 224 -1 -1
+-130 513 3.826863 -1 -1 228 -1 751
+-141 496 3.826863 714 -1 241 103 -1
+-145 488 3.819417 -1 597 228 105 -1
+-149 480 3.817928 597 -1 250 106 -1
+-153 472 3.817928 356 -1 255 109 -1
+-157 464 3.807505 714 408 250 108 -1
+-193 417 3.753898 574 -1 228 120 -1
+-205 405 3.752409 681 -1 232 120 -1
+-209 401 3.733052 623 -1 228 124 -1
+-215 392 3.727095 330 -1 232 120 -1
+-236 366 3.689868 -1 -1 217 130 315
+-240 362 3.695825 -1 -1 210 124 330
+-245 357 3.697314 651 -1 221 129 330
+-259 343 3.698803 -1 -1 221 127 338
+-263 339 3.697314 -1 -1 224 129 315
+-271 331 3.703270 -1 -1 224 133 322
+-275 327 3.700292 -1 -1 224 129 294
+-279 323 3.685401 -1 -1 217 130 322
+-282 319 3.677956 552 -1 217 124 315
+-288 313 3.680934 -1 -1 221 134 322
+-291 308 3.679445 -1 -1 221 130 322
+-292 304 3.677956 -1 -1 221 133 288
+-301 296 3.676466 -1 -1 221 131 322
+-308 289 3.676466 552 -1 224 130 322
+-312 285 3.671999 -1 -1 224 131 322
+-318 279 3.669021 -1 -1 213 131 322
+-330 269 3.667531 -1 -1 221 131 315
+-348 253 3.663064 -1 -1 221 131 307
+-352 248 3.654130 -1 -1 221 133 307
+-352 244 3.633283 -1 -1 194 133 307
+-352 240 3.613925 623 -1 197 133 315
+-353 228 3.667531 -1 -1 221 129 315
+-354 224 3.677954 -1 -1 232 131 322
+-357 220 3.655618 365 -1 213 131 307
+-361 215 3.643706 -1 -1 210 133 307
+-375 204 3.651151 -1 -1 213 131 322
+-385 195 3.652640 651 -1 217 140 322
+-393 187 3.645195 -1 714 217 131 322
+-397 181 3.633282 -1 -1 221 133 322
+-402 174 3.624348 -1 -1 207 130 322
+-409 166 3.613925 -1 -1 210 133 307
+-417 158 3.612435 -1 -1 207 127 315
+-427 149 3.615414 -1 -1 210 134 288
+-444 131 3.631794 -1 -1 203 131 -1
+-454 122 3.627327 -1 -1 213 131 -1
+-458 116 3.618392 -1 -1 207 131 -1
+-464 110 3.613925 -1 -1 200 131 -1
+-480 100 3.616903 -1 -1 213 125 -1
+-490 92 3.619882 714 -1 213 131 -1
+-502 81 3.622860 -1 -1 207 130 -1
+-515 71 3.624349 -1 -1 213 131 -1
+-536 58 3.627327 -1 -1 221 125 -1
+-545 49 3.625838 -1 -1 221 127 -1
+-549 45 3.615414 -1 -1 213 130 -1
+-553 41 3.599035 -1 -1 203 127 -1
+-563 34 3.602013 -1 -1 197 131 -1
+-571 27 3.613925 -1 -1 210 127 -1
+-592 4 3.627326 -1 -1 221 125 -1
+-597 -1 3.622859 -1 -1 221 129 -1
+-606 -6 3.630305 -1 -1 232 130 -1
+-612 -10 3.645195 -1 -1 241 129 -1
+-619 -15 3.652641 -1 -1 237 129 -1
+-631 -21 3.643706 -1 -1 245 131 -1
+-635 -24 3.631794 -1 -1 245 133 -1
+-639 -27 3.625837 -1 -1 265 133 -1
+-653 -34 3.618392 -1 -1 -1 133 -1
+-661 -38 3.606479 -1 -1 -1 133 -1
+-669 -42 3.596056 -1 -1 -1 134 -1
+-678 -43 3.590100 -1 -1 -1 136 -1
+-692 -48 3.588610 -1 -1 -1 130 -1
+-703 -52 3.585632 -1 494 -1 133 -1
+-709 -53 3.573720 -1 -1 -1 133 -1
+-712 -53 3.551384 -1 -1 -1 137 -1
+-716 -53 3.545427 -1 -1 -1 131 -1
+-719 -54 3.546916 -1 -1 -1 137 -1
+-719 -54 3.535004 -1 -1 -1 136 -1
+-723 -54 3.557340 -1 -1 681 136 -1
+-729 -55 3.581165 -1 -1 -1 129 -1
+-737 -59 3.567763 -1 -1 -1 133 -1
+-745 -63 3.539471 -1 -1 -1 136 -1
+-756 -68 3.535004 -1 -1 -1 127 494
+-776 -72 3.548406 -1 -1 -1 129 -1
+-778 -72 3.554362 -1 -1 -1 129 -1
+-783 -72 3.551384 -1 -1 -1 129 -1
+-788 -73 3.548406 -1 -1 -1 127 -1
+-796 -75 3.545428 -1 -1 -1 131 -1
+-801 -76 3.552873 -1 681 -1 129 -1
+-832 -80 3.515646 -1 -1 -1 134 -1
+-833 -80 3.512668 -1 -1 -1 133 -1
+-833 -80 3.532026 -1 447 681 131 -1
+-833 -80 3.543938 -1 -1 623 139 -1
+-833 -80 3.543938 -1 -1 -1 137 -1
+-833 -80 3.543938 -1 -1 -1 140 -1
+-833 -80 3.543938 -1 -1 -1 144 -1
+-833 -80 3.543938 -1 -1 681 133 -1
+-833 -80 3.543938 -1 -1 -1 139 -1
+-833 -80 3.543938 -1 -1 -1 139 -1
+-833 -80 3.543938 -1 -1 -1 140 -1
Index: branches/scout/projects/mapping/matlab/data/input_obstacle_1.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input_obstacle_1.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input_obstacle_1.txt	(revision 1346)
@@ -0,0 +1,259 @@
+5 0 0.376730 270 -1 552 270 -1
+5 0 0.376730 301 -1 447 270 -1
+4 0 0.360350 294 -1 494 260 -1
+4 0 0.340993 288 -1 494 265 -1
+4 0 0.291854 315 -1 447 270 -1
+1 0 0.212934 301 -1 462 270 -1
+0 0 -0.043183 288 -1 552 276 -1
+0 0 -0.089343 294 -1 651 270 -1
+14 0 -0.058073 265 -1 574 260 -1
+21 0 -0.072964 270 -1 478 260 -1
+30 0 -0.148905 270 -1 494 245 -1
+30 0 -0.287387 255 -1 512 265 -1
+25 1 -0.673051 294 -1 447 276 -1
+25 0 -0.743037 260 -1 462 276 -1
+30 -5 -0.717723 294 -1 462 260 -1
+38 -13 -0.714745 301 -1 447 276 -1
+44 -18 -0.713256 294 -1 434 270 -1
+53 -24 -0.726657 -1 -1 462 270 478
+53 -24 -0.726657 681 -1 462 265 421
+53 -24 -0.726657 -1 -1 447 270 421
+53 -24 -0.726657 -1 -1 397 270 408
+53 -24 -0.726657 434 -1 408 270 512
+53 -24 -0.726657 -1 -1 408 245 494
+53 -24 -0.726657 -1 -1 434 255 -1
+53 -24 -0.747504 -1 -1 478 270 315
+53 -24 -0.786219 -1 -1 462 270 228
+53 -24 -0.823445 -1 -1 421 260 228
+53 -24 -0.853226 -1 -1 397 270 224
+53 -24 -0.862161 -1 -1 365 270 217
+53 -24 -0.830891 -1 -1 397 270 232
+53 -24 -0.830891 -1 -1 512 265 228
+53 -24 -0.874073 -1 -1 462 245 228
+53 -25 -1.049781 -1 -1 408 260 213
+53 -25 -1.107854 -1 -1 375 265 221
+52 -24 -1.180818 -1 -1 397 276 217
+51 -23 -1.232935 -1 -1 375 260 221
+51 -23 -1.307387 -1 -1 408 265 217
+51 -23 -1.401198 -1 -1 386 260 217
+50 -22 -1.521811 -1 -1 365 241 217
+49 -19 -1.652847 -1 -1 386 265 224
+49 -12 -1.831533 -1 -1 365 245 210
+45 -14 -1.892584 -1 -1 375 250 224
+40 -22 -1.867271 -1 -1 397 338 221
+36 -26 -1.876205 -1 -1 347 434 210
+32 -30 -1.897051 -1 -1 375 512 210
+20 -39 -2.081694 -1 -1 397 245 224
+16 -39 -2.190394 -1 681 365 245 224
+11 -36 -2.528409 -1 714 365 250 232
+0 -41 -2.500117 -1 681 338 221 228
+-23 -59 -2.476292 -1 623 347 241 228
+-28 -63 -2.471825 -1 651 347 241 228
+-32 -65 -2.491182 -1 623 347 221 213
+-35 -65 -2.631153 -1 574 338 224 574
+-35 -65 -2.763678 -1 597 315 228 -1
+-28 -58 -3.101693 -1 494 288 241 -1
+-24 -56 -3.207416 -1 494 276 232 -1
+-17 -53 -3.356322 -1 478 232 224 -1
+-17 -49 -3.375679 -1 494 228 228 -1
+-17 -45 -3.395037 -1 478 221 232 -1
+-20 -41 -3.336964 714 494 224 228 -1
+-20 -37 -3.319096 -1 478 237 232 -1
+-20 -33 -3.293782 -1 447 338 228 -1
+-20 -29 -3.262512 -1 478 552 228 -1
+-20 -17 -3.228263 -1 478 408 237 408
+-5 -5 -3.582657 -1 447 347 260 447
+-2 -3 -3.654132 681 408 338 250 494
+-2 0 -3.676467 -1 408 338 276 386
+-5 2 -3.633285 623 408 301 276 421
+-6 2 -3.597548 -1 408 301 288 447
+-6 2 -3.466511 -1 478 307 315 347
+-8 2 -3.429285 -1 478 301 347 397
+-10 2 -3.415883 -1 512 294 338 375
+-11 2 -3.386102 -1 552 288 255 478
+0 0 -3.570745 -1 494 294 574 -1
+0 0 -3.677956 -1 386 294 386 -1
+0 0 -3.677956 -1 681 301 421 -1
+0 2 -3.864088 -1 -1 330 356 -1
+0 2 -3.840263 -1 -1 315 338 -1
+-5 6 -3.858131 -1 -1 365 330 -1
+-5 6 -3.878978 -1 -1 347 330 -1
+-5 6 -3.916204 -1 -1 356 338 -1
+-5 6 -3.968321 -1 -1 338 294 -1
+-5 6 -4.035328 -1 -1 338 322 -1
+-5 6 -4.127649 -1 -1 347 322 -1
+1 -1 -4.356964 -1 -1 347 307 -1
+0 0 -4.379299 -1 -1 330 307 -1
+0 0 -4.401635 -1 -1 365 307 -1
+-1 6 -4.358452 -1 -1 338 294 -1
+-2 11 -4.352496 -1 -1 347 294 -1
+-2 15 -4.349517 -1 -1 386 294 -1
+-2 21 -4.337605 -1 -1 408 288 -1
+-3 36 -4.428436 -1 -1 338 270 -1
+-3 36 -4.467151 -1 -1 347 270 -1
+-3 36 -4.496933 -1 -1 347 270 -1
+-3 36 -4.531181 -1 -1 347 270 -1
+-3 36 -4.596699 -1 714 338 260 -1
+-3 36 -4.681575 -1 -1 338 265 447
+-1 34 -4.767941 -1 -1 322 260 375
+2 25 -5.271239 -1 714 347 255 356
+5 39 -5.304000 -1 512 347 250 356
+5 42 -5.339737 -1 714 322 232 347
+5 42 -5.478219 -1 623 322 250 356
+5 42 -5.527358 -1 597 301 250 375
+4 41 -5.576496 -1 597 301 250 375
+2 39 -5.744759 -1 552 315 241 322
+0 34 -5.892174 -1 512 315 228 365
+0 34 -5.936845 651 494 315 241 356
+0 34 -5.936845 -1 462 301 241 330
+0 34 -5.936845 -1 512 307 241 356
+0 34 -5.936845 -1 512 301 228 356
+0 34 -5.936845 -1 478 315 241 330
+0 34 -5.936845 -1 494 301 241 356
+0 34 -5.936845 -1 512 301 241 347
+0 34 -5.936845 -1 494 315 241 365
+0 34 -5.936845 -1 512 301 241 356
+0 34 -5.936845 -1 494 294 241 375
+0 34 -5.936845 -1 494 301 241 356
+0 34 -5.936845 -1 478 288 224 356
+0 34 -5.936845 -1 447 315 241 365
+0 34 -5.936845 -1 494 315 241 347
+0 34 -5.936845 681 478 315 241 356
+0 34 -5.936845 -1 494 315 217 347
+0 34 -5.936845 -1 494 301 241 356
+0 34 -5.936845 -1 512 315 245 356
+0 34 -5.936845 -1 478 294 221 356
+0 34 -5.936845 -1 512 301 232 375
+0 34 -5.936845 -1 574 260 228 356
+0 34 -5.936845 -1 494 315 241 386
+0 34 -5.936845 -1 447 315 245 365
+0 34 -5.936845 -1 494 315 241 375
+0 34 -5.936845 -1 512 315 255 386
+0 34 -5.936845 -1 447 294 221 356
+0 34 -5.936845 -1 512 315 241 347
+0 34 -5.936845 -1 494 315 241 330
+0 34 -5.936845 -1 494 315 241 365
+0 34 -5.936845 -1 478 315 241 356
+0 34 -5.936845 -1 494 315 241 365
+0 34 -5.936845 -1 434 307 241 356
+2 35 -5.893663 -1 478 294 241 347
+2 35 -5.893663 -1 434 301 241 365
+2 35 -5.893663 -1 512 276 241 356
+2 35 -5.893663 -1 447 307 241 356
+2 35 -5.893663 -1 478 301 241 356
+2 35 -5.893663 -1 478 307 241 356
+2 35 -5.893663 -1 494 288 241 365
+2 35 -5.892174 -1 494 301 245 356
+2 35 -5.892174 751 447 301 237 356
+2 35 -5.892174 -1 494 307 232 356
+10 35 -5.722423 -1 552 228 241 447
+23 37 -5.756671 -1 462 228 250 375
+27 38 -5.753693 -1 434 260 232 397
+29 39 -5.767095 -1 421 315 245 386
+29 39 -5.796876 -1 421 386 250 386
+29 39 -5.826657 -1 397 434 250 397
+29 39 -5.854949 -1 434 386 232 397
+29 39 -5.905578 -1 434 478 241 397
+27 37 -5.933869 -1 397 408 245 397
+11 27 -6.228702 -1 408 315 270 478
+7 24 -6.329957 -1 408 294 276 447
+4 21 -6.413344 -1 447 288 288 447
+16 9 -6.303154 -1 408 260 330 623
+16 5 -6.300176 -1 478 260 330 512
+16 2 -6.301665 -1 447 260 322 751
+16 1 -6.306132 -1 462 260 338 714
+5 0 -6.648613 -1 714 237 408 -1
+9 -1 -6.636701 -1 714 221 597 -1
+11 -1 -6.623299 -1 -1 224 751 -1
+14 -1 -6.586072 -1 -1 228 681 -1
+18 -1 -6.533956 -1 -1 224 462 -1
+23 -1 -6.490773 -1 714 237 365 -1
+31 -1 -6.478860 -1 -1 228 356 -1
+33 -1 -6.492262 -1 -1 232 347 -1
+35 -1 -6.527999 -1 -1 217 338 -1
+35 -1 -6.648612 681 -1 224 294 -1
+33 0 -6.706685 -1 -1 221 288 -1
+30 0 -6.764758 -1 -1 217 276 -1
+27 0 -6.839210 -1 -1 217 270 -1
+25 0 -6.907706 408 -1 224 265 -1
+21 0 -6.979180 -1 -1 221 260 -1
+9 0 -7.163823 -1 -1 232 250 -1
+6 0 -7.245720 -1 -1 232 241 -1
+6 0 -7.268056 -1 -1 237 237 -1
+10 -5 -7.239765 -1 -1 232 228 -1
+13 -9 -7.265079 -1 -1 237 228 -1
+14 -14 -7.300816 -1 -1 213 217 -1
+14 -17 -7.323151 -1 -1 217 221 -1
+15 -19 -7.338041 -1 -1 217 207 -1
+15 -19 -7.349955 -1 -1 224 213 -1
+15 -19 -7.360378 -1 623 232 207 -1
+14 -18 -7.367824 714 -1 245 203 -1
+14 -18 -7.367824 597 -1 232 203 -1
+13 -17 -7.388670 512 -1 232 203 -1
+13 -18 -7.443765 623 -1 213 210 -1
+6 -8 -7.771357 -1 -1 221 191 -1
+6 -8 -7.807094 -1 -1 232 191 -1
+6 -17 -7.768378 -1 -1 232 186 -1
+6 -25 -7.741575 -1 -1 224 186 -1
+6 -33 -7.711794 228 -1 241 169 -1
+6 -41 -7.710305 478 -1 245 176 -1
+6 -47 -7.757955 597 -1 250 176 -1
+6 -51 -7.838363 365 -1 250 171 -1
+0 -52 -8.006625 307 -1 241 171 228
+0 -48 -8.079589 232 -1 232 173 228
+0 -35 -8.404202 255 -1 301 158 237
+-3 -32 -8.602244 386 -1 301 169 221
+-17 -49 -8.660317 -1 -1 294 176 224
+-21 -53 -8.721369 714 -1 294 164 224
+-23 -53 -8.822624 -1 -1 301 166 221
+-23 -53 -8.989398 -1 -1 294 171 224
+-52 -51 -9.165106 494 -1 -1 181 250
+-57 -49 -9.369104 751 -1 -1 191 237
+-54 -46 -9.422709 -1 -1 -1 197 237
+-50 -45 -9.482271 -1 -1 -1 197 241
+-48 -43 -9.555234 -1 -1 -1 197 217
+-51 -24 -10.001951 -1 -1 -1 228 217
+-55 -20 -10.021310 347 -1 -1 232 217
+-55 -16 -10.057047 -1 -1 -1 241 217
+-55 -12 -10.119588 -1 -1 -1 250 217
+-55 -10 -10.214888 -1 -1 -1 255 221
+-51 -10 -10.339968 478 -1 -1 270 194
+-47 -10 -10.485894 -1 623 -1 276 207
+-50 -1 -10.484405 -1 -1 -1 288 183
+-54 5 -10.471003 356 -1 -1 288 194
+-58 11 -10.454623 -1 -1 -1 322 186
+-59 15 -10.439733 -1 -1 -1 294 200
+-62 27 -10.481426 -1 -1 -1 356 250
+-62 27 -10.521631 -1 -1 -1 347 265
+-62 27 -10.555879 597 -1 -1 347 260
+-59 24 -10.645222 -1 -1 -1 408 276
+-55 20 -10.703294 478 -1 -1 447 288
+-52 16 -10.758389 -1 -1 -1 512 270
+-52 16 -10.758389 -1 -1 -1 -1 276
+-52 16 -10.758389 714 -1 -1 -1 270
+-52 16 -10.758389 -1 -1 -1 -1 260
+-52 16 -10.758389 375 -1 -1 -1 255
+-47 2 -10.975790 -1 -1 -1 -1 245
+-44 0 -11.042797 -1 -1 -1 -1 255
+-40 0 -11.077044 -1 -1 -1 -1 265
+-36 5 -11.026417 -1 -1 -1 -1 270
+-32 8 -11.005569 -1 -1 -1 574 265
+-29 15 -10.984720 -1 -1 -1 -1 294
+-27 15 -11.013013 -1 -1 -1 -1 301
+-25 15 -11.024925 -1 -1 -1 -1 315
+-25 15 -11.024925 -1 -1 -1 -1 375
+-25 13 -11.050240 -1 -1 -1 -1 494
+-25 13 -11.050240 -1 -1 -1 -1 -1
+-25 13 -11.050240 -1 -1 -1 -1 -1
+-24 11 -11.094911 -1 -1 -1 -1 -1
+-12 30 -11.111291 -1 -1 -1 -1 -1
+-8 32 -11.093422 -1 -1 -1 -1 -1
+0 33 -11.188722 -1 -1 -1 -1 -1
+0 33 -11.228926 -1 -1 -1 -1 -1
+0 33 -11.275085 -1 -1 -1 -1 -1
+0 33 -11.355494 -1 -1 -1 -1 -1
+0 30 -11.440371 -1 714 -1 -1 -1
+0 21 -11.839438 -1 714 -1 -1 315
+16 22 -12.204256 -1 338 -1 -1 294
+14 20 -12.327847 -1 597 -1 -1 301
+8 15 -12.594387 -1 623 -1 -1 301
Index: branches/scout/projects/mapping/matlab/data/input_obstacle_2.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input_obstacle_2.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input_obstacle_2.txt	(revision 1346)
@@ -0,0 +1,184 @@
+30 0 0.324613 -1 -1 512 200 -1
+30 0 0.324613 -1 -1 462 197 -1
+30 0 0.324613 -1 -1 478 200 -1
+30 0 0.324613 -1 -1 574 203 -1
+30 0 0.324613 -1 -1 478 203 -1
+30 0 0.324613 -1 -1 512 203 -1
+30 0 0.324613 -1 -1 494 203 -1
+30 0 0.324613 -1 -1 434 200 -1
+30 0 0.324613 -1 -1 447 203 -1
+30 0 0.323124 -1 -1 478 203 -1
+30 0 0.230803 681 -1 375 203 -1
+30 0 0.259095 -1 -1 386 210 -1
+33 0 0.323124 -1 -1 478 203 -1
+33 0 0.367796 -1 -1 597 207 -1
+33 0 0.388642 -1 -1 681 210 -1
+34 0 0.366307 -1 -1 574 207 -1
+38 0 0.351416 -1 -1 651 210 -1
+46 2 0.351416 -1 -1 494 213 -1
+51 2 0.352905 -1 -1 552 197 -1
+57 2 0.348438 -1 -1 597 213 -1
+68 4 0.354394 -1 -1 597 203 -1
+80 6 0.354394 -1 -1 651 221 -1
+94 10 0.351416 -1 -1 574 213 -1
+103 12 0.345460 -1 -1 512 228 -1
+107 12 0.329080 -1 -1 574 221 -1
+111 12 0.309722 574 -1 552 221 -1
+134 15 0.294832 338 -1 447 228 -1
+144 16 0.288876 307 -1 574 224 -1
+172 20 0.266540 276 -1 478 237 -1
+180 20 0.242715 241 -1 447 221 -1
+186 20 0.238248 478 -1 478 232 -1
+202 20 0.215912 -1 -1 408 241 -1
+208 20 0.204000 -1 -1 397 241 -1
+212 20 0.196554 597 -1 375 245 -1
+222 21 0.193576 -1 -1 434 250 -1
+234 22 0.196554 -1 -1 462 228 -1
+238 22 0.195065 -1 -1 375 245 -1
+246 22 0.192087 -1 -1 434 250 -1
+252 22 0.190598 -1 -1 397 245 -1
+262 23 0.186131 -1 -1 421 241 -1
+269 23 0.178686 -1 -1 386 237 -1
+283 24 0.180175 -1 -1 408 250 -1
+293 24 0.181664 -1 -1 408 288 -1
+301 24 0.171240 -1 -1 421 375 -1
+308 24 0.162306 -1 -1 408 386 -1
+329 24 0.135503 -1 -1 356 237 -1
+364 24 0.122102 -1 -1 375 232 -1
+398 24 0.163795 -1 623 386 232 245
+414 24 0.171240 -1 714 365 237 224
+427 24 0.187620 -1 552 315 232 221
+435 24 0.198043 -1 552 315 241 217
+445 24 0.224846 -1 623 237 241 217
+449 24 0.251649 -1 623 260 232 224
+453 24 0.285897 681 597 315 221 228
+455 24 0.330569 -1 623 -1 245 237
+459 24 0.363328 -1 597 751 250 250
+462 24 0.415445 -1 623 574 232 260
+466 24 0.488408 623 681 478 265 301
+468 24 0.559883 -1 623 434 265 386
+470 25 0.668584 -1 714 434 322 -1
+474 29 0.686452 -1 623 434 347 -1
+478 32 0.719211 -1 681 397 330 -1
+480 32 0.753460 -1 751 397 386 -1
+480 32 0.792175 -1 -1 408 397 -1
+481 34 0.820467 -1 -1 386 365 -1
+486 39 0.856204 -1 -1 397 421 -1
+496 51 0.988730 -1 751 365 322 -1
+496 53 1.060204 -1 447 375 -1 -1
+502 73 1.136145 -1 494 397 512 -1
+502 94 1.238889 -1 -1 408 478 -1
+502 99 1.261225 -1 -1 397 421 -1
+502 102 1.262714 -1 -1 365 462 -1
+502 104 1.270159 -1 -1 408 408 -1
+502 104 1.283561 -1 -1 397 434 -1
+502 104 1.291006 -1 -1 434 462 -1
+502 104 1.292495 -1 -1 434 462 -1
+502 104 1.292495 -1 -1 375 447 -1
+502 104 1.325254 -1 -1 421 397 -1
+502 108 1.389283 -1 -1 597 434 -1
+502 120 1.460757 -1 -1 478 397 -1
+502 133 1.499472 -1 -1 512 356 -1
+502 147 1.505429 -1 -1 421 397 -1
+502 152 1.511385 -1 -1 462 408 -1
+502 185 1.542655 -1 -1 322 408 -1
+489 245 1.579881 -1 681 512 347 237
+485 246 1.590304 -1 623 651 408 260
+481 251 1.596260 -1 681 -1 397 260
+477 258 1.596260 -1 714 -1 397 245
+473 264 1.597749 -1 651 -1 408 245
+469 269 1.608173 -1 651 -1 408 241
+457 287 1.618596 -1 574 751 386 228
+453 288 1.634975 -1 552 681 421 232
+451 288 1.633486 -1 623 681 421 237
+451 288 1.633486 -1 574 597 421 250
+451 288 1.633486 -1 574 623 408 224
+451 288 1.633486 -1 597 597 421 228
+451 288 1.633486 -1 552 623 375 237
+450 288 1.631997 -1 623 574 397 228
+450 288 1.631997 -1 552 623 397 228
+450 288 1.631997 -1 552 681 408 232
+447 288 1.649866 -1 552 574 421 237
+443 290 1.704961 -1 494 512 434 260
+439 292 1.760056 -1 574 447 408 245
+435 292 1.812173 -1 512 447 397 301
+431 292 1.858333 -1 681 421 447 356
+419 301 1.841954 -1 574 408 512 301
+399 302 1.897049 408 386 574 32375 6400
+391 309 1.876202 751 -1 397 386 -1
+387 310 1.891093 -1 -1 408 -1 -1
+383 311 1.917895 -1 -1 365 -1 -1
+375 313 1.932786 -1 -1 386 -1 -1
+371 315 1.941720 -1 -1 347 -1 -1
+367 316 1.958099 -1 -1 397 751 -1
+363 317 1.970012 -1 -1 386 681 -1
+359 320 1.975968 -1 -1 421 597 -1
+346 333 1.956610 -1 -1 397 623 751
+342 336 1.952143 681 -1 375 623 375
+330 343 1.971501 -1 -1 408 552 330
+325 348 1.970012 -1 -1 365 512 301
+308 368 1.981924 -1 375 397 494 245
+299 380 1.980435 -1 -1 386 447 241
+290 394 1.978946 -1 -1 397 462 228
+274 414 1.992347 330 681 397 386 217
+269 418 2.005749 -1 -1 397 434 221
+265 419 2.017662 -1 -1 408 421 224
+261 422 2.023618 -1 -1 397 447 228
+255 429 2.025107 -1 -1 408 421 224
+251 433 2.016173 -1 -1 434 421 213
+244 441 2.011706 -1 -1 408 408 217
+239 446 2.016173 -1 -1 408 408 217
+231 457 2.017662 -1 -1 478 408 213
+226 462 2.008728 -1 -1 434 408 330
+222 464 1.998304 -1 -1 408 408 552
+217 467 1.999793 -1 -1 434 397 651
+205 473 1.986392 -1 -1 552 356 494
+201 475 1.987881 -1 -1 512 386 322
+197 479 1.989370 -1 -1 478 386 356
+179 500 1.974480 -1 -1 651 386 365
+175 501 1.961078 -1 -1 597 330 408
+171 501 1.952144 -1 -1 751 356 597
+167 502 1.956611 -1 -1 651 386 574
+155 507 1.992348 623 -1 -1 408 651
+142 519 1.964056 -1 -1 -1 408 -1
+130 519 1.874714 -1 -1 597 434 714
+126 519 1.850889 -1 -1 -1 462 714
+121 519 1.833021 -1 -1 -1 494 714
+121 519 1.833021 -1 -1 -1 478 681
+121 519 1.833021 -1 -1 -1 462 552
+121 519 1.833021 623 -1 -1 512 260
+121 519 1.833021 -1 -1 -1 512 265
+121 519 1.833021 751 -1 -1 597 301
+121 519 1.833021 -1 -1 -1 574 301
+121 519 1.833021 -1 -1 -1 597 347
+121 519 1.833021 -1 -1 -1 574 338
+121 519 1.833021 -1 -1 -1 574 315
+121 519 1.833021 -1 -1 -1 651 347
+121 519 1.833021 -1 -1 -1 651 365
+121 519 1.833021 -1 -1 -1 -1 365
+121 519 1.833021 -1 -1 -1 651 338
+121 519 1.833021 -1 -1 -1 651 338
+121 519 1.833021 751 -1 -1 512 338
+118 518 1.871736 -1 -1 -1 714 434
+118 518 1.871736 -1 -1 -1 751 478
+117 518 1.873225 -1 -1 -1 714 408
+110 522 1.965546 -1 -1 -1 -1 -1
+106 526 1.990860 681 -1 -1 -1 -1
+100 534 1.993838 -1 751 -1 -1 -1
+84 547 2.111473 -1 -1 -1 -1 -1
+80 551 2.133809 -1 -1 -1 -1 -1
+76 555 2.156145 -1 -1 -1 -1 -1
+72 559 2.193371 -1 -1 -1 -1 -1
+67 563 2.224641 -1 -1 -1 -1 -1
+60 567 2.239532 -1 681 -1 -1 -1
+50 573 2.251444 -1 623 -1 -1 -1
+34 584 2.325897 -1 494 -1 -1 -1
+30 585 2.348233 -1 512 -1 -1 -1
+20 585 2.379503 -1 478 -1 -1 -1
+15 585 2.398861 -1 494 -1 -1 -1
+2 585 2.431620 -1 494 -1 -1 -1
+-16 590 2.488206 -1 375 -1 -1 -1
+-17 591 2.477782 -1 386 -1 -1 -1
+-17 591 2.458425 651 307 751 -1 -1
+-17 591 2.458425 -1 375 597 -1 -1
+-17 591 2.458425 -1 397 -1 -1 -1
Index: branches/scout/projects/mapping/matlab/data/input_none_0.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input_none_0.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input_none_0.txt	(revision 1346)
@@ -0,0 +1,307 @@
+0 0 0.000000 -1 -1 681 597 -1
+0 0 0.000000 -1 -1 751 681 -1
+0 0 0.000000 -1 -1 751 651 -1
+0 0 0.000000 -1 -1 651 597 -1
+0 0 0.000000 -1 -1 714 681 -1
+0 0 0.000000 -1 -1 -1 651 -1
+0 0 0.000000 -1 -1 -1 597 -1
+0 0 0.000000 -1 -1 751 651 -1
+0 0 0.000000 -1 -1 651 651 -1
+0 0 0.000000 -1 -1 714 651 -1
+0 0 0.000000 -1 -1 -1 597 -1
+0 0 0.000000 -1 -1 681 597 -1
+0 0 0.000000 -1 -1 681 651 140
+-23 0 -0.370774 -1 -1 -1 574 147
+-13 0 -0.358861 -1 -1 -1 714 164
+48 -8 -0.373752 -1 -1 751 623 173
+54 -9 -0.370774 -1 -1 681 597 173
+95 -19 -0.376730 -1 -1 -1 574 145
+125 -25 -0.388642 -1 -1 751 597 160
+133 -25 -0.391620 -1 -1 681 651 160
+185 -36 -0.413956 -1 -1 714 552 142
+193 -36 -0.424380 -1 -1 651 494 105
+217 -42 -0.449694 -1 -1 651 421 -1
+225 -46 -0.452672 -1 -1 597 347 -1
+261 -62 -0.469051 -1 -1 597 338 -1
+268 -65 -0.473518 -1 -1 574 338 -1
+288 -73 -0.470540 -1 -1 512 356 -1
+301 -79 -0.470540 -1 -1 552 338 -1
+312 -84 -0.476496 -1 -1 597 356 -1
+323 -90 -0.469051 -1 -1 494 356 -1
+367 -109 -0.458628 651 -1 651 347 -1
+388 -118 -0.457139 -1 -1 597 347 -1
+401 -124 -0.449693 -1 -1 681 338 -1
+409 -128 -0.439270 -1 -1 597 347 -1
+432 -139 -0.430336 -1 -1 681 375 -1
+440 -143 -0.412467 -1 -1 623 356 -1
+450 -147 -0.396088 -1 -1 574 365 -1
+459 -151 -0.388642 -1 -1 478 330 -1
+470 -156 -0.391620 -1 -1 494 330 -1
+481 -161 -0.396088 -1 -1 478 375 -1
+520 -178 -0.412467 -1 -1 434 330 -1
+528 -181 -0.403533 -1 -1 365 330 -1
+542 -182 -0.375241 681 -1 307 347 -1
+567 -182 -0.297810 -1 -1 597 365 -1
+590 -182 -0.196555 -1 -1 651 386 -1
+650 -179 0.034248 -1 -1 494 512 -1
+658 -175 0.086365 -1 -1 447 512 -1
+682 -163 0.214423 -1 681 434 386 -1
+690 -159 0.257606 -1 623 365 347 -1
+712 -147 0.382686 -1 494 408 -1 -1
+716 -143 0.410978 -1 -1 375 681 -1
+728 -131 0.558394 -1 -1 421 574 -1
+732 -125 0.597110 -1 -1 574 512 -1
+734 -121 0.631358 -1 751 408 552 -1
+734 -120 0.638803 -1 681 434 512 -1
+734 -120 0.638803 -1 -1 462 552 -1
+734 -118 0.635825 -1 -1 421 552 -1
+734 -118 0.635825 -1 -1 421 512 -1
+734 -114 0.652204 -1 -1 447 478 -1
+741 -102 0.698365 -1 -1 478 434 -1
+752 -84 0.753460 -1 681 408 478 -1
+756 -76 0.787708 -1 714 478 462 -1
+760 -68 0.820467 -1 751 408 434 -1
+764 -60 0.838336 -1 714 338 421 -1
+758 89 1.831531 -1 -1 397 512 -1
+754 93 1.856845 -1 -1 421 512 -1
+742 115 1.983414 -1 -1 462 397 -1
+736 123 2.023618 -1 -1 478 375 -1
+712 147 2.111473 -1 -1 597 365 -1
+688 166 2.229108 -1 -1 -1 365 -1
+679 172 2.235065 -1 -1 -1 330 -1
+650 198 2.257401 347 -1 -1 375 -1
+642 206 2.264846 -1 -1 -1 338 -1
+630 218 2.263357 -1 -1 -1 375 -1
+604 243 2.248467 -1 -1 -1 397 -1
+584 263 2.248467 -1 -1 -1 386 -1
+558 293 2.246978 -1 -1 -1 356 -1
+544 307 2.254423 751 -1 -1 386 -1
+518 333 2.263357 330 -1 -1 386 -1
+479 364 2.293139 -1 -1 -1 408 -1
+440 390 2.348234 -1 -1 -1 434 -1
+410 407 2.398862 -1 -1 -1 421 -1
+402 411 2.422687 -1 -1 -1 447 -1
+374 423 2.477783 -1 -1 -1 462 -1
+338 439 2.559681 -1 -1 -1 623 -1
+329 443 2.592440 -1 -1 -1 574 -1
+321 447 2.619243 -1 -1 -1 651 -1
+297 448 2.733900 478 -1 -1 -1 -1
+289 448 2.763681 -1 -1 623 -1 -1
+281 448 2.794951 -1 -1 462 -1 -1
+249 448 2.924499 -1 -1 -1 -1 -1
+237 448 2.949813 -1 -1 -1 597 -1
+225 448 2.969171 -1 -1 681 -1 -1
+213 448 2.987040 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+192 448 3.045113 -1 623 -1 -1 -1
+187 448 3.057025 -1 -1 -1 -1 -1
+154 448 3.116588 -1 -1 -1 -1 -1
+142 447 3.153814 -1 -1 -1 -1 -1
+130 443 3.192529 -1 -1 -1 -1 -1
+120 439 3.228266 -1 -1 -1 -1 -1
+112 435 3.269960 -1 -1 -1 -1 -1
+70 415 3.535011 -1 -1 -1 -1 -1
+58 410 3.582661 -1 494 -1 -1 -1
+50 406 3.613931 -1 574 -1 -1 -1
+42 401 3.649668 -1 478 -1 -1 -1
+34 393 3.685405 -1 462 714 -1 -1
+-11 336 4.029377 -1 714 221 -1 -1
+-11 333 4.050223 213 -1 -1 32295 6400
+-11 333 4.050223 -1 -1 260 -1 -1
+-11 333 4.050223 -1 681 260 -1 -1
+-11 312 4.188705 -1 -1 338 -1 -1
+-13 302 4.197639 -1 -1 365 -1 -1
+-14 274 4.272092 -1 -1 347 -1 -1
+-17 262 4.298895 -1 -1 347 -1 -1
+-17 248 4.324209 -1 -1 347 -1 -1
+-17 240 4.337611 -1 -1 338 -1 -1
+-17 232 4.353991 -1 -1 338 -1 -1
+-17 224 4.376327 -1 -1 338 -1 -1
+-17 216 4.407597 -1 552 338 -1 -1
+-17 208 4.443335 -1 -1 347 -1 -1
+-17 199 4.465670 -1 -1 338 -1 -1
+-17 188 4.489495 -1 338 347 -1 -1
+-17 176 4.516298 -1 -1 356 651 -1
+-17 164 4.555013 -1 -1 338 260 -1
+-17 152 4.592239 -1 -1 322 315 -1
+-17 142 4.623510 -1 -1 397 347 -1
+-17 134 4.645845 -1 -1 397 330 -1
+-17 126 4.669671 -1 -1 386 330 -1
+-17 120 4.671160 -1 -1 408 330 -1
+-13 108 4.727744 -1 -1 434 330 -1
+-13 108 4.727744 -1 -1 421 322 -1
+-13 108 4.727744 -1 -1 434 330 -1
+-13 108 4.727744 -1 -1 462 330 -1
+-11 106 4.732211 -1 -1 434 307 -1
+-5 96 4.820065 -1 -1 651 330 -1
+0 50 4.952590 -1 -1 478 330 -1
+0 34 4.930254 -1 -1 434 330 -1
+0 -156 4.690515 -1 -1 478 330 -1
+0 -170 4.684558 -1 -1 478 338 -1
+0 -198 4.633930 -1 714 462 347 -1
+0 -206 4.622017 -1 714 434 347 -1
+0 -218 4.608615 -1 574 434 315 -1
+0 -274 4.498425 512 597 347 347 -1
+0 -282 4.483534 597 597 322 347 -1
+-1 -292 4.476089 651 512 338 338 -1
+-2 -314 4.488002 574 478 338 330 -1
+-2 -318 4.514805 512 447 315 322 -1
+-2 -323 4.572878 574 462 322 294 -1
+-2 -329 4.645842 623 397 255 288 -1
+-1 -333 4.748587 681 421 237 301 -1
+0 -24159 -0.000000 25601 15105 -255 -9473 126
+0 -24159 -0.000000 23297 13057 -255 16383 126
+0 -353 5.108937 408 434 301 294 -1
+0 -357 5.183390 -1 421 315 356 -1
+0 -361 5.254864 -1 494 301 365 -1
+0 -363 5.323359 -1 494 315 386 -1
+0 -364 5.388877 -1 597 294 347 -1
+0 -364 5.454395 -1 681 288 276 -1
+1 -365 5.524380 -1 512 301 270 -1
+22 -381 5.735826 -1 494 315 375 -1
+33 -381 5.881753 -1 -1 315 347 -1
+36 -381 5.947271 -1 -1 365 365 -1
+36 -381 5.997899 -1 -1 421 338 -1
+39 -381 6.047037 -1 -1 512 330 -1
+43 -381 6.103621 -1 -1 478 330 -1
+47 -381 6.140847 -1 -1 512 330 -1
+51 -381 6.182540 -1 -1 421 330 -1
+55 -381 6.206365 -1 -1 365 330 -1
+59 -381 6.239125 -1 -1 338 330 -1
+63 -381 6.251038 -1 -1 322 330 -1
+68 -381 6.243592 -1 -1 270 330 -1
+73 -381 6.243592 -1 -1 301 338 -1
+83 -381 6.239124 -1 -1 315 347 -1
+88 -381 6.243592 -1 -1 322 347 -1
+100 -381 6.237635 -1 -1 330 347 -1
+123 -381 6.210831 -1 -1 288 356 -1
+131 -381 6.209342 -1 -1 301 338 -1
+143 -381 6.210831 -1 -1 322 356 -1
+147 -381 6.198918 -1 -1 315 356 -1
+162 -381 6.152757 -1 751 301 356 -1
+167 -381 6.125954 -1 714 301 375 -1
+171 -381 6.108085 -1 651 276 386 -1
+175 -381 6.082771 -1 714 276 386 -1
+179 -381 6.044055 -1 681 301 375 -1
+183 -381 6.005340 -1 574 347 365 -1
+188 -381 5.977047 -1 623 365 375 -1
+206 -381 5.866858 -1 462 356 397 -1
+210 -381 5.828142 597 512 347 386 -1
+214 -381 5.802828 597 552 347 356 -1
+235 -381 5.636055 447 512 294 421 -1
+235 -381 5.597340 462 623 276 447 -1
+235 -381 5.589895 462 623 245 447 -1
+235 -381 5.582449 462 574 270 434 -1
+235 -381 5.575004 462 714 255 447 -1
+235 -381 5.575004 421 681 270 447 -1
+235 -381 5.575004 462 681 250 447 -1
+235 -381 5.575004 447 623 224 434 -1
+235 -381 5.575004 434 552 265 447 -1
+235 -381 5.575004 447 681 270 421 -1
+235 -381 5.575004 421 651 265 386 -1
+235 -381 5.575004 397 651 265 434 -1
+235 -381 5.575004 421 651 245 447 -1
+235 -381 5.575004 447 623 265 434 -1
+235 -381 5.575004 462 597 255 478 -1
+235 -381 5.575004 478 681 265 447 -1
+235 -381 5.575004 408 597 255 434 -1
+235 -381 5.575004 462 623 241 447 -1
+235 -381 5.575004 408 681 265 447 -1
+235 -381 5.575004 462 623 255 447 -1
+235 -381 5.575004 421 651 265 421 -1
+235 -381 5.575004 356 681 265 447 -1
+235 -381 5.575004 462 681 245 434 -1
+235 -381 5.548200 421 651 260 397 -1
+235 -381 5.522886 397 751 255 462 -1
+236 -381 5.573514 421 751 245 434 -1
+240 -385 5.650945 421 421 265 386 -1
+244 -387 5.738799 434 356 250 322 -1
+253 -387 5.972579 574 330 221 294 -1
+256 -387 6.039587 574 347 294 294 -1
+256 -387 6.088726 -1 338 552 288 -1
+256 -387 6.088726 512 347 512 294 -1
+256 -387 6.088726 -1 347 574 288 -1
+262 -387 6.239120 -1 347 315 276 -1
+274 -378 6.459500 -1 375 270 307 -1
+278 -374 6.545865 512 397 260 330 -1
+290 -362 6.806448 -1 552 260 322 -1
+294 -358 6.889834 -1 -1 260 751 -1
+296 -354 6.953863 -1 -1 270 447 -1
+300 -346 6.998535 -1 -1 288 330 -1
+304 -338 7.040227 -1 -1 276 356 -1
+308 -330 7.075965 -1 -1 276 330 -1
+312 -322 7.105747 -1 -1 301 315 -1
+316 -313 7.135528 -1 -1 294 315 -1
+321 -301 7.160842 -1 714 315 288 -1
+325 -290 7.177222 -1 -1 315 276 -1
+347 -250 7.211471 -1 -1 322 260 -1
+356 -235 7.220406 -1 -1 365 245 -1
+360 -223 7.233807 714 -1 347 255 -1
+364 -211 7.265077 -1 -1 375 255 -1
+368 -199 7.303792 -1 -1 434 255 -1
+372 -189 7.336552 574 -1 408 255 -1
+372 -185 7.341020 -1 -1 434 250 -1
+372 -184 7.336553 -1 -1 478 255 -1
+372 -184 7.336553 -1 -1 447 250 -1
+372 -184 7.336553 -1 -1 421 245 -1
+372 -183 7.333574 -1 -1 421 255 -1
+372 -182 7.345487 -1 -1 434 245 -1
+372 -178 7.376757 -1 -1 597 250 -1
+372 -173 7.430363 -1 -1 597 245 -1
+372 -167 7.478013 -1 -1 -1 255 -1
+372 -163 7.533108 -1 -1 -1 255 -1
+372 -156 7.595648 -1 -1 751 265 -1
+372 -149 7.661166 -1 -1 -1 255 -1
+372 -142 7.723705 -1 -1 -1 276 -1
+372 -136 7.781778 -1 -1 -1 276 -1
+372 -128 7.804114 -1 -1 -1 307 -1
+372 -119 7.798157 -1 -1 -1 322 -1
+372 -104 7.801136 -1 -1 -1 307 -1
+372 -92 7.783267 -1 -1 -1 330 -1
+372 -80 7.759442 -1 -1 -1 330 -1
+372 -65 7.749019 -1 -1 -1 356 -1
+372 -26 7.668610 -1 -1 -1 375 -1
+372 -14 7.655208 -1 -1 -1 386 -1
+372 -2 7.637340 -1 -1 -1 386 -1
+372 22 7.603091 447 -1 574 375 -1
+372 30 7.591178 -1 -1 -1 408 -1
+372 54 7.537572 512 -1 -1 421 -1
+372 62 7.521193 -1 -1 751 421 -1
+372 70 7.498857 552 -1 751 408 -1
+372 78 7.482478 -1 -1 -1 434 -1
+373 88 7.473543 -1 -1 681 447 -1
+373 96 7.452696 751 -1 -1 434 -1
+376 104 7.427382 -1 -1 -1 434 -1
+376 111 7.415470 -1 -1 -1 462 -1
+376 115 7.384199 552 -1 -1 434 -1
+376 119 7.352929 -1 -1 651 462 -1
+379 133 7.312724 -1 -1 -1 434 -1
+383 139 7.300812 -1 -1 -1 478 -1
+387 146 7.290388 -1 -1 -1 408 -1
+395 160 7.300812 -1 -1 -1 421 -1
+400 170 7.299323 -1 -1 -1 478 -1
+409 185 7.300812 -1 -1 -1 462 -1
+413 193 7.332082 494 -1 -1 494 -1
+417 201 7.373775 -1 -1 -1 462 -1
+421 209 7.415468 -1 -1 -1 462 -1
+425 217 7.446738 -1 574 -1 494 -1
+429 225 7.485454 462 -1 -1 462 -1
+432 233 7.518214 -1 -1 651 512 -1
+432 241 7.555440 -1 -1 -1 552 -1
+432 249 7.595644 -1 -1 -1 574 -1
+432 257 7.632870 -1 -1 -1 574 -1
+432 263 7.674564 -1 -1 -1 623 -1
+432 270 7.708812 623 -1 -1 751 -1
+432 286 7.807090 681 -1 -1 -1 -1
+431 294 7.868141 -1 -1 -1 -1 -1
+419 317 8.039382 -1 -1 -1 714 -1
+415 319 8.081075 -1 -1 -1 -1 -1
+414 319 8.085542 -1 -1 -1 -1 -1
+414 319 8.085542 -1 -1 -1 -1 -1
+412 319 8.081075 -1 -1 -1 -1 -1
Index: branches/scout/projects/mapping/matlab/data/input_none_1.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input_none_1.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input_none_1.txt	(revision 1346)
@@ -0,0 +1,201 @@
+13 0 -1.246336 -1 -1 574 338 623
+13 0 -1.246336 -1 -1 714 375 552
+13 0 -1.246336 -1 -1 751 330 597
+13 0 -1.246336 -1 -1 751 356 494
+13 0 -1.264204 -1 -1 651 338 597
+13 0 -1.307387 -1 -1 751 330 478
+13 0 -1.338657 -1 -1 681 338 512
+13 0 -1.360992 -1 -1 714 338 681
+13 -6 -1.423532 -1 -1 -1 338 -1
+13 -10 -1.457780 -1 -1 -1 347 -1
+0 -44 -1.646888 -1 751 301 338 -1
+0 -50 -1.642421 -1 623 330 330 -1
+0 -60 -1.630509 651 651 462 338 -1
+0 -64 -1.602217 -1 714 651 330 -1
+0 -68 -1.576903 -1 651 -1 365 -1
+0 -79 -1.503940 -1 714 574 375 -1
+0 -79 -1.495006 -1 597 574 375 -1
+0 -79 -1.492028 -1 623 447 365 -1
+0 -79 -1.486072 -1 681 512 356 -1
+0 -86 -1.454802 -1 623 447 375 -1
+0 -87 -1.390773 -1 681 447 397 -1
+0 -87 -1.383328 -1 597 386 397 -1
+0 -87 -1.377372 -1 623 397 397 -1
+0 -87 -1.390773 -1 623 434 386 -1
+0 -89 -1.390773 -1 494 447 397 -1
+0 -92 -1.392262 -1 623 447 421 -1
+0 -97 -1.398218 -1 494 434 408 -1
+0 -102 -1.393751 -1 552 447 434 -1
+0 -107 -1.390773 -1 512 408 421 -1
+0 -110 -1.392262 -1 597 421 421 -1
+0 -114 -1.386306 -1 494 375 421 -1
+0 -119 -1.381839 -1 512 421 434 -1
+0 -127 -1.360992 -1 447 397 447 -1
+0 -127 -1.350569 -1 462 386 397 -1
+0 -134 -1.292496 -1 552 365 478 -1
+0 -138 -1.268672 -1 494 365 494 -1
+0 -142 -1.240380 -1 552 330 478 -1
+0 -146 -1.213577 -1 574 338 512 -1
+0 -150 -1.200176 -1 552 315 478 -1
+0 -151 -1.085519 -1 -1 338 301 512
+0 -151 -1.036381 -1 651 307 447 -1
+0 -151 -1.021490 -1 651 294 512 -1
+0 -151 -0.941081 -1 623 294 -1 -1
+0 -151 -0.917257 -1 623 307 714 -1
+0 -151 -0.894921 -1 494 315 623 -1
+0 -151 -0.877052 -1 512 315 574 -1
+0 -152 -0.851738 -1 512 315 552 -1
+0 -154 -0.832381 -1 462 307 512 -1
+2 -156 -0.833870 -1 447 301 462 -1
+5 -160 -0.827913 -1 356 301 512 -1
+6 -161 -0.821957 -1 434 301 478 -1
+7 -163 -0.818979 -1 408 294 462 -1
+10 -166 -0.814512 -1 408 294 434 -1
+12 -168 -0.808556 -1 307 276 462 -1
+12 -168 -0.805578 -1 375 270 462 -1
+13 -169 -0.775797 -1 356 276 421 -1
+13 -169 -0.768352 -1 356 265 421 -1
+13 -169 -0.762396 -1 434 270 408 -1
+14 -170 -0.738571 -1 651 276 386 -1
+14 -170 -0.728148 -1 714 265 386 -1
+14 -170 -0.719213 -1 -1 288 375 -1
+14 -170 -0.701345 -1 -1 276 356 -1
+14 -170 -0.679009 -1 -1 294 356 -1
+14 -170 -0.659651 -1 -1 276 347 -1
+14 -170 -0.635826 -1 -1 322 347 -1
+14 -170 -0.609023 -1 -1 276 330 -1
+14 -170 -0.573286 -1 -1 294 307 -1
+14 -170 -0.540527 -1 -1 301 315 -1
+41 -175 -0.410979 -1 751 347 276 -1
+57 -178 -0.408001 -1 574 365 288 -1
+62 -178 -0.406512 -1 623 356 265 -1
+68 -179 -0.405023 -1 751 330 276 -1
+84 -183 -0.416936 -1 623 365 276 -1
+84 -183 -0.416936 -1 651 347 276 -1
+84 -183 -0.416936 751 512 365 255 -1
+84 -183 -0.416936 -1 651 356 276 -1
+102 -185 -0.396089 -1 552 294 260 -1
+131 -191 -0.385665 -1 434 241 288 -1
+133 -191 -0.375242 -1 462 245 276 -1
+135 -191 -0.361841 -1 478 237 276 -1
+140 -191 -0.311213 -1 478 294 276 -1
+140 -191 -0.287388 -1 408 478 294 -1
+140 -191 -0.199534 -1 478 434 260 -1
+140 -191 -0.166775 -1 434 408 270 -1
+140 -191 -0.135505 -1 462 375 270 -1
+140 -191 -0.101257 -1 462 386 276 -1
+140 -191 -0.077432 -1 447 375 270 -1
+140 -191 -0.037227 -1 494 347 288 -1
+143 -191 -0.002979 494 494 322 288 -1
+147 -188 0.029780 -1 494 322 288 -1
+151 -184 0.055094 -1 478 338 322 -1
+163 -172 0.163794 -1 478 315 356 -1
+167 -168 0.203999 -1 623 294 365 -1
+168 -164 0.236758 -1 597 315 365 -1
+168 -160 0.266539 -1 681 315 356 -1
+168 -156 0.309721 -1 681 294 322 -1
+168 -148 0.387152 -1 -1 315 245 -1
+168 -148 0.387152 -1 -1 315 260 -1
+168 -148 0.387152 -1 -1 301 255 -1
+168 -148 0.387152 -1 -1 307 250 -1
+168 -148 0.387152 -1 -1 294 265 -1
+168 -142 0.430335 -1 -1 307 330 -1
+173 -130 0.504787 -1 714 315 681 -1
+178 -115 0.539035 -1 -1 301 447 -1
+179 -111 0.550948 315 462 -1 32378 6400
+185 -83 0.661137 -1 478 307 386 -1
+186 -79 0.674539 -1 494 338 386 -1
+189 -75 0.695385 -1 -1 338 365 -1
+193 -71 0.714743 -1 -1 338 397 -1
+196 -66 0.725166 -1 -1 322 356 -1
+200 -59 0.748991 -1 -1 338 322 -1
+206 -44 0.798130 -1 -1 347 315 -1
+206 -40 0.814509 -1 -1 365 307 -1
+206 -36 0.824933 -1 -1 386 307 -1
+206 -31 0.835356 -1 -1 397 294 -1
+206 -25 0.844290 -1 -1 375 307 -1
+209 -17 0.848757 -1 -1 434 307 -1
+213 -9 0.857692 -1 -1 397 270 -1
+215 -2 0.865137 -1 -1 386 315 -1
+217 0 0.853225 -1 -1 408 307 -1
+217 0 0.865137 -1 -1 397 294 -1
+217 0 0.890451 -1 597 408 294 -1
+217 0 0.917254 -1 -1 447 294 -1
+217 0 0.906830 -1 -1 434 301 -1
+217 0 0.906830 -1 -1 421 294 -1
+217 0 0.900874 -1 -1 478 294 -1
+217 0 0.891940 -1 -1 478 301 -1
+217 0 0.862159 -1 -1 386 294 -1
+217 0 0.854714 -1 -1 434 294 -1
+217 0 0.851736 -1 -1 434 294 -1
+217 0 0.851736 -1 -1 397 294 -1
+217 0 0.851736 -1 -1 397 294 -1
+217 0 0.851736 -1 -1 408 294 -1
+217 0 0.848758 -1 -1 397 294 -1
+217 0 0.850247 -1 -1 397 294 -1
+223 7 0.869604 -1 -1 462 288 -1
+234 22 0.888962 -1 -1 408 288 -1
+242 32 0.899385 -1 -1 447 288 -1
+245 36 0.905341 -1 -1 434 288 -1
+258 49 0.917254 -1 -1 397 288 -1
+271 63 0.958947 -1 -1 365 288 -1
+281 75 1.015531 574 -1 221 232 -1
+283 87 1.055735 -1 714 191 276 -1
+281 134 1.587323 -1 714 421 421 -1
+277 135 1.609659 -1 -1 434 356 -1
+268 135 1.645396 -1 714 408 294 -1
+268 135 1.645396 -1 -1 356 294 -1
+268 135 1.645396 -1 -1 421 288 -1
+266 135 1.652841 -1 -1 408 260 -1
+262 137 1.685600 -1 -1 408 232 -1
+258 144 1.710914 -1 -1 375 228 -1
+254 152 1.722826 -1 651 408 260 -1
+242 164 1.800257 -1 434 375 -1 -1
+238 168 1.834505 -1 375 447 -1 -1
+234 172 1.861307 -1 421 365 681 -1
+230 174 1.888110 -1 681 356 651 -1
+226 175 1.914913 -1 -1 338 651 -1
+222 178 1.941716 -1 -1 397 597 -1
+218 178 1.965540 -1 -1 397 574 -1
+214 178 1.989365 -1 -1 386 574 -1
+194 180 2.112957 -1 -1 434 421 -1
+190 184 2.130826 -1 -1 462 494 -1
+170 203 2.211235 -1 -1 386 434 -1
+165 207 2.227615 -1 -1 408 421 -1
+160 211 2.243995 -1 -1 462 462 -1
+156 214 2.263353 -1 751 386 356 -1
+152 214 2.282710 -1 -1 356 421 -1
+41 215 2.815792 -1 -1 462 462 -1
+37 215 2.848551 -1 -1 623 494 -1
+24 215 2.911092 -1 -1 574 512 -1
+1 215 2.951297 574 462 -1 32443 6400
+-15 215 2.991503 -1 512 478 307 -1
+-21 215 2.998948 -1 681 478 288 -1
+-25 215 3.009372 -1 681 462 276 -1
+-29 215 3.024262 -1 512 478 330 -1
+-33 215 3.037664 -1 714 478 462 -1
+-37 215 3.057022 -1 651 478 -1 -1
+-50 215 3.112117 -1 -1 512 -1 -1
+-54 215 3.129986 -1 -1 462 -1 -1
+-59 214 3.150833 -1 -1 462 751 -1
+-75 202 3.201461 -1 -1 434 651 -1
+-83 198 3.210396 -1 -1 447 574 -1
+-91 194 3.219330 -1 -1 574 552 -1
+-99 190 3.231243 -1 -1 512 574 -1
+-107 186 3.256557 -1 -1 512 574 -1
+-121 175 3.295272 -1 751 494 462 -1
+-121 175 3.295272 -1 -1 447 478 -1
+-121 175 3.295272 -1 -1 478 512 -1
+-122 169 3.304207 681 714 574 552 -1
+-142 164 3.305696 -1 -1 462 494 -1
+-180 144 3.432266 -1 597 375 434 -1
+-184 140 3.460558 -1 651 375 462 -1
+-189 135 3.488850 -1 714 338 462 -1
+-193 131 3.520120 -1 651 307 462 -1
+-197 127 3.548412 -1 623 301 462 -1
+-201 123 3.567770 623 597 478 494 -1
+-203 119 3.587128 -1 714 681 494 -1
+-203 117 3.582661 -1 651 651 478 -1
+-203 116 3.579683 -1 714 714 494 -1
+-203 115 3.575216 -1 714 681 462 -1
+-203 115 3.575216 -1 681 651 478 -1
Index: branches/scout/projects/mapping/matlab/data/input.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input.txt	(revision 1346)
@@ -0,0 +1,1779 @@
+65 21 0.540958 574 -1 531 260 -1
+69 24 0.579598 -1 -1 681 250 -1
+73 27 0.614878 -1 -1 681 260 -1
+79 31 0.673678 -1 -1 574 255 -1
+81 33 0.698878 -1 -1 714 265 -1
+85 37 0.739198 -1 -1 623 260 -1
+87 39 0.759358 -1 -1 478 270 -1
+88 40 0.774478 -1 -1 478 260 -1
+29 20 0.322559 -1 -1 434 260 -1
+31 21 0.319199 -1 -1 574 232 -1
+33 22 0.314159 -1 -1 478 260 -1
+37 24 0.315839 -1 -1 478 260 -1
+39 25 0.317519 -1 -1 478 265 -1
+41 26 0.320879 -1 -1 512 260 -1
+45 28 0.325919 -1 -1 434 265 -1
+47 29 0.329279 -1 -1 531 265 -1
+49 30 0.329279 -1 -1 531 260 -1
+53 32 0.332639 -1 -1 531 265 -1
+55 33 0.334319 -1 -1 462 270 -1
+57 34 0.337679 -1 -1 494 270 -1
+60 35 0.337679 -1 -1 421 270 -1
+62 36 0.335999 -1 -1 462 241 -1
+64 37 0.335999 -1 -1 397 260 -1
+68 39 0.330959 -1 -1 531 260 -1
+70 40 0.327599 -1 -1 494 260 -1
+72 41 0.324239 -1 -1 462 270 -1
+76 43 0.319199 -1 -1 531 260 -1
+78 44 0.317519 -1 -1 421 260 -1
+80 45 0.312479 -1 -1 447 260 -1
+-4 89 -0.456959 -1 -1 447 265 -1
+-1 88 -0.435119 -1 -1 494 260 -1
+2 87 -0.409919 -1 -1 421 260 -1
+8 85 -0.361199 -1 -1 447 245 -1
+11 84 -0.337679 -1 -1 494 260 -1
+14 83 -0.315839 -1 -1 462 255 -1
+20 81 -0.270479 -1 -1 531 260 -1
+23 80 -0.246959 -1 -1 421 250 -1
+26 79 -0.226799 -1 -1 447 260 -1
+32 78 -0.184799 -1 -1 494 265 -1
+35 78 -0.161279 -1 -1 421 260 -1
+38 78 -0.139440 -1 -1 478 245 -1
+44 78 -0.089040 -1 -1 386 260 -1
+47 78 -0.065520 -1 -1 478 260 -1
+50 78 -0.040320 -1 -1 421 260 -1
+53 78 -0.015120 -1 -1 494 265 -1
+59 78 0.035280 -1 -1 478 260 -1
+62 78 0.060480 -1 -1 494 237 -1
+65 78 0.082320 -1 -1 478 260 -1
+71 78 0.126000 -1 -1 375 260 -1
+73 78 0.144480 -1 -1 494 237 -1
+75 78 0.162960 -1 -1 478 260 -1
+80 78 0.201599 -1 -1 478 260 -1
+83 79 0.221759 -1 -1 408 255 -1
+85 80 0.240239 -1 -1 478 255 -1
+89 82 0.277199 -1 -1 478 255 -1
+91 83 0.297359 -1 -1 494 255 -1
+93 84 0.317519 -1 -1 494 260 -1
+97 86 0.354479 -1 -1 447 241 -1
+99 87 0.372959 -1 -1 494 255 -1
+101 88 0.388079 -1 -1 531 265 -1
+105 90 0.418319 -1 -1 447 250 -1
+106 91 0.430079 -1 -1 462 260 -1
+107 92 0.441839 -1 -1 447 250 -1
+109 93 0.460319 -1 -1 447 255 -1
+110 94 0.472079 -1 -1 478 245 -1
+111 95 0.483839 -1 -1 462 250 -1
+114 97 0.512399 -1 -1 447 232 -1
+116 98 0.529199 -1 -1 434 255 -1
+118 99 0.549358 -1 -1 462 260 -1
+122 102 0.591358 -1 -1 397 260 -1
+124 103 0.608158 -1 -1 494 250 -1
+126 104 0.626638 -1 -1 397 250 -1
+130 106 0.656878 -1 -1 434 260 -1
+132 107 0.671998 -1 -1 478 255 -1
+133 108 0.687118 -1 -1 397 255 -1
+137 111 0.724078 -1 -1 386 255 -1
+76 93 0.283919 -1 -1 462 260 -1
+78 94 0.285599 -1 -1 397 241 -1
+84 96 0.292319 -1 -1 397 241 -1
+87 97 0.297359 -1 -1 434 255 -1
+90 98 0.302399 -1 -1 365 255 -1
+96 100 0.310799 -1 -1 447 260 -1
+99 101 0.314159 -1 -1 375 260 -1
+102 102 0.315839 -1 -1 386 260 -1
+106 104 0.312479 -1 -1 421 255 -1
+108 105 0.310799 -1 800 408 241 -1
+110 106 0.309119 -1 -1 386 232 -1
+114 108 0.307439 -1 -1 397 250 -1
+117 109 0.309119 -1 -1 322 255 -1
+119 110 0.309119 -1 -1 397 255 -1
+124 112 0.315839 -1 -1 375 255 -1
+126 113 0.314159 -1 800 338 250 -1
+130 115 0.314159 -1 -1 347 255 -1
+131 115 0.312479 -1 623 408 255 -1
+132 115 0.310799 -1 714 386 237 -1
+132 115 0.304079 -1 681 375 255 -1
+132 115 0.300719 -1 -1 330 255 -1
+132 115 0.302399 -1 800 356 255 -1
+132 115 0.302399 -1 800 397 255 -1
+132 115 0.302399 -1 -1 356 250 -1
+132 115 0.302399 -1 714 375 250 -1
+132 115 0.302399 -1 -1 386 245 -1
+132 115 0.300719 -1 791 338 250 -1
+132 115 0.300719 -1 -1 375 232 -1
+132 115 0.300719 -1 751 375 232 -1
+132 115 0.302399 -1 651 330 255 -1
+132 115 0.300719 -1 751 365 250 -1
+132 115 0.300719 -1 597 347 250 -1
+132 115 0.302399 574 791 386 255 -1
+132 115 0.304079 -1 791 408 255 -1
+132 115 0.300719 -1 791 356 250 -1
+132 115 0.304079 -1 791 330 245 -1
+132 115 0.304079 -1 -1 347 255 -1
+132 115 0.300719 -1 800 386 255 -1
+132 115 0.302399 -1 800 375 255 -1
+132 115 0.304079 -1 -1 338 255 -1
+132 115 0.300719 -1 791 365 255 -1
+132 115 0.302399 -1 651 408 228 -1
+132 115 0.300719 -1 800 347 250 -1
+132 115 0.302399 -1 791 322 250 -1
+132 115 0.300719 -1 -1 347 255 -1
+132 115 0.300719 -1 800 365 245 -1
+132 115 0.302399 -1 791 397 255 -1
+132 115 0.302399 -1 800 322 255 -1
+132 115 0.300719 -1 -1 338 255 -1
+132 115 0.302399 -1 623 356 255 -1
+132 115 0.302399 -1 800 375 232 -1
+132 115 0.302399 -1 800 338 250 -1
+132 115 0.300719 -1 751 375 255 -1
+132 115 0.300719 -1 714 356 255 -1
+132 115 0.302399 -1 800 347 260 -1
+132 115 0.300719 714 751 356 255 -1
+132 115 0.304079 -1 714 375 255 -1
+132 115 0.302399 -1 800 365 255 -1
+132 115 0.300719 -1 751 375 250 -1
+132 115 0.302399 -1 791 338 255 -1
+132 115 0.300719 -1 714 365 237 -1
+132 115 0.302399 -1 800 386 255 -1
+132 115 0.302399 -1 552 397 255 -1
+132 115 0.300719 -1 623 356 245 -1
+132 115 0.302399 -1 651 397 255 -1
+132 115 0.302399 -1 751 365 241 -1
+132 115 0.302399 -1 800 408 255 -1
+132 115 0.300719 -1 -1 347 255 -1
+132 115 0.304079 -1 800 375 255 -1
+132 115 0.302399 -1 800 386 232 -1
+132 115 0.300719 -1 800 338 255 -1
+132 115 0.302399 -1 -1 397 241 -1
+132 115 0.300719 -1 714 365 241 -1
+132 115 0.302399 -1 800 375 255 -1
+132 115 0.300719 -1 800 356 241 -1
+132 115 0.302399 -1 714 347 255 -1
+132 115 0.302399 -1 714 386 241 -1
+132 115 0.302399 -1 -1 356 260 -1
+132 115 0.302399 -1 681 365 250 -1
+132 115 0.300719 -1 -1 365 255 -1
+132 115 0.302399 -1 714 347 255 -1
+132 115 0.304079 -1 791 330 255 -1
+132 115 0.302399 -1 800 375 255 -1
+132 115 0.302399 -1 800 338 255 -1
+132 115 0.302399 -1 -1 347 255 -1
+132 115 0.295679 -1 791 375 255 -1
+132 115 0.295679 -1 751 356 241 -1
+132 115 0.299039 -1 714 375 250 -1
+132 115 0.300719 -1 800 375 241 -1
+132 115 0.300719 -1 -1 338 255 -1
+132 115 0.302399 -1 714 356 255 -1
+132 115 0.302399 -1 -1 347 255 -1
+132 115 0.302399 -1 -1 356 255 -1
+132 115 0.302399 -1 -1 397 255 -1
+132 115 0.302399 -1 -1 338 255 -1
+132 115 0.302399 -1 714 408 241 -1
+132 115 0.302399 -1 -1 386 255 -1
+132 115 0.302399 -1 -1 397 255 -1
+132 115 0.302399 -1 -1 408 250 -1
+133 115 0.307439 -1 651 397 255 -1
+133 115 0.302399 -1 800 421 250 -1
+133 115 0.302399 -1 -1 421 255 -1
+133 115 0.304079 800 -1 421 232 -1
+45 161 -0.478798 -1 552 408 255 -1
+45 161 -0.480478 -1 800 462 255 -1
+45 161 -0.480478 -1 791 397 255 -1
+45 161 -0.478798 -1 791 447 245 -1
+45 161 -0.478798 -1 -1 397 250 -1
+45 161 -0.478798 -1 -1 338 250 -1
+45 161 -0.480478 -1 -1 356 255 -1
+65 153 -0.304079 -1 800 224 245 -1
+68 152 -0.280559 -1 714 217 221 -1
+70 151 -0.263759 -1 -1 210 245 -1
+74 150 -0.231839 -1 -1 200 255 -1
+75 150 -0.220079 -1 -1 207 255 -1
+76 150 -0.208319 -1 800 221 255 -1
+77 150 -0.199919 -1 751 217 255 -1
+78 150 -0.194879 -1 681 250 255 -1
+79 150 -0.188159 -1 651 307 255 -1
+80 150 -0.181439 -1 681 315 245 -1
+81 150 -0.173039 -1 751 356 250 -1
+84 150 -0.147839 -1 714 294 250 -1
+86 150 -0.132719 -1 681 347 245 -1
+89 150 -0.110879 -1 651 347 255 -1
+95 150 -0.062160 -1 623 330 255 -1
+99 150 -0.033600 -1 623 307 255 -1
+103 150 -0.003360 -1 574 250 255 -1
+111 150 0.060480 -1 623 221 250 -1
+115 150 0.092400 -1 552 224 255 -1
+123 152 0.157920 -1 531 221 255 -1
+127 153 0.191520 -1 597 189 260 -1
+132 154 0.228480 -1 597 210 260 -1
+142 156 0.304079 -1 552 194 260 -1
+147 158 0.342719 -1 494 176 255 -1
+152 160 0.383039 -1 512 178 255 -1
+160 164 0.455279 -1 478 181 241 -1
+164 166 0.492239 -1 494 194 237 -1
+172 170 0.562799 -1 478 213 255 -1
+175 172 0.594719 -1 462 241 260 -1
+178 174 0.626638 -1 478 307 260 -1
+184 178 0.687118 -1 462 447 260 -1
+187 180 0.713998 -1 462 494 255 -1
+190 182 0.742558 -1 447 531 255 -1
+133 163 0.347759 -1 447 597 260 -1
+173 180 0.527519 -1 375 322 270 -1
+177 182 0.559439 -1 375 347 270 -1
+184 186 0.614878 -1 347 322 276 -1
+187 188 0.646798 -1 386 315 276 -1
+193 192 0.703918 -1 386 301 288 -1
+196 194 0.732478 -1 408 294 288 -1
+202 200 0.808078 -1 421 276 315 -1
+204 202 0.829918 -1 434 276 270 -1
+208 207 0.878638 -1 494 282 330 -1
+208 207 0.871918 421 434 276 322 -1
+208 207 0.863518 -1 434 276 294 -1
+208 207 0.836638 -1 447 276 330 -1
+208 207 0.819838 -1 447 270 330 -1
+208 207 0.799678 -1 408 270 330 -1
+208 207 0.755998 -1 397 270 307 -1
+208 207 0.732478 -1 356 276 322 -1
+208 207 0.710638 -1 365 270 307 -1
+209 207 0.665278 -1 338 255 294 -1
+209 207 0.645118 -1 307 265 307 -1
+209 207 0.599759 -1 307 265 307 -1
+209 207 0.559439 -1 270 276 294 -1
+112 228 -0.211679 -1 294 270 307 -1
+112 228 -0.211679 -1 270 276 265 -1
+112 228 -0.211679 791 265 265 294 -1
+112 228 -0.208319 -1 270 294 307 -1
+114 228 -0.188159 751 265 282 307 -1
+116 228 -0.173039 597 245 282 307 -1
+118 228 -0.154559 434 255 282 307 -1
+124 228 -0.110880 623 221 255 307 -1
+166 230 0.210000 365 183 197 315 -1
+172 233 0.263759 365 181 186 315 -1
+184 238 0.369599 751 181 154 330 -1
+190 240 0.418319 751 173 160 338 -1
+193 241 0.445199 -1 173 152 338 -1
+202 246 0.522479 -1 183 137 330 -1
+205 248 0.547679 -1 183 136 330 -1
+210 252 0.593038 -1 191 133 282 -1
+212 253 0.613198 -1 203 131 250 -1
+214 255 0.633358 -1 213 130 207 -1
+218 257 0.666958 -1 221 125 186 -1
+219 258 0.680398 -1 245 134 217 -1
+220 259 0.692158 -1 260 139 421 -1
+220 259 0.702238 -1 301 142 -1 -1
+220 259 0.703918 -1 356 149 751 -1
+220 259 0.703918 -1 -1 149 338 -1
+220 259 0.703918 -1 -1 156 307 -1
+220 259 0.703918 -1 714 169 288 -1
+220 259 0.703918 -1 -1 178 294 -1
+220 259 0.703918 -1 -1 183 270 -1
+220 259 0.703918 -1 -1 191 260 -1
+220 259 0.703918 -1 -1 203 250 -1
+220 259 0.703918 -1 -1 213 255 -1
+220 259 0.703918 -1 -1 224 250 -1
+224 358 1.530476 -1 -1 221 250 -1
+224 359 1.559036 -1 -1 228 241 -1
+224 359 1.569116 -1 -1 237 221 -1
+224 359 1.579196 -1 -1 241 232 -1
+224 360 1.597676 -1 512 250 232 -1
+224 361 1.609436 -1 -1 237 232 -1
+224 363 1.619516 386 623 265 228 -1
+224 368 1.654796 574 -1 276 228 -1
+224 371 1.678315 -1 -1 282 224 -1
+223 378 1.732075 -1 -1 307 217 -1
+222 382 1.755595 -1 -1 315 210 -1
+221 386 1.774075 -1 -1 315 207 -1
+219 393 1.787515 -1 -1 307 207 -1
+218 396 1.782475 -1 -1 307 207 -1
+171 317 1.053357 -1 -1 322 210 -1
+173 320 1.078557 -1 -1 315 207 -1
+175 323 1.107117 -1 -1 282 210 -1
+179 330 1.165917 -1 -1 294 213 -1
+180 334 1.196157 -1 -1 315 207 -1
+181 338 1.228077 -1 -1 294 197 -1
+183 346 1.291917 -1 -1 307 207 -1
+184 350 1.325516 -1 -1 265 207 -1
+186 358 1.387676 -1 -1 294 203 -1
+187 362 1.419596 -1 -1 315 197 -1
+187 366 1.451516 -1 -1 307 203 -1
+187 374 1.510316 -1 -1 322 203 -1
+187 378 1.540556 -1 -1 315 197 -1
+187 382 1.570796 -1 -1 330 197 -1
+187 390 1.636316 -1 -1 322 186 -1
+187 394 1.669916 531 -1 330 200 -1
+186 398 1.703516 -1 -1 330 200 -1
+184 406 1.774075 -1 -1 338 194 -1
+183 410 1.809355 -1 -1 322 194 -1
+182 414 1.842955 -1 -1 330 191 -1
+179 423 1.916875 -1 -1 347 181 -1
+177 428 1.955515 -1 -1 356 191 -1
+173 436 2.027754 -1 -1 408 194 -1
+171 440 2.063034 -1 -1 478 191 -1
+168 444 2.101674 -1 -1 447 191 -1
+163 452 2.172234 -1 -1 478 191 -1
+160 456 2.207514 -1 -1 386 191 -1
+164 432 1.893355 -1 -1 447 197 -1
+162 437 1.891675 -1 -1 531 197 -1
+161 441 1.891675 -1 -1 574 194 -1
+155 456 1.886635 -1 -1 531 197 -1
+153 461 1.886635 714 -1 531 197 -1
+113 380 1.159197 -1 -1 512 197 -1
+118 394 1.273436 -1 -1 574 197 -1
+120 403 1.345676 -1 -1 512 203 -1
+123 415 1.444796 -1 -1 531 203 -1
+123 427 1.535516 -1 -1 478 200 -1
+123 431 1.564076 -1 -1 447 197 -1
+123 439 1.621196 -1 -1 462 200 -1
+123 442 1.646395 -1 -1 434 197 -1
+123 446 1.674955 -1 -1 421 203 -1
+122 453 1.730395 -1 -1 478 207 -1
+121 457 1.758955 -1 -1 478 207 -1
+120 460 1.785835 -1 -1 531 207 -1
+118 468 1.842955 -1 -1 512 200 -1
+117 471 1.871515 -1 -1 494 203 -1
+116 474 1.900075 -1 -1 512 200 -1
+114 481 1.957195 -1 -1 552 207 -1
+113 484 1.984074 -1 -1 447 203 -1
+110 490 2.039514 -1 -1 531 207 -1
+108 493 2.068074 -1 -1 531 207 -1
+106 496 2.094954 -1 -1 531 194 -1
+102 502 2.143674 -1 -1 552 232 -1
+100 504 2.167194 -1 -1 512 245 -1
+98 506 2.189034 -1 -1 531 375 -1
+94 510 2.232714 -1 -1 531 421 -1
+110 449 1.832875 -1 -1 552 512 -1
+109 452 1.832875 -1 -1 494 462 -1
+107 456 1.827835 -1 -1 494 356 -1
+106 459 1.827835 -1 -1 623 255 -1
+105 462 1.826155 -1 -1 552 207 -1
+103 468 1.826155 -1 -1 494 207 -1
+102 471 1.824475 -1 -1 574 207 -1
+100 477 1.822795 -1 -1 447 207 -1
+99 480 1.819435 -1 -1 462 207 -1
+98 482 1.816075 -1 -1 494 207 -1
+98 486 1.805995 -1 -1 421 210 -1
+98 487 1.799275 -1 -1 478 207 -1
+98 488 1.789195 -1 -1 478 197 -1
+98 488 1.769035 -1 -1 397 207 -1
+98 488 1.765675 -1 -1 397 210 -1
+98 488 1.762315 -1 -1 375 207 -1
+98 488 1.757275 -1 -1 408 207 -1
+98 488 1.758955 386 -1 397 207 -1
+98 488 1.757275 -1 -1 375 213 -1
+98 488 1.757275 -1 -1 386 210 -1
+98 488 1.757275 -1 -1 338 197 -1
+98 488 1.757275 -1 -1 375 207 -1
+98 488 1.757275 -1 -1 408 213 -1
+98 488 1.758955 -1 -1 421 210 -1
+98 488 1.755595 -1 -1 408 207 -1
+98 488 1.757275 -1 -1 386 210 -1
+98 488 1.757275 -1 -1 397 197 -1
+98 488 1.757275 -1 -1 386 207 -1
+98 488 1.757275 623 -1 397 210 -1
+98 488 1.757275 -1 -1 386 207 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.755595 -1 -1 408 194 -1
+98 488 1.757275 -1 -1 365 210 -1
+98 488 1.757275 -1 -1 386 210 -1
+98 488 1.757275 -1 -1 375 203 -1
+98 488 1.755595 -1 -1 386 210 -1
+98 488 1.757275 -1 -1 386 210 -1
+98 488 1.757275 -1 -1 408 207 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.757275 447 -1 408 207 -1
+98 488 1.757275 -1 -1 397 207 -1
+98 488 1.757275 -1 -1 462 210 -1
+98 488 1.757275 -1 -1 386 210 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 397 197 -1
+98 488 1.755595 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.757275 -1 -1 386 213 -1
+98 488 1.757275 -1 -1 408 213 -1
+98 488 1.757275 -1 -1 397 207 -1
+98 488 1.758955 -1 -1 356 207 -1
+98 488 1.757275 -1 -1 356 207 -1
+98 488 1.757275 -1 -1 365 197 -1
+98 488 1.758955 -1 -1 365 213 -1
+98 488 1.757275 -1 -1 375 210 -1
+98 488 1.757275 -1 -1 434 207 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.757275 -1 -1 375 213 -1
+98 488 1.755595 -1 -1 356 203 -1
+98 488 1.757275 -1 -1 421 213 -1
+98 488 1.757275 -1 -1 397 213 -1
+98 488 1.758955 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 397 197 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 408 213 -1
+98 488 1.758955 -1 -1 365 213 -1
+98 488 1.757275 -1 -1 375 213 -1
+98 488 1.757275 791 -1 386 213 -1
+98 488 1.758955 -1 -1 386 200 -1
+98 488 1.758955 -1 -1 375 210 -1
+98 488 1.757275 -1 -1 375 210 -1
+98 488 1.757275 -1 -1 347 207 -1
+98 488 1.755595 -1 -1 386 213 -1
+98 488 1.757275 -1 -1 375 213 -1
+98 488 1.758955 -1 -1 365 207 -1
+98 488 1.758955 -1 -1 356 207 -1
+98 488 1.758955 447 -1 386 207 -1
+98 488 1.755595 -1 -1 434 210 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 375 207 -1
+98 488 1.757275 -1 -1 375 210 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.757275 -1 -1 397 197 -1
+98 488 1.757275 751 -1 375 197 -1
+98 488 1.757275 -1 -1 408 207 -1
+98 488 1.757275 -1 -1 408 207 -1
+98 488 1.757275 -1 -1 408 210 -1
+98 488 1.757275 -1 -1 397 207 -1
+98 488 1.757275 -1 -1 365 210 -1
+98 488 1.757275 -1 -1 375 203 -1
+98 488 1.757275 -1 -1 408 197 -1
+98 488 1.757275 -1 -1 365 197 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.757275 512 -1 408 203 -1
+98 488 1.758955 -1 -1 408 197 -1
+98 488 1.757275 -1 -1 408 203 -1
+98 488 1.758955 -1 -1 408 210 -1
+98 488 1.758955 -1 -1 375 213 -1
+98 488 1.757275 -1 -1 397 210 -1
+98 488 1.758955 -1 -1 408 191 -1
+98 488 1.757275 751 -1 375 207 -1
+98 488 1.758955 -1 -1 356 210 -1
+98 488 1.757275 -1 -1 338 210 -1
+98 488 1.757275 -1 -1 375 207 -1
+98 488 1.757275 -1 -1 397 207 -1
+98 488 1.757275 -1 -1 386 213 -1
+98 488 1.750555 -1 -1 386 213 -1
+98 491 1.763995 -1 -1 375 210 -1
+98 493 1.765675 -1 -1 386 207 -1
+43 421 0.974397 -1 -1 386 197 -1
+49 430 1.056717 -1 -1 375 207 -1
+52 435 1.103757 -1 -1 408 213 -1
+55 441 1.152477 -1 -1 365 207 -1
+61 459 1.305356 -1 -1 408 207 -1
+62 465 1.352396 -1 -1 447 207 -1
+64 477 1.448156 -1 -1 408 207 -1
+64 483 1.491836 -1 -1 408 210 -1
+64 488 1.533836 -1 -1 408 207 -1
+64 498 1.614475 -1 -1 397 207 -1
+64 503 1.651435 -1 -1 408 207 -1
+63 508 1.688395 -1 -1 338 207 -1
+61 516 1.757275 -1 -1 408 207 -1
+60 520 1.787515 -1 -1 375 207 -1
+59 524 1.819435 -1 -1 386 203 -1
+57 531 1.874875 -1 -1 386 207 -1
+56 534 1.900075 -1 -1 408 203 -1
+55 537 1.925274 -1 -1 408 207 -1
+53 543 1.973994 -1 -1 375 207 -1
+52 546 1.995834 -1 -1 397 200 -1
+51 549 2.019354 -1 -1 397 207 -1
+49 553 2.063034 -1 -1 330 197 -1
+48 555 2.084874 -1 -1 386 203 -1
+46 558 2.108394 -1 -1 338 197 -1
+42 564 2.157114 -1 -1 386 200 -1
+52 502 1.733755 -1 -1 356 203 -1
+50 508 1.732075 -1 -1 375 197 -1
+49 511 1.732075 -1 -1 356 200 -1
+48 515 1.735435 -1 -1 375 200 -1
+46 523 1.740475 -1 -1 347 200 -1
+45 527 1.742155 -1 -1 347 200 -1
+44 531 1.743835 -1 -1 386 197 -1
+42 539 1.747195 -1 -1 375 200 -1
+41 543 1.748875 -1 -1 397 200 -1
+40 547 1.750555 -1 -1 408 197 -1
+38 556 1.753915 -1 -1 408 197 -1
+37 561 1.758955 -1 -1 434 203 -1
+-14 482 0.997917 -1 -1 421 197 -1
+-9 490 1.075197 -1 -1 408 203 -1
+-7 495 1.115517 -1 -1 397 189 -1
+-5 500 1.154157 -1 -1 462 197 -1
+-1 510 1.233116 -1 -1 375 197 -1
+1 515 1.273436 -1 -1 375 191 -1
+2 520 1.312076 -1 -1 397 197 -1
+4 530 1.385996 -1 -1 462 197 -1
+5 534 1.421276 -1 -1 447 197 -1
+6 538 1.456556 -1 -1 397 197 -1
+6 546 1.517036 -1 -1 447 197 -1
+6 550 1.547276 -1 -1 408 197 -1
+6 553 1.574155 -1 -1 447 197 -1
+6 561 1.631275 -1 -1 338 197 -1
+6 564 1.658155 -1 -1 386 197 -1
+6 567 1.685035 -1 -1 375 197 -1
+4 575 1.742155 -1 -1 356 194 -1
+-6 608 2.010954 -1 -1 330 194 -1
+-8 612 2.051274 -1 -1 347 197 -1
+-9 614 2.071434 -1 -1 322 194 -1
+-11 617 2.096634 -1 -1 315 194 -1
+-5 553 1.668235 -1 -1 315 200 -1
+-5 554 1.666555 -1 -1 276 197 -1
+-5 556 1.659835 -1 -1 315 197 -1
+-5 557 1.661515 -1 -1 282 191 -1
+-5 561 1.671595 -1 -1 294 197 -1
+-5 561 1.668235 -1 -1 288 194 -1
+-5 561 1.669915 -1 -1 301 191 -1
+-5 561 1.669915 -1 -1 322 197 -1
+-5 561 1.668235 -1 -1 288 197 -1
+-5 561 1.668235 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 276 186 -1
+-5 561 1.668235 -1 -1 322 194 -1
+-5 561 1.669915 -1 -1 315 191 -1
+-5 561 1.668235 -1 -1 294 197 -1
+-5 561 1.669915 -1 -1 315 194 -1
+-5 561 1.669915 -1 -1 301 194 -1
+-5 561 1.669915 -1 -1 301 194 -1
+-5 561 1.669915 -1 -1 288 197 -1
+-5 561 1.669915 -1 -1 294 197 -1
+-5 561 1.668235 -1 -1 315 194 -1
+-5 561 1.668235 -1 -1 307 197 -1
+-5 561 1.668235 -1 -1 301 197 -1
+-5 561 1.668235 -1 -1 315 191 -1
+-5 561 1.669915 -1 -1 322 197 -1
+-5 561 1.668235 -1 -1 301 197 -1
+-5 561 1.669915 -1 -1 315 194 -1
+-5 561 1.669915 -1 -1 338 194 -1
+-5 561 1.669915 -1 -1 301 194 -1
+-5 561 1.669915 -1 -1 301 197 -1
+-5 561 1.669915 -1 -1 301 194 -1
+-5 561 1.669915 -1 -1 322 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 307 189 -1
+-5 561 1.669915 -1 -1 307 186 -1
+-5 561 1.669915 -1 -1 294 197 -1
+-5 561 1.668235 -1 -1 301 194 -1
+-5 561 1.668235 -1 -1 315 194 -1
+-5 561 1.668235 -1 -1 282 197 -1
+-5 561 1.669915 -1 -1 294 197 -1
+-5 561 1.669915 -1 -1 307 200 -1
+-5 561 1.669915 -1 -1 307 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.668235 -1 -1 322 194 -1
+-5 561 1.671595 -1 -1 307 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.668235 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 315 194 -1
+-5 561 1.669915 -1 -1 322 194 -1
+-5 561 1.668235 -1 -1 322 194 -1
+-5 561 1.669915 -1 -1 294 181 -1
+-5 561 1.669915 -1 -1 307 183 -1
+-5 561 1.669915 -1 -1 330 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 322 197 -1
+-5 561 1.668235 -1 -1 282 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.666555 -1 -1 301 181 -1
+-5 561 1.669915 -1 -1 322 194 -1
+-5 561 1.668235 -1 -1 307 194 -1
+-5 561 1.668235 -1 -1 307 197 -1
+-5 561 1.669915 -1 -1 315 194 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 307 197 -1
+-5 561 1.668235 -1 -1 322 191 -1
+-5 561 1.668235 -1 -1 307 197 -1
+-5 561 1.669915 -1 -1 276 197 -1
+-5 561 1.669915 -1 -1 330 197 -1
+-5 561 1.669915 -1 -1 294 191 -1
+-5 561 1.668235 -1 -1 315 194 -1
+-5 561 1.668235 -1 -1 322 194 -1
+-5 561 1.669915 -1 -1 288 194 -1
+-5 561 1.669915 -1 -1 294 197 -1
+-5 561 1.669915 -1 -1 301 194 -1
+-5 561 1.669915 -1 -1 294 197 -1
+-5 561 1.668235 -1 -1 294 197 -1
+-5 561 1.668235 -1 -1 307 197 -1
+-5 561 1.668235 -1 -1 322 197 -1
+-5 561 1.669915 -1 -1 315 191 -1
+-5 561 1.668235 -1 -1 288 194 -1
+-5 561 1.668235 -1 -1 307 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 307 183 -1
+-5 561 1.668235 -1 -1 315 197 -1
+-5 561 1.668235 -1 -1 294 197 -1
+-5 561 1.669915 -1 -1 322 197 -1
+-5 561 1.668235 -1 -1 307 191 -1
+-5 561 1.669915 -1 -1 315 186 -1
+-5 561 1.668235 -1 -1 322 189 -1
+-5 561 1.669915 -1 -1 294 197 -1
+-5 561 1.669915 -1 -1 307 194 -1
+-5 561 1.668235 -1 -1 301 197 -1
+-5 561 1.668235 -1 -1 322 197 -1
+-5 561 1.669915 -1 -1 301 197 -1
+-5 561 1.668235 -1 -1 315 194 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 307 194 -1
+-5 561 1.669915 -1 -1 322 194 -1
+-5 561 1.669915 -1 -1 301 197 -1
+-5 561 1.669915 -1 -1 307 194 -1
+-5 561 1.668235 -1 -1 322 197 -1
+-5 561 1.668235 -1 -1 288 197 -1
+-5 561 1.671595 -1 -1 307 194 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.668235 -1 -1 322 194 -1
+-5 561 1.668235 -1 -1 307 197 -1
+-5 561 1.669915 -1 -1 301 197 -1
+-5 561 1.668235 -1 -1 294 197 -1
+-5 561 1.669915 -1 -1 301 197 -1
+-5 561 1.668235 -1 -1 288 197 -1
+-5 561 1.669915 -1 -1 315 197 -1
+-5 561 1.661515 -1 -1 294 194 -1
+-5 561 1.663195 -1 -1 301 194 -1
+-5 562 1.668235 -1 -1 301 194 -1
+-5 562 1.669915 -1 -1 315 197 -1
+-5 563 1.674955 -1 -1 282 194 -1
+-5 565 1.688395 -1 -1 315 194 -1
+-5 566 1.698475 -1 -1 322 194 -1
+-5 568 1.710235 -1 -1 338 197 -1
+-5 572 1.738795 -1 -1 338 189 -1
+-5 575 1.750555 -1 -1 322 191 -1
+-6 578 1.758955 -1 -1 375 191 -1
+-7 584 1.765675 -1 -1 397 194 -1
+-8 587 1.762315 -1 -1 356 194 -1
+-70 547 0.987837 -1 -1 322 197 -1
+-66 553 1.049997 -1 -1 315 197 -1
+-64 557 1.081917 -1 -1 307 197 -1
+-62 561 1.113837 -1 -1 322 191 -1
+-58 569 1.179357 -1 -1 322 191 -1
+-57 573 1.211277 -1 -1 307 191 -1
+-56 577 1.244877 -1 -1 338 194 -1
+-54 585 1.308716 -1 -1 288 186 -1
+-53 589 1.337276 -1 -1 347 181 -1
+-52 593 1.367516 -1 -1 322 181 -1
+-50 601 1.427996 -1 -1 330 186 -1
+-50 605 1.461596 -1 -1 322 189 -1
+-50 609 1.490156 -1 -1 315 197 -1
+-50 617 1.550636 -1 791 282 189 -1
+-50 621 1.580876 -1 -1 315 189 -1
+-50 624 1.607756 -1 -1 315 189 -1
+-50 630 1.658155 -1 -1 315 186 -1
+-50 633 1.685035 -1 -1 294 183 -1
+-52 640 1.740475 -1 -1 301 191 -1
+-61 630 1.631275 -1 714 260 178 -1
+-61 634 1.627915 -1 791 276 169 -1
+-61 638 1.624555 -1 800 250 178 -1
+-61 646 1.614475 -1 800 265 181 -1
+-61 650 1.612795 -1 800 255 176 -1
+-61 658 1.611115 -1 791 255 176 -1
+-61 665 1.611115 -1 531 237 176 -1
+-61 673 1.607755 -1 623 255 164 -1
+-124 606 0.843358 -1 714 241 173 -1
+-118 612 0.908877 -1 623 232 173 -1
+-115 616 0.945837 -1 651 228 158 -1
+-109 624 1.019757 -1 623 232 171 -1
+-107 628 1.056717 -1 714 237 164 -1
+-105 632 1.095357 -1 574 217 158 -1
+-101 640 1.170957 -1 494 241 166 -1
+-99 644 1.206236 -1 552 203 154 -1
+-97 652 1.273436 -1 447 217 166 -1
+-96 656 1.307036 -1 512 221 162 -1
+-93 668 1.406156 651 408 210 156 -1
+-93 672 1.434716 -1 447 210 156 -1
+-93 680 1.495196 751 494 213 164 -1
+-93 684 1.528796 -1 462 213 158 -1
+-93 688 1.562395 714 447 213 147 -1
+-93 698 1.637995 800 447 217 154 -1
+-93 702 1.673275 -1 386 207 152 -1
+-95 710 1.737115 -1 397 203 154 -1
+-96 714 1.769035 714 397 221 147 -1
+-97 718 1.797595 597 375 207 149 -1
+-99 725 1.853035 462 375 228 149 -1
+-100 728 1.879915 512 375 224 149 -1
+-102 735 1.938714 447 356 217 149 -1
+-103 739 1.968954 512 301 217 147 -1
+-105 743 2.002554 512 347 200 147 -1
+-104 685 1.621195 531 338 213 147 -1
+-104 689 1.624555 512 330 207 147 -1
+-104 697 1.621195 408 322 197 137 -1
+-104 701 1.619515 447 307 213 144 -1
+-104 709 1.622875 408 270 194 144 -1
+-104 713 1.624555 462 288 186 145 -1
+-104 717 1.626235 386 276 197 145 -1
+-104 724 1.629595 315 255 186 140 -1
+-104 727 1.629595 356 260 194 142 -1
+-104 733 1.632955 356 237 189 142 -1
+-104 736 1.634635 347 245 183 139 -1
+-104 742 1.636315 330 241 173 142 -1
+-104 745 1.634635 338 232 171 137 -1
+-104 750 1.627915 315 221 169 136 -1
+-167 676 0.871918 315 224 169 140 -1
+-166 677 0.878638 315 217 169 140 -1
+-166 677 0.880318 288 221 166 140 -1
+-166 677 0.880318 288 224 171 139 -1
+-166 677 0.880318 315 221 164 139 -1
+-166 677 0.880318 315 217 166 139 -1
+-166 677 0.880318 282 210 171 136 -1
+-166 677 0.880318 307 217 169 139 -1
+-166 677 0.880318 307 213 171 139 -1
+-166 677 0.881998 307 197 169 137 -1
+-166 677 0.881998 315 217 171 139 -1
+-166 677 0.881998 288 221 164 139 -1
+-166 677 0.881998 307 217 171 136 -1
+-166 677 0.880318 294 221 169 139 -1
+-166 677 0.880318 301 217 169 139 -1
+-166 677 0.880318 276 224 169 140 -1
+-166 677 0.880318 294 217 171 142 -1
+-166 677 0.880318 307 217 166 136 -1
+-166 677 0.880318 307 217 171 139 -1
+-166 677 0.881998 294 217 169 139 -1
+-166 677 0.881998 315 217 169 139 -1
+-166 677 0.881998 315 217 169 139 -1
+-166 677 0.881998 315 221 171 139 -1
+-166 677 0.880318 330 213 169 139 -1
+-166 677 0.880318 288 203 169 140 -1
+-166 677 0.880318 294 221 166 130 -1
+-166 677 0.880318 294 213 169 140 -1
+-166 677 0.880318 307 213 169 142 -1
+-166 677 0.880318 307 217 169 139 -1
+-166 677 0.880318 315 210 166 144 -1
+-166 677 0.881998 282 207 169 140 -1
+-166 677 0.880318 307 217 171 140 -1
+-166 677 0.881998 307 217 169 139 -1
+-166 677 0.880318 307 221 171 139 -1
+-166 677 0.880318 288 207 171 139 -1
+-166 677 0.881998 282 210 169 142 -1
+-166 677 0.880318 301 221 166 139 -1
+-166 677 0.880318 276 221 169 139 -1
+-166 677 0.880318 282 224 171 139 -1
+-166 677 0.880318 322 213 171 139 -1
+-166 677 0.880318 307 207 169 139 -1
+-166 677 0.880318 307 213 169 133 -1
+-166 677 0.880318 294 207 171 134 -1
+-166 677 0.880318 294 213 166 139 -1
+-166 677 0.880318 294 221 164 140 -1
+-166 677 0.880318 315 217 171 139 -1
+-166 677 0.880318 294 217 171 140 -1
+-166 677 0.880318 276 197 171 137 -1
+-166 677 0.880318 307 203 166 139 -1
+-166 677 0.880318 315 217 169 140 -1
+-166 677 0.880318 294 217 171 139 -1
+-166 677 0.880318 294 221 171 139 -1
+-166 677 0.880318 301 217 171 139 -1
+-166 677 0.881998 294 217 169 140 -1
+-166 677 0.880318 307 224 169 139 -1
+-166 677 0.880318 294 217 176 144 -1
+-166 677 0.880318 288 217 169 139 -1
+-166 677 0.880318 282 217 164 140 -1
+-166 677 0.880318 307 221 171 139 -1
+-166 677 0.880318 301 213 169 139 -1
+-166 677 0.880318 301 207 171 142 -1
+-166 677 0.880318 294 217 171 139 -1
+-166 677 0.880318 307 224 169 140 -1
+-166 677 0.880318 315 213 173 139 -1
+-166 677 0.880318 294 207 160 136 -1
+-166 677 0.880318 315 224 169 140 -1
+-166 677 0.880318 322 224 169 140 -1
+-166 677 0.880318 315 217 169 139 -1
+-166 677 0.880318 294 217 169 142 -1
+-166 677 0.880318 307 217 171 137 -1
+-166 677 0.880318 301 203 164 140 -1
+-166 677 0.880318 288 221 166 137 -1
+-166 677 0.880318 301 217 171 136 -1
+-166 677 0.880318 301 217 169 136 -1
+-166 677 0.880318 294 217 169 139 -1
+-166 677 0.881998 270 217 160 139 -1
+-166 677 0.880318 276 221 162 137 -1
+-166 677 0.880318 276 200 169 136 -1
+-166 677 0.881998 294 224 169 140 -1
+-166 677 0.880318 301 213 169 140 -1
+-166 677 0.880318 301 221 169 139 -1
+-166 677 0.880318 270 217 162 140 -1
+-166 677 0.880318 307 217 171 139 -1
+-166 677 0.880318 294 217 169 134 -1
+-166 677 0.880318 307 213 169 139 -1
+-166 677 0.880318 307 217 164 139 -1
+-166 677 0.880318 307 217 166 139 -1
+-166 677 0.880318 288 221 169 139 -1
+-166 677 0.880318 301 191 171 137 -1
+-166 677 0.881998 307 203 171 139 -1
+-166 677 0.880318 301 221 171 139 -1
+-166 677 0.881998 307 203 169 139 -1
+-166 677 0.880318 301 217 169 139 -1
+-166 677 0.881998 288 217 171 140 -1
+-166 677 0.880318 315 224 169 136 -1
+-166 677 0.880318 301 217 171 140 -1
+-166 677 0.880318 307 197 171 139 -1
+-166 677 0.880318 315 213 169 139 -1
+-166 677 0.881998 294 217 166 139 -1
+-166 677 0.880318 276 221 171 134 -1
+-166 677 0.880318 315 224 171 140 -1
+-166 677 0.881998 288 221 171 139 -1
+-166 677 0.880318 294 217 166 139 -1
+-166 677 0.880318 307 217 169 139 -1
+-166 677 0.880318 288 217 166 139 -1
+-166 677 0.880318 307 207 171 140 -1
+-166 677 0.880318 307 224 171 140 -1
+-166 677 0.880318 282 217 171 137 -1
+-166 677 0.880318 307 197 169 140 -1
+-166 677 0.880318 315 217 166 139 -1
+-166 677 0.880318 307 217 164 140 -1
+-166 677 0.880318 294 213 173 139 -1
+-166 677 0.880318 294 210 169 139 -1
+-166 677 0.880318 294 217 166 140 -1
+-166 677 0.880318 307 207 162 139 -1
+-166 677 0.881998 315 210 171 130 -1
+-166 677 0.880318 276 217 162 139 -1
+-166 677 0.881998 301 217 169 139 -1
+-166 677 0.880318 307 221 171 140 -1
+-166 677 0.880318 307 213 169 139 -1
+-166 677 0.880318 276 217 169 139 -1
+-166 677 0.880318 301 210 169 140 -1
+-166 677 0.880318 288 224 166 140 -1
+-166 677 0.880318 315 217 169 139 -1
+-166 677 0.881998 301 217 160 139 -1
+-166 677 0.880318 276 200 171 139 -1
+-166 677 0.880318 294 217 169 137 -1
+-166 677 0.881998 288 221 169 139 -1
+-166 677 0.880318 307 217 171 142 -1
+-166 677 0.880318 288 224 171 140 -1
+-166 677 0.880318 301 224 171 139 -1
+-166 677 0.880318 307 221 169 134 -1
+-166 677 0.880318 315 217 171 139 -1
+-166 677 0.881998 315 221 169 139 -1
+-166 677 0.880318 301 221 166 140 -1
+-147 708 1.160877 421 207 224 130 -1
+-144 717 1.231437 531 200 203 130 -1
+-143 719 1.249917 623 203 200 137 -1
+-141 725 1.300316 512 200 189 139 -1
+-141 727 1.315436 552 186 173 139 -1
+-141 731 1.347356 -1 207 176 139 -1
+-141 733 1.362476 -1 207 171 145 -1
+-141 737 1.394396 -1 213 169 149 -1
+-141 739 1.409516 -1 217 166 152 -1
+-206 818 2.278074 -1 224 164 154 -1
+-207 820 2.309994 -1 241 160 164 -1
+-208 821 2.341913 -1 245 162 164 -1
+-210 823 2.392313 681 265 162 169 -1
+-211 824 2.417513 -1 270 160 181 -1
+-213 826 2.461193 651 294 166 189 -1
+-215 827 2.481353 -1 288 166 191 -1
+-217 828 2.499833 -1 315 166 197 -1
+-221 830 2.538473 -1 330 166 197 -1
+-223 831 2.556953 -1 365 158 194 -1
+-227 833 2.595593 -1 347 166 183 -1
+-229 834 2.615753 -1 347 171 171 -1
+-233 836 2.651033 -1 386 169 164 -1
+-235 837 2.669513 -1 356 169 152 -1
+-237 838 2.689673 -1 421 169 152 -1
+-247 843 2.780393 -1 597 171 397 -1
+-249 844 2.795513 -1 -1 169 512 -1
+-251 845 2.813993 -1 -1 176 512 -1
+-256 847 2.855993 -1 -1 169 397 -1
+-259 848 2.877833 -1 -1 181 322 -1
+-265 850 2.919833 -1 -1 171 237 -1
+-268 851 2.938313 -1 -1 189 232 -1
+-271 851 2.960153 -1 -1 183 237 -1
+-277 851 3.000473 -1 -1 194 217 -1
+-279 851 3.018953 -1 -1 186 228 -1
+-281 851 3.035753 -1 -1 203 207 -1
+-285 851 3.069352 -1 -1 203 207 -1
+-287 851 3.087832 -1 -1 197 217 -1
+-291 851 3.121433 -1 -1 217 207 -1
+-293 851 3.141593 -1 -1 217 203 -1
+-295 851 3.158392 -1 -1 213 203 -1
+-299 851 3.191993 -1 -1 255 191 -1
+-301 851 3.205432 -1 -1 237 197 -1
+-303 851 3.220552 -1 -1 260 197 -1
+-307 851 3.250793 -1 -1 270 191 -1
+-309 851 3.264232 -1 -1 276 191 -1
+-312 851 3.289432 -1 -1 301 189 -1
+-313 851 3.299512 -1 -1 270 173 -1
+-314 851 3.307912 -1 -1 307 189 -1
+-316 851 3.312952 -1 -1 315 189 -1
+-317 851 3.312952 -1 -1 301 189 -1
+-321 851 3.319672 -1 -1 315 189 -1
+-323 851 3.323032 -1 -1 322 189 -1
+-326 850 3.328072 -1 -1 307 189 -1
+-332 848 3.336472 -1 -1 322 178 -1
+-335 847 3.338152 -1 -1 315 189 -1
+-254 797 2.590554 -1 -1 315 189 -1
+-260 801 2.640954 -1 -1 330 189 -1
+-263 803 2.667834 -1 -1 330 189 -1
+-266 804 2.693034 -1 -1 338 189 -1
+-272 806 2.748474 -1 -1 330 189 -1
+-275 807 2.775354 -1 800 330 186 -1
+-282 809 2.834153 -1 -1 375 186 -1
+-286 810 2.862713 -1 -1 330 189 -1
+-290 811 2.891273 -1 -1 356 189 -1
+-296 813 2.943353 -1 -1 365 186 -1
+-299 814 2.968553 -1 -1 307 189 -1
+-302 814 2.990393 -1 -1 375 183 -1
+-308 814 3.034073 -1 -1 375 189 -1
+-311 814 3.054233 -1 -1 421 189 -1
+-317 814 3.096232 -1 -1 397 191 -1
+-319 814 3.114712 -1 -1 397 191 -1
+-322 814 3.134872 -1 -1 421 183 -1
+-328 814 3.175192 -1 -1 421 189 -1
+-331 814 3.195352 -1 -1 421 189 -1
+-334 814 3.215512 -1 -1 447 191 -1
+-346 814 3.299512 -1 -1 434 191 -1
+-352 813 3.343192 -1 -1 397 191 -1
+-355 812 3.366712 -1 -1 462 194 -1
+-361 810 3.412071 -1 -1 478 191 -1
+-364 809 3.435591 -1 -1 421 189 -1
+-367 808 3.459111 -1 -1 478 183 -1
+-373 806 3.504471 -1 -1 408 181 -1
+-376 805 3.527991 -1 -1 447 197 -1
+-378 804 3.548151 -1 -1 512 194 -1
+-384 802 3.593511 -1 -1 397 194 -1
+-386 801 3.615351 -1 -1 512 191 -1
+-392 799 3.662391 -1 -1 447 197 -1
+-394 798 3.684231 -1 -1 531 197 -1
+-397 796 3.707751 -1 408 531 197 -1
+-401 792 3.753111 -1 -1 447 194 -1
+-403 790 3.774951 751 -1 597 194 -1
+-342 805 3.386872 -1 -1 462 194 -1
+-348 803 3.381832 -1 -1 478 197 -1
+-351 802 3.383512 -1 -1 462 197 -1
+-357 800 3.378472 -1 -1 386 200 -1
+-381 792 3.370072 -1 -1 478 197 -1
+-385 791 3.371752 -1 -1 447 197 -1
+-391 789 3.370071 -1 -1 408 203 -1
+-395 788 3.371751 -1 -1 365 207 -1
+-398 787 3.371751 -1 -1 478 203 -1
+-404 785 3.376791 -1 -1 434 207 -1
+-337 742 2.745113 -1 -1 397 210 -1
+-339 743 2.765273 -1 -1 434 207 -1
+-346 746 2.825752 -1 -1 462 207 -1
+-349 747 2.847592 -1 -1 434 207 -1
+-351 748 2.867752 -1 -1 408 207 -1
+-356 750 2.908072 -1 -1 447 213 -1
+-359 751 2.929912 -1 -1 397 210 -1
+-365 752 2.975272 -1 -1 397 213 -1
+-368 752 2.997112 -1 -1 434 207 -1
+-371 752 3.018952 -1 -1 462 213 -1
+-377 752 3.064312 -1 -1 397 213 -1
+-380 752 3.087831 -1 -1 462 210 -1
+-383 752 3.111351 -1 -1 408 207 -1
+-389 752 3.158391 -1 -1 408 213 -1
+-392 752 3.181911 -1 -1 447 213 -1
+-395 752 3.203751 -1 -1 375 213 -1
+-401 752 3.249111 -1 -1 397 213 -1
+-404 752 3.270951 -1 -1 447 213 -1
+-410 751 3.316311 -1 -1 365 221 -1
+-413 750 3.338151 -1 -1 421 217 -1
+-416 749 3.361671 -1 -1 375 217 -1
+-422 747 3.407031 -1 -1 421 207 -1
+-425 746 3.430551 -1 -1 375 217 -1
+-428 745 3.454071 -1 -1 375 217 -1
+-433 743 3.497751 -1 -1 386 217 -1
+-436 742 3.519590 -1 -1 365 217 -1
+-438 741 3.539750 -1 -1 365 207 -1
+-443 739 3.581750 -1 -1 375 217 -1
+-445 738 3.601910 -1 -1 356 217 -1
+-447 737 3.622070 -1 -1 397 217 -1
+-451 735 3.664070 -1 -1 356 210 -1
+-453 734 3.685910 -1 -1 365 217 -1
+-393 744 3.316311 -1 -1 375 217 -1
+-396 744 3.316311 -1 -1 315 213 -1
+-399 744 3.314631 -1 -1 322 217 -1
+-405 744 3.314631 -1 714 330 207 -1
+-407 744 3.311271 -1 -1 338 217 -1
+-410 744 3.307911 -1 791 375 217 -1
+-415 744 3.306231 -1 -1 347 203 -1
+-418 744 3.304551 -1 -1 338 207 -1
+-424 744 3.307911 -1 -1 338 213 -1
+-427 744 3.306231 -1 800 338 213 -1
+-430 744 3.307911 -1 714 330 217 -1
+-436 743 3.307911 -1 800 322 217 -1
+-439 742 3.311271 -1 -1 301 207 -1
+-442 742 3.311271 -1 800 322 217 -1
+-448 741 3.309591 -1 751 315 221 -1
+-451 741 3.306231 -1 791 307 224 -1
+-457 741 3.301191 -1 681 315 207 -1
+-460 741 3.297831 -1 651 288 213 -1
+-381 686 2.536793 -1 597 270 197 -1
+-387 690 2.587193 -1 714 294 221 -1
+-390 692 2.612393 -1 681 265 207 -1
+-396 696 2.666153 -1 714 288 224 -1
+-399 697 2.693033 -1 623 276 213 -1
+-402 698 2.719913 -1 531 265 224 -1
+-408 700 2.773673 -1 552 265 217 -1
+-411 701 2.798873 -1 494 232 207 -1
+-452 708 3.116392 -1 478 224 221 -1
+-456 708 3.151672 -1 512 228 221 -1
+-464 708 3.222232 -1 447 224 224 -1
+-470 708 3.275992 -1 421 213 217 -1
+-472 708 3.294472 -1 375 203 224 -1
+-476 708 3.329752 -1 421 203 224 -1
+-478 708 3.348232 -1 408 200 221 -1
+-480 708 3.365032 -1 434 194 221 -1
+-504 696 3.590152 -1 375 194 221 -1
+-506 695 3.608632 -1 347 197 217 -1
+-508 694 3.628792 751 356 191 217 -1
+-447 698 3.207114 800 330 197 200 -1
+-449 698 3.205434 751 330 194 213 -1
+-455 698 3.202074 651 322 200 224 -1
+-458 698 3.200394 531 294 197 217 -1
+-461 698 3.197034 574 282 194 217 -1
+-467 698 3.188634 597 307 191 217 -1
+-470 698 3.183594 512 294 183 217 -1
+-476 698 3.181914 531 282 200 217 -1
+-479 698 3.185274 552 282 203 217 -1
+-485 698 3.190314 531 282 241 217 -1
+-488 698 3.190314 512 265 270 217 -1
+-490 698 3.190314 434 265 282 217 -1
+-495 698 3.185274 462 255 294 217 -1
+-497 698 3.180234 421 232 315 217 -1
+-501 698 3.176874 408 237 322 217 -1
+-503 698 3.176874 386 237 347 213 -1
+-433 633 2.407436 408 228 315 217 -1
+-434 634 2.422556 397 228 347 217 -1
+-435 635 2.435996 386 221 322 217 -1
+-437 637 2.462876 338 207 322 221 -1
+-438 638 2.472956 315 207 330 207 -1
+-440 640 2.493116 330 207 322 217 -1
+-441 641 2.499836 315 207 315 217 -1
+-441 641 2.499836 255 200 265 217 -1
+-441 641 2.501516 288 203 232 207 -1
+-441 641 2.499836 260 197 200 224 -1
+-441 641 2.501516 294 197 171 213 -1
+-441 641 2.499836 260 197 178 200 -1
+-441 641 2.499836 294 189 183 207 -1
+-441 641 2.499836 301 191 176 221 -1
+-441 641 2.501516 294 200 183 224 -1
+-441 641 2.499836 276 200 176 210 -1
+-441 641 2.499836 294 200 183 221 -1
+-441 641 2.501516 288 197 183 221 -1
+-441 641 2.499836 294 194 183 221 -1
+-441 641 2.499836 288 194 178 221 -1
+-441 641 2.501516 288 200 181 224 -1
+-441 641 2.501516 282 200 183 224 -1
+-441 641 2.501516 288 200 178 224 -1
+-441 641 2.501516 270 173 183 224 -1
+-441 641 2.501516 288 203 181 228 -1
+-443 643 2.518316 250 194 191 210 -1
+-444 644 2.526716 288 186 282 221 -1
+-448 646 2.560316 307 194 365 221 -1
+-451 648 2.583836 330 183 365 217 -1
+-458 652 2.645996 330 194 282 213 -1
+-462 654 2.682956 307 189 228 210 -1
+-466 656 2.714875 365 178 210 210 -1
+-472 658 2.771995 434 194 173 213 -1
+-475 659 2.800555 494 191 176 210 -1
+-482 661 2.857675 478 191 166 207 -1
+-486 662 2.887915 597 186 162 197 -1
+-494 664 2.953435 -1 191 162 213 714
+-498 665 2.987035 -1 194 151 217 -1
+-547 662 3.378473 -1 270 122 181 -1
+-556 659 3.447353 -1 294 118 217 -1
+-559 658 3.470873 -1 322 124 478 -1
+-565 656 3.521273 -1 330 125 434 -1
+-568 655 3.546473 -1 375 126 322 -1
+-574 653 3.596873 -1 356 127 260 -1
+-576 652 3.615353 -1 462 130 224 -1
+-578 651 3.635513 -1 421 134 221 -1
+-582 649 3.674153 -1 800 162 213 -1
+-584 648 3.689273 -1 -1 144 200 -1
+-588 646 3.726233 -1 -1 137 197 -1
+-590 644 3.748073 -1 -1 136 191 -1
+-592 642 3.771593 -1 -1 136 186 -1
+-598 638 3.823673 -1 -1 145 181 -1
+-601 636 3.850553 -1 -1 147 173 -1
+-613 625 3.974872 -1 -1 183 152 -1
+-619 618 4.045432 -1 -1 203 147 -1
+-621 615 4.073991 -1 -1 221 144 -1
+-623 612 4.100871 -1 -1 232 142 -1
+-626 607 4.144551 714 -1 265 142 -1
+-627 605 4.159671 -1 -1 265 142 -1
+-628 604 4.169751 -1 -1 288 140 -1
+-629 603 4.184870 -1 -1 301 139 -1
+-629 603 4.188230 -1 -1 315 139 -1
+-629 603 4.189910 -1 -1 307 139 -1
+-629 603 4.191590 -1 -1 301 136 -1
+-629 603 4.189910 -1 -1 301 133 -1
+-629 603 4.189910 -1 -1 294 137 -1
+-629 603 4.189910 -1 -1 307 139 -1
+-629 603 4.191590 -1 -1 307 140 -1
+-629 603 4.191590 -1 -1 294 140 -1
+-629 603 4.189910 -1 -1 301 139 -1
+-629 603 4.191590 -1 -1 301 140 -1
+-629 603 4.191590 -1 -1 315 139 -1
+-629 603 4.191590 -1 -1 294 137 -1
+-629 603 4.191590 -1 -1 301 139 -1
+-629 603 4.191590 -1 -1 315 136 -1
+-629 603 4.191590 -1 -1 301 139 -1
+-629 603 4.191590 -1 -1 294 139 -1
+-629 603 4.191590 -1 -1 307 139 -1
+-629 603 4.191590 -1 -1 265 139 -1
+-629 603 4.191590 574 -1 315 140 -1
+-629 603 4.191590 -1 -1 301 133 -1
+-629 603 4.191590 -1 -1 260 137 -1
+-629 603 4.189910 -1 -1 307 139 -1
+-629 603 4.189910 -1 -1 307 134 -1
+-629 603 4.191590 -1 -1 265 139 -1
+-629 603 4.189910 -1 -1 294 134 -1
+-629 603 4.191590 -1 -1 282 139 -1
+-629 603 4.191590 -1 -1 301 139 -1
+-629 603 4.191590 -1 -1 307 133 -1
+-629 603 4.191590 -1 -1 294 139 -1
+-629 603 4.189910 -1 -1 315 140 -1
+-629 603 4.191590 -1 -1 315 136 -1
+-629 603 4.191590 -1 -1 294 139 -1
+-629 603 4.191590 -1 -1 307 139 -1
+-629 603 4.191590 -1 -1 270 131 -1
+-629 603 4.189910 -1 -1 301 139 -1
+-629 603 4.191590 -1 -1 301 136 -1
+-629 603 4.191590 -1 -1 301 131 -1
+-629 603 4.191590 -1 -1 307 139 -1
+-629 603 4.191590 -1 -1 307 140 -1
+-629 603 4.191590 -1 -1 282 140 -1
+-629 603 4.191590 -1 -1 301 137 -1
+-629 603 4.189910 478 -1 301 134 -1
+-629 603 4.191590 -1 -1 301 139 -1
+-629 603 4.191590 -1 -1 315 139 -1
+-629 603 4.191590 -1 -1 294 140 -1
+-629 603 4.191590 -1 -1 315 139 -1
+-629 603 4.191590 -1 -1 315 137 -1
+-629 603 4.189910 -1 -1 270 140 -1
+-629 603 4.191590 -1 -1 294 137 -1
+-629 603 4.191590 -1 -1 270 139 -1
+-629 603 4.191590 -1 -1 255 139 -1
+-629 603 4.189910 -1 -1 288 140 -1
+-629 603 4.189910 -1 -1 265 140 -1
+-629 603 4.191590 -1 -1 294 139 -1
+-629 603 4.191590 -1 -1 288 137 -1
+-629 603 4.191590 -1 -1 270 139 -1
+-629 603 4.191590 -1 -1 282 136 -1
+-629 603 4.191590 -1 -1 276 136 -1
+-629 602 4.196630 791 -1 276 136 -1
+-629 602 4.198310 -1 -1 276 139 -1
+-629 601 4.203350 -1 -1 250 134 -1
+-631 599 4.225190 -1 -1 237 142 -1
+-632 597 4.241990 -1 -1 241 144 -1
+-633 595 4.262149 -1 -1 237 136 -1
+-635 589 4.314229 -1 -1 245 142 -1
+-636 585 4.346149 -1 -1 250 136 -1
+-637 581 4.379749 -1 -1 260 142 -1
+-639 571 4.455349 -1 -1 282 136 -1
+-640 566 4.492309 -1 -1 265 134 -1
+-642 556 4.567909 -1 -1 282 140 -1
+-643 551 4.604869 -1 -1 338 134 -1
+-643 547 4.638469 -1 -1 347 140 -1
+-643 538 4.705669 -1 -1 330 147 -1
+-643 535 4.732549 -1 -1 365 169 -1
+-643 531 4.761108 -1 -1 315 232 -1
+-643 525 4.811508 -1 -1 375 250 -1
+-643 522 4.835028 -1 -1 347 203 -1
+-643 519 4.855188 -1 -1 338 151 -1
+-643 513 4.897188 -1 -1 347 124 -1
+-642 510 4.919028 -1 -1 338 133 -1
+-640 506 4.955987 -1 -1 365 144 -1
+-639 504 4.976147 -1 -1 347 144 -1
+-638 502 4.994627 -1 -1 330 147 -1
+-636 498 5.029907 -1 -1 347 147 -1
+-635 496 5.048387 -1 -1 315 147 -1
+-634 494 5.063507 -1 791 386 147 -1
+-632 490 5.100466 -1 -1 365 149 -1
+-631 488 5.118946 -1 -1 365 149 -1
+-630 486 5.135746 -1 -1 338 149 -1
+-628 482 5.172706 -1 -1 375 152 -1
+-631 545 4.756067 -1 -1 375 151 -1
+-631 542 4.754387 -1 -1 375 154 -1
+-631 536 4.754387 -1 -1 338 152 -1
+-631 533 4.754387 -1 -1 375 149 -1
+-631 527 4.756067 -1 -1 375 156 -1
+-631 524 4.757747 -1 -1 315 154 -1
+-631 521 4.759427 -1 -1 397 154 -1
+-631 515 4.759427 -1 -1 322 154 -1
+-631 512 4.761106 -1 -1 386 158 -1
+-631 509 4.761106 -1 -1 397 158 -1
+-631 503 4.759427 -1 -1 338 158 -1
+-631 500 4.756067 -1 -1 338 152 -1
+-631 494 4.747667 -1 -1 365 158 -1
+-631 491 4.740947 -1 -1 338 158 -1
+-631 488 4.735907 -1 -1 386 160 -1
+-566 555 3.964789 -1 -1 322 162 -1
+-568 553 3.989989 -1 -1 347 154 -1
+-570 551 4.015189 -1 -1 375 160 -1
+-574 545 4.065588 -1 -1 322 160 -1
+-576 542 4.092468 -1 -1 338 160 -1
+-580 536 4.142868 -1 -1 356 164 -1
+-582 533 4.171428 -1 -1 338 164 -1
+-584 530 4.198308 -1 -1 356 160 -1
+-588 524 4.252067 -1 -1 347 164 -1
+-589 521 4.278947 -1 -1 397 160 -1
+-590 518 4.304147 -1 -1 365 162 -1
+-592 512 4.354547 -1 -1 338 162 -1
+-593 509 4.379746 -1 -1 375 162 -1
+-594 506 4.404946 -1 -1 375 164 -1
+-596 500 4.455346 -1 -1 397 164 -1
+-597 497 4.480546 -1 -1 386 162 -1
+-599 491 4.532626 -1 -1 356 162 -1
+-599 488 4.557826 -1 -1 375 164 -1
+-599 485 4.581346 -1 -1 397 166 -1
+-599 479 4.630065 -1 -1 375 156 -1
+-599 476 4.655265 -1 -1 375 169 -1
+-599 473 4.678785 -1 -1 347 169 -1
+-599 467 4.727505 -1 -1 347 169 -1
+-599 464 4.751025 -1 -1 365 166 -1
+-599 458 4.801425 -1 -1 322 166 -1
+-599 455 4.826625 -1 -1 365 169 -1
+-599 452 4.850145 -1 -1 375 171 -1
+-597 446 4.902225 -1 -1 365 171 -1
+-596 443 4.929104 -1 -1 356 160 -1
+-595 440 4.955984 -1 -1 375 166 -1
+-593 434 5.009744 -1 -1 375 169 -1
+-592 431 5.038303 -1 -1 347 173 -1
+-591 428 5.063503 -1 -1 338 169 -1
+-587 487 4.665344 -1 -1 386 169 -1
+-587 484 4.665344 -1 -1 375 173 -1
+-587 480 4.665344 -1 -1 338 173 -1
+-587 472 4.663664 -1 -1 347 176 -1
+-587 468 4.663664 -1 -1 330 178 -1
+-587 460 4.665344 -1 -1 356 171 -1
+-587 456 4.665344 -1 -1 386 178 -1
+-587 452 4.665344 -1 -1 347 176 -1
+-587 444 4.667024 -1 -1 356 178 -1
+-587 440 4.665344 -1 -1 365 173 -1
+-587 436 4.665344 -1 -1 347 176 -1
+-587 428 4.661984 -1 -1 365 181 -1
+-587 424 4.658625 -1 -1 356 173 -1
+-523 489 3.959747 -1 -1 347 181 -1
+-526 486 3.989986 -1 -1 365 171 -1
+-528 483 4.020226 -1 -1 347 173 -1
+-532 477 4.080707 -1 -1 365 181 -1
+-534 474 4.109266 -1 -1 365 181 -1
+-536 471 4.137826 -1 -1 330 181 -1
+-540 465 4.191586 -1 -1 356 181 -1
+-542 462 4.220145 -1 -1 338 183 -1
+-544 459 4.247025 -1 -1 365 183 -1
+-546 453 4.302464 -1 -1 330 183 -1
+-547 450 4.331024 -1 -1 322 171 -1
+-549 443 4.389824 -1 -1 338 183 -1
+-550 440 4.418384 -1 -1 315 186 -1
+-551 436 4.450304 -1 -1 307 183 -1
+-553 428 4.512464 -1 -1 322 189 -1
+-554 424 4.546063 800 -1 301 181 -1
+-555 420 4.577983 -1 -1 294 183 -1
+-555 412 4.645183 -1 -1 338 181 -1
+-555 408 4.678783 751 -1 330 183 -1
+-555 400 4.745983 -1 -1 338 183 -1
+-555 396 4.777903 -1 -1 356 181 -1
+-555 392 4.808143 -1 -1 397 181 -1
+-555 385 4.860222 -1 -1 397 181 -1
+-554 382 4.883742 791 -1 356 181 -1
+-554 380 4.897182 -1 -1 365 183 -1
+-554 377 4.919023 -1 -1 375 183 -1
+-554 377 4.920702 751 -1 338 183 -1
+-554 377 4.920702 681 -1 288 183 -1
+-549 410 4.556143 -1 -1 301 186 -1
+-549 410 4.549423 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 282 183 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 282 181 -1
+-549 410 4.544384 -1 -1 301 186 -1
+-549 410 4.544384 751 -1 294 189 -1
+-549 410 4.546063 -1 -1 294 186 -1
+-549 410 4.546063 -1 -1 307 183 -1
+-549 410 4.546063 -1 -1 270 183 -1
+-549 410 4.546063 -1 -1 282 183 -1
+-549 410 4.546063 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 282 183 -1
+-549 410 4.544384 681 -1 294 173 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 301 186 -1
+-549 410 4.546063 -1 -1 294 189 -1
+-549 410 4.546063 -1 -1 282 181 -1
+-549 410 4.546063 -1 -1 288 176 -1
+-549 410 4.544384 -1 -1 260 189 -1
+-549 410 4.546063 -1 -1 294 186 -1
+-549 410 4.546063 -1 -1 294 186 -1
+-549 410 4.546063 -1 -1 276 183 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.544384 -1 -1 282 189 -1
+-549 410 4.546063 -1 -1 294 181 -1
+-549 410 4.544384 -1 -1 288 186 -1
+-549 410 4.544384 -1 -1 282 183 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 294 181 -1
+-549 410 4.546063 -1 -1 282 186 -1
+-549 410 4.544384 -1 -1 288 183 -1
+-549 410 4.546063 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 276 183 -1
+-549 410 4.544384 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 282 189 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.544384 -1 -1 288 183 -1
+-549 410 4.544384 356 -1 288 183 -1
+-549 410 4.544384 -1 -1 301 186 -1
+-549 410 4.546063 -1 -1 270 183 -1
+-549 410 4.546063 -1 -1 288 191 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.546063 751 -1 288 183 -1
+-549 410 4.546063 -1 -1 315 189 -1
+-549 410 4.546063 -1 -1 288 189 -1
+-549 410 4.546063 -1 -1 282 189 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 301 186 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.544384 574 -1 294 183 -1
+-549 410 4.546063 -1 -1 270 189 -1
+-549 410 4.544384 800 -1 294 189 -1
+-549 410 4.544384 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 294 186 -1
+-549 410 4.546063 -1 -1 294 186 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 276 183 -1
+-549 410 4.544384 597 -1 288 186 -1
+-549 410 4.544384 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 301 189 -1
+-549 410 4.544384 -1 -1 294 183 -1
+-549 410 4.546063 -1 -1 301 186 -1
+-549 410 4.546063 -1 -1 245 183 -1
+-549 410 4.544384 -1 -1 288 178 -1
+-549 410 4.546063 -1 -1 301 186 -1
+-549 410 4.544384 -1 -1 301 178 -1
+-549 410 4.544384 -1 -1 294 189 -1
+-549 410 4.544384 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 288 189 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.544384 -1 -1 301 171 -1
+-549 410 4.546063 -1 -1 301 181 -1
+-549 410 4.546063 -1 -1 288 176 -1
+-549 410 4.546063 -1 -1 282 186 -1
+-549 410 4.544384 -1 -1 301 183 -1
+-549 410 4.544384 -1 -1 288 176 -1
+-549 410 4.544384 -1 -1 265 189 -1
+-549 410 4.544384 -1 -1 307 183 -1
+-549 410 4.546063 -1 -1 294 183 -1
+-549 410 4.544384 -1 -1 307 183 -1
+-549 410 4.544384 -1 -1 282 186 -1
+-549 410 4.546063 -1 -1 301 186 -1
+-549 410 4.546063 -1 -1 301 189 -1
+-549 410 4.546063 -1 -1 288 173 -1
+-549 410 4.544384 -1 -1 307 183 -1
+-549 410 4.546063 -1 -1 301 176 -1
+-549 410 4.546063 -1 -1 282 183 -1
+-549 410 4.546063 -1 -1 288 183 -1
+-549 410 4.546063 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 301 186 -1
+-549 410 4.544384 -1 -1 265 173 -1
+-549 410 4.546063 751 -1 301 191 -1
+-549 410 4.544384 -1 -1 301 186 -1
+-549 410 4.544384 -1 -1 301 183 -1
+-549 410 4.546063 -1 -1 288 183 -1
+-549 410 4.544384 -1 -1 288 189 -1
+-549 410 4.546063 -1 -1 288 176 -1
+-549 410 4.544384 -1 -1 294 183 -1
+-549 410 4.544384 -1 -1 288 183 -1
+-549 410 4.544384 -1 -1 301 183 -1
+-549 410 4.544384 -1 -1 276 173 -1
+-549 410 4.546063 -1 -1 282 183 -1
+-549 410 4.537663 -1 -1 294 183 -1
+-549 410 4.537663 -1 -1 282 181 -1
+-549 410 4.539343 -1 -1 276 183 -1
+-549 409 4.544384 -1 -1 260 183 -1
+-549 409 4.542704 -1 -1 282 183 -1
+-549 409 4.530943 -1 -1 276 189 -1
+-549 408 4.524223 -1 -1 265 189 -1
+-549 406 4.510783 -1 -1 265 189 -1
+-549 405 4.504063 -1 -1 255 183 -1
+-549 404 4.500703 751 -1 260 189 -1
+-549 401 4.497344 -1 -1 255 183 -1
+-552 362 4.589743 -1 -1 288 178 -1
+-552 357 4.598143 -1 -1 338 181 -1
+-552 353 4.599823 -1 -1 315 176 -1
+-552 349 4.596463 -1 -1 338 171 -1
+-552 347 4.588063 -1 -1 330 181 -1
+-552 346 4.583023 -1 -1 301 181 -1
+-552 344 4.569583 -1 -1 301 181 -1
+-552 343 4.562863 -1 -1 288 181 -1
+-552 342 4.557823 -1 -1 294 181 -1
+-552 339 4.544383 -1 -1 276 181 -1
+-475 398 3.793425 -1 -1 294 181 -1
+-477 397 3.810225 -1 -1 255 171 -1
+-481 394 3.845505 -1 -1 270 181 -1
+-483 392 3.865664 -1 -1 276 178 -1
+-487 388 3.909344 -1 -1 282 181 -1
+-489 386 3.932864 -1 -1 282 181 -1
+-491 384 3.956384 -1 -1 288 176 -1
+-495 380 4.001744 -1 -1 307 176 -1
+-497 378 4.023584 -1 -1 294 178 -1
+-498 376 4.042064 -1 -1 288 178 -1
+-501 372 4.079024 -1 -1 294 178 -1
+-502 370 4.097504 -1 -1 288 173 -1
+-503 368 4.115983 -1 -1 282 176 -1
+-505 364 4.149583 -1 -1 288 173 -1
+-506 362 4.171423 -1 -1 288 178 -1
+-507 360 4.188223 -1 -1 294 171 -1
+-509 356 4.221823 -1 -1 276 178 -1
+-510 354 4.240303 -1 -1 294 173 -1
+-512 350 4.273903 -1 -1 301 173 -1
+-513 348 4.292383 -1 -1 301 162 -1
+-514 346 4.310863 -1 -1 282 173 -1
+-516 342 4.346142 -1 -1 276 173 -1
+-517 340 4.362942 -1 -1 294 173 -1
+-518 338 4.383102 597 -1 301 173 -1
+-520 333 4.425102 -1 -1 270 173 -1
+-521 330 4.446942 -1 -1 301 173 -1
+-523 324 4.497342 -1 -1 301 171 -1
+-524 321 4.520862 -1 -1 307 166 -1
+-525 318 4.547741 -1 -1 322 173 -1
+-525 312 4.596461 -1 -1 301 171 -1
+-525 309 4.621661 -1 -1 338 173 -1
+-525 306 4.646861 -1 -1 322 166 -1
+-525 300 4.698941 -1 -1 330 173 -1
+-525 297 4.725821 -1 -1 330 160 -1
+-525 294 4.752700 -1 -1 322 169 -1
+-525 288 4.804780 -1 -1 322 160 -1
+-525 284 4.835020 -1 -1 315 169 -1
+-524 277 4.892140 -1 -1 322 171 -1
+-523 273 4.920700 -1 -1 322 171 -1
+-522 269 4.950940 -1 -1 322 169 -1
+-514 327 4.561181 -1 -1 282 171 -1
+-515 323 4.557821 -1 -1 307 160 -1
+-516 319 4.557821 -1 -1 294 171 -1
+-518 311 4.547741 -1 -1 301 173 -1
+-519 307 4.542701 -1 -1 294 169 -1
+-521 299 4.530941 751 -1 294 171 -1
+-522 295 4.527581 -1 -1 294 162 -1
+-523 291 4.520861 -1 -1 265 169 -1
+-525 283 4.514141 -1 -1 270 169 -1
+-526 279 4.509100 -1 -1 260 171 -1
+-527 275 4.507421 -1 -1 276 171 -1
+-529 267 4.502381 -1 -1 276 162 -1
+-454 324 3.790063 -1 -1 276 162 -1
+-457 321 3.823663 -1 -1 276 169 -1
+-463 315 3.892543 -1 -1 265 171 -1
+-466 312 3.926142 -1 791 270 166 -1
+-471 306 3.986622 -1 -1 276 166 -1
+-473 303 4.015182 -1 -1 276 164 -1
+-475 300 4.042062 -1 800 245 166 -1
+-479 294 4.094141 -1 -1 265 166 -1
+-483 289 4.142861 -1 800 255 169 -1
+-486 284 4.188221 -1 800 228 164 -1
+-491 271 4.297422 -1 791 228 169 -1
+-493 265 4.347822 -1 751 221 166 -1
+-494 262 4.373022 -1 651 224 164 -1
+-496 256 4.423421 -1 791 213 164 -1
+-497 253 4.448621 -1 791 228 160 -1
+-498 250 4.475501 -1 800 232 160 -1
+-500 243 4.530941 -1 681 232 160 -1
+-501 240 4.557820 -1 751 237 154 -1
+-501 234 4.608220 -1 791 241 156 -1
+-501 231 4.631740 -1 714 241 158 -1
+-501 228 4.653580 -1 597 224 158 -1
+-501 223 4.693900 -1 651 250 156 -1
+-501 221 4.712380 -1 651 232 152 -1
+-501 219 4.730860 -1 531 237 156 -1
+-501 214 4.769499 800 597 232 156 -1
+-501 211 4.789659 -1 597 224 154 -1
+-501 205 4.831659 -1 651 228 154 -1
+-485 266 4.448620 -1 651 232 156 -1
+-486 263 4.446940 -1 681 228 156 -1
+-488 257 4.450300 -1 623 232 152 -1
+-493 242 4.467099 -1 574 237 151 -1
+-495 236 4.477180 -1 574 232 152 -1
+-496 233 4.480539 751 494 237 152 -1
+-498 227 4.487259 -1 494 241 149 -1
+-499 224 4.490619 -1 531 237 151 -1
+-500 221 4.487259 -1 552 245 149 -1
+-502 215 4.483899 -1 494 241 149 -1
+-503 212 4.482219 -1 512 232 151 -1
+-505 206 4.478859 -1 478 224 149 -1
+-506 203 4.473819 -1 494 217 151 -1
+-508 198 4.462059 -1 478 224 147 -1
+-509 195 4.457019 -1 462 224 151 -1
+-429 249 3.732941 -1 478 221 149 -1
+-433 245 3.776621 751 447 217 147 -1
+-436 243 3.801821 -1 447 213 151 -1
+-438 241 3.825341 574 421 200 145 -1
+-443 237 3.877420 -1 408 207 140 -1
+-446 234 3.905980 -1 408 200 142 -1
+-452 228 3.964780 -1 386 207 147 -1
+-455 225 3.995020 800 375 194 144 -1
+-457 222 4.025260 -1 375 200 136 -1
+-461 216 4.082379 751 347 210 142 -1
+-463 213 4.109259 597 356 203 144 -1
+-467 207 4.156299 751 347 207 142 -1
+-468 205 4.174779 462 330 194 137 -1
+-470 201 4.210059 552 338 203 139 -1
+-471 199 4.225179 651 330 194 139 -1
+-472 197 4.243659 714 330 194 139 -1
+-474 193 4.275578 574 315 197 139 -1
+-475 191 4.290699 552 307 200 139 -1
+-477 187 4.324298 552 322 191 139 -1
+-478 185 4.339418 512 282 194 134 -1
+-479 183 4.357898 494 294 191 140 -1
+-481 178 4.398218 434 288 186 140 -1
+-482 175 4.423418 512 282 181 139 -1
+-484 169 4.472138 386 265 183 137 -1
+-485 166 4.497338 386 270 178 137 -1
+-487 160 4.549417 434 245 173 133 -1
+-487 157 4.574617 447 250 171 131 -1
+-487 154 4.596457 421 245 162 136 -1
+-487 148 4.640137 365 232 158 136 -1
+-487 146 4.656937 386 213 160 133 -1
+-487 142 4.687177 365 228 158 133 -1
+-487 141 4.697257 365 228 156 134 -1
+-487 141 4.700617 315 217 160 134 -1
+-475 171 4.352858 347 217 162 131 -1
+-475 171 4.342778 294 210 164 137 -1
+-475 171 4.332698 301 217 164 139 -1
+-475 171 4.332698 330 210 162 139 -1
+-475 171 4.334378 294 200 166 139 -1
+-475 171 4.334378 315 213 166 137 -1
+-475 171 4.332698 322 210 166 137 -1
+-475 171 4.332698 315 210 158 140 -1
+-475 171 4.331018 282 210 162 139 -1
+-475 171 4.331018 315 217 160 139 -1
+-475 171 4.332698 301 210 164 139 -1
+-475 171 4.332698 315 210 166 137 -1
+-475 171 4.331018 301 213 164 134 -1
+-475 171 4.331018 307 217 166 139 -1
+-475 171 4.331018 338 210 166 139 -1
+-475 171 4.331018 315 210 162 137 -1
+-475 171 4.331018 307 217 166 137 -1
+-475 171 4.331018 301 210 166 137 -1
+-475 171 4.332698 315 210 160 139 -1
+-475 171 4.331018 315 217 164 139 -1
+-475 171 4.331018 307 207 166 139 -1
+-475 171 4.332698 282 221 160 137 -1
+-475 171 4.331018 330 210 164 139 -1
+-475 171 4.331018 301 210 162 139 -1
+-475 171 4.331018 307 213 164 137 -1
+-475 171 4.331018 322 213 162 137 -1
+-475 171 4.334378 315 210 164 137 -1
+-475 171 4.336058 315 213 156 136 -1
+-475 171 4.342778 307 207 160 133 -1
+-475 170 4.344458 315 207 162 134 -1
+-476 167 4.369658 315 203 158 131 -1
+-477 165 4.388137 288 207 152 133 -1
+-478 162 4.408297 315 210 142 131 -1
+-480 156 4.462057 322 203 131 129 -1
+-484 121 4.740936 714 189 162 126 -1
+-484 117 4.772856 -1 197 162 127 -1
+-484 113 4.801416 -1 200 160 129 -1
+-483 105 4.861896 -1 191 149 130 -1
+-482 102 4.888776 -1 200 149 131 -1
+-480 94 4.950936 597 203 139 133 -1
+-479 90 4.977816 -1 203 142 142 -1
+-478 86 5.008056 -1 207 140 140 -1
+-476 78 5.070216 -1 224 139 154 -1
+-475 75 5.098775 -1 224 129 160 -1
+-471 68 5.160935 -1 241 133 173 -1
+-469 65 5.191175 -1 260 126 181 -1
+-467 61 5.223095 -1 276 126 183 -1
+-463 54 5.288615 -1 276 131 181 -1
+-461 51 5.322215 -1 307 131 160 -1
+-455 44 5.391094 -1 347 131 181 -1
+-452 40 5.426374 -1 386 133 294 -1
+-449 37 5.463334 -1 462 133 330 -1
+-442 31 5.535574 -1 -1 142 260 -1
+-438 28 5.575894 -1 -1 147 207 -1
+-434 25 5.611174 -1 -1 152 197 -1
+-426 19 5.686774 -1 552 158 189 -1
+-422 17 5.722054 -1 -1 160 173 -1
+-414 13 5.794293 -1 -1 169 166 -1
+-410 11 5.827893 -1 -1 176 160 -1
+-406 9 5.858133 -1 -1 194 154 -1
+-399 7 5.903493 -1 574 203 156 -1
+-396 6 5.920293 -1 -1 210 152 -1
+-393 5 5.925333 -1 478 210 152 -1
+-387 3 5.927013 -1 -1 213 147 -1
+-384 2 5.921973 -1 -1 213 149 -1
+-381 1 5.911893 -1 -1 207 147 -1
+-375 -1 5.890054 -1 -1 207 152 -1
+-372 -2 5.876614 -1 -1 203 152 -1
+-366 -4 5.861494 -1 -1 183 152 -1
+-362 -6 5.859814 -1 -1 194 149 -1
+-358 -8 5.861494 -1 -1 189 147 -1
+-349 -12 5.878294 -1 -1 194 147 -1
+-344 -14 5.890053 -1 -1 200 149 -1
+-339 -16 5.903493 -1 -1 203 144 -1
+-329 -20 5.933733 -1 -1 207 139 -1
+-374 62 5.207975 -1 -1 213 139 -1
+-371 57 5.249975 -1 -1 221 137 -1
+-365 49 5.325575 -1 -1 237 136 -1
+-362 45 5.362535 -1 -1 232 136 -1
+-359 42 5.396135 -1 -1 228 131 -1
+-353 36 5.458295 -1 -1 241 133 -1
+-351 34 5.485175 -1 -1 250 134 -1
+-349 32 5.512055 -1 -1 241 136 -1
+-345 28 5.562455 -1 -1 241 134 -1
+-343 26 5.585975 714 -1 237 134 -1
+-337 22 5.636374 800 -1 241 136 -1
+-334 20 5.664934 -1 -1 250 136 -1
+-331 18 5.691814 -1 -1 250 137 -1
+-325 14 5.750614 -1 -1 265 137 -1
+-322 12 5.779173 -1 -1 260 133 -1
+-319 10 5.807733 -1 -1 260 137 -1
+-313 7 5.863173 -1 -1 250 139 -1
+-310 6 5.888372 -1 -1 265 137 -1
+-307 5 5.910213 -1 -1 265 133 -1
+-303 3 5.948852 -1 -1 228 137 -1
+-301 2 5.967332 -1 -1 260 136 -1
+-299 1 5.984132 -1 -1 260 140 -1
+-295 0 6.014372 -1 -1 217 136 -1
+-293 -1 6.032852 -1 -1 245 133 -1
+-291 -1 6.049652 -1 -1 224 136 -1
+-285 -2 6.089971 -1 -1 228 139 -1
+-282 -2 6.110131 -1 -1 255 139 -1
+-279 -2 6.130291 -1 -1 255 137 -1
+-275 -2 6.163890 -1 -1 276 137 -1
+-273 -2 6.177330 -1 -1 282 137 -1
+-272 -2 6.187410 -1 -1 276 137 -1
+-270 -2 6.202530 -1 681 294 137 -1
+-269 -2 6.209250 -1 -1 282 136 -1
+-269 -2 6.210930 -1 -1 288 139 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 791 294 137 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 301 136 -1
+-269 -2 6.214290 -1 714 282 137 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 276 130 -1
+-269 -2 6.214290 -1 597 294 137 -1
+-269 -2 6.214290 -1 681 301 134 -1
+-269 -2 6.214290 751 447 307 137 -1
+-269 -2 6.214290 -1 255 322 137 -1
+-269 -2 6.214290 -1 301 322 136 -1
+-269 -2 6.214290 -1 386 307 137 -1
+-269 -2 6.214290 -1 574 294 137 -1
+-269 -2 6.214290 -1 552 356 137 -1
+-269 -2 6.214290 -1 232 347 137 -1
+-269 -2 6.214290 -1 260 338 137 -1
+-269 -2 6.214290 -1 338 322 137 -1
+-269 -2 6.214290 -1 623 294 137 -1
+-269 -2 6.214290 -1 -1 307 139 -1
+-269 -2 6.214290 -1 -1 288 137 -1
+-269 -2 6.214290 -1 -1 282 137 -1
+-269 -2 6.214290 714 -1 288 139 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 623 315 136 -1
+-269 -2 6.214290 -1 -1 301 140 -1
+-269 -2 6.214290 -1 -1 282 140 -1
+-269 -2 6.214290 -1 -1 294 139 -1
+-269 -2 6.214290 -1 714 270 139 -1
+-269 -2 6.214290 -1 330 307 137 -1
+-269 -2 6.214290 -1 224 315 137 -1
+-269 -2 6.215970 -1 232 347 137 -1
+-269 -2 6.214290 -1 288 322 137 -1
+-269 -2 6.215970 -1 356 294 139 -1
+-269 -2 6.214290 -1 751 301 137 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.215970 -1 -1 294 137 -1
+-269 -2 6.214290 -1 -1 282 142 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 288 137 -1
+-269 -2 6.214290 -1 -1 294 137 -1
+-269 -2 6.215970 -1 -1 301 137 -1
+-269 -2 6.215970 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 301 137 -1
+-269 -2 6.215970 -1 -1 301 137 -1
+-269 -2 6.214290 -1 -1 288 137 -1
+-269 -2 6.215970 -1 -1 301 142 -1
+-269 -2 6.215970 -1 -1 301 139 -1
+-268 -2 6.221010 -1 -1 270 139 -1
+-263 -2 6.256290 -1 -1 276 139 -1
+-260 -2 6.281490 -1 -1 294 140 -1
+-251 -2 6.353730 -1 -1 270 139 -1
+-246 -1 6.395730 -1 -1 322 140 -1
+-241 0 6.437730 -1 -1 307 140 -1
+-295 13 6.079891 -1 -1 322 140 -1
+-290 12 6.083251 -1 -1 338 142 -1
+-285 11 6.084930 -1 -1 338 140 -1
+-277 9 6.076530 -1 -1 365 144 -1
+-273 8 6.069810 -1 -1 386 147 -1
+-270 7 6.056370 -1 -1 338 145 -1
+-264 5 6.031170 -1 -1 347 151 -1
+-261 4 6.019411 -1 -1 307 151 -1
+-258 3 6.007651 -1 -1 307 152 -1
+-252 1 5.990851 -1 -1 315 151 -1
+-249 0 5.987491 -1 -1 294 154 -1
+-246 -1 5.985811 -1 -1 301 154 -1
+-293 78 5.276853 -1 -1 301 154 -1
+-291 74 5.310453 -1 -1 301 154 -1
+-289 71 5.340693 -1 -1 338 154 -1
+-283 65 5.406213 -1 -1 307 147 -1
+-280 62 5.436453 -1 -1 307 156 -1
+-277 59 5.470053 -1 791 330 154 -1
+-271 53 5.537252 -1 -1 301 156 -1
+-268 50 5.569172 -1 -1 301 149 -1
+-265 47 5.601092 -1 714 322 156 -1
+-258 42 5.668292 -1 800 301 158 -1
+-254 40 5.701892 -1 -1 315 158 -1
+-250 38 5.735492 -1 681 322 160 -1
+-242 34 5.804371 -1 -1 330 158 -1
+-238 32 5.836291 -1 800 322 162 -1
+-230 28 5.903491 -1 714 276 154 -1
+-226 27 5.935411 -1 -1 315 164 -1
+-222 26 5.969011 -1 791 315 158 -1
+-214 24 6.037890 -1 751 315 154 -1
+-210 23 6.073170 -1 751 322 160 -1
+-206 22 6.108450 -1 -1 301 152 -1
+-196 20 6.185730 -1 791 315 164 -1
+-191 20 6.224370 -1 791 307 164 -1
+-185 20 6.268050 -1 681 294 164 -1
+-175 20 6.350369 -1 751 294 166 -1
+-233 37 5.990850 -1 597 294 160 -1
+-223 33 5.994210 -1 623 260 166 -1
+-218 32 5.992530 -1 623 270 166 -1
+-213 31 5.990850 -1 623 265 171 -1
+-203 27 5.985811 -1 623 250 169 -1
+-198 25 5.982451 -1 574 260 171 -1
+-193 24 5.979091 -1 494 245 166 -1
+-183 20 5.974051 -1 494 255 173 -1
+-178 18 5.972372 -1 552 241 173 -1
+-169 15 5.970692 -1 494 228 166 -1
+-216 97 5.231494 -1 494 224 173 -1
+-214 93 5.266774 -1 434 197 158 -1
+-209 86 5.333973 -1 434 203 173 -1
+-207 83 5.364213 -1 421 207 173 -1
+-204 80 5.396133 -1 447 191 176 -1
+-198 74 5.458293 -1 408 183 178 -1
+-195 71 5.488533 -1 447 194 169 -1
+-189 65 5.549014 651 408 203 176 -1
+-186 63 5.577573 -1 375 207 178 -1
+-183 60 5.611173 -1 375 210 178 -1
+-177 56 5.673333 800 338 210 173 -1
+-173 54 5.706933 512 356 210 178 -1
+-165 50 5.775813 -1 330 197 173 -1
+-161 48 5.812773 512 338 181 176 -1
+-157 46 5.848053 552 282 166 176 -1
+-147 42 5.927012 597 307 158 181 -1
+-142 40 5.969012 494 288 149 173 -1
+-132 38 6.054692 462 288 140 173 -1
+-127 37 6.098372 478 260 147 173 -1
+-122 36 6.140371 447 270 154 173 -1
+-111 35 6.227731 408 245 200 173 -1
+-105 35 6.273091 447 232 255 173 -1
+-95 35 6.355411 408 217 301 166 -1
+-152 57 5.918612 386 217 347 173 -1
+-147 55 5.913572 365 207 375 173 -1
+-139 51 5.895092 294 189 365 181 -1
+-135 49 5.883333 294 181 375 176 -1
+-130 47 5.858133 276 169 365 166 -1
+-128 46 5.843013 250 164 322 171 -1
+-126 45 5.802693 232 156 294 176 -1
+-126 45 5.777493 221 154 237 181 -1
+-126 45 5.760693 203 151 149 181 -1
+-126 45 5.728773 200 152 139 183 -1
+-126 45 5.711973 194 149 131 183 791
+-126 45 5.698534 191 145 129 183 791
+-126 45 5.693493 186 144 125 189 -1
+-126 45 5.691813 189 137 129 189 -1
+-126 45 5.691813 183 139 126 189 -1
+-126 45 5.693493 178 144 129 181 -1
+-126 45 5.691813 181 145 129 186 -1
+-126 45 5.693493 189 140 129 189 -1
+-126 45 5.691813 189 144 129 176 -1
+-126 45 5.691813 191 147 122 186 -1
+-126 45 5.693493 186 145 126 183 -1
Index: branches/scout/projects/mapping/matlab/data/input10.txt
===================================================================
--- branches/scout/projects/mapping/matlab/data/input10.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/data/input10.txt	(revision 1346)
@@ -0,0 +1,316 @@
+1 0 0.010080 597 -1 623 421 623
+3 0 0.026880 800 -1 751 408 597
+10 0 0.078960 -1 800 386 421 623
+14 0 0.107520 -1 -1 365 462 651
+80 83 0.922317 -1 751 462 462 623
+82 86 0.986157 494 597 -1 512 623
+86 92 1.023117 447 681 -1 447 -1
+88 95 1.026477 356 714 -1 478 -1
+92 101 1.019757 386 714 -1 462 714
+6 68 0.398159 478 623 -1 397 651
+10 70 0.428399 347 494 -1 386 651
+16 74 0.488879 356 651 -1 421 623
+19 76 0.519119 421 623 -1 462 651
+25 80 0.579599 478 597 -1 434 623
+28 82 0.609838 552 552 -1 434 552
+34 87 0.671998 681 651 -1 397 623
+40 92 0.732478 791 597 791 421 597
+43 95 0.762718 512 597 -1 434 623
+60 116 0.974398 791 494 -1 408 681
+62 119 1.006317 512 494 714 447 552
+66 126 1.068477 574 478 -1 408 651
+69 129 0.782878 574 397 -1 421 714
+75 135 0.769438 462 386 -1 434 651
+81 141 0.757678 478 365 -1 447 681
+84 144 0.752638 365 365 -1 462 651
+90 150 0.740878 386 338 -1 462 751
+93 153 0.732478 338 330 -1 462 751
+99 159 0.722398 386 338 -1 494 800
+105 165 0.710638 356 322 -1 462 714
+108 168 0.702238 347 301 -1 478 597
+17 161 0.095760 356 270 -1 512 -1
+20 161 0.115920 307 288 -1 462 -1
+22 161 0.132720 288 322 288 531 -1
+22 161 0.136080 270 347 294 -1 -1
+27 161 0.171360 232 375 356 751 265
+34 163 0.226800 241 365 375 623 228
+38 164 0.258720 232 375 408 714 270
+46 166 0.320879 221 347 462 714 322
+50 167 0.352799 194 375 494 791 386
+57 169 0.409919 203 365 531 800 512
+52 163 -0.325919 245 288 494 574 255
+5 244 -1.019757 221 301 434 -1 241
+6 242 -0.999597 245 408 494 -1 186
+10 237 -0.947517 250 494 478 -1 237
+12 234 -0.917277 276 478 462 -1 207
+17 228 -0.856797 288 447 531 800 189
+20 222 -0.794637 294 478 462 -1 200
+26 219 -0.764398 288 447 512 681 194
+45 210 -0.665278 365 356 386 -1 207
+48 208 -0.671998 623 322 375 -1 224
+54 202 -0.682078 651 347 375 -1 224
+60 197 -0.692158 597 338 365 -1 207
+63 194 -0.695518 434 288 347 -1 224
+71 187 -0.685438 356 301 347 -1 217
+82 179 -0.640078 434 270 265 -1 228
+88 175 -0.618238 421 270 288 -1 228
+101 167 -0.544318 330 250 276 751 213
+108 163 -0.498958 375 282 250 -1 241
+123 157 -0.401518 270 245 217 791 245
+138 152 -0.288959 224 213 210 574 265
+146 150 -0.226799 200 250 191 462 270
+162 148 -0.097439 191 228 181 531 288
+178 148 0.010080 166 176 176 447 365
+208 148 0.043680 144 213 144 623 288
+135 198 -0.537598 131 194 134 531 255
+141 194 -0.477118 129 189 124 512 265
+148 190 -0.416638 129 176 118 512 282
+160 187 -0.324239 111 166 -1 408 265
+164 186 -0.293999 113 166 -1 434 255
+172 184 -0.233519 101 154 -1 421 250
+180 182 -0.171359 101 149 -1 375 250
+184 181 -0.139439 -1 121 -1 386 241
+192 181 -0.077279 -1 131 -1 356 221
+196 181 -0.045360 -1 151 -1 276 245
+204 181 0.015120 -1 160 -1 228 288
+211 181 0.072240 -1 178 -1 228 288
+215 181 0.104160 -1 136 -1 194 294
+223 182 0.162960 -1 118 -1 186 307
+227 183 0.193200 -1 117 -1 164 338
+235 185 0.255360 -1 -1 -1 162 714
+239 186 0.285600 -1 -1 -1 136 531
+250 189 0.376319 102 -1 124 119 597
+257 192 0.436799 125 -1 139 105 -1
+263 196 0.495599 139 -1 124 103 -1
+267 198 0.527519 158 -1 112 -1 -1
+273 202 0.586319 166 -1 103 -1 -1
+276 204 0.616559 241 -1 -1 -1 -1
+293 308 1.429676 270 102 -1 -1 -1
+293 312 1.498556 294 110 -1 -1 -1
+293 320 1.636316 623 136 -1 -1 -1
+291 328 1.770715 623 154 -1 110 -1
+290 333 1.847995 -1 173 -1 119 -1
+285 346 2.026075 -1 232 -1 136 -1
+257 377 2.449434 -1 375 119 156 800
+251 382 2.528394 -1 -1 140 130 408
+239 389 2.691353 -1 -1 183 125 447
+234 391 2.763593 -1 -1 217 120 386
+224 393 2.909752 -1 -1 270 113 307
+220 394 2.978632 -1 -1 512 112 232
+212 394 3.113032 -1 -1 494 112 191
+204 394 3.250791 -1 -1 -1 118 156
+169 381 3.506151 791 -1 -1 120 134
+161 378 3.566630 -1 -1 -1 127 124
+157 376 3.600230 -1 -1 -1 130 112
+149 372 3.664070 751 -1 -1 166 108
+146 370 3.694310 386 -1 -1 186 108
+140 366 3.756470 408 -1 -1 217 107
+134 362 3.818630 552 651 -1 255 111
+131 359 3.848869 217 800 597 347 114
+126 354 3.905989 191 751 751 714 120
+123 351 3.931189 260 -1 -1 512 118
+123 351 3.931189 478 -1 623 282 115
+123 351 3.931189 365 -1 -1 270 113
+123 351 3.931189 375 -1 -1 288 115
+153 364 3.272631 -1 -1 -1 200 171
+153 364 3.208791 -1 -1 -1 200 213
+148 364 3.118072 -1 -1 408 197 237
+141 364 3.067672 -1 -1 338 197 282
+199 303 2.422553 -1 -1 714 213 531
+193 308 2.484713 -1 -1 574 217 408
+187 312 2.548553 -1 -1 447 221 375
+184 314 2.580473 -1 -1 597 224 386
+178 318 2.640953 -1 -1 512 221 386
+174 320 2.672873 -1 -1 447 228 408
+167 324 2.735032 -1 -1 494 228 408
+163 325 2.765272 -1 -1 421 232 421
+155 327 2.827432 -1 -1 494 228 447
+147 329 2.887912 -1 -1 434 241 478
+143 330 2.919832 -1 -1 397 237 512
+135 332 2.981991 -1 -1 408 250 447
+131 333 3.013911 -1 -1 386 255 552
+123 333 3.077751 -1 -1 375 250 531
+146 324 2.822392 552 -1 386 245 512
+142 325 2.815672 681 -1 386 282 531
+134 327 2.802232 338 -1 356 270 552
+130 328 2.798872 651 -1 408 245 623
+123 330 2.787112 -1 -1 408 232 574
+115 333 2.777032 -1 -1 386 255 597
+111 334 2.770312 -1 -1 375 255 597
+103 338 2.760231 791 -1 375 250 597
+95 342 2.750151 -1 -1 330 250 552
+91 344 2.745111 -1 -1 375 260 681
+83 348 2.733351 800 -1 397 250 714
+79 350 2.726631 -1 -1 356 260 714
+71 354 2.711511 714 -1 375 260 791
+116 270 2.064713 -1 -1 365 260 681
+112 276 2.126873 -1 800 375 265 800
+108 282 2.190713 -1 -1 347 260 714
+106 285 2.220953 -1 -1 365 255 -1
+100 291 2.284793 -1 -1 347 250 800
+97 294 2.316713 -1 -1 356 260 -1
+91 300 2.380553 -1 791 347 260 800
+85 306 2.444392 -1 -1 365 245 -1
+82 309 2.476312 -1 800 375 255 -1
+76 313 2.538472 -1 791 330 232 -1
+54 325 2.728312 -1 714 322 260 -1
+50 326 2.758551 -1 800 330 260 -1
+42 328 2.820711 -1 791 301 260 -1
+62 313 2.504872 -1 681 307 241 -1
+59 315 2.498152 -1 791 307 224 -1
+53 319 2.484712 -1 714 270 224 -1
+50 322 2.479672 -1 714 282 224 -1
+44 327 2.466232 -1 597 276 221 -1
+38 332 2.454472 -1 574 260 217 -1
+35 335 2.447752 -1 651 245 210 -1
+29 341 2.435992 -1 714 237 217 -1
+26 344 2.430952 800 651 245 207 -1
+20 350 2.415832 -1 552 228 217 -1
+17 353 2.409112 -1 531 224 213 -1
+11 359 2.395672 791 531 221 210 -1
+26 269 1.769034 800 623 217 213 -1
+25 273 1.804313 681 651 197 213 -1
+23 281 1.868153 -1 552 200 207 -1
+21 286 1.906793 651 623 197 203 -1
+15 299 2.017673 651 552 181 203 -1
+7 312 2.135273 651 397 213 183 -1
+3 317 2.185672 531 478 221 181 -1
+-4 326 2.271352 714 447 217 181 -1
+-7 329 2.308312 651 434 213 183 -1
+-13 335 2.375512 574 421 221 178 -1
+-16 338 2.405751 597 408 213 173 -1
+-22 343 2.469591 574 408 203 178 -1
+-28 347 2.531751 478 397 194 173 -1
+-32 350 2.570391 552 356 191 173 -1
+-45 356 2.679590 408 260 194 171 -1
+-53 359 2.745110 478 347 197 164 -1
+-69 364 2.872790 478 338 197 158 -1
+-52 352 2.654391 512 322 186 152 -1
+-73 361 2.738390 512 288 151 160 -1
+-81 364 2.782070 478 282 294 147 -1
+-98 369 2.889590 681 265 338 147 -1
+-114 372 3.007190 714 282 276 -1 -1
+-123 373 3.069350 -1 276 232 158 -1
+-140 372 3.202069 -1 265 197 160 -1
+-148 371 3.265909 200 250 197 183 -1
+-163 367 3.370069 714 322 207 197 -1
+-175 364 3.366709 -1 322 191 207 -1
+-181 363 3.370069 478 301 183 207 -1
+-196 359 3.417108 -1 288 169 245 -1
+-212 354 3.484308 -1 294 164 232 -1
+-220 351 3.526308 -1 301 154 181 -1
+-235 344 3.620388 -1 330 151 241 -1
+-242 340 3.665747 -1 307 149 375 -1
+-256 330 3.776627 -1 375 145 270 -1
+-269 318 3.904307 -1 462 158 241 -1
+-275 312 3.971506 651 462 166 217 -1
+-285 298 4.104226 -1 531 186 191 -1
+-289 291 4.171425 -1 714 210 178 -1
+-296 275 4.297425 -1 -1 241 164 -1
+-301 262 4.354545 -1 -1 265 164 -1
+-303 256 4.367985 -1 -1 282 160 800
+-307 246 4.374704 -1 -1 294 160 800
+-228 299 3.731266 -1 -1 294 162 -1
+-234 293 3.798466 -1 -1 265 162 -1
+-240 287 3.862306 -1 -1 288 164 -1
+-243 284 3.894226 -1 -1 288 164 -1
+-249 278 3.958066 -1 -1 265 164 -1
+-252 275 3.989985 -1 -1 270 164 -1
+-258 269 4.055505 -1 -1 282 164 -1
+-274 240 4.309185 -1 -1 228 162 -1
+-275 236 4.339425 -1 -1 237 166 -1
+-277 228 4.404945 -1 -1 224 164 -1
+-278 224 4.436865 681 -1 221 164 -1
+-265 245 4.201665 714 -1 203 160 -1
+-267 241 4.194945 -1 -1 217 162 -1
+-271 234 4.179825 -1 -1 207 160 -1
+-275 226 4.169745 -1 -1 203 156 -1
+-282 215 4.173105 751 -1 194 160 -1
+-286 209 4.198305 -1 -1 197 151 -1
+-294 194 4.273904 494 -1 200 147 -1
+-300 178 4.379744 -1 714 232 145 -1
+-302 170 4.436864 714 791 294 142 -1
+-305 154 4.551104 623 800 315 139 -1
+-306 145 4.616623 -1 651 276 137 623
+-306 129 4.742623 -1 651 232 144 -1
+-304 113 4.868622 -1 651 791 151 -1
+-302 105 4.930782 -1 651 751 164 -1
+-298 92 4.994622 -1 597 574 173 -1
+-294 81 5.014782 -1 574 597 191 -1
+-293 77 5.014782 -1 597 531 197 -1
+-259 136 4.458704 -1 462 462 232 -1
+-261 128 4.520864 -1 462 531 221 -1
+-262 124 4.552784 -1 408 512 245 -1
+-262 116 4.613264 -1 447 408 250 -1
+-262 112 4.645184 -1 447 512 255 -1
+-262 104 4.710704 -1 434 434 265 -1
+-262 100 4.742624 -1 375 447 265 -1
+-247 41 4.994624 447 250 265 356 -1
+-241 26 5.100463 651 245 260 408 -1
+-233 11 5.219743 421 232 232 365 -1
+-229 4 5.285263 597 255 207 288 -1
+-219 -9 5.416303 -1 237 191 217 -1
+-201 -26 5.597742 -1 301 178 -1 -1
+-195 -30 5.631342 -1 301 171 751 -1
+-186 -37 5.659902 -1 282 171 531 -1
+-178 -43 5.661582 -1 301 156 494 -1
+-175 -46 5.658222 -1 276 152 462 -1
+-169 -52 5.651502 -1 255 147 494 -1
+-166 -54 5.644782 -1 250 133 462 -1
+-160 -58 5.627982 -1 237 126 447 -1
+-154 -64 5.617902 -1 228 122 447 -1
+-151 -66 5.609502 -1 200 117 397 -1
+-172 22 4.977824 -1 197 102 397 -1
+-171 18 5.009744 -1 194 -1 408 -1
+-168 10 5.073584 -1 173 -1 386 -1
+-166 6 5.105504 -1 149 -1 365 -1
+-162 -2 5.171024 531 140 -1 375 -1
+-160 -6 5.202944 -1 137 -1 347 -1
+-156 -14 5.270144 -1 151 -1 288 -1
+-152 -20 5.333983 -1 200 -1 228 -1
+-149 -24 5.374303 -1 232 -1 203 -1
+-139 -34 5.485183 552 301 -1 186 -1
+-133 -39 5.549023 -1 714 107 158 -1
+-120 -49 5.676703 -1 597 124 127 434
+-90 -63 5.937102 -1 -1 237 106 -1
+-74 -67 6.066462 -1 714 260 106 -1
+-58 -69 6.195822 -1 -1 338 104 -1
+-49 -69 6.263021 -1 -1 347 107 -1
+-33 -68 6.394061 -1 -1 -1 115 791
+27 -41 6.913180 -1 -1 597 207 597
+33 -35 6.982059 -1 -1 714 203 681
+39 -29 7.045899 623 -1 552 224 623
+42 -26 7.079499 -1 -1 447 237 623
+48 -20 7.145019 -1 -1 462 250 -1
+50 -17 7.175259 -1 -1 597 250 -1
+54 -11 7.239099 512 791 494 250 681
+56 -8 7.269339 -1 -1 478 241 681
+60 -2 7.331499 -1 -1 574 270 623
+62 2 7.363419 791 -1 651 276 -1
+66 9 7.423899 -1 -1 531 288 681
+69 17 7.486059 -1 -1 791 294 791
+70 21 7.517979 -1 -1 478 282 800
+55 1 7.212220 -1 -1 574 315 800
+57 4 7.207180 -1 -1 597 322 714
+61 10 7.195419 -1 -1 751 294 -1
+63 13 7.187019 574 714 651 301 -1
+67 19 7.171899 -1 -1 681 330 -1
+71 25 7.158459 -1 -1 681 330 -1
+73 28 7.151739 791 -1 651 330 -1
+79 34 7.138299 -1 -1 751 347 -1
+97 52 7.094619 -1 -1 597 356 -1
+100 55 7.084539 -1 -1 531 356 -1
+10 41 6.473022 681 714 714 397 -1
+18 43 6.536861 552 800 574 386 -1
+22 44 6.568781 651 -1 531 397 -1
+30 46 6.629261 552 800 574 347 -1
+34 48 6.661181 681 751 651 397 -1
+42 52 6.725021 714 800 651 386 -1
+49 56 6.787181 597 -1 597 397 -1
+53 58 6.820781 597 -1 512 408 -1
+59 62 6.884621 623 -1 651 397 -1
+62 65 6.918221 552 -1 552 408 -1
+68 71 6.983741 512 714 574 408 -1
+71 74 7.015661 462 714 494 434 -1
+77 80 7.079501 462 681 552 408 -1
+83 86 7.143341 478 800 512 421 -1
Index: branches/scout/projects/mapping/matlab/input.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input.txt	(revision 1346)
@@ -0,0 +1,421 @@
+0 0 0.000000 -1 -1 -1 -1 623
+0 0 -0.001680 -1 -1 -1 -1 623
+10 1 0.154560 -1 -1 -1 -1 434
+43 19 0.754318 -1 -1 -1 -1 245
+57 46 1.251596 421 -1 -1 -1 250
+57 86 1.859755 217 494 -1 -1 356
+36 120 2.299913 189 237 -1 -1 800
+12 140 2.472953 173 181 -1 -1 714
+-18 165 2.477993 103 134 -1 -1 714
+-50 188 2.681272 -1 -1 -1 -1 751
+-81 194 3.168471 191 -1 -1 -1 -1
+-118 179 3.791749 651 119 -1 447 -1
+-136 153 4.273908 -1 322 714 176 -1
+-142 113 4.747667 -1 681 651 127 -1
+-133 74 5.083666 -1 -1 623 120 -1
+-112 41 5.391105 -1 -1 651 139 -1
+-89 20 5.634705 -1 -1 800 183 -1
+-54 2 5.848064 -1 -1 -1 338 -1
+-19 -13 5.836305 -1 -1 -1 408 -1
+9 -26 5.814464 -1 139 -1 494 -1
+44 -46 5.789264 -1 -1 -1 512 -1
+72 -62 5.755664 -1 -1 -1 552 -1
+106 -82 5.730464 -1 -1 -1 597 -1
+141 -102 5.706944 -1 -1 -1 623 -1
+167 -118 5.685103 -1 -1 -1 478 -1
+197 -140 5.659902 -1 791 -1 681 -1
+229 -165 5.676702 -1 478 -1 714 -1
+257 -181 5.765741 -1 447 -1 714 -1
+291 -201 5.748942 -1 462 -1 714 -1
+326 -221 5.725422 -1 434 -1 447 -1
+353 -237 5.700222 800 365 -1 791 -1
+383 -257 5.673341 714 276 -1 -1 -1
+408 -277 5.579261 434 250 -1 791 -1
+411 -280 5.350781 250 194 -1 791 -1
+411 -280 5.016463 189 207 -1 -1 -1
+411 -280 4.680464 151 250 -1 -1 447
+411 -280 4.416705 156 552 -1 -1 260
+411 -280 4.079027 200 330 -1 -1 200
+400 -290 3.855587 322 512 800 -1 169
+376 -310 3.828707 386 434 -1 -1 173
+346 -335 3.800148 800 338 -1 -1 183
+315 -360 3.779988 217 276 -1 -1 183
+294 -377 3.731268 294 224 -1 -1 200
+285 -381 3.454068 228 191 -1 -1 221
+285 -381 3.104629 162 203 -1 791 322
+285 -381 2.768631 140 282 -1 -1 228
+285 -381 2.499831 158 651 -1 -1 224
+285 -381 2.170552 203 -1 -1 -1 173
+279 -365 1.955513 408 -1 -1 -1 154
+267 -336 1.921913 623 -1 -1 -1 164
+252 -299 1.898394 -1 -1 -1 -1 178
+242 -262 1.863114 330 -1 -1 -1 194
+234 -230 1.847994 386 -1 -1 -1 210
+224 -191 1.831194 574 -1 -1 -1 232
+214 -152 1.784154 751 -1 -1 -1 288
+206 -120 1.767354 751 -1 -1 -1 322
+200 -80 1.740474 -1 -1 -1 -1 386
+195 -41 1.706874 -1 -1 -1 -1 421
+191 -9 1.696794 800 -1 -1 -1 397
+186 31 1.663194 -1 -1 -1 -1 347
+184 62 1.631274 -1 -1 -1 -1 386
+184 102 1.607755 -1 791 -1 -1 365
+184 142 1.579195 800 -1 800 330 375
+184 174 1.552315 751 -1 -1 -1 397
+184 214 1.533835 552 -1 -1 -1 434
+186 254 1.491835 -1 -1 -1 -1 478
+190 285 1.466635 -1 -1 800 -1 512
+195 325 1.443116 -1 -1 -1 -1 494
+200 364 1.409516 -1 -1 -1 -1 623
+204 395 1.387676 -1 -1 -1 -1 651
+213 435 1.355756 -1 -1 800 -1 681
+223 474 1.325517 800 -1 751 -1 651
+233 510 1.296957 651 -1 -1 -1 478
+241 541 1.273437 -1 -1 -1 -1 494
+251 578 1.246557 -1 -1 -1 -1 597
+262 606 1.223038 -1 -1 681 -1 531
+277 641 1.184398 -1 -1 -1 -1 478
+292 678 1.160878 -1 -1 751 -1 681
+304 706 1.130638 -1 -1 -1 -1 494
+321 741 1.100399 -1 -1 -1 -1 494
+341 776 1.076879 -1 -1 494 -1 478
+357 803 1.041599 -1 552 -1 -1 512
+377 838 1.007999 -1 478 -1 -1 531
+397 871 0.986159 -1 512 -1 -1 -1
+413 895 0.954239 800 397 -1 -1 -1
+438 926 0.930719 434 255 -1 -1 -1
+463 956 0.902159 447 232 -1 -1 -1
+480 977 0.833280 307 221 -1 -1 -1
+487 984 0.579600 207 178 -1 -1 -1
+487 984 0.243601 162 207 -1 -1 -1
+487 984 -0.025198 142 260 -1 -1 330
+487 984 -0.352797 166 -1 -1 -1 221
+487 984 -0.697196 250 -1 -1 -1 183
+494 976 -0.883676 751 -1 -1 -1 156
+518 947 -0.907196 -1 -1 -1 -1 176
+542 917 -0.940796 -1 -1 -1 -1 191
+559 893 -0.967675 -1 -1 -1 -1 210
+580 860 -0.987835 494 -1 -1 -1 224
+600 827 -1.036555 -1 -1 800 -1 265
+616 800 -1.060075 791 -1 552 -1 260
+636 765 -1.081915 -1 -1 -1 -1 338
+651 737 -1.107115 800 -1 -1 -1 301
+666 702 -1.135674 651 -1 -1 -1 434
+681 667 -1.172634 623 -1 -1 -1 330
+696 632 -1.212954 330 -1 294 -1 623
+708 604 -1.238154 623 -1 -1 -1 -1
+720 566 -1.265034 365 751 651 -1 -1
+730 529 -1.295273 512 -1 -1 -1 623
+738 501 -1.320473 434 -1 -1 -1 681
+748 461 -1.362473 330 791 791 -1 597
+755 423 -1.394393 270 494 494 -1 552
+759 392 -1.421273 421 800 -1 -1 434
+763 356 -1.481752 307 434 -1 -1 408
+763 333 -1.621192 356 -1 -1 -1 397
+759 295 -1.669912 245 681 -1 -1 356
+755 264 -1.698472 228 -1 -1 -1 347
+750 231 -1.770711 232 -1 -1 -1 338
+743 210 -1.930311 270 -1 -1 -1 294
+731 182 -1.958871 276 -1 -1 -1 260
+716 147 -1.984071 265 -1 -1 -1 232
+701 112 -2.026070 421 -1 -1 -1 232
+688 84 -2.052950 276 -1 -1 -1 228
+668 49 -2.083190 330 -1 -1 -1 210
+652 22 -2.111750 322 -1 751 -1 194
+632 -10 -2.141990 397 -1 -1 -1 183
+611 -41 -2.182310 338 -1 -1 -1 183
+588 -72 -2.210870 421 714 714 -1 210
+568 -96 -2.241110 -1 574 623 -1 213
+543 -126 -2.276390 -1 597 800 -1 221
+518 -156 -2.303270 -1 651 -1 -1 255
+498 -179 -2.336869 574 552 -1 -1 265
+470 -207 -2.375509 386 494 -1 -1 276
+440 -232 -2.402389 447 434 -1 -1 232
+416 -252 -2.432629 462 330 531 -1 365
+386 -277 -2.467909 307 282 -1 -1 356
+360 -297 -2.541829 315 250 -1 -1 386
+354 -300 -2.771988 241 255 -1 -1 552
+354 -300 -3.111347 197 276 -1 -1 276
+354 -300 -3.442306 200 494 -1 -1 330
+354 -300 -3.781665 255 552 -1 -1 245
+347 -292 -3.956385 434 -1 -1 -1 210
+322 -264 -4.001744 338 -1 -1 -1 178
+297 -234 -4.038704 294 -1 800 -1 221
+277 -210 -4.057184 338 -1 -1 -1 228
+255 -180 -4.097504 338 -1 -1 -1 207
+235 -148 -4.126064 288 -1 -1 -1 260
+219 -122 -4.149585 494 -1 -1 -1 365
+199 -89 -4.198304 397 -1 -1 -1 282
+179 -54 -4.225184 241 -1 -1 -1 294
+164 -26 -4.248704 365 -1 -1 -1 265
+149 9 -4.289024 408 -1 -1 -1 301
+134 44 -4.312544 478 -1 -1 -1 282
+122 72 -4.346144 714 -1 -1 -1 282
+110 107 -4.394864 574 -1 -1 -1 276
+100 145 -4.418384 512 -1 -1 -1 265
+92 175 -4.445264 494 -1 -1 -1 255
+82 212 -4.480544 494 -1 -1 -1 294
+72 251 -4.509105 408 -1 -1 -1 307
+68 282 -4.547744 365 -1 -1 -1 800
+63 319 -4.586384 421 -1 -1 -1 338
+59 351 -4.609904 365 -1 -1 -1 315
+54 390 -4.640145 375 -1 800 -1 356
+53 430 -4.673745 294 -1 -1 -1 356
+53 462 -4.705665 356 -1 -1 -1 301
+53 501 -4.747665 356 -1 -1 -1 260
+54 539 -4.782945 356 -1 462 -1 294
+59 577 -4.816545 386 -1 -1 -1 294
+63 609 -4.838386 365 -1 -1 -1 265
+68 646 -4.871985 531 -1 512 -1 265
+74 684 -4.920705 -1 -1 -1 -1 255
+82 714 -4.944225 -1 597 -1 -1 250
+92 750 -4.981185 -1 791 751 -1 232
+102 785 -5.019825 -1 623 -1 -1 245
+111 816 -5.033265 -1 651 -1 -1 217
+125 851 -5.075265 -1 552 -1 -1 265
+140 886 -5.118945 -1 478 -1 -1 315
+152 914 -5.140785 -1 -1 -1 -1 434
+167 949 -5.181105 -1 322 -1 -1 356
+186 983 -5.213025 330 210 -1 -1 494
+200 1007 -5.261744 294 217 -1 -1 375
+206 1016 -5.523823 217 207 -1 -1 531
+206 1016 -6.125261 152 338 -1 -1 301
+206 1016 -6.461259 186 -1 -1 -1 228
+206 1016 -6.788858 255 -1 -1 -1 181
+214 1009 -6.982058 -1 -1 -1 -1 171
+242 984 -7.032457 -1 -1 512 -1 183
+272 958 -7.059338 -1 -1 -1 -1 200
+293 936 -7.089578 -1 -1 -1 -1 224
+318 907 -7.126538 -1 -1 -1 -1 270
+343 877 -7.151738 -1 494 494 -1 301
+368 847 -7.193738 -1 -1 -1 -1 315
+387 823 -7.220617 -1 -1 -1 -1 434
+407 793 -7.257577 -1 -1 -1 -1 494
+428 761 -7.291177 -1 -1 -1 -1 552
+444 736 -7.316378 -1 -1 -1 -1 714
+464 702 -7.358377 -1 -1 -1 -1 552
+482 667 -7.393658 -1 -1 -1 -1 -1
+494 639 -7.422218 -1 -1 -1 -1 -1
+509 604 -7.460858 -1 751 -1 -1 751
+524 569 -7.487738 386 -1 -1 -1 -1
+534 541 -7.521338 -1 -1 -1 -1 800
+544 506 -7.563338 -1 -1 -1 -1 791
+554 467 -7.586858 -1 -1 800 -1 681
+562 439 -7.620458 651 -1 -1 -1 681
+572 401 -7.657418 -1 -1 512 -1 -1
+578 362 -7.680938 -1 -1 -1 -1 714
+583 326 -7.733017 478 -1 -1 -1 751
+587 296 -7.764937 574 -1 651 -1 751
+592 256 -7.786777 462 -1 512 -1 714
+592 217 -7.827097 -1 -1 651 -1 597
+592 185 -7.853977 356 -1 -1 -1 791
+592 145 -7.885897 574 -1 494 -1 531
+590 107 -7.936296 512 -1 597 -1 494
+585 69 -7.968217 512 681 -1 -1 434
+581 38 -7.990057 386 623 -1 -1 315
+576 0 -8.025336 -1 -1 -1 -1 386
+570 -37 -8.058935 494 462 -1 -1 365
+562 -68 -8.092536 651 597 365 -1 365
+552 -103 -8.129496 531 114 714 -1 260
+542 -138 -8.168135 447 714 681 -1 288
+528 -177 -8.198375 -1 597 714 -1 330
+516 -205 -8.220215 -1 447 623 -1 191
+501 -240 -8.263894 375 330 -1 -1 338
+486 -275 -8.302534 338 282 -1 -1 421
+473 -304 -8.389894 386 250 -1 -1 356
+469 -309 -8.616693 255 207 -1 -1 375
+469 -309 -8.949332 189 197 -1 -1 552
+469 -309 -9.285332 158 270 -1 -1 322
+469 -309 -9.629731 171 447 -1 -1 250
+469 -309 -9.895170 207 751 -1 -1 200
+459 -301 -10.130369 386 -1 -1 -1 173
+430 -276 -10.167328 250 -1 -1 -1 178
+406 -256 -10.182447 421 -1 462 -1 191
+379 -231 -10.229486 462 -1 751 -1 210
+354 -201 -10.268126 421 -1 -1 -1 213
+329 -171 -10.301725 397 -1 -1 -1 260
+309 -147 -10.335325 462 -1 -1 -1 338
+284 -117 -10.365564 462 -1 -1 -1 330
+261 -85 -10.395804 478 -1 -1 -1 301
+245 -60 -10.434445 375 -1 -1 -1 315
+225 -27 -10.468045 447 -1 -1 -1 301
+205 8 -10.501644 -1 -1 -1 -1 294
+189 42 -10.541964 -1 -1 681 -1 282
+177 70 -10.565482 -1 -1 -1 -1 282
+162 105 -10.605801 552 -1 -1 -1 307
+147 140 -10.644440 751 -1 -1 -1 301
+138 168 -10.672999 462 -1 -1 -1 365
+128 204 -10.706599 408 -1 -1 -1 347
+118 239 -10.741879 623 -1 -1 -1 294
+110 269 -10.773799 623 447 -1 -1 241
+102 309 -10.812438 -1 -1 -1 -1 434
+97 345 -10.847717 574 -1 800 -1 494
+92 383 -10.882997 356 -1 -1 -1 434
+88 415 -10.906515 434 -1 494 -1 365
+84 451 -10.938436 623 -1 -1 -1 408
+84 490 -10.987156 -1 -1 681 -1 421
+84 522 -11.010675 -1 -1 -1 -1 322
+84 562 -11.045956 -1 -1 -1 -1 365
+88 600 -11.086276 -1 -1 -1 -1 397
+92 632 -11.106436 -1 -1 -1 -1 338
+97 669 -11.148436 -1 -1 -1 -1 397
+103 706 -11.197155 -1 791 -1 -1 -1
+111 737 -11.217315 512 478 -1 -1 301
+121 775 -11.252594 -1 -1 -1 -1 434
+131 810 -11.294593 -1 462 -1 -1 751
+142 846 -11.321472 791 365 -1 -1 -1
+153 874 -11.363473 552 356 -1 -1 -1
+168 909 -11.400433 288 288 494 -1 -1
+182 940 -11.470992 288 241 -1 -1 -1
+187 948 -11.733071 210 228 -1 -1 -1
+187 948 -11.995152 178 270 -1 -1 552
+187 948 -12.336190 176 408 -1 -1 330
+187 948 -12.678909 217 -1 -1 -1 228
+197 945 -12.858668 434 -1 -1 -1 194
+232 935 -12.900668 294 -1 -1 -1 191
+267 920 -12.934268 574 -1 800 -1 191
+302 905 -12.964508 -1 -1 -1 -1 200
+330 893 -13.008188 -1 -1 -1 194 213
+365 876 -13.041787 169 -1 -1 -1 217
+400 856 -13.070347 791 -1 478 -1 217
+427 840 -13.100586 714 -1 791 -1 276
+459 820 -13.130825 714 -1 -1 -1 294
+486 802 -13.221544 651 -1 -1 -1 322
+501 787 -13.386184 681 681 -1 -1 338
+521 764 -13.418103 651 -1 -1 -1 434
+546 734 -13.453383 276 -1 -1 -1 574
+571 704 -13.480262 531 -1 -1 -1 681
+594 674 -13.522262 386 -1 512 -1 531
+610 650 -13.559222 552 -1 -1 -1 494
+630 617 -13.591142 -1 -1 -1 -1 714
+650 585 -13.633142 397 681 -1 -1 552
+666 550 -13.661701 434 -1 714 -1 478
+683 522 -13.683540 462 -1 -1 -1 434
+698 487 -13.733940 294 -1 -1 -1 434
+713 452 -13.767541 282 597 -1 -1 307
+725 424 -13.796101 276 -1 -1 -1 330
+734 392 -13.875060 245 681 -1 -1 322
+737 370 -14.031300 255 -1 531 -1 315
+742 332 -14.068260 241 -1 -1 -1 282
+742 300 -14.100180 200 -1 -1 -1 221
+742 260 -14.135458 -1 -1 -1 -1 237
+742 220 -14.170737 245 552 -1 -1 217
+742 188 -14.200976 245 -1 -1 -1 213
+737 153 -14.237936 241 714 800 -1 207
+732 113 -14.278255 255 574 -1 -1 191
+727 75 -14.310175 276 -1 -1 -1 186
+722 47 -14.342094 294 -1 -1 -1 183
+712 7 -14.375693 347 -1 -1 -1 176
+703 -23 -14.454652 494 791 -1 -1 183
+696 -38 -14.605852 156 -1 -1 -1 200
+678 -71 -14.649532 574 714 -1 -1 213
+658 -106 -14.673052 434 597 -1 -1 232
+638 -139 -14.711691 494 597 478 -1 276
+622 -164 -14.740251 623 552 -1 -1 282
+600 -194 -14.770490 386 397 -1 -1 356
+575 -224 -14.822570 478 338 800 -1 356
+550 -254 -14.857849 210 330 -1 -1 434
+531 -275 -14.904889 276 265 -1 -1 494
+522 -282 -15.151848 200 276 -1 -1 347
+510 -286 -15.383687 194 315 -1 -1 408
+480 -294 -15.487846 169 365 -1 -1 330
+474 -295 -15.702886 176 421 -1 -1 241
+463 -292 -15.943125 270 597 -1 -1 181
+426 -282 -15.976725 265 791 494 -1 194
+391 -272 -16.010324 288 800 597 -1 176
+363 -263 -16.045605 203 714 -1 -1 181
+331 -250 -16.114485 189 751 -1 -1 176
+321 -245 -16.358082 210 -1 -1 -1 189
+311 -233 -16.571440 322 -1 -1 -1 191
+291 -209 -16.601679 447 -1 -1 -1 194
+266 -179 -16.633596 512 -1 -1 -1 200
+244 -149 -16.678957 714 -1 -1 -1 186
+224 -119 -16.715916 -1 751 751 -1 210
+208 -92 -16.741114 183 -1 -1 -1 224
+188 -57 -16.769670 651 -1 -1 -1 237
+170 -22 -16.801588 791 -1 447 -1 250
+158 6 -16.840229 800 -1 681 -1 260
+143 41 -16.877188 -1 -1 597 -1 265
+128 76 -16.915827 434 -1 -1 -1 386
+114 112 -16.954466 552 -1 -1 -1 375
+106 142 -16.972944 -1 -1 800 -1 552
+96 178 -17.006546 751 -1 -1 -1 421
+86 215 -17.055265 -1 -1 800 -1 434
+78 246 -17.077103 -1 -1 651 -1 574
+73 282 -17.120783 -1 -1 -1 -1 447
+68 320 -17.156061 -1 -1 -1 -1 447
+64 352 -17.164463 -1 -1 -1 -1 478
+59 392 -17.194702 -1 -1 478 -1 494
+57 432 -17.221582 -1 -1 800 -1 478
+57 472 -17.245104 -1 -1 -1 -1 512
+57 502 -17.283745 -1 -1 800 -1 531
+57 542 -17.310623 -1 -1 -1 -1 681
+57 582 -17.330784 -1 -1 -1 -1 512
+60 614 -17.361023 -1 597 -1 -1 574
+65 654 -17.381182 -1 791 -1 -1 751
+70 694 -17.411419 512 478 531 -1 791
+74 723 -17.441658 -1 434 -1 -1 -1
+79 761 -17.471897 552 386 -1 -1 -1
+87 796 -17.552536 386 315 -1 -1 -1
+97 820 -17.686934 288 282 -1 -1 -1
+108 844 -17.750774 241 241 -1 -1 -1
+112 850 -18.021252 191 260 -1 -1 597
+112 850 -18.350529 178 397 -1 -1 338
+112 850 -18.621008 213 -1 -1 -1 255
+124 850 -18.871326 307 145 -1 -1 197
+163 850 -18.901567 386 -1 -1 -1 197
+199 847 -18.941887 282 623 -1 -1 200
+230 843 -18.968765 574 -1 -1 -1 203
+270 838 -18.975487 330 -1 -1 -1 203
+310 833 -19.009085 -1 800 -1 -1 210
+382 822 -19.054445 -1 714 -1 -1 250
+418 812 -19.094765 462 681 -1 -1 221
+455 802 -19.121645 307 623 -1 -1 282
+495 792 -19.141806 408 408 -1 -1 250
+526 784 -19.167006 255 365 -1 -1 315
+565 769 -19.187166 307 365 -1 -1 365
+601 754 -19.212364 210 265 -1 -1 408
+630 741 -19.299723 176 270 -1 -1 494
+636 739 -19.521482 162 322 -1 -1 315
+636 739 -19.865883 200 791 -1 -1 224
+640 727 -20.092680 260 -1 -1 -1 191
+650 689 -20.116198 330 -1 -1 -1 176
+658 657 -20.132996 288 -1 -1 -1 178
+667 624 -20.190117 250 -1 -1 -1 183
+669 601 -20.351398 265 -1 -1 -1 181
+669 561 -20.383316 386 -1 -1 -1 210
+669 529 -20.413555 386 -1 494 791 228
+669 489 -20.448835 447 -1 531 -1 270
+669 449 -20.453876 623 -1 -1 -1 224
+669 409 -20.482437 462 -1 434 -1 245
+665 377 -20.509315 791 -1 -1 -1 213
+660 337 -20.532835 -1 -1 -1 -1 250
+655 301 -20.573154 -1 -1 -1 -1 265
+651 270 -20.596674 -1 -1 -1 -1 265
+646 230 -20.600035 -1 -1 -1 -1 301
+637 190 -20.635315 133 -1 651 -1 330
+629 158 -20.652115 -1 -1 -1 -1 -1
+624 149 -20.900753 -1 -1 -1 -1 356
+621 144 -21.184671 -1 -1 -1 -1 462
+638 153 -21.597950 651 -1 -1 -1 322
+621 148 -21.804588 -1 -1 -1 -1 434
+617 147 -22.122107 552 -1 -1 -1 531
+628 143 -22.481625 791 597 -1 -1 597
+626 147 -22.780664 447 552 -1 -1 681
+621 151 -23.069622 -1 478 -1 -1 434
+625 134 -23.477859 462 397 -1 -1 -1
+626 151 -23.687859 421 338 -1 -1 800
+626 155 -24.000338 265 294 -1 -1 -1
+618 146 -24.433773 250 245 -1 -1 -1
+611 142 -24.764732 189 260 -1 -1 531
+611 142 -25.094009 181 265 -1 -1 421
+611 142 -25.364489 228 315 -1 -1 245
+611 142 -25.707209 210 494 512 -1 210
+624 132 -25.833208 186 397 -1 -1 210
+624 134 -26.182648 173 478 -1 -1 194
+622 140 -26.560644 181 -1 -1 -1 217
+624 150 -26.968882 270 -1 -1 -1 186
+620 137 -27.145279 260 -1 791 -1 186
+616 129 -27.414078 347 -1 -1 -1 315
+627 136 -27.854237 375 -1 -1 -1 200
+625 136 -28.107918 447 -1 -1 -1 178
Index: branches/scout/projects/mapping/matlab/model_sensor.m
===================================================================
--- branches/scout/projects/mapping/matlab/model_sensor.m	(nonexistent)
+++ branches/scout/projects/mapping/matlab/model_sensor.m	(revision 1346)
@@ -0,0 +1,50 @@
+function [sensor_model, udata, vdata] = model_sensor
+
+%Definitions:
+sensor_model_width = 25;
+sensor_model_height = 100;
+sensor_bounds_x = 85; %cm
+sensor_bounds_y = 15; %cm
+sensor_width = 10; %cm
+empty_weight = 0.4;
+wall_weight = 2.0;
+outside_weight = 1;
+
+%Space creation:
+Sx = linspace(0, sensor_bounds_x, sensor_model_width);
+Sy = linspace(-sensor_bounds_y, sensor_bounds_y, sensor_model_height);
+sensor_model = zeros(size(Sx,1), size(Sy,1), 71);
+
+%k ranges over distances (cm)
+for k=10:80
+	for j = 1:sensor_model_height;
+		for i = 1:sensor_model_width;
+			slope = double(k) / double(sensor_width);	
+			if abs(Sy(j)) < (Sx(i) / slope) && Sx(i) < (k - 2)
+				sensor_model(j,i,k) = empty_weight;
+			elseif abs(Sy(j)) < (Sx(i) / slope) && Sx(i) < (k + 2)
+				sensor_model(j,i,k) = wall_weight; 
+			else
+				sensor_model(j,i,k) = outside_weight;
+			end
+		end
+	end
+	map(k,1,1) = 100.0;
+end
+
+%Define the sensor model for when no measurement is made (-1)
+slope = 80 / sensor_width;	
+for j = 1:sensor_model_height;
+	for i = 1:sensor_model_width;
+		if abs(Sy(j)) < Sx(i) / slope && Sx(i) < 80 && Sx(i) > 0
+			sensor_model(j,i,71) = empty_weight;
+		else
+			sensor_model(j,i,71) = outside_weight;
+		end
+	end
+end
+
+image(sensor_model(:,:,70).*20);
+
+udata = [0, 2] * sensor_bounds_x;
+vdata = [-1, 1] * sensor_bounds_y;
Index: branches/scout/projects/mapping/matlab/sensor_map.m
===================================================================
--- branches/scout/projects/mapping/matlab/sensor_map.m	(nonexistent)
+++ branches/scout/projects/mapping/matlab/sensor_map.m	(revision 1346)
@@ -0,0 +1,127 @@
+
+%Function which creates an occupancy grid map giving the probability of of there being an object
+%given a series of measurements over the probability of there not being an object
+%given the measurements.
+
+%Input comes from 'filename' where each line contains 8 space-separated values
+%Each line contains: x, y, theta, IR1, IR2, IR3, IR4, IR5 in that order
+%Example line of input file:
+%17 23 .45 -1 42 -1 -1 -1
+%x and y are centimeters, theta is in radians
+%IR values are the values seen by the robot, where -1 means that nothing is seen
+
+%Output: graph of points seen by robot
+%All output measurements are in millimeters
+
+function arena = sensor_map(filename)
+
+%aviobj = avifile('test.avi');
+%aviobj.Quality = 80;
+%aviobj.Compression = 'None';
+
+%Vectors from center of bot to IR sensors
+Bot_IR1 = [4.5,3.5];
+Bot_IR2 = [7.5,0];
+Bot_IR3 = [4.5,-3.5];
+Bot_IR4 = [-4,-3.5];
+Bot_IR5 = [-4,3.5];
+Bot_IR = [Bot_IR1; Bot_IR2; Bot_IR3; Bot_IR4; Bot_IR5];
+
+%Unit vectors with the same angle that the IR sensors are tilted at
+Angle_IR1 = [.78,.63];
+Angle_IR2 = [1,0];
+Angle_IR3 = [.78,-.63];
+Angle_IR4 = [0,-1];
+Angle_IR5 = [0,1];
+Angle_IR = [Angle_IR1; Angle_IR2; Angle_IR3; Angle_IR4; Angle_IR5];
+
+%Define sensor model.
+
+[sensor_model, udata, vdata] = model_sensor;
+
+%Define map area
+map_width = 1000;
+map_height = 1000;
+%xdata = [-1, 1] * map_width/2;
+%ydata = [-1, 1] * map_height/2;
+xdata = [-200, 800];
+ydata = [-400, 300];
+arena = ones(map_width,map_height);
+
+%For now, read input in from a file
+Data = dlmread(filename, ' ');
+
+points = [];
+%loop through each line of file
+for i=25:size(Data, 1)
+	display(i);
+    row = Data(i, :);
+    x = row(1);
+    y = row(2);
+    theta = row(3);
+	
+	row(4:8)
+    for ir=1:5
+		if (row(4:8) == [-1 -1 -1 -1 -1])
+			break;
+		end
+		reading = row(ir+3);
+        distance = reading * 0.1; %Scale by 0.1 since range is in mm.
+        if reading ~= -1
+			k_val = floor(distance);
+			sensor_k = sensor_model(:,:,k_val);
+        	
+			%Find vector of object relative to center of bot
+        	ObjectVector = distance * Angle_IR(ir, :);
+        	ObjectVector = ObjectVector + Bot_IR(ir, :);
+        	
+			%rotate by theta
+        	objTheta = atan2(ObjectVector(2), ObjectVector(1));
+        	objTheta = objTheta + theta;
+		else
+			sensor_k = sensor_model(:,:,71);
+			
+			%Use the maximum length to clear an empty area.
+        	ObjectVector = 80 * Angle_IR(ir, :);
+        	ObjectVector = ObjectVector + Bot_IR(ir, :);
+        	
+			%rotate by theta
+        	objTheta = atan2(ObjectVector(2), ObjectVector(1));
+        	objTheta = objTheta + theta;
+		end
+
+		dx = x + Bot_IR(ir,1);
+		dy = y + Bot_IR(ir,2);
+			
+		translation_mat = [1, 0, 0;
+						   0, 1, 0;
+						  dx,dy, 1];
+
+		rotation_mat = [cos(objTheta), sin(objTheta), 0;
+					   -sin(objTheta), cos(objTheta), 0
+						   		    0,			   0, 1];
+
+		transformation_mat = rotation_mat * translation_mat;
+		transformation = maketform('affine', transformation_mat);
+		
+		%Big time waster 1: TODO Speedups.
+		sensor_k = imtransform(sensor_k, transformation,... 
+			'UData', udata, 'Vdata', vdata,...
+			'XData', xdata, 'YData', ydata,...
+			'Size', [map_width, map_height], 'FillValues', 1);
+		
+		%Big time waster 2: TODO Speedups.
+		arena = arena.*sensor_k;
+		
+		%For when you want to show the image every round:
+		image(arena.*20);
+		drawnow;
+		
+		%frame = getframe;
+		%aviobj = addframe(aviobj,frame.cdata);
+    end
+end
+
+%aviobj = close(aviobj);
+	
+
Index: branches/scout/projects/mapping/matlab/papers/62769.pdf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/mapping/matlab/papers/62769.pdf
===================================================================
--- branches/scout/projects/mapping/matlab/papers/62769.pdf	(nonexistent)
+++ branches/scout/projects/mapping/matlab/papers/62769.pdf	(revision 1346)

Property changes on: branches/scout/projects/mapping/matlab/papers/62769.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/mapping/matlab/papers/IEEEXplore.pdf
===================================================================
--- branches/scout/projects/mapping/matlab/papers/IEEEXplore.pdf	(nonexistent)
+++ branches/scout/projects/mapping/matlab/papers/IEEEXplore.pdf	(revision 1346)
@@ -0,0 +1,3676 @@
+%PDF-1.3
+%âãÏÓ
+1 0 obj<</Creator(Acrobat Capture 3.0)/Title(A study on the enviromnental map building for a mobile robot using infrared range-finder sensors - Intelligent Robots and Systems, 2003. \(IROS 2003\). Proceedings. 2003 IEEE/RSJ International Confer)/Producer(DynamicPDF for Java v4.0.3)/CreationDate(D:20090406204714Z)/ModDate(D:20090406204714Z)>>
+endobj
+2 0 obj<</Type/Pages/Kids[3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R]/Count 6>>
+endobj
+3 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 612.59 792.23]/CropBox[0 0 612.59 792.23]/BleedBox[0 0 612.59 792.23]/TrimBox[0 0 612.59 792.23]/ArtBox[0 0 612.59 792.23]/DPDFBodyBox[0 0 612.59 792.23]/Contents[10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R]/Resources<</ProcSet[/PDF/ImageC/ImageI/ImageB/Text]/Font<</F20 20 0 R/F1 21 0 R/F10 22 0 R/F12 23 0 R/F16 24 0 R/F19 25 0 R/F2 26 0 R/F3 27 0 R/F6 28 0 R/F8 29 0 R/F9 30 0 R>>/XObject<</Im4 31 0 R>>>>/CAPT_Info<</R[0 6602 0 5105]/Rz[216 216 216 216 0 0]/S[0 2377 0 1838]/SK(d:\\hub\\workflows\\job-337\\docs\\01250713\\01250713_0000.pdf)>>/Thumb 32 0 R>>
+endobj
+4 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 615.83 796.31]/CropBox[0 0 615.83 796.31]/BleedBox[0 0 615.83 796.31]/TrimBox[0 0 615.83 796.31]/ArtBox[0 0 615.83 796.31]/DPDFBodyBox[0 0 615.83 796.31]/Contents[33 0 R 34 0 R 35 0 R]/Resources<</ProcSet[/PDF/ImageC/ImageI/ImageB/Text]/Font<</F21 20 0 R/F1 21 0 R/F10 22 0 R/F12 23 0 R/F14 36 0 R/F20 37 0 R/F3 27 0 R/F6 28 0 R/F8 29 0 R/F9 30 0 R>>/XObject<</Im12 38 0 R>>>>/CAPT_Info<</R[0 6636 0 5132]/Rz[215 215 215 215 0 0]/S[0 2378 0 1839]/SK(d:\\hub\\workflows\\job-337\\docs\\01250713\\01250713_0001.pdf)>>/Thumb 39 0 R>>
+endobj
+5 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 612.95 792.23]/CropBox[0 0 612.95 792.23]/BleedBox[0 0 612.95 792.23]/TrimBox[0 0 612.95 792.23]/ArtBox[0 0 612.95 792.23]/DPDFBodyBox[0 0 612.95 792.23]/Contents[40 0 R 41 0 R 42 0 R]/Resources<</ProcSet[/PDF/ImageC/ImageI/ImageB/Text]/Font<</F21 20 0 R/F10 22 0 R/F12 23 0 R/F19 25 0 R/F2 26 0 R/F20 37 0 R/F3 27 0 R/F6 28 0 R/F8 29 0 R/F9 30 0 R>>/XObject<</Im7 43 0 R>>>>/Annots[44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R]/CAPT_Info<</R[0 6602 0 5108]/Rz[220 220 220 220 0 0]/S[0 2421 0 1873]/SK(d:\\hub\\workflows\\job-337\\docs\\01250713\\01250713_0002.pdf)>>/Thumb 50 0 R>>
+endobj
+6 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 612.95 792.23]/CropBox[0 0 612.95 792.23]/BleedBox[0 0 612.95 792.23]/TrimBox[0 0 612.95 792.23]/ArtBox[0 0 612.95 792.23]/DPDFBodyBox[0 0 612.95 792.23]/Contents[51 0 R 52 0 R 53 0 R]/Resources<</ProcSet[/PDF/ImageC/ImageI/ImageB/Text]/Font<</F21 20 0 R/F1 21 0 R/F10 22 0 R/F12 23 0 R/F14 36 0 R/F19 25 0 R/F2 26 0 R/F20 37 0 R/F3 27 0 R/F6 28 0 R/F8 29 0 R/F9 30 0 R>>/XObject<</Im17 54 0 R>>>>/Annots[55 0 R]/CAPT_Info<</R[0 6602 0 5108]/Rz[216 216 216 216 0 0]/S[0 2377 0 1839]/SK(d:\\hub\\workflows\\job-337\\docs\\01250713\\01250713_0003.pdf)>>/Thumb 56 0 R>>
+endobj
+7 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 615.83 796.31]/CropBox[0 0 615.83 796.31]/BleedBox[0 0 615.83 796.31]/TrimBox[0 0 615.83 796.31]/ArtBox[0 0 615.83 796.31]/DPDFBodyBox[0 0 615.83 796.31]/Contents[57 0 R 58 0 R 59 0 R]/Resources<</ProcSet[/PDF/ImageC/ImageI/ImageB/Text]/Font<</F20 20 0 R/F10 22 0 R/F12 23 0 R/F19 25 0 R/F2 26 0 R/F3 27 0 R/F6 28 0 R/F8 29 0 R/F9 30 0 R>>/XObject<</Im18 60 0 R>>>>/Annots[61 0 R 62 0 R]/CAPT_Info<</R[0 6636 0 5132]/Rz[215 215 215 215 0 0]/S[0 2378 0 1839]/SK(d:\\hub\\workflows\\job-337\\docs\\01250713\\01250713_0004.pdf)>>/Thumb 63 0 R>>
+endobj
+8 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 612.59 792]/CropBox[0 0 612.59 792]/BleedBox[0 0 612.59 792]/TrimBox[0 0 612.59 792]/ArtBox[0 0 612.59 792]/DPDFBodyBox[0 0 612.59 792]/Contents[64 0 R 65 0 R 66 0 R]/Resources<</ProcSet[/PDF/ImageC/ImageI/ImageB/Text]/Font<</F21 20 0 R/F1 21 0 R/F10 22 0 R/F12 23 0 R/F2 26 0 R/F20 37 0 R/F3 27 0 R/F6 28 0 R/F8 29 0 R/F9 30 0 R>>/XObject<</Im2 67 0 R>>>>/Annots[68 0 R 69 0 R 70 0 R]/CAPT_Info<</R[0 6600 0 5105]/Rz[216 216 216 216 0 0]/S[0 2376 0 1838]/SK(d:\\hub\\workflows\\job-337\\docs\\01250713\\01250713_0005.pdf)>>/Thumb 71 0 R>>
+endobj
+9 0 obj<</Type/Catalog/Pages 2 0 R/PageMode/UseNone/PageLabels<</Nums[0<</S/D/St 711>>]>>/OpenAction[3 0 R/XYZ 0 796.23 1]/CAPT_Info<</D[[(English Medical)(English Science)()][(Default)()]]/L[(English US)(English UK)]>>>>
+endobj
+10 0 obj<</Filter/FlateDecode/Length 10>>stream
+xœ+äî|endstream
+endobj
+11 0 obj<</Filter/FlateDecode/Length 1110>>stream
+H‰ŒVÛnÛ8ýý Rx/�Û&Í¥›½$îE°ŠM»ZØbKÉYäïw(‘²hk� €#[s9sfÎ�øsÛŒ e—�fWuõ«ùdwÖÕ{Ó¹z…\�a„‘ ´HjZPäL¶É~?‰’#ÿ¾£…D9.0£Ã®8Zí³Ë»=GW6û3û¸ìƒaŸóò3Á�}¹L1†ç¼Zþ‹Z:”é‚õ¶º(‘”ðEÒ>—ûlñ‡³+c,ºXþ“ù|Þ3S½µ*8"Xx°£y³m{ÓËÏú˜Q‡Œ™(ôP‚÷¤
+<zÚMpœb•ÑsŠ�P•@ìá­õ€° !“B„ã#ÅPF÷>2ä�>G©'w×××w�O÷3Õ< ²}›nWôŽ}¿bA¤(‰ð—ëlñÉ6ãL³2çä•¶€^0â«ãÛæÝ¼qrŠÌìvõÖ4ÝyZ(h%Oœ­µ]{Æ{ì°ïü˜¸TM5ò@Æ¢„'U=½µ�Ù�ñE.F¤BûNyë_«`™€ö}Ð}É£á_ægÕ¾«‹„È‰ßoæµ²Gô#½”ˆYèâï«Î¾7Aâ2öM–	”ÉªHÊê�áIô¿Ìàhó�uRBé„•¯§î°~;?Zp¬yFh° Jêð¶ûnÆ×ä8¾GÿçÅuóZ;Ûìa’ªº`¬�‹‡êºø{y?R�!äÇC½[×Í6­?Õž1Å.6ÖÍ°A&ÎB8ö£;:?/ ‘´P‹ûRï 6Ï�öÅvÞœ|B8Ê�?yøkÑâ@_)qª¹k6®rf}Î+˜¢Ñì±j¶&ßÔÍ:™‘rjódšÖºv†o†šxõê?ÕA-·Æ6ùí¡ŽœÐ‘2Žjªôü"‰ð¥ÞÏÊæÓS•¦ÿvhò§Ã¤&�g4Ôt[Í”ãGMƒ &¿y³v€‰
+÷õé€æŒRrå{„µd½Ù•ùQ¹n×Y$¹Œ™Â3t\FÀîœÝM|I¨{ùjPñëmXeC·OxáþÀ8Z]Õ¯u[Ÿ©‹‚aqi"®#9fõ½jêUµK‹¥ŠêëÁä°ˆà˜›ä°QûðýPOãë‚*Åæ§'êVÅ*q	¥�Óð2LØ�k�ƒ½�{Þ5mçýÎèzÀ„³¢„]²­c\/¸œÁå¡ ^bÖíƒÝq©í-V’xžrª"hÉ$Ütæ×ï	–3Zø©óÓ'õ°"¾XgNÏ7XªŒ�~¨\ÝÁ]onMHÅÆv~màbèÚº{º
+‡H'›Ä™!(–³!.á@‹!8OBIìã´¡ùCˆqÚ/CÙô•|ƒu³]ÛüæðáôÃqÉøÖ“•R-‡µßVÍ‡÷OQ<GÿçXCNœë<Å!áÊ1fH™µ2Û¤v¹šôŸ�âªšendstream
+endobj
+12 0 obj<</Filter/FlateDecode/Length 1009>>stream
+H‰ŒVM“ã&ýþªœ¼UkH 8ewIUrõ%µ•–±¥IÎÔüû4!di§æ6ýº›~ïuk·ÿ[[s=ÛÃ�ÏÙ§ã�ÎŽU¶cˆ1Á2øå¼û¾ÿöè•�‚Èþ/Ûi•}úçøçî€¦>þ�S”´ÈBsépû—¦­ë/'uV¨®HUè¥ó5~ý�ÐŒdÇKÆ˜ø$êáŒ$2Zäã±ìØîöõ[ÿ¥VFu
+½´ªk†¦Õ.ÝMùt.IÈ€ò)ÏrÉPšåzýÑ˜Í<s[8¶…Il+$•�G—²( ½KùõÔ�ª†ÏGô8BR"26o¥®¡wxÃŽ‡X	$ÇIè±nú§îvÂÇ
+[ðEâ»ºën
+f«þ	LC¦ñ�îµúéB2"ùâÍê�ôST&±­j{¶7{}o˜y§ù4à±ø Z¤í]ì3u9A4Á�ÍíÜ˜klµœjåˆâ"…½j½Ö#–S¬ÕX!ÏJh+jl®õ‡º’|Â|ß«ªz€R`8Þkó_ÓYÓÂìÕ-š)¨X F¹=¶êþ~�“$0ES¡ÍG?
+àº¦Þ1ô™bŒ8c±!{jn:FS:ŠxY!¨³'; ©±]GZ‘Ô<Öú=a	#Ïºo®fv¾"TºµƒsÂ}mu¿wVUGr~:
+#ã>o‰
+XþÝ”�|Æ¡éµÛBl,Ñ7û‚ù³ÊPVB‘;V"¨²ý´/ÄŒãxÂpÅ¤StD5æö›êôyƒÐb‹P"ÊÝ)sÕ‡KcÎÉvÈg	u‹\¹è¶Co»~M÷‚V.æÒ˜ÊvwÛ©aÓƒ°€w!üU–BŽGæµ€²ÁåÞhðÊl‹T>|^}Ä%”ïŠ=¼Úî¥Gë^ÝÃâ:cx;Úi¤3‡óI*#¸âØíÎˆÔnI¥7[t,ª&›g¥œ`‘Ò;:-8¯¹±	æÙ°s±(÷ïCÝšáíóGÕ|³]ÇÅxÜ•xZ£ºíúucl1@¯­’,²Z·»dKÍhøÑ—‘ñ.
+¿‚±»Eþ2üò¡¹K#j;MOµÈë‹¤W¯fý¸8µÉç°Jrïó·F%òYO¹ ‰‚%áà˜NWÃ¦Ãå¦ÃËÒmˆ˜àß–¬¾Vów"}¢±æÖí>ˆÞÍ\H)+	Nsž–k7.sò)WŠt'}QÎ^¶>—&¡¸	Q&~B›|ú^r®Y¥|%k9ÅrnnÒdžQéÔ8Ã›~MšŒ“	’OvlïPK]e?1>uNœAóU^ÜbøzæŒ?-Ïïÿò‘™Äendstream
+endobj
+13 0 obj<</Filter/FlateDecode/Length 1031>>stream
+H‰ŒVËnã8üÿ�2°fø�ø¸Î.Ìf€…÷äÌ�‘èX“˜2$9»ùûmŠ¢–Æ›Ëãt©»««º‰6k!%"h_l’g“¿^êêb^L[Vm÷?7;‚	%„¢}Ž6
+gJ�Â1šb�R-°Fûó&qöZ›·óðHÄÀ=ZB|@+ÄRrƒnÿ©ê×'œ¨«!£Çj¨€I>ÃW¥¦1ÅŠ©¾¯öd‡vŒa™1é“h©tYÃ·ªó½Æ¢$óé•oÇ§·u]ÕËïÇŠNe³	¤:ñÙ¢=Ê'¡‡¤¶¦(ÝKƒ¶\â4)]þvõ? í�ýŸó”g™¦7M?<ò@&$¡]	¼1H<Ösu¹­[Sºöcebl)†�òw[bŸ¶dÝ{YWîl]‹¶š%e36³By†¤F©T]žÖ¼Z·÷Œ@Òi«@SÕÏúOOFCåjîM…¥ð¿ÙX×L†4Êp¦ˆèé?W…
+n Ëœ’�9ÛÿiFÑ{HÀœÏæ¹|+›¶ÌÑvç¥¨s�ßM~Â#‹|dQ�#tÂË~b
+½–™I/”~6—v(Ö¤Úõ#ôõB‡ŸÑŽBTSÙKm�±ÖSB†]@õÔ
+ñ©ž?~í¦`�tHª<¿^ŒË·ã0'‘¼ÔeØxxTAÉ°‰”Öz¡-ª;µÙOö‹hµÆé;ÝD‘$©RÝ“t½æ†PÃ°PßŸ¦�iê—Ê?ÝrÙ°â”ÛtÅ}1¶)�ë;T+>WƒÏ½?:Ñdª_¶¶i¯n<Ÿ ˆ¦rö…³ÍOÆ•Íå®Ê•*ÏÊˆ›
+vÕ*Œðy©Ç£ÍÛòÝ:Û4}µã]b+wIÀZÓžÔáýZûŒ2=Á-‡g,ne«Ækg	ä(eÚ9ˆz¬_&¶=UÅÒ®0^An-8d$á¾…¿¾Ûº<–}Æ‡G}{`edìåÛJSÿoh¥®®/§æÛÔŸ*Ä{w£ú-8D6PŸmÖ­
+%ë)âþÅ	7`¶ÿ^ �¿8+9Rœ*Mú¥,g'”Š<?=ýV¶zÚŽú¥£ Bµ”x22ákM|
+€‚{Ï�!ßö}ÿãïß÷_¿_W0n¡¼„J™/à�|¹–oá	�y†gkîÆ´OåÇJPJâ›éT®N”¯Ø“?b
+¬ÛÚäËöÁBDÅM®¼™^B8YDd!èî
+2Žy’W®-ÝÕË@b™ø»í{óÅÍ½£P…ÒÝ�¡Lððn�/�É³³gô64	{ž!¯Æ°.+go +/‰lŽ9.{›f|í¥ÉÇ®d|–�«¦]~„ÁÈxRØ3’n¾ûŸÿ	0dŸœÑendstream
+endobj
+14 0 obj<</Filter/FlateDecode/Length 1056>>stream
+H‰ŒVË²£6ýÿƒ–¾Uƒ¢÷c™š$‹TÍÎ;WØÈ×$<€ï”ÿ>-�@{î,mN¿Oõ† Ým’*?ŠÍöÚ6‡Ê]:ô¶ûwC0!ÖÚÅ±Ñtí·e�Þ,ÁlÛŸzûg÷÷&,%„X†…á6x<•®*Fwá#áŒ‡�Íiø²°¦)àÒÊÊ%æ£˜ÁQ8Áè€‚¤›¯]1l¨f1ëoM×£·Œ1�íä8£Š`>zè†¯~žó�PØ•l˜‰ŽÜåZ5wWxknþQv·¼š;ÁcûÆD	bš#næhwÙl;WwMÛ}I*GÖb‰´ÿÁµs@ï·Ýíx†h\B°¼{ÒrŽ©å24íVõmÞ5uyœZ"3²Ø *üšÂ„¤Æœ~û‹2&'æt´UØ„j0ETó…q•w®�¦d2�SLë£–a–·yýî²SYÁÇØ‰	£±ª¼.¦røL-™Žƒùúõè’f˜n�ùÅµy:ÃŒl©ˆc|öÍ3—Lš@õíáVVÅ3bq)ü”íÚKGâê�²mê‹«{O”Ç©H¬µ`‘óùµÉì[5¶L F™ç„’�A»³5…1‹mºuîÃØ8û	™lbÂð
+AOøyÜO‡<>ÍdœpÈxAtð*E$z¤@& 5Î|µU@«ÌrèBZÐ£tê¥Ø™ö†Ï!AËº[ëºWm¢§èÖUy_~¸êþrKt€½”‰õ¹|?ÿêŠ0­‘¿ƒÂ”ý}Í³A=cSb—õ©i/�jSYOI`Ã�ž(ÞO6@)Âç²_Û¬AƒãZ÷ýV-´~fc‘óÞIÌ”‰»â%¦¬ß×.AÀ h@A©q:‘Ð‹ÌÀBÎCS~Í@ßC«èúv9,ô…c�[¿E‰~ÇTˆò¥·Mû_÷óøT
+27™ÀL’ès­xìb~½V÷¡5>]ˆøJî½ D:3±Ì+<-¯­Õý\ý;‰Ñâõe+®íG‘RWþi�O3	ˆ€öQØ?¯Càƒsõ'Ý“tÆ{š]›¶wCp¬ýì3a¶×Ÿ›"%œNÙ
+Íµé\ñä ±BEÉ=Ü×©ÀVYÛðgurÝ>‚ètç/'øï1DÆ†gY-7ó	g†—"’ÿ�Oé.È¤ÔÓ‰Åþ¬}0+ÑûñTŽãåpý”]ïÉÅAaà*\•6Ñ&«±‰Ëàý„)ä~ÔþT¢~Ø~k2&°üŒ°óK6j>a¿v
+…¢'ø�sy<?{‘•56æ{öGR¦@1Æº3XD½mŽÇÛ5¯�÷%[$SñX}oË"4õ8,çåab‘ú©…÷Æë~PõåÊ©eÁßš6äø„.%‡…2P†]ñ¿”«Yendstream
+endobj
+15 0 obj<</Filter/FlateDecode/Length 1078>>stream
+H‰ŒV]�«6ýù<²ÒâúüXUªª>Vy‹ö�'¸p
+dW÷ßwLl0�ÛÞ]i•UæËgÎœ™CZv—äíø÷á—ß‹„$Çk’a„Æð¹JR	†_…X¢8üCA29¶‡ô·Úžè‡÷%xq&ÁÙ9=�EB(…ÿï{¯Ý�ú™|•“!Å%¿ãååMxú† ‚sñüæ”–÷{oËªNÞˆ„àéW­{�¼}ÿ<¼”!}EB©Z•5¶�RÄ5S!"ÓkùhÆ¹Ú9:E˜3_¬t†½eù]hÀŠ4Š<–ßt÷ä¶šÜ½ƒšàœL7Úm5)™ç¡Êvƒ¹è¾�…¡àé>
+Š$tÁžË³iÌ0šê	�Gž%X˜2BÊÓÖ^tƒv –‘Wú‡ýÒŸº�ÐÍ(Xç‚%´RäÊG¯m?V¶5Ý
+„w©½îFÏ9Q>úXkÓoÉCa*TÐê±¶—!*€!¡Ÿäø’I	HŒu9N9ð"c¥Ôä*P.´t/—¨iynüwPVhŠÈCÙvÍg�=ŸÓ³Þ¶3ƒ©Q”/\p:6¦5ãÔÒøeAãù:Ë58.dxºîê²«Üó)wÃ�^ŸÑˆ, Þ–÷(ETá@üecÆïáÙ3f1øñF—Ç.ñèìWÌ¤ð§÷úû`ª²ya“ä‚Nl¢’Mv +coª	ž÷mL�ˆ$!éðpêñ:±X-Küø©„p§…túëæ¯~Zú@Ìf¿SÚ”ýmÂ]/ ëeÔG
+ºdïºƒ©pÖ ÔðÖè÷ÝÑ�ª�îºz@šít8Är¬òÄ®�®ž
+Šb"PÓMã¶9Kó@ûr°�Ó�
+š…‡’ñ#�—²ÑH�LÀ!vëkõL5o-P|,�n.ùìvÝ‰­ô“<ò±Ý‰} ÿ*1#XŠÕ þ¥+XqÍs,ÔÌ%·D¦4÷\j­—“ÕK9��@­ÆÂMm"ÈpvÌ¨œXäÈÂ¢1Ágõ¾™O=i>"ÓœmØªÅ/ÂïCß5¨ž
+‡ëRõcØMs¾²ÙgÎ²ÅÓÆ~e«‘ö´²Ãsñ†®r(ÈíAèÒ‹V 2æº?Û5æÛŽÌÒX‡MwíAÞ/«a�B„éêauv5,VŸ�/ïgÓ}±[×9MóØÅt[Bƒv3LvuØ!FEAVÌ;?Ls™„c›Wø¼2!°³Üx<[uµý>Z¸çÌ6­…cAoëch^-)œvÐ
+¾Y*Né¯
+ìäÇ­ž–-/xox™Çªæqoìþùp�`X1aNì#pMÀ™ó	wÐ¾nR6ßK�œ�ÁÏ—�æœÖ'�ÏãYÓ
+	í#Jú&Â9ñÿÅÂu!8�Ü»ÓÃ€�qé§nß}ü+Àgœ²¦endstream
+endobj
+16 0 obj<</Filter/FlateDecode/Length 1089>>stream
+H‰ŒVËŽã6üÿƒN�ìpÅ7yÌe�ìÙ·A´E[ÜÈ¢!É3˜|}šÔ‹k‚ÀÛênvWUuüyx©P…«
+ÇsqÐˆ|4Ráék�Hq¼ÊÁvƒï‡oÅïÇ_1‹nYtÎâQ~mYãÉ~ÄŒ*†¾‚W¸xÁ¨RbêCÙ˜7»V]{�@ˆ„²òZŽ
+„¼h†tiê7Ó�æ
+üuü9ÆÕÜ.04.
+¬8´Zð—çâiËX°,¾õïIÇIÍåÒFÁuWhE!\žý0NMdÅyÒyiº:¯ÆÉZíÞû7W‡Á$F¬¬Ý0ÂdóX¨ª´ÖjX"]Q’¡¶ÎA[J×®·çÑùÎ´Pžhíºîâû›	ÿ¦Ðé¬'sò�1¤¨
+I8¾Rºó§_P…ß„!UýÎè‘ŠÑeôsãìLíB…´�*‚‰ 1lxœÏv.�v�§I�@/éˆHÖDÓÕ›vˆ™L¦Q¯å»›Ð³‚ÿÃQM>:^ËD$)ŸÉ=S8a/¶@š®‡#¥A�éÍy´=�éÎÃŒæHAéÜ ¦Æ?Z Œhy²;xÂ
+2AV)™öã[£	'2=K4ñZ7„V°†E¹›»��	|Ý{3�ñ1eÐ©	ß¤Xnvl|í[ýØz ó^­– BU—Ñ#�SBn�6°Fž®­ãâ|6ˆ�Š¯>K XFI5c»7×ûî™ö¹( ]‰¥èÍÜŸ«âi¡fÑ?¦¥Xh„3DÊ›?¹63ž°ñZöþäaS¶¨L(ÖÌ™Þ±V«ìMwµ/‹Àš8×Ù"_\WÛ~Oû|g-- ‘ŠsÂ÷ Çâx)���¡‚@)ËRþèæàP.Fçk£_K4ØÀÌÉ„m‘°¥RØ4ÄfÍ½)T°Þ´¬aç[Ÿå¸oX‘Å#Ï¾nµB V–ªƒÐ£„¡pð€x¯4;WF:‘¦a�×øÎw­ë¬éÝø±&òüê¸€Ì4Ëöý—Ç\¢´£ùšùþCMø†Ôœ%’Ë&®Ðšb¹LbÉÈùú²Òy~TWÒ!ALR<ãúIYô³²â¦2‘�<Kë¿Á%’¹¬Ié]D·J-ÞµðýQxÎ8âL²øF¨ýí‰”Íš)D‹‚³pæÄÊí+R¨�ðkÝ»ûÁlÁÃ×-¶&S°EÌqy2C cÑ+{†LŒêü�Íµä3Z†M£;ûÛB6ÙÈÖK¢Z¦f2?¥³ã»ïÿv”²û&Æq vËß}_ÀHÉE-&»¨éÄ^jºà'srñb{.Å2#Ÿí­q$ß5 *¾#òhS¡¿?WƒÒëdô“ð«p³lic¼ñþ$.Z±ån.÷-¼Ð…—œ(Ó'òB)–·šô:ÑÛ)z;Eéô”Ò
+{˜t¥eßÛùªž\á_)z¯'endstream
+endobj
+17 0 obj<</Filter/FlateDecode/Length 1090>>stream
+H‰ŒVËrã6üý�tÕÁÄQ»¶%+åh)U4ILDRERë8_Ÿ¾$Ú•›J@Ï£§§ÁE„&“`“‹ˆh¤UADŽ9
+6»Å6|yî"Bâa™¦—sR¤ðQˆ…‡*Ûwn~^üðÈ²°‹#¿p $A9ü³Éá¾JróZVw›¿Fp‹[è‚DÀ©BzmÃ¤ØÙ"0A*¼œwIc|^(k­]R�¨ÒÒV°[¸ª!Á¤?‚˜V±¿Ð�»�ý‘�¦=úœ¼™:KŠ6ÅH`Á-)„Jæn˜ºÉò¤ÉÊâ6GBhâCå&=&EVçÈ]ÔHú&uÀ1·Ì±Ò1³™4¥ƒ÷¶¡ÙïMÚdßMaêÚÍ-å¾edR‹DšKúNÇR)î�ÎUy.kKêu7¶}AÆš€®šcÙ^€!"	ó!³z”£Xb_Ç6ünªlŸÙluUååpœ-˜ìjL&ñÖª‹WC<éb‰È<	(Í2ÿœ�›¢©Qß0ïE‚û	1iuÌ”á&´Z¡w&Ä”îmÃÕÓãóòùáÞ®	‡Ÿ—O?>Ì”�ÚWO÷Ï£Hq¢-õ’SÒ6»„"f;ý½©.is©`ª¦ÄÚ-a±=:›(N�Dë6sŒ´¯WŒR«@®®´7é‰c8îÔ¦¨ËêV!Åª£6Ù•çf$#Ö]Ò(hÕzxï£‚ÐÖ,Tö"ðÀ8à …Ö½Ä™Ô5Ù †í$;ì6l("àNÚI5"\…YUÙ¢˜Áäª¤8˜hŸ;S
+dƒcÒVYcsøí³Žàü†¨aù-¹PLQ»Vò¤¸ì“ô%ßÍ¡µ‡‡n™fˆŽx·›2!|VÑ�½µœöÓú—o¬ç¦5¢Ž‹bùm³þu¹Y}éAÂ{¯Æ¬3š/kô©?—7‹eMÏ-VõëæþÓÇU0°?,•Ð¶E¼³ô8CVì�
+qÏ„`°r½ÔæZ73-”%¸ùÇ æ`|äzryÑ4ËÈ*'c<µ¶Ñ{E°ª²3º¼Ü]Níã®ÊMšîù“À;ÅØ4ŠYÒûD±Zùÿ,QàqÝÂöO'•ÝÓYg‡"9ù‡“Ì|MàÕªœ-��Q® ƒˆSDÃ¢lf,R!¢:]•ÅémN&z›v“ãl…uLê¹=qOÜFô€´ÌÏIÚ|l`­� :û÷Ý§[:ÝöW�E_Çö<µMž²Ã±™sYL‰è„ðjÚ[ƒ¯‚ðå2bŽßòwëƒE'çS]~Lcd‚8˜¦¾},'ÜóÖb:Ä.«›¤˜ieúpÊiaE·5zÐ3°EÆnÔì*]e¿ŠÊN~m7gb„„u-¯>æèõ§WÓæšrÆ|„W¬è–Ž\ã	®÷‘÷‹ƒ]³{ê!ÿ	0l¿œ
+endstream
+endobj
+18 0 obj<</Filter/FlateDecode/Length 1055>>stream
+H‰„VË®Û6ýÿƒ]è/‡o.àHÐE€(
+£?d[�,]Hr‹ü}‡EŠ–ÓlÃ:ó<gf´ÉÛÃ÷ò8d/Ûï›‚
+”B¶=fF´â"£Ùö´ÉÏmbFXbð5Í,áNlÆ­ÄßÛÛ&o›ríÒ'™qN	[Õm²xýd3„Ÿ3gjF;ãí4äbìúã¾iªæB¼1Ðhý<°QD-|ª‚­L}P9Ú"2AebÁ’XÒŠ}sá˜�²ÖŽÎ�n´o.fÀÖ¥«9yãk·™�,­ýÚþ;¹�zÎ8Z$ù×©·š@h¤06ÁôCw?÷®ü¿Ú$KÏµŒÌf`Š»ºv#7Ù‹"ó÷®=–}Ÿ½ü½ý²ðˆ¾¸nçwÎyt˜0¦™È×�¶ @‚¾l”,SÀî*soÉ¢EcM
+PžT¦]|ç¶žY‚™%‡
+½×ûˆþvîîçk×•íùëÇ¿NuJ ¢øìEø¦×tÐð…üù‡·2‘v¶ŠÌ�Ä'(ë#ÿL°j®
+ù±8[ÑbR—òy8œ *ñùmdê1>76is�ˆ¦�ÙT5š˜Øi‘Và9Ž^"9>#dâxÁ\"Æ]
+R`•ü¡®íýr]o�+DMc¶Ë+Ür(…r¬¼©ŸFK9›aM;á4ayWÛÛ­lNûC�ƒ�u¨igiš«IÑ"(Z±ÈíÞ—+Aëp³Ë÷cDŠUåí}8µ.‚s[îXË¤+j›,›ª®m0-gÆÏOwŸIÔPÐú�‚ûîíO:‹»Ý1€ÕˆeA £.&’ÿDm+ÇJ°ÅíÔ
+²xQ@´Ùå§rÀk„û+cØ&È»}sYÔ16€á~…†ë÷ÀâÕ¼ûc·¯3éºªš¡ìÎeW6G4ÁƒùáÇR'8AÌz·ý½©«Ëuø}í•l��å4+¹@ºÅƒðp5X.çÞßëê8	mZDÜƒ“f®¦]ÇCmàD<”;+[p
+þ•×Mñ¬”hjõRg¹Ó×¾~/jIŒÃÇ˜§Ù�È¥©†ªmÖG,½ßf\ãîÍûýPÞ~-Ð‰™_!}`BE<û^‘¡
+Á�[‘1�Û¾ž`Ôu0Q�¤P5×øQÄŸ}jà‰�ø]~k•#·`¸<DÞµ‡v K9`ˆ–,¥aóÇ6r<$Àü!ùü‹o-Á\±^ÕõÏý~(û…Vp¥Ž»_I‰+°/�Õ…éî}¾	É2	èÈÖŽ,Mý
+¤…6”ãCÑ^)ý
+É¤Ôs®–”_HÆ»Ü˜µ¼"µáSÍ]W�Å)Z“äá&c”-áŸßÞÞ\?öÒ•æÆ)À5¬U6OÛôêm»ùO€•ƒCendstream
+endobj
+19 0 obj<</Filter/FlateDecode/Length 149>>stream
+xœU‹±
+Â0E÷|Å$¦¥VÚ­bÇJ×Ò¦Iób’"úõf•³œÃåöìÅNŠí/¥@
+5³"S ¼*QñCµ°M·¦óÕ¬µ‹YÖ¨s,&eOÔâ*¥ÄÝ[
+šãLogi˜òF�Æ¢Þ¡¢Á�PÔmuÄhù¿á¦c
+fL†\Äà½ýð­z2©XÏ~�½3Fendstream
+endobj
+20 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding/WinAnsiEncoding>>
+endobj
+21 0 obj<</BaseFont/Arial-ItalicMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 72 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500 556 500]>>
+endobj
+22 0 obj<</BaseFont/TimesNewRomanPSMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 73 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 250 333 408 500 500 833 778 180 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 778 500 778 333 500 444 1000 500 500 333 1000 556 333 889 778 611 778 778 333 333 444 444 350 500 1000 333 980 389 333 722 778 444 722 250 333 500 500 500 500 200 500 333 760 276 500 564 333 760 500 400 549 300 300 333 576 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722 889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722 722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 549 500 500 500 500 500 500 500 500]>>
+endobj
+23 0 obj<</BaseFont/CourierNewPS-BoldMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 74 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]>>
+endobj
+24 0 obj<</BaseFont/CourierNewPS-ItalicMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 75 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]>>
+endobj
+25 0 obj<</BaseFont/CourierNewPSMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 76 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]>>
+endobj
+26 0 obj<</BaseFont/CourierNewPS-BoldItalicMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 77 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]>>
+endobj
+27 0 obj<</BaseFont/ArialMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 78 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500 556 500]>>
+endobj
+28 0 obj<</BaseFont/Arial-BoldItalicMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 79 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 278 333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 750 556 750 278 556 500 1000 556 556 333 1000 667 333 1000 750 611 750 750 278 278 500 500 350 556 1000 333 1000 556 333 944 750 500 667 278 333 556 556 556 556 280 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 556 278 333 333 365 556 834 834 834 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 549 611 611 611 611 611 556 611 556]>>
+endobj
+29 0 obj<</BaseFont/TimesNewRomanPS-BoldMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 80 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 250 333 555 500 500 1000 833 278 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 778 500 778 333 500 500 1000 500 500 333 1000 556 333 1000 778 667 778 778 333 333 500 500 350 500 1000 333 1000 389 333 722 778 444 722 250 333 500 500 500 500 220 500 333 747 300 500 570 333 747 500 400 549 300 300 333 576 540 250 333 300 330 500 750 750 750 500 722 722 722 722 722 722 1000 722 667 667 667 667 389 389 389 389 722 722 778 778 778 778 778 570 778 722 722 722 722 722 611 556 500 500 500 500 500 500 722 444 444 444 444 444 278 278 278 278 500 556 500 500 500 500 500 549 500 556 556 556 556 500 556 500]>>
+endobj
+30 0 obj<</BaseFont/Arial-BoldMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 81 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 278 333 474 556 556 889 722 238 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 333 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 750 556 750 278 556 500 1000 556 556 333 1000 667 333 1000 750 611 750 750 278 278 500 500 350 556 1000 333 1000 556 333 944 750 500 667 278 333 556 556 556 556 280 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 556 278 333 333 365 556 834 834 834 611 722 722 722 722 722 722 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 556 556 556 556 556 278 278 278 278 611 611 611 611 611 611 611 549 611 611 611 611 611 556 611 556]>>
+endobj
+31 0 obj<</BitsPerComponent 1/ColorSpace/DeviceGray/Decode[1 0]/DecodeParms<</Columns 1838/K -1/Rows 2377>>/Filter/CCITTFaxDecode/Height 2377/Intent/RelativeColormetric/Length 60741/Name/X/Subtype/Image/Type/XObject/Width 1838>>stream
+&  ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�ÉØ*ÈnaÈAÀŒ!Ü¹’ò
+<Dâ}}©rÜƒGÂ.&¨$D‚#á ÓïÒO	¦š6ŸúÚ07�W0ÜÆÑ‰Ð~`9pæó£ÿ8çrvCMÈü‡‚+Ýç‚#Ö“{uÿ­{ñ
+'ÄøS9¦¤|9ÆÓˆaO]cÿ×v>ý&� EB1ø"¡S	×¦+ºà¿ý¤Ãõ	A#
+Ë¶ŒMé?	¹‹1Q¹´ÔÃhÃkþ—(eAâ˜?Ž°û¤ô+§ë§Þ›ëëKý¿]*?atê1i¡ÿëÃþ¸Òÿù€æùŠ
+ú0ÿÿû¿þ—ÿõ0¶ÿ¯SÄÿü7ÿòàBÿ;ÿþå½”þýîº0 "qÿ¾
+Úÿä‡J×¯ÿKnÿû°·¹7t›OûS»ÿý¦—·ÚÿýÚWþÅG-«~Ç
++^±Éæº±O$d<�»±Å}4Óž·v6+oéb˜¦»xöÚ|D0A ÂaÛ†TÐˆa;	¢ƒƒL¡*`˜Y0ï�*�s]®Ål,ò Û69
+–A®ÈdƒÁÜ�á‡ x;�ùä{5 x6GÙ3øAúè8YGÑ
+xAä?d2£ýzÿõÑ‚™ÏwÐl�È¸%AÈ6Ù9?ù‡'d ú09;Îä#ä5`‰ß�ÐäÜŠÿž•°ƒ°›•„vƒ©ši—þš4`Ëš~ƒˆaƒ?�¾[Ã¹à“Ÿ“'d¦a÷^(ÚÎ.º, Õ;î×õNïÓ°ŸiÅ­Ž©ÚhZ0ízMÂl0¥Û@‘‹7½š7fï7êcÌTaæöÂéna¹‰°‘Š�ùºŒ;õ1ºA³»1?ÿÐOú½mÓ£
+ÓÓtúNÒAÿIêéö=ë§÷ ôþÁÚ¤í#U×õÿõøOý÷‹¯úýø}z_êý‹_Ó†þÇÛþÿõÿñèuÐÿÿñÿñÿ[ÿ|êüƒÓÇüïÿÿOÿ_ÿ|×ÿ²í×ÿ†.¾ÛjÃëöëù5þ`LÀJó�ÿó{ê\'öí¬:=ÿÈ°þõðÿoÿòo¹!þòoÿÑ8ÿ\“ÿ·ÿ®gà½í[Ø ~`OœpÿþMí+û¯§~\6º_õßûwkþí­¤ßþ¿úY¡ü›þŸÿÕ�ºþ>+íccÿ»ºþ6+ín*8îX_cc«^×}�¯zÚbío[Ó_ý±]Pv¾÷j˜M±ÅûÓ±PØßëa0„D0„0·h0˜CM5NÑ·hZw„ a�„ÏkËƒm;DC f®@ðl…!�
+ð"!Å†¸ñA,5â?ù�Úr Ìä¬‰Hì†´ƒ4\‚«�Ô™!«È0ƒ?ýtÚ
+TÓû[ôr~�øMÌY‹ä=‘aò(äX8ä¬ˆ÷�qÈ<#žd¯*Aè:ºOOÐA„
+Ò'Á0Aù;²p0†6ƒA„X Ëê¾ûí4ïMSNðƒ½U:Ñ¾ÒÚxÕ~¿0óÒ7faæ,¾ù�õ.taåÝ^›©†æF„¿á/¯iÖÖ×�zAÝkßl‹C¤õ×IßB7ª«ˆ,ÿw’êÄÿûÞ:[üðV¨õaíñ½ø&:ïÖ«¥þý£t6ë>}poŽ£G/„{·ëþË„ ºëøY.¦½éN8oy€ª|¥eÇ­ù!í-_<~¹ÝØÝa­pß|›¾ºêÝimÿiá&ûV×“ãƒÞÇ4ŒÿkÅ±ØXØáÅE1òŒTTWñUîÅ{±Ó»i§jª©¦šÄ3b¦ƒ‚@dp‹ÚafØf„C4rÃÄC�[w¡�Tãö‡
+cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä
+a¼<Æ@Ð Wd
+{ xÁ€U²ÓdH!¢ƒ�<vC lp¡r`P9ªÁB�T˜R™
+ƒ”9N@œ<
+2…™
+”	…!¥P]4</ªhD9MBØNKðkèåÜƒ ÊÁÒMz70ðO¢?Ãé ƒ�ƒ‡8ðSƒmÕ8|;C³„Ü†ØÿA× xf¿¶C$Ýí\6;ŽÕ®>ÞºkÛ¯ëþß¨ëþÿî¿ïöªÿßûzÿÖ¾*¿ÿÿþºvéëëÚ¿ä2ß´aÈ.úóz�j ÞG„5 Ø�äß!…“�Ì“‘ÐBá
+ƒ�ÏÄ°ƒÙ9'R%9…˜R%–lòX\È±�ù‘�‡ðL¡È^!,ö@‰Ì*ä?åÆB‚§òhœÁ«VØ„F3âPpÈ/EM< ÈðL ÉPŸŸËäÉ „°�‘,&4Pß¿¦áp\!‚ªhÔ!‚úÂ20ƒètÐiêðöÑºM&_„Â~'ÒHZ<˜(L-¦�ì(OFÛûKFÛ^¸:èâ…Z6úq£“¦ýœCÑ¹ë=¸´mº×lÂ‡A;ÂFÛE3ƒFÛÖ,0ƒO A´0‰ãJ‚x°ÎÿNRýš:Y-8gÖ›ô´ƒß ŸIzi6Ø†¦›a×Jï¤'çÞ›Œ3ïÐpg´­ƒ>Øi¦Òl3ï¥û¥K†pÜ3ŸÁôœ4êÁi6Ða-[MÏ8?·„–ÐAé¿öÿ¯J­¯…¥ôî½'§vðŸÿûúx…ÿ^×_OCß¥­Ó~¼BIö×ô¬0ÿV½_¿¾ç�]×KuÖëÿ_¶—Z÷þ¿ÿ­í}úOOñÂîµÝ‡ÿmýÿN‡@þëûÿñþ!ñ·80×ýÿÿñZt¾÷þs¯}_¤¡¿þÒÿÿÝþ½¯ÿö–ðoýï×P½ÿ÷óa›oéÿâÃþ•>¿ÿ6½v×ÿïæÁ‚ûø/ïÿÿÿ¾Ý/þ´©½¿½uoû¾¾¿ü_ÿïÿÿG/¶–Ž_ïþ¿Þ¿pŽz¿ÿ¿þ¿”l†wýµÿÿ×ºÿúÿôÿ ¿ßþÿíP‚÷K¿ë»o_ÿ˜ßÿºÿÿý×úÿÿëøª¯ÿÿÿb½zî?þéÈQöÿ]}/ÿÒcÿÈQòî½ÿÿ!Gý}~¿ÿÿa¥Ó_]w¯}_ÿMïûm÷_ýÞ¾Çðÿþ×ÿú×ÿ}ý«uÿ÷ÿßNýU×¯k¿õÿ_ikÿÿÿëûÿúÿ·þ«úýoéWk·}«ÿßYcêÚ½×Ù‡ö×KëÛKÿmÔãýxOKJÂëk®žén§Ým/ö$�¶—V–g×†•…µ8ðaN·Ç¬zû­ßþ±_‚û§ÿX‡öš÷:†�¥ØC_~ÒÕ�oJÒmXõ8ab¢ÚÚ´š´‡§I«¥­„Õ­f‰&µÉÖI
+fŠšlCá„á¦Þq[@ƒb¡„“A´›
+†b˜ªÂBiš+3IØ„˜Aè4@�A¦è0ƒb‚
+ƒA„h aÓ3Ò7
+¨QMR
+ÐA¦›ablü�iÂb‚a
+†Å
+¼eõL(A¦	&‚8)°Ð°š´è‚îàÂM
+#ÇawA„Â«0Aªa
+‡wþ¢à Âì!aBÄC0±Çiœ
+ƒXˆˆÂÃDDA„"."ÌHfœ€h‡±
+%ƒXÐˆŽ¡Ç]õÈ†”øa-.+¤Ã[„Ø[!�
+yˆ�ÿþ@”r�‡ V>@Ú
+¨Rˆ!©„ † x,yì q3F@ÚÓ°A‚¢œ1…Cò7FÓPa„quÁ…	 Á$g
+Âkœo›I¤šþ“kÝCCíÿÐûxê×ÿúÿÿÿÿù?�Ì¿Èaï�nåÙÝ�7âÿ"œ‹dX6~&;�–n$‚7.Ë9Ïd~A;ò„$a!æ�F
+d$È�ha�Ù2$�Aq3@6‚�¨(*!y)¬0˜TÁSL!é&
+hÜNaØ.˜TÂiÚ`šaTÁ/òäÔ*£wBãÑ³¡£hçémU'F ¡›p�Ì!l0�¶… �7sú¸;'šLƒ3¤K'®Ø3ê�tÐUy<êpiÁœ<Ìè'Iöé¶Oéè8i&ÿéÃKÚo{é¤®ž!xkÝ[h4ëÓ`Ïi†–ON¶Ï]ÿ¶ÖŸ~ŸÆºµáWN·Z¿î—Bkuié7Cö?÷×Ó¯ôû_ÆÞú\ÏÓq×cõm~ÃwÖ¿ñ_KœØ¯ú®¿Åá¿ì¡÷á�ðÿ×ÂÔÜc_¶ýM‚åßù´¶æÁŽÄ?Ø°×ÿÿqm!Ü/ÿÖºéøk}þß÷]þ_ÿa¿k­ÿþC`íþïá‡øo]ÒÿÐOßí¥ûioKÿz¿á¾¶ÿü5ÿþŸ÷Kö*Èhþÿ·ü2:wáý"1Ûßb¿õ_!G¿n¿‚ÈGýöÈGþÈGñÈƒ†ÿ·×—@ºþŸµþ×ô`k¯þ—ú^[»¯o¶¿úCÿëÚþßþÚÿßkßßuÿ„­¯×þ­J{a¤Ý«êq×DáA„¯öÓ†½¤Æ¿M×u¶µõ”fŠëq®Ãb>æ¢úq
+ŠXi5ö¶
+�üE&·a4ÓM ƒiˆ`ƒ‡¦¶ÐM`ÂnÒ)¤vb‚XbÂ ð„CA³ÒL4Ô6?ƒ<4� ÂÛ4A4œÂM&q0®+`ˆh�NA²›†E„ì!3il¹0Á3Ë†`( ad`0DãËƒXXˆŒ¹Ù�T‚Ah2šÂC¯ô¾ªš]¥	pÂQ[˜[²>!ÿÿÿÿÿÿÿÿü�¨k9h,Ž@ñ"F@Ì<‚Ã�~R‰q3Â¸A¨æ9°f¡Ü�î‡=È‚¡Á$O-A©°, *(ÎÂÃ	„A…†	…´ÂPÁ	
+VÐvœ^M4Œ¤� øÿô�½+úN—ÿö•×úN“ÿÿD2Ýµßü†¼y
+|ÿ#â'Á£Í…á8ÂVnu'ÆÂp|¼‚ãù)
+œErà"€y<¼'ÈNË³çé„Tý¼'Ñ²ì&¶“ØBì„ãw§H0L&ŒM}ŒO
+…þŒNbÅû½iE·Nû;ú7½±ÕQ	a¦‘†ÒoyšÓi6Ï_Ýâ�™ç+®á›m‡¼tù›³ÓV�=$Þû†ñ¯¶Â¸ýíØTñ_XoÿÃ^×ÞÓ¯ú½ÿÿµí°þlKK´)Ö½†®•Õ¿þlLÀ_å�6'øoûÿša¿ñx_èº{ýûÿÿþŒßþoÿ^›ÿ…ð–íûö—ÿÿþÿÿÞßÿßçpßú7ý¿ûú_ÿ‚#õëÿ­¿ÿü5¿ú}+ðÂ�úÿµþÇþé¿ÿüývô«T\=«¦×ÿûÛ¯ýkoÿt¾ÿÿ¾ïû÷ï!-ýŽÿö×»ÿì&¿Nš­ mú‚#ýjÒt¢•?ÓiÂIýÄ4ÕµUMb¬0±§Å‹O†0Kcb´í<&ƒiŠL&A³É&hZqi³È$ÐqP�ag•ˆSÉ&žÅSL&­ÐhÀ M?#aB„/vˆà¶
+‚„#/„ÎqL ÐjÙl,0„Dr Z8¨ëU Â�Ôþ*¶ìŽ“Xˆacÿä	 Ê9Èrf9ÎÈ
+nCN2¡£ˆg�à�AOdo°@Á2
+ŽCNÈ9ÁV„²
+à&dø‚øAªÓ	�S¼‚Ø5 ¨	�ô)Â©Ãk^ôÉùõL(*5ú0¶˜^‚ñca
+v~ŒWIýA‡î�pÚ§ðÉÓV‘±°áÃ9Ðµ»Âwl›XîôpüØ¬ƒ3�Zzœ†£ýb8ß�á±mw¯oôŸ
+«¯ûÿî«úÿ÷ÿ¿ù‡ïìŽ…²pBº‚
+]I9œ”dé¶AE–ävD„†¶©™ÈK Ë™ßì�ä¦N¸DrÜ†‡Ð)tÔ‹d<P@Éy+>Ù‘�%²„;+ˆøŽ2tA‚�Ÿ2	�òø‹´"Ñ˜äÈàö¾N
+ê@Á0�ŒÆp
+0œº‘ø ðƒ2v|%d\Aà�’³áž	›ËÃB…Pƒ_.¨0Aé¦0¡=0……ýØBÂaˆÓ
+š a…H0BÑš„oz`©£p½*1Ô&°‹¶Á>ºhÞâÑ½¡aB
+ž�ì!awZ TaÖb¡„ätm]ÃFÓžó�˜Ú7½º1?t›y‰Ê¸Ï=eÛgø`‘‰°´a» Î-7£s‹IûÃMIÞa¹ší†•¿FAs–ž~èÅß§gú7{pí>áÒmžœÃcý*N‚xZ¸g4“Óõa›tšþ¶q½ÙÌ,0šµm§ÒI°Î?B“þÊ“ûÿ»¤Øa:¾ú]kÓøjÃ«kþÓÓûûß«mi7í¯W¿´µz¿ÿW¿è[_Ðý<m~ßû_]õÓÿ»¥ØÿV·«uÝÐ×]}U/ÝZ_[¤ö=tÿýhkÓ�÷U^Òúß­n+ÿëëþëê®¢¾¿]ûÛúÿô>ñþ-Åÿ¿a¿ú·÷õ�‚ÿˆ…Ä/×üÀ&Âûú6ÿë¾¸Zëÿ®¿ÿÚ\À_…ýD.ÿ¯¥·ßÿî—0ëþÚÿý~×ÿÿÿÿð�¯ÿí®ÿÿÝ¬#÷F.ÅõÿoØ~úÿÇÿ„aÿÂ7ôýzýnÿÿû÷×þî—ýký7ÿßñ^äQïAª^‚úþ¿Ã®»ÿµÿ¯ý ½/ïú²7]/ÿr7ÿ÷Ž«ÿih/îúÝ,?ÿþý‘�¯¥þäQÒô«ÿ]ŠË·ÿëþÁR7Ö¿ò7__ÿ×KZÿÖÿõõoþß×¾ýxòÝ½ºþ¾¾ï¯ÿµ×ï¶ý/íû­oö»[_×êÒÿþïÂL5ëÿû_ÛÕ°—þ�ï_®ý-ýý~ÿ~ÒÏ×Ú”?ö·×ÿKkÚWý×_a¤Ú_h?¶é­ ý×ê+á üÞÅ}”?VÃIºÿÞ¶Ðw±xK¤í-º]´¾¶8­8�~*>!ýÜ2©ü5í$öé;~*8iÇzÅE¦ÆŸ¡	¨¨øá„Ói›aBq±V›lRqªxB“ÓŠMŠ½ŠMÓ¦‚
+7A¦­O¤i5bÂ‚tœR
+ŽÓŠ†t7ig’	„m=Ï “7Ð&©žIÇì-:ba„ÒiÎvlæ�¶{	M®•¤!°¸t
+0šç5¡m0˜W=¤Ój
+Ü&Â[
+"8¸a4�Ø&™¸!!}0¹ÉØk˜0ˆ<`˜B-<‡q�á«„@÷dä2ARDA‚ h
+¦±ÈCP×ÿééãÿä
+€Öäß lÇ!’@ðH xi¹¨!’nPä4òa°rœ¡ÈdlÛªÈA€18A©Cž²ppBÓ ©_òpÈû[-t/õþ¶	ÃÖÂF�ðîš	øg
+#¹
+1È†Çi›-¶”Y±X�L"˜ãAú_}EÕW_õÇõ\u\ƒw!Çò%�£˜rC©ðA�ò\Dr1É¹9
+7$åÁ	~AG„·7“²N[‘ŽBq(> eâ�äG! ×‘ŽFå¹	d$ƒáˆ¸Es91È;‘ Ž;>3¸¼m›À Íd~GÌ‚îhFÙˆØ‡#hÜlÌFÄ<—%Àƒ!+�„|�“p�“ÀƒÈÜ”Â$L	‚EâPQÂa0Šl9;>#i„!„…U4Á0�„/P˜A„Pá
+4!`™v	¢@xt˜B"Ó…A…O#pBÑ´(M4L!BÂ!†@7‚ª
+Ú¦ƒ°Tch~¹‰ª˜L!¡hÞýH6†P®…„]¸°ÁLM‚PŽaÌþ¨s
+š14cq¡hÝÐÃŒ0âÑ½Á:0ñêŒúMq£ó5FïM²�
+ìÛ¤g÷ki0œ3Ýmš(ìõI¯g¾øgÝž�®Û8ú»µ	°Â¸Ã9Rwã¥Ólò/çí0¶o¸g2>qœ´îêÛ8ñL'¦pÎM&Ñ†ÙÁÃ	ºaaœµNÍŒ&qºw¶Âãåéá={†s»OP½¦úè_ji‚×ë¿Õðž¾ÕÚ
+°½n…ªú¶½íz®ºzëþŸîºÿ×ß¯¿ÓO¶‡þþ¸cÿµÆþ×ZO\ÙiÕÿŽ:ë_þž¿«ß›þ´-
+ÿ_ïßßi=þ¹±ëÿãCúÿý¿ÿæüBÿýzÿèÞ_Skþÿ_þö+ÿÞ
+ÿÿP¿ÿë_üB_ÿÿ×ÜÀSžÿýØ}õø[ÿíÿ_èE?ÿÛÿý^¿ÿM÷óLþÝÿ^öÿ÷µÿÿî¿Vûúõý¿ÿ�í×÷í¥×§ÿ„o¿ÿ�ºUÿëëÿÿèßþ¿b¾½b¿Ãÿÿ¥ýÿÓ±ÿÿìWûþ¶—÷¯üW¿‘]÷Ø¯þ¿Ð_ÿúÂÿßö¿Ì;õÿÙþ¿õùõ…þ¿"�þ‹†@oÿÿ¤¿zü„—ë`‹§¯ð¿ïõÒþ×òþ\öIì�ÿÑp[/öÿ÷í¤¿_ÿ¼¸'Û[_õï^½úÿßþ×ý.½ypÈ¿î«¿þõÿëýö—×ÿýÞµñû„Ôí÷ëzýÅA…ÿŸÀ³®ßzÝ¬ÚKé|øO°jÃ_õZöéõí?¾ü/ÊÛÆ©Ý£<ŽaµÖá¥ÅÚõiÏ!¥é…Öf/Wb¯[”àQÛM´µû@ûmoP¶²CiñQV·É�
+6š±I§ñsûb•4);†ši»Zi…ˆziÅ4tÓÚM=§
+Æ†¤Ó’ Ði°š	§w j„8 ƒA¦bš	±I„Ð¤.ÓMîš
+0ƒ°…¦ƒi„0ƒ(ŠL0�°©¦ëi´ÒNßTÐ)&Îa'a6GHˆû
+sM[CQw.„ÓVšaÂèèú|ä˜DAÃÕí¦BÈâÈúÙË¡Ø0DÇa„Ô ÂG ŸEÆÄE„T"(¹¼�«�w xeÁÈ-‚Ä DD0B"(ÀÙ0Êpâ"¤HÅ"éª¡ ýéªj´ƒ
+šZk™¥,SÅ1±±A¦¶˜ Á0�‚,0ˆ� aâ"?þ@ª�4W x+90Ùd1‡ Û †@cÈð�àµd)”Èg´ò`Ód'<rdÈ)L�Â�+‚œÓ ÄídæfÚ Âd¼†?¿þi"Ü¿kßÚøa5àÂi´ª�‚û	…p©Ã0ª�‚aá4ôÂ¦ªt× x4¾Ô émi¢ƒHü'HƒkŽä§Ð_ô¾•ëë¥ëZé^½þ¶¿®µýtµ_ Î9‡_H†Ôƒw$þ@¸ÿD3G,r+ùŽw$8R
+Ïy\"¹‡%k¤A{ £ˆúò
+Ç*Í-ÉAð»"g“ƒáäì•‚i—a™À[ýB3„mžà.Ô�ˆà«.#r1á„¼“–êo7Ä ð_’p™Ç4ÚD°˜Ld§.š Á	 f²p|/¿äìøJ
+3`A‚ÂlF¦xJH3¦ƒ—MH�Á¼ZiøBÁmB
+4c¯~‚LÓAòêF�….Óð˜A‚´ÒaPœE5¤44üº„chxPBÂ§á	µÌoF*õÄÕm}êÓ¡C¡hÆþfžM#i¢:I>¶˜^²æôbhÞæ^b{6èÑè»~†®Ò.ÞŒT™ËQHÄÕtaöÕÕÃ4á‚x´b~Ïý¦’mœÖî³Mpƒn·þº79áUƒ8ÎT›ðÂpÿ	Å›;¾ÿ¸g5MÓÕ×»9‘ÝÃµ	×ðÎL>ªØfÊíÓÕ$ØfÆ¯û®¹±{†qœt¿a8w¯hw«]›ïn½ÃÿU¥õ^Ý+unûuêÝ
+ÿº¯´?°žûúöëZÝöÖ÷ãïuõÿªÿÿ¾>ÇÛ[¦ô1ýv—»ßx¾ÿÒ�a�ëßñÒ÷N+ûÿÿñö?Õ¯¤+õ´ýûF`ºþ�$b..×Siÿ6íÕ
+ÿÿûzðýºæÓ¯˜hW}AÿFÃGýÒ—ÃöÖm=ù€ÇoÇÿß›÷ýßŠ°×mw_ ½­‚ýWó³ÿ¬Ø{þÞúˆ/iaõëýï]‡¿[¿Þ½,#ÿZ¡ý/oúØèÅØªFÖ«ÿúýºöý´½‡£cÑ‡ÿß¿õÒ¼7«ûKØð—ÿþD¿ß²7Ã~Ç¶ßYÒÿ.îÿÿÿü7ñûzùtµ¯ÿþFÿûE
+ÿ°úò7KéRÿþím�ò1Ã÷[Ú¯×Oÿý‘»küVFù'í{¶©×ÿý®µûk‘ŽþÖÝý¯ÿ_ÿúõôÕ¯mûíõÃ¯ßUÿþÒÿÞ×¿ÿmºþÿíz×öÒn¯Ú°–›ÿÛ®Åi”>×aùÇ×¦IµÿŠúó�í·Üvƒé?û(}}†ÂKôÃIÊØv¼V�Û] Öì§õØí¦5ý²�¥aÝmDiþ¾ÇýÅA‚ZwA«¿�¤áÚ[LRo±Õ�?N(1Iêìh8 œmk
+ŠV¢¼ ØícÕ„Á‚KÃv®Ib´í°°é¤ÚN}$N‚h4Õ Å Ó	»I¡IÖh60›SÉé4é4M6šˆiõÕµè5$ižH ÆÙ½&› ÓðÐba[	8¤úA Ø„}™¹'„	„ìNÔi¦Â(� Â!Çkjƒ0Â¶GÁ\mœÒ!„E0S	í,º´D4@°«vGÐ˜MdDCC8Â ¥J"D
+�@ðH!�	
+A‡ÈA]ÄGKT—GR§ä
+Cþ…$–•5°šan#�ÿ�)qÈ6ÆAl`�áG Ù6Ž@ð.9°H!«3C L4Èd­	x*S�ÔAÁDrnxÈ-†U	x&�gP<'ÌÃ 3IÌÌÈiê@ð ÿjpaB¾”(3È6šiôqØl4ÂÂ8VaBÃ	„áaBi„ÃaÐOAÐNÍ“i÷ÞŸv©áZO·×ZO· »­_½&Ö’÷ÂM¥¯¾–Úé¥×·ßO]?é]÷¢ÈwÈïÒ Om©Ç"97!/"ºD3Á8óñ°—‘Á91ð‘ì„sDríH\! †8�ÈY‘m"ayä0åÐ¿#ƒ^�@ÉYVOˆ½Ú‚ dp|"ñ0�äÃgFÃa9“òPkÒ!�#ƒÙ|7H…àA„Á0Š
+�è4×…&>‚† oA0�’µDƒ„úŸ�ÈÚÃ^�M
+0žé#i„Â‰Fö–Þ¯hÚ¦½$Âsº	£h44oj{‡UòîŒt8¤oj©¶”ÂhÚhÍ4n£}ÃÝôƒ¼ èÃÌÓÒF
+èÄÑ¹íÔ&æ™ª0èÅ ÞB;¼0IÃÐy‰ñHÃz1»iK¶‚pÎM&0èÛyŽîÝ][g§¤ta¹»A´ƒÓ	ôÚ‘(üV÷øa<{lá&÷ãVÒl0›XI:^Œïþ¸g.­†nTõ±«i7]iuõñ_}m}lØÕÕ´—NúÒ}¯ßÚî½zúö£ú÷KßkçýÚêîºÚë_¯÷ÛÃ^Ÿ¶/ÓÞÝ!ûQk×Ú¿ì-æÛøb+½þ†Òô»ÿÿïôK:†#×{|P…t0—¿®¹÷ùÃb¿6šý
+õß­z·úàß°Âë6žüØ/Þl&ÿýlªm~öÂú7µõSoýWYéÕtø`ºì?æ`-ý¿üôÿß¦#‹û}¾ÿ÷Uÿ¿ÿØaoù€sjûÿÛ}ÿoá†Œ}÷ÿF×ÿÝ/õû÷AWíô¸Fïÿ÷^õÿÿ¶¿îþÐ_ß«Pžÿü6Ûÿ/ÿâ¿Úÿÿ
+¥þßú_ï^Å}âÿÿ†Ð_öÿ‘GK»ÖÝ¯ñëÿËëý»®ÈÞ¾ÁZù„íÐßþ¶aÞ¿Ûµò7¯Û$=ÿ.�?÷ÿöaßý[ºÝW¬�ú¥EÃûVýkÕ__ØoþµéZúC¿ý?owû
+ëo_ì.¾�ÞÚ¿úÝ[ÿ—§O”:Úßz·½_y7×[ïòo·¯%ßëçÄ®“}©w®…ö~]ì6þ)´ØÛ¥àîúa­©v˜JÂzÚÓ¶ilq±N—Ê
+§xa…ˆiÚLCºˆiªiÃa¥lvi±MërCÛVÎáX†©‚QÅ'wÃŠ¶¢µiŠ¾Pl+ÃÕ
+‹‡Q§	 ØÓj•¦ÂA0œ6-Šbš´*}b©4ÖlPM¦)6˜¤NÝŠb!O%„)”i›’„ÃI´Ï% ØM&¸¦ƒ™ä¸Læ�¦sI…{¶m3rA´Ä'wa4få¤Â‚iœ×m„pNÂžÐ4j†^†mÓL&Ø)Í\D_›C	„Âñ!tÃ8�ƒL&È)[	¦0œD0„4"!„B(¹0ËÁˆ¹Ã6Èd‚»Š‘�à^D\�˜mÄR"@ˆˆ†„DGPqv….«WTºImBKéRIªILô©paBÓ’LT([Z!„!‚�˜j¸ãÿ�;�$dÀ­Èø�$Ì�á”ä2ˆ §Bn@ðÞ.ä¸!�	A„�@ðÌ‚†ðC@ð1x)²°Aà"@¦ÃN	�¶ ÁA;L*ª9S]p˜P�UUUà¡ÿ¯¢á_ô¸P�…|Ž­{Â
+‡všvœ+aÃ†ˆ£‡¸‡�l8í‡“{�<GI¿ë„ßÿ Ÿ¯A?ÿúÿ_«}®—º¿úMÿý±ü�XôA¶†Ý�Î>C@äA!",ÛÈ9Ü”dlŽÝ2
+®A|!m|¼$9åÁ'óÝ'åŽBÂ’ìÑ™È5y²(ä‡3æ‚|Fä� ‡ç²/\ÐBŽ¤|_²ì dì«5 eÁ8>pÁ"v]”9n�eÙ›fóƒ§çÂ?#ƒáo>†à˜BÁP3Ù;+�Ä~a›Í�Á0˜L ì¬‹P�¥àƒ�= ÍÆÄÐy|R0ƒ°˜#C£ôÓ
+dæ?Zv�ABaM0ƒÐÁ
+èÚj¤b\Z`…„£iP�í
+„!i§14m= Bþ„-bî�_æÓY‰Ç÷14bð¸ÚjcªM<Z7°‡nŒ?	FÃ¡i:74nì$©¤ƒúª[Îna·˜˜gVôÍ§æ^°ƒ³ùþŒ6º	ôúAÃ=ŸÜòs—Kç&Ñ‡ùË9\4®¯ œ#ÎõOI|å§÷Fë6_H3‘ëìàî3ŒåI¿¦ôik„áÃ8Ý%­:ìã¯CO ˜LÛýì&–ï» ƒ6o¥Âa<'­$¾ƒÖ“×]~ýzLØëõuIzý„õuö‚¦�-¯ê¼©Öµ¥6�{ÿµ¯]mm]{®•o®ûûëJ¾—Ä-þº®›Ç«¯Ú]¨ªíÒº×KzÖßÅb¿h*ë¿Æ+ŒBÿwÿK÷]¯Šh/ÿóá£B…Wÿïú_â«…þüB¨×÷ÃªüBô+…¯Ä+ïû£€ßþºïõKø/Bÿÿþ`ÿÿÿÿ_pµ…ÿð¿ûjÃ×üÂáoð�õÿøA_Û§­^¼+ápŽ-þ{¯ÿ„nÿßÿþ´—„m|#ÿÂ7{ÿ¦ýFÿ„mp�Ûþû®¸A?{ºþ’êŒ:áú	ÿÂêÿþE.íy„ÿÿú_Ð_ ¿ÿKÈ£Ì'û¨o¤’ôáõÌÒßUþÈÞ—#y´ø([¿ëúþ‚~–a?ÒÝýkÈÞc¾¿ö¿¥ª]ÿÿõºíÿõô¿¯Kïõÿß_öô`À?ûT’Þ¿×ý¿ë_ÿµûKoÕ¿ÿ¯°¿KÿÿÿÚ[þä�¾T¿ý~ý¿íWÿá„‰¿Ã^ÿÕ~,$aõµí~òo·þ�¿ö.-B#íI¾ß½ÿý÷HÃÿ¶� Ïî¤cØAÆ\pÿ¯¸Ò0ÿh?xwa<l?âÛ(}uc
+ÃA±EÞß(2‚ÿ³ø¥O´Þ�âkköOƒ_Øî#Š[¿Vëþìò¶“îã»þÂ`±´š¶�ýÖÏb—N>â“b­6ý:M8×ö®)­[»aé¦›Â¥M6;V"!Öœ4Õ9ô“AÒ
+5NOiÝá4Âi§i¦„>˜KQL,&„4âöy&´Zañ¸`ƒ¡› Ó¥žÖšÂiÏaZÒÂ
+	¦sMh4.ïBÓ¶Öœæ“A³Èßg4÷
+6^Ò¦…°šfäÂ¤â÷c´"Ñ!â8Ø�9 Ï ™†˜O¦Îj˜!
+5VËŠªˆÑÌ0µg4"," §}‘ÁiPdpÕ	¦\-."â¤	!„@ð^	""£äÀ®[HDC‚ØjÁÔ� náòûH�°�bÚ�
+ •UvÒÛ	+†•­6Øa@Ì/°`”q¨7ìU2:ƒ	¦",CAŸ‚¾l
+€Q 3šÇÿÿÿÿÿÿÿÿü�Ô4Ç ÍÛä`^@�òðANð�íð©‚áB¦¡r`Ò>�ý§}× ¶8L�¨2¹Á¤w¡qwr
+ŽïÚ�<5C<�C$¬†k�]È`R
+à¸"Ap
+ûþ»û�nä5ž=B„×Õ?ÈÿÿêëÌ#Ÿ!��}MÚÚÈj»�,óñ7<<œAÈ4á>7²7;‚2AP^°SA¨EÂ_žŽGÄø�È7r æƒx*ÉqìØh*
+t@‹+	pDŒä`Œ
+yM†â,ŒpRóµÖšeÔU]ß
+bøú¦°¡,ç°˜BÂ!iá&ƒ
+¡,X j˜PA‚Â�èD=!§að¡0Dã§®Aág*‚Ö·õ÷ÇÝtH¶Œy�¡rðÑ´Öba‚æT<9ŒÒÚ£š1Q´z1Cº:'Ïyvc7&©ØDê‚—¨Þì*7¾]<«
+„XA„qÈ,9Ü‹‡ QdÜð™;!�ÈfŽGh<îDpˆê¤ð‹dà˜ëž
+f‚o’àƒ² •Î>ÍÔ�&Ù¸òjÌfò>m„3iSìÝI¹Ž�Ý›©3œNbïZOAÙÊÍÚ½Ù½{Mû[MSg¾õ³uzÿ‹NÍçDÑŒ?™³qà¦Ñƒ8Ä0˜GÄ4gãdq°…¦² Nâ@Â<Ó\A›‰ô^˜\)¬öU’þ-Ó]{ïÂâñ¯¡[ñŽ®Ÿÿ¶¡øc¥mmqûƒO¾…¦Ýª½ECÛ÷ôžÐNá˜4éa…Ú£
+… íÚ¦¨5E÷°‘…´#EæÁhÂ…	¼�4cTÒ0˜NÝþaU&Âå÷ˆ_K^·ÿ¿÷Q_éý†>Ò·¿«âÿÿú±_ÜBý³�µïó}éÛ˜ìß«+6­"õ·³sðèÇg~b¤Ü»ËÏWÙ‹A¤›ja÷}îÎnc¼Ý_ÿýs/ÿù€ô¿ß¿¬4`_ÿz0ª×˜=¥ßl0_\.¿m”?ˆZ‚A‡ë{y»]:TðH{¡×ôïLÃqîººK~ýnÁ{þ®Ó^ÕUÇ£ÿûÿWÕõÑ�ÿÃH0ü+oÿÿîèÇ¯î×Zì6Œ­üZ¼_…]ö4î¿U·ðÆ\O°b˜ºßöÿö–½ÿÿëë¤ÿuýÿ¯Ù!Òïõbƒú1CÚÿõN�ý/üužB¿˜PDy¤ý^—«[~Œ{ßßa¾ÿ0#×˜?öÂ_×ÿ^ëO¥z÷{ÿÿþßÌ'ýïÿÁþÚí×º¥¿ú0!ÿÎïkßúÚë¥ÿNÿ·o­ü¸éíú^H|Ûôa÷öïöÑ�ÿúýÿûþ½þéWþ¿jÿðÂÿ]ëÃCÓûÕ?Ö/“§õ÷pÂÿÿ±ïß}íwÛë”>•éÿºþ´k¤ÿe¿þÞ�ü¥ÿ`ˆÿÞ¿û¨U½W÷ÿüUûe½Ä]ÅÚW{kŸ4ÄDZ§'ßiZLCm{^*-biÂaÕ7Z·
+b-a¦Äù‡ý{ÿîßZún¾»,pEí…þßÿ†¿ÿév¨ÿõk÷ßË�½8·b“MZMÅÁ¨h7”b-ˆ¨¦N“NÅ Ó‹i‹‹CzÞ)4"8¶*µo«XjÄ8¨wÿý­¬k®ÇñV±ñkìT?ºaÝÕÅLÆ»¤á¬^¬CýÖ)Ždv]¦oMD[4ÐjØC0™½3@Pc>�i›Â˜LÆQˆa3ŽÍæ6 Âiª
+AÙlÃ.®ÌKM6Â§QtÖB.**!Å4œRui�¶¯ôÓiÐ¶*6=«Ðlj­4Øˆ¹ t…´AlœŽ‚ â?lBb;1&š#™´ªªa0Uµ"Õ3i#¨�0„4i1—Ü-«Ë„D‡f2;ØˆihqÁˆd±‚˜�Ä“ä·$ã
+qÿUâ¿â�+P×i­TPééƒ
+šÈc_ä�¸ä‡ ¶Ï�9�Cd¯i�Ù
+¨ ¢d`…€¤l�ážd2 ®ä#�È
+QÈ
+C�<3Ž@ðm‚
+ƒ�Ûâ‡#rn@»…
+˜_\*ªáp¶C˜M2†{!\(M°·îµ¨a#÷ x2ÿúúº¥Ó½9î/¨vœ†S¸«î9�jwiÝÜ‚�åÙ†]\|]_ñ×ÿwWÿß__ò�C¯ú¿øãyì‚9·<‚ »ÎäGòà¾RnJÈjÙX_—„["ÞaóaVƒÎäW'1ÅÁXMÏœîNAÈqÎ=•a•H îg/âpVw'„Î8Aš…ÌØK‰Ùèø�ü«$9çr„²xh4îl"Á\gÃYœ±ÎäàŒrÇ!Œ'…ÁVƒ>d+˜rÜ—Y	f‚xLrc™È°TœCÙPk"Þw"�—Ä?—™Ü‰Ñà–'M#°Û… â ædaÂ¡A�üYâÂa8‡¡iÄ0¨aCXA„¸¸ˆ`ƒG!aS\Z¦¨0�*ax°P‰Ð°@Âh;°BÓ2°×að¡0…š¤Ð½:CA¦…Ý¦XC´-0œCì&œCñiª]UB0š£m;èÄc7Ñ´ÓMy‰£˜ÝîÂµF¯z6ƒMvnÌ':&Œ_F:]Z1´c£	§ŒMüßtb·0¨ÇF;»$*1ÝäzÎ+µèÆîQÑyì)�Üs·tcö�¤ŒNy
+�ú/ZÞôc°¹½£F*0šAÝ&o9¹ÆÏ	ÑÏ1mðûT�Û†aÃ0i÷Kœ]›m©ºé5ìÜÙÎÍêƒÌy{7^ni<öøftœ0E<Æn³m=:AÙÎéúïjb¤étþÌ5¥oH[Né;0iÙŠÍé¸Ù‹þÍæýsþï7iý¦b¯1_Bà©æ'·]=éi7_i­ÿéþaßïúzva¿ÿ÷„ÿõ½»]tø¥ujÂ¯Þ6´¿ÝL1m=EÛé×ÄWöëûÝ
+�{W†´–·ýoë×úZªlWëlwüBµ¾ûýW{¤ÿè5úßûvÅvÿa�¨ˆ_ï[´?ÿü1]ë÷Ç÷¯ñ¾ÃaKï†1ÓûïÖ+ÿˆ\[æ}×ï¿ó®ƒÿ…ÿ‡ïá}4¯˜ûÿýì¸/æÒ
+í¯ï¯à¿ýþü*ÿÿí¯öþ¿ëË�û~#ß09�Ë‰þ½/ÿ×ÿõÿÿûí_ðŒ½‡ë¤Œÿÿÿú×á|Wÿë£ÿ
+þ�¯ÿèÇ¿ÿý´bûÒ®…ý{ÿF/íÿ^ßUÚÿtÅ^Œ|":`ˆÿÂ1v+Gûÿÿaÿ¥ÿ×õ‡ýŠKô›¯ü�ÿ_ÿîH·Ú¿_ªÒ×ü7öHtõþ—‚#ÿÿðÚ_¯·¤ø"ë¿Wÿþß’ò1Ã}þ¿÷Òí]oÿ&ý¯×õÿºþ—ÿÞwzÿÿþÿ÷ÿÚße¹Nú.}w·û×çwýRõºÞ•ÿÿÿGª¿õéz_þMÿ_\ûKêÔ¡ß]o´ÿ]_ãŠ×ÖÒ¨¥ßÛ^ÿŠý4ëø‡u®þ¨cÄ4ûº×Ø«µéë&÷ñ_a+«Fmÿ¿¤¾º÷ÞÚÿ_ß«a_ÿ{Aë÷×ßæ�»_ô÷ñßl0•¼4«ƒ*‡»ÓU“þ"šˆ¸†TÝ¤.“NÒ×‹iqO´øâ-Ux‡H^ÚÚXN“b£µƒPš
+7b_°Ð»I[Iv#×[á¬T_Å+iD8®Ï	ÚqÚ§ÇiZ[ka¤ÓN5b»B8i'~ÔWìvµQ|EÄ[4ÂÍ£	¬0�ãb‘i«j“B)˜Â„Í£¤"Í¥Å1I²>ƒ[L&)ª¨Úa5#ècŠA±LT¡
+N.)¤Úâ’MŠiÂ¡q³ÉEE&ÅJ5ÅÒ
+šŠˆÂuIµÒM5Œ¹åäB""T@ðÍr„±€j`Šq `¤tˆ¸iÄDCEp7Z&oMIÃ¦�¦q*aLÄšn„2ùÄÊñUM3zr[/Áá®`@ˆ7üeð„0©…°�„x-\DEDqEÇ!’‘Áˆƒ@ðÙá�‚˜`@ð"EH£^�K´¢±Ó—ñªqM/úK{
+“ Âµ°©Òa<
+`„4)¦°ÓüDQ°È(¸dÉ
+�§
+Ž>@šo�[Ç yÁÃ)Èh‚v@ðô!²È
+C®l&’ªyØä2’w!°r–9(!¶9²
+�Aª„ß xQéW——�<2‡ð ƒ xfØ(PU!�;÷QßQqPº¦¾¯³“ÿ´‡Ý<]®Û�]ÝÈj»´}ûÈmøL˜äGGRVHs9‘\‚¬ÂXIÊsg"ƒ3šxï‹ï¿¿ŽC$üÐU—g‚nw'W"òeY‚ø�’ÌŸ�²	„ð�dK55g„b8Rey¬«%2îSP!—Ç™–XA„~~ Ž\&ša‹¿?4ýkëÿ¡hXC0A„cÆ· ÓÖo¸M…«¦†š/ÖÐ°©†	l#j¸TG›rýÚ$(M3Â1Ñ�Ú1´HX\çFýÂ!®9nh#²1È2á•r?Rì«6Ù83‘�›cÇ3‚.¤3`«"Ì�¦Jr°ÜlO;‘Éñ¸¸%W þN
+½Ûmº1¹„û››º/QŽŒ}mÚ©zŒYx¾�›ìÃR÷F6®†b³vbH¼ðìÅ„è»lCËÔ9º®­³i;ö“i;0f'M³jÛ»OP¢›%äøö	„, Â'3èüpDj�yèZa@ÂÜNk¦XC ˜lZ„Ó0±~ƒˆaÕ=0ƒwaú˜yË0iéÒj»íêé¯ÞÒK«ÿi¾Ø-kßÐ¿ïxèwM­±§ mö¼vý× kþ÷ºi;NûÕ2º‘Š¿/IÚA¦T ‘�Ú½Z1æ6Ò6š0»M0µŠF+M#
+Œp¨ÅoúßõÇë±C†=wø«Ãÿ´†¾¿ÏzúëÃ�<5øbûÿþø…þµ›¯SF6ŒWvshÞÙÍÌVšæãy °ÌDŠÍÆêîÕ#\-ÙºŒ;¸fúN–Ô'IæziÚ1:öé&éÚöaõý×±_ßaÌwªKì?÷Âóý_ù�Cþ¾`Kö½†—ÿÿáÛZwI'IªÝÚv�­-×z}›w�ý°Ì*ý/éµw½šO½¥×|Þßÿ½ÚÿÞ÷ÿpŒ/ëMíý1ûë£ôìWïß^ßáúÛ~°ˆëÿú/¶+»ûÚV¿Ä.øÝ-v¿M/ûv’üP‚íÿïX¯ûþñÐ6!](áŽ ¿×®¿H.Á^ì"<òC†ÿœIÂíÿúT¸Dtï^øXDpµÿl„G�™üîíøDz¾ÚÝÖºþ‹ƒ'}|qÕp¿¿¯_â—˜	_¾Âÿÿø%Ì	þëê`Ûz6áUÿõ]´½ýíJû¦žÑ}Ð"=ƒ×ý=µ¿´ë@¬%ßÚvÞ4ÿºÓ{ÓŠu]&×Õ]Q˜mûK§wßþÒcÿð�¯ýÇ^š7ëÿÿF××ý~ÿF+L>cþÅÚW]Õ â¯ˆ½Š½6?ŽÖê“µµˆ¸¦4â/™±„±qJ�Rwká:b®8î,ö„\>˜ßÖúX_ñ°¿ý/ü�ìòW]×ÿÿz	ýb¿Éé}’>—ÿlloÔVÕ4Âb�Úˆˆ¶Ú­›B6¸¶šAÆÂbi6) ÓK	¤Ü4?­+L›ýëý“v¥Âwþ¿í:ÿ›M.ûÿKÿ´]õ×÷Î;þC$
+Ç›AACµ6‚¼Gˆé5B"! ÓB,ŽÈìDF_°„DBÐˆˆ0�‘Ù°×0
+pÒ.OÞûOÕjÕ{IÐ?µõïâºõwµ×¾ýµÓÛ[ô»û^´PÂÛÝ ÿ"bÁ'!’�+ÃJ›Ù¦+MµˆÕ�EN-{BÓM¦�´µ‡ìvœqqpâ˜‡_±„8ÝŠ¾â-?ÿŠŠv)ªŽ)ˆuQiºØˆÚ­�4í‹mŠ„õµ†è] º¨¥fó_|R´Èè$˜M˜(L»#ÆäÙs8Ìkdàam0»eÙxŽI›Jq)„eàƒ.Ó	„A„�am ÂÈæ¨B#…M¤ÃB8ˆaÀ)*
+É
+¸ x5¹Á®G°`„TWOÁÕ,�È
+û ­ÈR„(õJ“¥á'M+Mb,!�4riÈX yÁÂÁ×!¯¬�àÛ¹
+k½US!™¢ªß[ùÈv·_ôCIÜrbîA­Ç—�ßw!Gý~…×Õr›�ÈaÈ£�ÈîC GÓÈ4¹nCŽaÉ�©p{4ŒrÈ$ƒ©
+AÉâçr(ä « œA‡Ô…´óA�l²|l!`ˆäG!²‡sAà–<$Up™
+K ±ÅE°ƒ§
+–Èd‚©˜AåY
+ç€š¬X ò$d±
+;3O6°ƒ2�4�3Ù†š!„‹Cá|…„tÍáæ„H’qaBñ´A„0�„ Ê³ÙÆ!aÕt#	¦šªìÞ¦5´¨wBô-5j1µéOF<¾7‚*µ—ÛF
+m�«ÞŸA…Ëí4ÑzÉê1Ñ…Â»¯1È‡ðÓèÆf¼Çw÷§aMùåA^ìÞGF>Î*1³Á­ô�›:
+ŸÛJmóIç•êíLT›g3ŠŒm›»¿1ö™†¾`éZ1ém˜m'¦÷g³f'´¤‡|Q†a˜\4�w
+d6;ûÿÖÂõ­Æ¾ûÿmE[ZO=;ÛÆ/øÚ„Þõ¥_^ÿ_hhlÃ¿U�Õ¯a~ëê;[¾qIwôÒý÷A¿Šûqí¦–úPÇôo÷â~`ëø¯â¿¶¿ÿIu¡Çÿ÷× xe�Ž+ëùÀ�×þCþú0'ÿöô?á}$¿˜|¯¬¿ÿ˜0'ü7Wÿÿ¤AS‰ú·.äà‹	�L#‚¬ƒqÌä‡! yì—sÁrPFæ�îaÈ�AG&JÈ�¤09¬¾.[#ÂVCghyàˆä6AXOËÂ7<ŽB¸ ÈçÄVýë�ò÷ëØŠêíÿÿÑ�«¯_ú1ÿïF?í×ÿÿmóÿþÇj††˜A„à Â†aqi„,@ÂïˆaœC0A ÍÍ4, Ó	§ÜXA„,*a`�„
+5ç^»É¿ëý¸"?›ÿS	„GŸtØ"ëú^ö™1ÖöÉ�ú_ÿ××ù!ìÿ‚#Ûð˜"ëÿðH½—¬ç‹Xæ'¡a4^|ÇOFÓF&Í˜)…ãÚF=Ì*1ÑŽŒ6€Î§èÄîÒF&Œ]ßÿô­}~­µß·ßµõÿíC¿µÿ¿µõÿ¢Oûjë÷Knõhºúýú	+WiÙÌå˜á›©;76s=æ&—7R°ÍÞšg‘ïÍî]¿wA6ŒM›¯I6ÍÔ›K¯½æê10ÍÍ›4Û8¨ÃhÅô¾«`ôýŠ‹X‡éÇ”;M6’i•~x¸âµø�bšcâ—ô!¤Çûƒtâø¨ý�M(ãb¢Õ=5šhìw¦ºnŸ½é…×°«~·MØM^“ªÇö»îëqÛVêû×]oðƒï¼Fûºqz}EÅ¡µ±¦™Aé†šB!¡i´Ô[I¢
+n#kâÚi4é8Új˜½¿aûø¯ÿýÆ£âû¯ã_�!ûëöÆÆ½~=ÿõáŠ(KÄv_¬l Èáf3ÚhD4ÕN%J Ây:Ða2ùs´ÈDÆd~x�Ì'îˆí4×l¸g4
+3F_hÀGëà¾¯ÿ¯ëû«ß›J`?—î”ÀO0 pûëåòá³ªÛÝmÌ	òÐS�ˆ+»�È8$øoÿ_þ¦øF5ûëÐþ·ñÿA°Ý×~£þëÞÁ÷új¿‘ŽßþŒ_ÿÿ°D¤ßá¿ÿì�ÿ„GZüé’¶ÿýÈÇ÷Òÿa}pI(«PD{ÿ¥ý¥ÿà‹ªÿþ�ÿ$î¾Úàˆÿ{_uG ˆíÿ_kªÿ^wvÑuôÓQ¦TßÿëÿÿoŠõ_Õÿ3ÿk*­«k~Ã	}®÷¶—kÖßÿ¼m®û@ÂŠ¾
+uì ì·ZÿéÛ·ßêš~ÅE{‚#öiÛé�6ñQí¥i6•ÓL^"ÂŽ¢,'h64-0š}EÄ4Ó�4ÓÂh]�h:v5Ú‹¨¨ÚAÄCjlTS	¬YÂj6qZI„ñ³{ô…´øi„B¾aU´D0á®�‚Èã#É©Œ!aB
+P†G‚ÈF9ÌqÂ ¶,ÌØfDGõòÀaÐa<†H)Y°w!•äœ˜ä\�á¥yÃZêð™(	�tá4ÓL+ˆó
+ºûHÂãáÁé�Þb0Ë«´AM÷"»ø«ïXî:CúöB¹Ä²äG;”åÁWó¹Ì"9àŽ	Y:�Òs¹NqÉÙœr=®x%d	Á!ÌänD—•Ä$ØF¬ñ™æÂ<ðd?‚¬ž²ns„¼üCñ<&á°ƒB°œÇ‹A‘( «ÍXA ÎB$gB"!`�„AÅ¦˜A„, ÁjC$(ä2A‘÷A¡pã—MSZ„EMSM0‡/Ñ|$Ñ„»E÷i¡xTÑ�£œJ� ŒAèÂm<ßEæŒy|Z/Ñ„Â(¯/H9X °óÀÜØ`
+�ìÀ†@ýöbHÄç;i6ŒTceqP‹Ôbï»	KÔb£ŸÌ=¬Ú¢óI¾b«³}voÓ†bÿ³nÓ´‹ÆÑ†Ø"‡IØL*ÓOifót›*Ë‡ï
+A¢û#:…[~ÁnÔÜùŠ‡ñ°»z²¬¸èP¿IØ."ƒZUütýÓ{¥ÆÕ×º¡õ½ßíÇc]¾ïjÆ×Òþ‚6¿ÿ××Pì1þÅ]¨aú¡Ûô`qöÿF}ïþú0Ô-´¯_þ\\ORé‡Ã xww¦NB»¸ÓÑwýoÿæ€Ñ�;ö0¼À?ÿù�ë÷ëÿ×Ñ…ý¾`]uïýmþÃýðß¸¤?é¯û_¿ì~ßáÒþÿôÂ#¯þù!ÿÿýÒØ¬":÷ýÙ1ÃwxÂ#Ïuÿ_ÿW_×Û-Áæ�ðÇå»¥ù7pµÓhº¯a4ým¯½¾Á/ÿ]_ÝíHƒ¾�ðDy•«çvÈmx.�µ�°OˆH!‡ÉA+"Í7 Ñ†²-çr‚\MÎå¹c8ä.‡‚c™ÈG!—†‚.s:’�ÿÿâ­µóŽÝ-½§Ã	Z.ŸÜT}…¯ãî×ýx‚*Õ×wÿÓŽøý_­º»p„4Â
+4#ÂÕBÖeÌðÂ
+PyV\ËþÂ'Ä0ƒ!ýB˜A„ÁMC2æx,è4Âa§¶—ö+û˜B¾åö¼lE±QN¸O¨eLúè[I«ij¼[Qw
+Ùü4ØÓb“ˆ²¾6•iZ¦†±A^ÓUF;Zhs5F:1ê-4Ãº1ôôcq§§	Û9¤Âha
+ÚnºÄ$#b4ÃQM"6):·v)7
+4í8Oib�ˆ�…8šo_´›§'ÐjHFÅ"è&¢§£sF&ÂœTa†ŒPÞîÒ19¢†	é´œ0§iÚœÜÅF-6ÍäzŒTb£$�éæ'³lÜÒpÍÖÅÄ5/‘Ù1Ÿ ˆhr¨Õˆ†0ƒXˆˆ`ƒ/‘ÚÄD4Aüü""ÂÃB"!„Ev^Aj	ÄD5_ôþ“Öî•lÙ}
+~³¾·¯ýÿÛãb™†ý›+ÓÅ×_�%d[q¼}jÿÃÐÿú¯ú~ÿv–ßø¸b“û_ÿpÇG×¬¸Nÿû
+Ò…ÿ0&ÿ×ý/°Æ`"¹ƒ
+ÿ˜ôp_üÀOL=ÿ×ÿoæ/ÿÿþ¿Â·õˆoþ÷…ÿÿ·×ÿÿøn?ÿŽŸÿ±^�ðÞ�ý»ü�ÿÿþHÃì/ì›ÿÿ™Ý«&ÿö»ëÿõÕm¶¿’pDyÿéêäŸÿïòÝ¼¿÷ï÷ÛÿØa-úoFmrÞÂßiXá…F7Ô?ÿa„¾÷ûãaßuéÞÔWülp¶”A¢w[AïÛí¥±I?Å}ÚÆ¼;ÏzmE¦Ú±â½4ÓM««	§k	†…±ÃÚ	«QV©”;ª)¤ÓB-¤!¼W£Ùå&cÅ5[A¤ÓA°A ÓHE±LÆ£¨ ÂÚÃ“a;ÓI¢@h	ë¬0„DE„Ìaˆa<lEpÚB""ÐˆŒÀ8D�˜i9× yÙ‡ x49�ÞÈÁ« fÆ#ˆé¦¡; xiÂªÚ^­?«¨"=�raÜ8»Dã‹�Vw­0“ÿuÿ\^¹±ü†ÐæuÔ†“�òã\ÎEq†H2a<'eA¬·3‘¹
+Æàƒ5‘ù"Ž3Á «'22fÏç6A')ÉÀBËâT? ÌäpFç²(JÍg²øÙ�Ñea,E>`Îð¤3ñvU’ôXAá4B,!h3G¦è0¨3â¨BÓ	ÚiñÂvš¬ajƒm´/BÓ”-„Âô�aXZ0Ÿ1´b½¢ø³Â1¹ŽÂEç/]ÑŠá›èÞ¦<Ç˜ò÷F.Œm›ÜÇ˜ÔÆÙ‡F7ÎT^ï(û9Ñy³4Ô¼à´;9¹wy‰¤Þ“JÛ7vo¥6­í~ž®îÛõÕ~µô™‰°Tõö“_ºN‰µh_³û\{ô®ÔV›ZÿÇã_îÄu°ÄWˆ¯«þ¿¸ÅoK{ŠûKß}~×´Ÿëö½ô+]}ÿô×PÂóþÃýðþÿßÂ·¿[ÿÌ	ñüÀ–ÿÞÂÿÿ. dÿýÏÃh½ÿöÿµF´cÿÿè¼£Eÿÿÿô…ëý
+Wíÿ÷ëýÔºû¥úþþÅ%õ^Mïÿévÿÿø":úOþ�Ù¿×0šUÿþMûN¿ûŽ¶S±kÚjïè¸Zª}òûëë_EÅ_õ¿Ú_ûkôê¿ßþ�øilÏkõjØK^aÑ>ÖÐôþ|3¸n“ÊšÞ»kñgp}®Ÿ±¶×OŠ‡½ö­ÅßwjÇÓ©§¥Š“£‰1qh66:¤.4â¢»Ø¶);Bê"â¡~ÖÅZlm!ma¦¢")¤Èù˜Âh4ÔÎ# ˆ¼S‚½	˜Ðjy8VÔØ¦ ­˜Ó/°ÒA˜Ða3…fÐJÌ">�„Ð´Ò.¦"ý„",‚Ø(€Á<	Ü“�<2 F„QqÈÁPÖ¢¿­|]cö)m­0ÂM `±ÿÈ8 x4¹‡!’9
+¸ xe¾Al68Lƒeš�‹!²,†µ�<4à×	£	ÿª^ž@ðqß|4î>A´w x=aÑŽ6;ã‹ºê+Š_þŸ~@ð'tÈg!’
+ül&ær/�1d=—9œã’‚á‘ù°žùäs9¸‰ƒÁ+ÏKsAXNiç‚VA½žÉa<&åP»#˜áãa0ÈK$9œŠ9¬«<Í„à«.‚8#ô„XBRøÔPš3y‚Jšj{Ð…ª¡ û=‚ªw‹g¸Âi„,&	•mRz!fº]´"Ð`­k²�ÌiNHÜ¼ùyªp�èÇF?hÂ
+^½£wF:³}Ó„cnìÞåê19š
+aUf‘‰†1‹vž‘ŠÎyÍ£œ›—¼Û[6éi6ÍëCfì10ó/t�Ù¾“ÛìÅKý'zz®bï½:¼a‚ªmÙ»þýMæ-«°I[[Su+*=íúu«§Þ¿êž·üSþ¿†?íÿïüøõêÓûi½·ÿþ?¾ûúõírâuúý	ÿoW¡þ¿Ý}ÑÅïô`Nÿ÷æÞÒÿÿá?[~Œ/úÿ¯þ·ú1ÿîé½Öÿ¿îÒþõÿë×Ç_�ï×ÿ¿0/½¿KÿÿÛÿúý/ÿc�¿ÿÿö?ßÿ_F?ûV—üWýÿ[ú_Þßþ�öý¾öÁ_ÿ¬5þLÿô`öL~þÑ`ˆ÷Kïðÿ`ˆÿºÿðE×¼}ÚÝzþ?ëÿŠµ¿ê\Gÿ/÷ú¦SÞ¶OØá…[_®Wí…Ö¯u¿Ka¥|=6µb-bk¦i;µ»I4ø¶!öš'CBÓb–".#‹c¸¨ˆºb“b!§±K»¡qI§wÇIÇÜ[QHYXÓRlapÂfÒb"ö¢Ú¶iÓnmi™öš¹½!Õ4ƒic‡B"-¤Ÿ|D2ádsˆˆ°„0™pZ0)„ÄDYx Ì RàÁrˆƒ	˜â""ËÁ#ñÄC	ŸHDC
+laä
+DrN""*ä2w{
+Å1Im4ÖÐŽ>@Ô5GÇÈ-†îA\r¨9pA �á`†Ç!G!`†Ç x6¹°Ï
+‘¦TÂ…LÖé…�üƒ�¿®Cµ£¿D2AG•2†øA�È9�YÂœÄY™2ç�ÉAÝ¥w!”;»N*/Xd~+�Æ„eÎBdB	jPe$—ð§†8dM
+Œ4C0V®?§âÿ_Â&zlæç·¶ì[i·£•ÝžÛ9ža†m Þž™g! {€ZRŽwõ!ÝH-9?ã˜r+�dðA‡%aö›h3gi»fæÍ•œÛ0Þa	Ù�Ù‚´ÛAÃÑ³ Êìü]“sÁ5/ˆ1d3¸LÔ/‰á> îw.)y�_C7›²¬žeY8Ïa@Ê‚|A|'A!Ó4ÍÄ¸—eX¼XA�Äf²x…¨Oû}Ý×}èßmÒ}÷¦Þ›ßo¤ü&°UtÂ r:k„Âai£F:v�ª£	Å§¾Œj¦˜B!jŒ&Œ&œZÚhF˜M4cÿôÿBïéý>8ÿÞ?°¦7ÂF7ìÝ„ŒNcËô›*Í½—›QtÚO.žŒvæØ"‡I¹ÄÑ�í>í<¼æ;5ìöPé7º1þbËÍ›Îmó•÷þü}~öÿ½G$>L~ýòOÿ¾–¬ÜÞ¯_ÕÐþÝ[`™¼ÝÿC¯¦ž‡xNíÌ6ÿ�«I[1ïC½{ÌOô:¯m¯¿ê_~L})uü›ïèÂË§ýÿ.Ÿúéx…ˆ(ºÿ÷&ímŽÖÃª}_ý¤ÿëñ_ÓØˆ®õéb´;û~ûKÝ0þûí<.Ý%¯á*¾ôˆ¿…ûï�_	râú·xhÀ¾÷úø­×úß…ý­‡ø_ÿa…_ú—
+šÄ.ÖÃýßŠˆIqQüRû~¼~ß¿èÇ‡ÿÿZ0­þßÿ÷¾Œ/û×„cþ»„cÿü Œ{ÿïðŒ}wý[ÿz×ªo
+M¯ïë0ð½+»ÿûÅ-»_áçöÿËþÁúOÿ×ûàˆïù7KÿÛZÜÿäßô¿Áµû|Ý˜è\ÚÌæ=û~Õy‡öúðóÿ˜OGÿû×„G­¤Ÿo¥Kö·Úúÿÿ¯ú÷ý¯ÿ_¯kÿÃKOûï­¾ŸoÛý-ÐöÿÇoüwâ/xþïƒµÐjñëÓu}í¤ÅÅqí-´­(‡¥éßØ¨¾µVÒbz™ÓTØÿ‹ŠíãÇp�“ÞÇûºcÇã×ïœBí«X‹iŠŽÖ�¸ã	¦©±í'°â‚**¢“»ŠukŽ)Åm!i§Ò}'ë¿Ý=]u¶‹‹¾üˆ?ïÖDo
+3…¶�´`A¦¢™ŽH4ñá—Â
+;6”)°Î�„Íé­1´Í¥
+l4&c58­†7œVcSÒ½÷ö×ÛÈ�®ßjÿ¯ï¥®ù0X†@kÁ€H¢Õ¹7On¯½-.×Ýµ×Õì.«xÿÃ	§i½ âÓM´Âá ›k{¶
+M=â°ûûBôÐxM[‹b0… Ø´!ìR Ð†á�A·éªr8g@Á4<"Ãµ† îì
+(êl8Eú¦�5—DZÇü�°6œƒqÈd@ðËrñ�3öAˆ xe¹Áw2ƒx	�e€¤°¾¢ºk…ÕòpþîŒ}Ü†w!ªþ®âø»ºï¾¾¿ëëä2A�s¹8 °çtÉ8\�@‹"AÈiMÏvaÊ›�Ø9
+C�ÓÂ¸ðNÜ�Ôr Ž`ˆüŠ:»#üîLt*Éf°™Žo7ÅàB„.U› Âa{=ž„ø!a4!¦Ó>Œ<Ôƒ'3á<êÂ¼ØABÔ‚ø{=¿A¬C@ÍuŸ£	¦�ªa#	£/¤chÂhÂú¯/²­Ñ´#F+7ˆ"¡
+ÓÂF/ÂÂ=´bNöŒua"õû»
+mQ�ìÁ¦Êâ­›Ò/eì¿f/M¥íRN“¥»¶Œm˜m]ê™�î†¹ÌÞÑwmþÙ‚ ‘‰µÕµ³{K˜ú“Íï®�ÐØNâ…úûè{Ì7ýíSû1_úk¯fOïµOé>†ûê÷ÓÓ×ÿNéuÿ1-ºáŒWõ_·þ*?Øï¨¶¿ëÖô´Òþ¯ý?ø¯0*ý¿ù€9·Çù�—óÿÒÿ_ÁW·úÿõþ`+�¾Á«_\/ÿéÿ×·ÿ¯íÿï«£þ)�þðŒ_Ü�ó‰uÚ1ëúÿÑ{÷ü}ù!ÿ&þ¹!ÞÁÿá*?ŠëŽ™oý$ž®[õíÿÿÞï0š_Úßíé}™ÿß®×á¥­Ú@ˆíëü4¿Þøa[KßÛÞ6‘�=¯ëý¥TõíýíÞ¿úýT4ö+V5ö4ê)4á±ÅélS^±Õ®fûX�X÷cMn!ÅÅÅÚPÑ©Óñu¦Âb“j7‹i„ÓM4ÓÅM¶¸i¦Ô\E»TÕÅÆÂx¦N“A¦š ÖÄ`…„ÓDA‘À¸X†ƒ	—‚¦`ÖÓˆ†G
+‰„ALpËÅòà¦eðLÀDG‚˜J0R!§"–«‚_‚ø$¼V¤2qÈdH,r!¨úZh'�á¨á)Â¡d6œ*{
+ˆa8¨CÕ5ñ¹‡&äÑ·jbA¬wÕ'÷§Tu_õÓ‡©¡Ó0ä09�·&9œ Ë‚;"ºdÇ ×ßbƒ9€A¡ØÓ>ñ˜ÌABŸ’âqaB`ƒA„Éñ+*
+r€ÝÈÈ5ŽA™Èmq°ƒC�< ��<­íÆ˜Mž]SL!hÅ´4Ó
+ÁhÆÑ´ãA¡1r ¬‚
+PA™ì&ƒ!¶3MB`«VÃfòutnÂwy‰£}´¶rîŒ]Ý^œ3�Ïý¾È5�µZ/ú0š¾íá›;Õ?³éÙ»¸m˜uM-þ¿úvnvüÛn@ v¬lf#ºàínãMß°ß_�ün�k·¼{¿â+ë×wlTU¦¿\|zÐÛÿ¯ù´ƒýa¾æ�cþ¿~ßä
+R
+.¤
+Ü‹‚°ã�jFä êA–	AC‘ºjÙVJÈ;�È9“âð�ì†qÃÿªõÐ…ûÈAÃþ#ÿ£ÿ Þ´OÂà»%a5=’Äœ·3–áƒ*	avU�ðx4 Â
+0Ë‚¬›“Ã9à'åY, ö†`ƒ@Ê²¸Ök&æpšy�NA ãL!f˜ ÍeY/[
+‹Ž­¿ö�ÿæ%ÿ_þIÒÿ®ÛõAêšg¹tÓA§…XA EC	BhhE„aQ�ºhXP¡O‹Nó	Ú0�+T˜B0œ¿˜éý£OMN^¢û˜ûw¯ú¿öMÒÿ÷ütÉºýÿ¯Þw}ŠF;M#Eî®Ît^£…Ç[·/6q;«­ó›íËøù¾‹Ì#
+:ºNÂw¤^n“jêèÄØL)‹VÎ'HÄÎtb®®“®L~¿ÛUnö×ýµÿµÒuí%ÿëß½¶é÷­­ßvn1^éÕéÙˆÝUV©ë®­Ù¸Åë�ú‹ßTÙ‹Óo½u¡´‚ÞbîÃÿ´ï‡ëi0Ð¾*Ð~Ä4V¬SªllCƒÛþ£mˆ]{‚×¶;¿aúí¯®ñ{»ö-º¡ö’CíÔ0ˆé0áŠ_üÀ1ô½ûa£­"‡Nâ˜¸¶+bÄZtÇÕpöºMŠNâ½Â¶³½ó¯´¾¿ÿ_…×aÿ÷0˜	æþ³.„[o¿ÿÿô»ü&íTÚnÓ	›FÕ„Î!a˜ÕBi¤È£»LÄšÚˆ I¯tcõ°ùûÑy{¿ÿ_£öïþ¿öýºþÛ
+õÿÿÿÐw½¡eàš xÀaˆ-ˆ�él{é‡ÿ×ý/ÿ]2Ýzÿÿý[Gàˆÿ�·É¸"=GÿÉ¿÷ýå;vâ"8ˆúýYnŽßÙc�ßýtÓ¿_ûµÿÛÁçÖXëÝ–í–ÿkkïe½,4­ÖÛýxiu¿ï[PÂÿØJ-â“­ö?¿î-†­ÕÿÅ1W¡K¶ªí?V*+â¢¡­E^ÇðÚ´¯nØõîº¾ÅE®®šµV.£´×²©IÅ!iÚtÒRHÂiøA¡u Ðm;ÞÒÃ…pÐ¶¢“b£b£wAìÌCÚŽäp"¦�´)‘ØA¦ƒ\F Âc/ê!´
+�! ÂiZi jšiY˜ U¼&ˆ® Ëáxˆä
+€Õ3sº_‚þ’®Òiâ-cþAlÇ!’
+ÎC$‡È-†‡L‰Ç"ÁÜ†ˆ!ˆ oL µr� ]ð«¦†¶ª�‚¾ÃÝZÒ÷¤mh‚¸é¾Alðâ(Äœ„zÆœV¶Èd[�È' x/„2DÊr
+ƒ,<y¯ã¥øª²j˜L�=„ÈkÙ	díS	…	®C$0äÝ|„“äÜ”§d5%yÜƒ¹×'d † ×‚8$9‡!°xfì‚Ã’I9
+;hz„qWWÂz®CL—CÏvEð˜@ÈðÖl.
+rÜ' Â æ‘øônhÑ	Åá~© Ád&h0…•g8A’Âà«MT�ÍÄ°‰eÂ¡„sæ#u¢
+OÓ�ÒwiÄ51ÃÌIø´ø°ƒ^_ôšÆ‹íì-SôcÞ©¡¢óF:m'áB1¸âÓ\1ô_£	†ÿEÝòíôìºûX®8¨øû7œè¹¶âËÍî®Ó£™¨f*½;S{æ6úÂ›èÇ—²óÖþb´ŒmÒg7»0Vo9Ñ�•‡‡Þ°Õ3»»¥¥i»ëÿÖ¯íqð›WIû¦ÒÕ˜.ñ¯Ó°I>õÖýº6xìR½
+ŠiâþšãkìU†(vž—o¸ã�Õ²xHrÇ"99§#…Âd ˆ9‡\�C�.äà†qòÂNw'`¤ ‹d$y<'Fý¯ýþØüèÚþýwÿâ��\ÃL=ý¯—Èåß×ö›hmÕRÈè¸ýùVG�S	„@ÁNa Ë²¹^ü0�„-•d¡B:#‘â0Œ)ø(A„Í@�ù„,&
+C? Ea*ÍeYÂa¯˜	ÿ¯a·HÀŸè~ÿßÛ÷
+Ã—âßó~£ëó}‡†Ñq�¿µ‹	„mQ´ÐÕ˜FÓF:
+	…iL/ìÞšA„#Ö_¨Y/½Ú6¨XYŽŒ'²óÿký_öõ÷ú_þ˜¯Eëkûÿÿÿÿï†öì}ïÒÕ�:g“F$ŒZ§IÑ‡m„ŒMì*…û¸j‘‡š,'WpÎ&‡vlÓ¤òœ´ÂIÃ0}ë³i~­‚#ÿt¯ÁÝŠLÿ`‹¯ÿ¥ÚªÐDy•ˆÿ²Ü÷í‚#ÿßGþ½r1Û°D~Hwí[�µù¹úCì/}¶lé{³ÿO¥s`Ænooß¶ƒÂýéöm¯BéÙ¶·×µön¤ñÐëÝ¯ÿýû¯ü5¾ÿÿ¯îÞ×Û	[Ýv[¢ûÒ†ýmkÂö›¶M(}­¯YcôñÙCÅïUÞ‚úÞüGÿûðÅ¾¿Šá�_XZ�Úéþ?«I¯ïâ¡ýÕÚßQ_ÛÅÃ¿½´æs¸¿�ãºmv)+Ž)}v+â«éÒµc¤Ãii÷ì\ÀNÝxÿÿÉÒýÿöýVúØø~`Uâ{òâß˜¡ñ
+XØ«ŠwMBjÓÒlTB´7Ši4Ú�Š6–á¡¡m-¨«�Ša:Ðj:¯åÁ@°ÿ¿ýýQ�?ÿøn×þÝ¿þ_ýô¿
+/ýñ/í¦ZÂî „Zføi‚(yvåÚ × Áˆ£µóª_8­X‹ÈøA„4‚]ÃwáÿÛþþ¿màŠÏï
+¯øK½{F?±Û_ÿ‚#ü�¨7pÑ€"DE†@ðkqë²Cƒy'÷þ»í/ðŸÿ�Þ+ëó»ÿÿV‹¯¥Ö‚É¸ÿßké¯ivº�qêÒ\îÿ¤«oÿhºß¥ÿïÿÍ§ïÿ¯m„¯¯Ö\ kþ÷kìx?üw±ë{i-£è]ö“·«„G_‡´Óuí­ý÷ÄqÅöƒí±ßö›{	6GÃ4 š{V´…ÆÆœS±QÎj-Å&Äk^Æí8¤ÓAªm´Ú"-¶‚
+4ÆÐO\Ã-Åµ]0¶nLÚ5	¦Ÿk•¦š´-øˆ‹˜288A›Alâ0Ž/¶D[0ˆ£â"PB"Bâ"3° ËáÈnC$nEqË†H-DDqH~ë ÚñÇÿÈ€’f9ÁJ+�ŽA¥È‚~IÎä2à†žl�‹!˜äG!S�"È7ò? VF@ä‘`Ð2ñÂaBhÎ30dæo¹ÐÏ2 Ì2x
+¨«2€xL�zF´,0ÓL&™î»M&ôÂfõ„Õ Ìtq6ÐW5aåG ÃSZ9½›nlèÃhßTcïM4Ãl(NÐv6në—fAÛùvnÒ6:	ÐNÔÄnM{îßÓoŠ»×Mõý$Þýt“z¯¿ZOMÕo¿·ûkºýÞ“é{iSkã�7}Ž:¶•«}o·ÿ¥÷�H<r;#s¾F9;6ËåÌÀš-Ïåßöé{j½þ¾¿ÓÓ_�ÿ÷ï„, Â!øk@Ði¨BÂ
+l'þ–©WÖÚÿ÷¢ûõ¥¾ÿÒÁ/¯ŽmUïM¬Ýt,,Yî¿ô¯m*æ®¹uFÿúVûþ´Í³ž›g6î$bÕ»¸e¿Qï\kÕþ¯½i?ÿûüB»_Þ®¶Ÿ§õkù·	×6ï×µé_}¯ßÿÿóÌcÿ§¿Þë�üFõØJlo«ö¯ß¯KzÐÿÿõõv�?ÿþ�þ`_Ûÿ­ë¾…þßßßûÿ×öE¿ÿÑ�ýX_ÿþ¢¿æÓ¿ÒÿýŠÑ‚ÿßúþôÿþ—ýÔÇ²oÿëïíøoÿFÿÿMûm‚#úÈ�õú¨·_éÖ—ÿø_úô¸o[uMÚí¥Ò¯ù5m/õý$¿]mW¿ø¨=xaß¤Â½´°ö·ªî’þÿ~Ã«IÔœôµ"w§`©6—iÄFœC»A•:ˆØã¿Umy›˜l%Ã�6Jê-4öH6|b–Ðí
+ôÂ&)„E±0ÖÛMÄ*A Ø„¶‚lPUi0ÅÜ.˜A±
+)§Â„ÐW ˆ/iR�krÜã”æÉÄo³za/ÐkGvƒW°®\°PE8ÏºØ.\�Àæ|_ v±Ô�˜�kI º¥]T-„#�ÿ�9±ÈdAC�ÉqÈd×Âd%�xLdÜ‡9BCœsŽAž¤	%BX ©uÂt¡^ÊÐ(U ­é¦UÝ¦�Þ'
+ùÑ�èÞæ+¿‹ŽÓ»6<Ù†ï¹¸IÑƒTÞ#ÿCÿ»¿ûÖ¾ÿßâíúëãÖ¾@äž{ÏœŽ3A§‰á. ¼¹‡ Åš
+°ƒ<ÂNw'|�û�`r¬ÖG„'™ôxEòÚÚUÙœðFçrqn'2ÄÜŽ`r]ä@­Ÿ8†A,Ø0¡†¡ˆ‹XL×°BÓA¨LÙ—ê
+h;I|!ai…M5
+>Óü4×£iÝóÜÇM{gÕ4-|*èZ7°�«úÂ˜Ú7ýŽ–-`‘†éêŒc˜þ×³t7ÝëIºyŠÏ&á˜­qIÙš14b¬nóŒÃÓtîüÆÞ›­¡‚kæóuœ�×ì3pû7Ý7ä
+AE”ä0�ÿä4Cn–õ½;¼1ˆ¾¶ûô5³Ò÷ô´Ÿú}
+'i>ýuÛJøÛêõŠüd2/¬ã„˜d¦_’óºeL dø�õþè~¸r„Šýˆ^#ù‚¯þÿû¯ø¯tÿ½k_cõ¸_a3Û¨´nm´áaq7®Ò_¿½¹�ÿü.�/û¯þ¿ïÌÂèÂÿÿ÷ì=×ÂþÐl5.ÍæÕ Û6Ã¦8yva§AÃa¦Ðÿ_ðÞF×ÿð�þ`Oâµÿÿëþ¿¤Úÿý†ÿôbÿßÓLÃi=iá=mÒA»©åýý-òC‡Aÿ×Úùÿ¿ÿF/„]zýþ¿ûýö+Òÿþ·ß¿õÇ®úk®Ëo;·ÙC¶¿ßú^á=×">—þÿé}÷¥êÕ?ÿ¿ävúÿÿ¼qú}¿§õ~ßïÿ×x«úUûøhÂÚ„´µýÒ¿ÿ†Å~·ëiz÷¶’ï¢á}„ÿïú_¿QÿºÚý�ô!¤ö”F¨]¦±S
+0†˜\%i§
+X¶>Ð}1.k±JŸè6*áÒ¢wN4ÿ—ßëÞÿÿrûëB- ƒAÊÚŽ.".Þ)BB±WiÅS´ôÄ*t""Õ¤ãM††ÍéÿÒÿÿÒûèYÄšch0˜TÎl†�ºÓDŽÍêØl3LÆ•œV0™�3iòc�ÏÅd¸P…¡’á’Ûø¯ÿ¯oq^D2¤r`Yoþß×ÿß¯¾"#_û1¾ºÿßÛÓ_øý¿×_î¶6+ë·_ü…õö¾÷÷ºÒºÿzÜ/&þÿn–º¶’­®ã¦ªº«
+†BM­­Ûio§¡
+í0Û…E1A0ƒb‚
+ö]ÝÝ;A¢ì¾ƒ_�6�x"`g5�;%�È@ðÙ¹�[�!ò0g‚°@ðÍµÈà*a4Âd2¯Â«¯«ªûDœ�à´;[ˆh‡vƒ�ãä>@æÓDãw±~ñÕ×Ç¥õúZ_×LƒHéù‡ xn>C8äÜ†wè�ú�P9 �‘ŽEò$iä@Id¼¸*Èð“•ÚdÇ#âvUÒdÎå‚až3á8ÂŸòÄp*Í…ÁXOˆñA8)�d‰ÁVEûË<Ò‰Åu„L>Ê°ƒÊÄÔ'‚˜BÐa	 Âa…Úa´ðƒ_kj˜A¡´ÂaUpš„,-hÚßõ0ª�¬]Å»µ£i#Ñˆ§ÛÅö•m‚Fç}Tòhß—¨ßFÐlæytoÌlöŒH<»SžŒ]é©Åa4Õ ›zk`·v´[†aêo7‘×f&Ù¹ì&sûÓ³w~ZoWAê†nui>—ŠI_³sßÖ¡>íñÿ77œßÿÅüxµ{ï¿´ëªÝ{Öí]ŠM%{õµ]v:Qµî—ûÿzKï¿Oÿõþ+ÿÿûÿý¯ˆ$ÃÇÿÜB¤;¥BÿÝ˜	ÿ÷úú—Ñ€ˆ×ÿÿÿþ¼&ß¿þï©€ÏÿÿÐ­ô«ÿþÂßö�¯¿ÿÿïûÌh7¯ÿ£ðÞº7ÿúb¾›ýŠÿÿØ…’²o¥ýúÿÿ¥üRé`ˆö×ÿÒðD~úY'¯ÿºûž[&ë_õ÷Â´½¾©ÿKývÿßû¶ôúýumpD{¤UÿúEÂþ©†º0½-¯ �q¯kíúš;öéƒþÿXŽ˜h¿J×êáÃ\¡ÓuÑ„+PDuîÚ>ˆç¸nñ\ù>é‹‡Ä6­:N.
+X¤.Öh6*˜¤Õ6�ˆãoB.*6*;ÐŠiˆôØ¤Ö"-ëi9BiÕ¥oí!a¤ú¶®�m!M4ÔEó¢9˜V˜®™Äšj)Ú¤-§Þ¶ƒ\FìlÆ	…Î8aC.ÂkhZg0B!„AqËãÑX&†a"ÓL!cB(¸¥ÃQŠ0FÃH!à²!¦â#�È·Æšt´Õ5óa�iåŠb¸­6«aB°a„Dr`H9	¹{! ƒC à�àÚäx‚ØDÙªšá<-ðõV¿Öˆ�³“}ÅÅÚ x(w x28§´Ÿ¡Þò�ä2A°rc�3nC¹Kþÿ]%	�<4 ¸ x5ÀM2
+�CjÈb7²P»öò^[“sB>T¹(ÌäpÖh$9Ü˜ä8äp›™Ë‚NHrð{4l“˜uÈb
+²à‹dc–9
+AÉAVƒ-ËƒÁpLrÈƒœt¹W_µPŸá_Hök&øTÂÂ4<bÈ/Ä¹>ÁŸŸ�a0…ÁÃ4ÍÄì«BÐh0„4¯Â˜L†A%áL*š0CÐ�WuW§u p>Clw¢
+«úÞÑŠªšw£´ÐhÆÛn.ë˜ÝµJš
+‹F:^-Ý¦�†Pú{
+cnA�ÜƒwÝÈ*;XÌuñMGŠiõKpÍí”Ç›ºP§óz¦QQŠô“³uè6Ô»m³qº“g³C
+b{6ÍÚÞbhÄÃ1wÞ÷—¨Å¤ƒ×êú‹¨ûõ×oïÓíW[ïNÕ¤ÒOóÒúŽ¿Ùƒ»0õOo^õ¿6ÚU¾ÿOÒ¿Wúëú­*�>�r,ssÿ]ÿûÿëÿÇñ\_ý¿ÿÿÿu×Ä&þÒOÿÿu²
+Ãäð–Øä8ù> G—ñBA8”OÍÌØGi–äpAÜŸ9Ü˜ætÈ£‘U›	â·%dQË ÍÄâpx9¡˜3Äz a\ú
+õ×¯ø…·úñŽþÚS}*×ÿåÂ_ð¿�ÿÿÍˆ¼†×i¦ÐÃ5
+¡4¯,úaaH1é…	„A“:xPB4-S°¡½˜BîÂ¦šÒ6šû}ßõíÐ_Û]Â^¾�®ßýÿÿÿúÿ£þÿÿúÓÑŽ� æiÜ½F*Ì/i°¦6ª¹�Ìl¢1=}0…£a,ÆÓ0Ú7ížèÄÑ½žÚA6ÿ½Sÿñ£ø­QŠ¡ÓGþ‚øðD±_ÿþ�ý¿é=?ÿÿûHßéá:M#0K® á‚FþÒá›¨ÝFÃ6Ó¥³—mžZðìæÃ.Û6F#o½I¶sÕ³u'˜wúö·f$5>¿¿	/úô­ÿoþÉ»V¿ÿÿö¿×ÿúØ"ëÿÿäœ>ß_n¯µWÛÓ÷ía˜»_tëµêì'ÕvŸWu}¯þ½'}ß½¾:k×ÿ¿[ÿFG×F~­&=uí-�ßßÿãµÓÿôî®´¿þö”ü¿Ãý†?°Ç¤÷Ä-?õñ�¯âÿÿüBú¾ÿˆ_ÿõõð“¯l_ó0ÃO¾hßh8ê!ÛÊ£UwV·K§j×qý;‹UcoM8;]ˆqVÖÅ]†¿Íëm~ñø_ú¿˜ýø__[ÿÿýØ__ô`M~øB¢Û¡qãw‹¦¶�½lv„EÒ8©¡±M1	i½¨Úh.ÞÒ¡Ã†ð—èß½ëÿý«ÿÿèÇÿÿ¤bÿ_ÿÿÁ3i&‚f0ˆÇ<=¡˜FjÎ$Ða3ŠÍé¬0ˆ<5´ˆ`amNiHj9o	¦ˆ6ã1„ÕAûº±øoöù‹ú_þÿ…Gÿýÿ_éÿú_ßûa0Dúâ,"ŽJÆˆÜDC�éÈdƒwÐˆˆ45æ»¨VMòÇÛðDwÒÿ®·í{´×úõýÿÿ×ÿÿú]õKÑt×ßñV—ÄVuèÀFºo~©ü®·ò|w·ý„ê»þƒ°D~Ú]A•iZtëÆÇ|4¿íA$íS½µ™˜¨�ˆißu|lDm5
+;In4×îÒ´ÂhGß§Lq±ÅmT5G…'ÅE*±WõâÓìŸm4Õ±Å•…Z¡
+Œ'M Ø¤-¦¢ät[M4†Õí5IÏal&c#è3hÁªi›Ì"p.\3i3�”š…0¦a¨\RùÅ
+LiÐ²ú
+b Ë²8Hˆá„UB80ˆ3»4"2äÈ"#ˆˆ«Iv¤
+�Š­ªÃC�ÉAÈ
+C�3‡ xW Ð9‡$ã„ÂƒÁÁ¢Ap@ñ ‡rð†œÈ1
+2
+–˜]BaUT(]BaU5uÞcë¾žèÆµF×§Ý'#w xGí8h�á¡ß'zÐ¿â®¾>¾/ãy�h†@iŽC †@*¿ÿûÿïùÁ‘Ðd
+Üƒhá2¹l&ò¬‹d‚ äp ÓÌ9
+9UšÈì‹É„GRg³Ù‘¹àu&9
+9$dœîN3�‘Ù8=šÉqäÜÃ¨"?<ú‘ŽE!ð d æ‚c��•d£%Ë�W
+0ªéÈeb×Ä0ƒ0�p8vž`ƒZh5LÉôD0ƒXCLÔDã´Aá…¦¡BÐâÓL òSAá0AÕ…ÂÛW„ÝÜ&îAXr
+®ÿ0©¦F&ÁTZaF æ=(Mf:¨TÑ‹zù~†ŒuT®cm(OTom!§Í¦@ðÌv…œ;^Ì)¹wí~oi0ægc{nÔßF,ämëKi³3ÝíœèÃ»ô¾Í¤Œ?«†n7=ÝžL57RÃ	æ.ŒZv9œÜÄç&„Ú‹N!ßåßõ_§�+§IÒþž¬;êöúN“õÖÓ~ówzo¹‡Òë÷vÕx_«ÒÒ¾š}ºýê�×l‚ñ¨"?<!Hfr(f¾\eÁ¤Ž�‹÷¿{�øÿîÇøÿô½ß¯¥ûâºxcÿñô‡ï¾þ“×ùg%‚-©¼ ÆÁ£�/Ì‹™‹Ù
+J:LrvJÇ<«#âð¯=¡q ÈcÐ2�lMSYæCX_æ{ïÿú_ûÿð¿ÿëýtüØŸaÿü¸hó‰kþ¿ÿó¦BÂ
+#hÜl˜L Â;4l&@l–á0Aá0„0Œ.ª@aLx´úF6Œx½™ìÖêšhöÑ»ÿëÌÿ0pÞ¼ÀO¯ÿÝûßß×á¿ïþá_ÿþÿ„qm[B-œÇF6�§¶�ûUFõsÒxÝúO7´aÝ¦š›šMîÍ³ýë¦°Íê]æ+O_ÿ½dcÿÿÿNÓÿèÅÿúb½«ÿÉûÿdc×÷ßÿÿù'„Øfì&Ù¶™Ìòk««s›¬çvaé…ÓU»74Ÿé„•ôûnêõQÛó|Æ?}_ü“ßú_ÿ’õGš’ô¿ýt’ÿÿùÝÿÿ[¬“ÿ×ýúýª]huÔ'‹li¯î®¿æÿý.ÿ0ÿì1õõ¯ºa�úÿJ!~¿JÂõÝ®—û÷«÷ßþ¿ð¿z×�ýÿÁÿvï¶¿î–’ìWÿó(xˆ]ÝÿúK¾—»úL?­»_j`6?ÿþ`ÿcmUXjÃÕ‡ñZíÕì;M�4î-U†Ÿ§'ÖíV¶“µ¾ÖãM6)n+†ŠN×‡ØI4¿Ì‡´þ!¼/¯ûk¿­…ÿÇmR
+ýúþÿ°Dþ¿÷ñP˜«â˜¤Zn„[±mDYA´ín)6)ŠN¢.(,4ÚBÚA¦ÐMŠ
+&„Cb˜…ÐauýkôF;xFÿÕ~Åc±Z1~ÿŠA#ßùïéäœ"<ÿõïì�ôþþA„ÒÐalÂHÙ‘ÁÓTM"87.Èæ^³h%BåÏ0‚ Ðaa‘Á©X†A„L�ØA‚ Âû&ÿ
+0Dw°KöïôÁR[ÿðJLtßýëŽ»$¯þÅ_í…Uû\DD0„DC�à\rƒw�3Hýµ¿ø«{E×õÿH‹‚>îÿÊšj�î…úí¥^…ñß°¯!ÜU ÓM‹ÄEW´“X¨~½Z±±]P´åO‹ÓˆÕ�5“¶Š‹b�¨‹j)‹bÚj-¦"-ô)X¤!´Òiµ
+VÓh&žÒl[9®ïÚ‘Ñµ\Øh	¦_tBx¸Ði›Ì#a‚<a&Áa4ÆÈà  ÐeÙ.È€Ø\qœqÈà`!—&@Ø�cƒ�ÈHÐ,E_ºÍ�qÅEl*kÁÈ
+ß L±Är�ªää
+�à­`ƒ\äÏ)á°¤-šÂ„Â§®¶uë­÷z!š8qw aÝÜ_@Ã½^ÿ÷úÚ¯ëd?Do�=¹s¹7!’8Šrg!ì†‡!c!’®S’|Ã®¤vDu! r°ÐG™à�Ô•�ÏåôÌSdÉÁCåY,/�eáðHç²ì¬Éá,.	ÁdâàÐKä��#ÉñpU‘â°�¬9Ða„\°�Ä2^ƒOA„
+‹AÄ0›„ÂiÃ4C‹	úh4-¤¦hÂê¡4Âa]B„-0ŒaÆŒ+9°ÍÍM?Ñ�Ú|ÂËª1¹„{<š1?Tca¤bz166³‹16šEæ´ÙÌòohÄÚi4ƒ†š¹zî­òö^vŒuvQU¦Ÿ‚m˜}›4ó}vZZM«°M0Ÿy†Úé¹‚¼Ã{µO	ýÒÛ„õ	Ù†ýú—m/ÚV·¯·WÅIë›mèvöÿÿÛ§í÷^Ÿý/�J÷¦ûioCNéÿÒ·Uí¥ÞßA|b÷ºJÝ±ÿ÷«ý/m'^ë]‡ÿßúÿëì1ñ
+ëÇþõ½ÔWþÃƒ¯aŽü2Žw/Éñ8<AÌäQÎäc�œK‰q|A!?þ×úÿ½÷KøûÿÌ~ÿýøF×©€P`'ÿ÷©�=®ÚXEþÜÀNß«hi¦…‚Â2‡M5P� þ•þúýxûÃÿÿ÷ýøoÐ\Wëÿí¯ï[~¾ý¿Ãk1æ:v¨Z14c£÷éX$ý?ÿ×û_·ÿ¥ÿ’¯ý¿÷É?ÿÿxðß¥ï’o\£],3}Þ]ÿm'ÝpÁGýþøMýèÎÿ÷ÿßëúX"=õû[&ÿëÝV•íe�ú^A‡oü»§ßwºva¹³ºMGuýð¸iu÷i{u“õµÞõÛô½ŠÛôŸUÓjMÿõêö·»k„»ûýmÏl<D%ÿþ*Ãb“óÍ˜lé±†Òµ†šm'kiC´ÂqPÒOÓŠ´¡ì;Ði±{R
+VÖÛé�‹®ýn“µŠUéŠN>ðŸþ¿0°ïýÜóÿVSÖ�&ÅGAÚc´ÚL4Å1\T]m5qI±OM:8¹ä–)ÐˆÚÖØ=—ïÿ†Û¯ü‰ø´A„Ö"!„Ðjl6P©¡a	…B¦˜M"v°Ðeðº¦m&„i„Èi0B'|/ÿûŽ¤c¶ÿ¯Û_ l
+ƒˆˆŒÀi¦ÂŽ@ð'€ˆö×ÿÿÕµGsŽßÿ¤=xøŠJðÒÓý/¨a(Óíÿ[Zü‹A§’½Ž-Sý½Ž¯µm-5	›I;ÓJ¡ÓQRlSMGÅÐhP$Æ�iÐÅeÙÖá„jš†A¦
+X´"#1„!„@˜F±GõÓü�˜�æä2Cn
+rÇ ¶ì&™Á²ÂAE�=Y8ÃÍ‹jêŒ*¨CÞÎNLztšé¨ ómï¨¾.Ú:»†ÿýÝ-/o!’
+CäãRÐ@ð£‘_!—n@ðÞ×!¦éS¤û�+r78øGÑ¸ØÎ« ½ ÈL5è3APk"àA—eY;'Ä‰Y!á„¿.y;#ÀƒÌ!øó1˜ÀF�ž‚¬‹äìŒs¸A—…Ykãä	a'3“pƒYû[´ZhÂ¿¡
+mPš„Â0©®	ÚiªÂ'Œ'BÂ Âš–5¶ƒL! Âh_/]Ñ‹i¤îôŠ�ª0¨Ãlò|ÅF*6šxy‰üÂsF&Tä=èÇIÃ0ú1Q�ª7ÛÜõôb£‹˜™DôÝÿ›¨Þÿý›4ÚO[	Ã÷ð›+
+“³a²“¥ÖÌ›kfîÕ'»74ºw«fÞ«ý+ÝœÎfûc½=m<1ÿëß¿Òa[Æ×cþýºOöº…ý÷L+0¿Jÿö¾qí/Up­ÿâ†*ÿâØþÃïÄ+kÄ.ïÙc›ÿë‹Qÿÿˆ…÷FÐ,BíÿîÃÿÂÃÿøhÀNÞþæp¿ÕíkÌ	ý~–ú.¯ôc‡ÿ¤c†ÿü7øoýPßèÇÿÿ¿÷F/þÿ£ÿF.�~É¿¥·ÿioidÝ¼çô½½“KéŠÁþÿKÿì„É:_í“}{ÿÒÎïÿ¥‚#Ïýz!í~Þúü¶×ÿáC_­ü“ÿ÷¶D},%q_ö¿éþÃ	~·Úý^¯ì{¶ºûöN?^+µÂ#­ LRé÷Ã	-¡íÝí”:ªL0Œ&¾±] øââ—‹Š‹¸w{š}ZÅ,FÅ&šÄCÝ5b#TNÕ§kÇÅ§ØIˆ¤**"ûpœ{LÚN…û8©Å²t(5oÒJéÅ0“N-¶“B-ÚMœBÝŠa NÄl+gÁ„asc7¡aAdsLÄœD0šiŸa,Þc†ˆÛ#ƒ)Œ&"x ÂeðBeÙ|!�¨@ˆŠ0R`f5¤“éZ[Lx°°`±ÿÈ-†w Ö9
+äÁÀÃ�É|{.öC@Ô°™*�o
+@ðÔÄ#	…²ß­oÿFX" ŽeYï!’®ï¹Ü†@7äs0Ì.öÊ¡Piý‹×ŠµÐ¿hÍ
+Ö½uÇrƒPä8ü�‰Öy ÉÞgÉM<Ã‘ †¦sÁx\äÇ;’rËƒÁvK	¹ã$ùYVk#²Ng"ÁCùVG„rÂø†Ì@òNGäð¹�Ã•ÙæpFŒ>f°—ôÂ!žÍ†�SÂ&]ši„.ì(BÁNˆFXA„„XL!!ñh4¬*a4Ô jj°˜BÓN}b¤øa#{Ý×ÃMFž¨ÆíªµL#éÜÆí¤öæ7hÇíï£
+ŒNca§Yw˜ú:&œÄ‘‰¤ï7—‹Þ©æÿÿµ7´b~“³ué¦mf&Âva›©lÝaL~m˜t¶nïÌ=6ïAý Ü/;Òvl6‹¤ìÝZò`Êí�¥t÷Òúvlÿ¸4ïõÇ_WOïÓïücëö1ô/÷ñˆþÿÿ¿ñï[¶–—ÿÿâ¿âá�ëöPÿ{ŠÃüWwóÿÿ½~¿Ë…óþÿù�>ÿÛù€QØ´`	åÂp_ùq?ÿÿÿÿêÝ~ÿÿøFÓÿF/A¿ÿmÿÑ…nýý1[ÿÿÿÿzàˆúxÿÿüý>¾’ûÙ!ýì�ýzM‡Áþ—õdÜ~ëÿÛÿÉ¿Úý}¥ÿÚþ’ïÿçÿuðDví_ô³�vŸîöŒÔ‚Ø0‚pAÉöÚýßÝÿk»¿ÿÿÚúýÿna×á…ûiŽÿÐ¶˜¯U]1¡Ý­¥l\5Ø¥Z†›§mðÐ†ƒM¤î"íBiÄ;Jé4ÓMŠbíi†’kEN•6#VH«G‘|º<‹¢³‘ò>]ÈùuÜ1	Š´ÕªBÚ‹iâØ¥ˆÚ�›ÅÄEEF©¡uqM1H;ªi4í;ja›DvG™Ü&H�„‚D|¾GÈù#ä|¾GÈàär#è ˜B‚A	þ, Âf0¸D8á Èàë"
+£µCZf3jœD0™Œ(A‚ alÞƒE˜Œ.‹”0XEõ„�Á(ˆøŽ?®w8ç$qÂ	¢È@ˆ x2C à8è ‚h0‚	—Ál¼GÈøL3Ž8áÐA ‚H ‚AçîSœt‚.¾6—õðÂA!HDqW;ùÜ§"-„‚þ= ‘Ç	$‹¤w8ç$qÎ8AtJº®›]‚j‚&†B2�¤‚A]tÁ¨aY¯1�´b1˜Œ$Óûø`†³‘�TÚ½=:§M A>9ÇŽ•RH‚+Hâ›>A4T’˜F™.‹ä|º/—MÏTm0E8@�—\�Ð=�<cÒÒA$• Âˆan«jÐ¶�K£@Ð`6äb’N•$’oœsŽw)â-5zú1‚)ÿ)ðÂB’¤�PˆøaÐH šA ‚#â"�I]r oÄ2¹rˆ x)@¡ÈÈpMî”è=åáð¨-Ë±æˆôHÅÃé$’J„5ÓúöÉ1ˆÖ ^È3FP�d&A¼ÈkASM�T8‹L#Z ’#¤’¥)Áô		 ‚A‚">_#är#ärœs½s¹Nºª„m5‡­ëª[ñÈiuÂI$’L ˜B‚IPH0­ˆ�ÙNÒ šA ‚#ý×„ƒ£gg0Ú}ïyZ&áÏ#Šóº1š,âÏ/A ‚t’I%íj–Gð�6ÊsŽ8áØ"9Gÿè]ÐN‚vƒŽAwÚqÇ¾µˆöo¡Q„´’¤‚A ‚A�H ‚	B"!Ë ™| ‚i%÷Òu|7ý¬DGÎ!mø@ŠÄ’IØLiQÁÎå9Ç8àˆøb�ØŽ¿ÿ_�Ö}Hfä�êÈèŽ3ñ7çi›FÑ@�‘ÆaöI$’H-Ú	">‚H#Ž&�H ‚‚	¥)Â§)Â	‚)ð�žsÙdì“•q'<~…_l†TC.ÊÃÙ./Í„Y¬«&A¬¸)ÉÙ1æÌ�©!Â•æÌÏ=JÂœ{.	F]¢p2¡„""8ˆ�t’¤’AÂA‚	•¢`
+�™Œ!
+PaL!j¸øA„Ð‹L&ž…®°˜P©ÐA¡eq­:Þ,»a8Âv˜AëÓ]a ‹¤’A$—ÿXðÌ>ŒTaVcv‹_£i£mŠtÖyf3çDÑ�¢íÜÇv�{j¯V­îó	î‰4";j’T�M �A ’˜DvE@¿Ý›t´›?îÍÚ{û„û³ÃÔÞ`Ó‡iºfÌ&÷fÞúÙ‡zïz›½TÃ¤ï¤ÿº�Èc�</zGúIRHÚQNµ�kÿú÷Ž	¥­éz_ãëê¡�½…Þ£ûþ£ï­µÿzÿû ŽÖÚ	ŠI$’Â#èM‚#õÿ·Jº¿ÿøˆ_üBïÃýþ+íª0ÖKê¿¯ÅöûGÒJ’	4’$&ÿý}Ë„…õÿôa—	¦á¿æs ¿øÿûþµà¿¶‘€+s' ÙÂi$I/¯¿¿ÿý¾ÿþ‚ÿôcô­ÿ†ëÑ‹ÓitÇý„¿ý_V1á;¤’IAmL$GTëÿ¾Áýø"û!¤µÿ°D~—ûÿ‘Žß’}/¸òOuû¿ýûíá @´ª�H&�A{ß÷¿®Ÿþßk­‚_úÿù�ýmJûÿê­wþßÿý7
+…$’¥öºuþ¶¶¾¿Òm$Ò´]Ç­­ß¶žÃ[{b½}Ø®¿A=µ¿þ·h$¨$	´‚A$G_ÓMm‹b¶"ÓbøÅ!LTZi´›i¬qzuÅÃ½­îô ÓN8ˆ†ƒ^¯8áA$’¤£Õk�¯~„E½â6…´Ä&�NÎ#FÒuÍ¦ÔR‡Môé¤é‡o(Z¶œ7A ‚T’A$š šA$©¯‹1„ÄE˜Ð`ˆ.âÂ„"BÌH‚³´Èà¸M`…—aMä4ð¬fÙ€Ö/0ËÁ3›éô’¤‚0›H ‚iÂmyX4¸ŠãB"=ØA0@…$’It¿²_�%†_*VA“ì4’ �T‚	M¿Ò³â«ÐAð’IRIªoþ):nÐA)ÂI ’PD}$	":·û	‚Ã	¿­$°�M$Ý¿È¸â,PH$…$‚I÷\.Øø¶‚i%IAmM":·ï‚#é%H$šq±í�ïö)$’	*X ­GA+iûúKI‚RAHŽ¡‡ü6GÅ �I#W½ò ÉÙ¨ ¨9
+x 6œ‡ƒ@ðÞ1I%	 ­L š	Xéá;ÁS^]I*I$Ð@ƒvÿÑ„õk÷r‡Ê€ˆúI$’PDvS„][üBN@ÝÅÈrÜ^œn˜Õ$© š	 ‚A •ÿÅ]w,"ë¤•$ŒiuÃÿ¯Ý¡�I$‹ Šp’HŽ¶×�ÉW-Ìé’‚¼ƒ3‘Ás>B¹­B:d+�ÉÁ0Ö\åÙ.Ègì« œJÈÇ Þ‚¬‹„²# ùI*JšIBÇ
+ŽC$ŠrŸ
+´A“ ¬=¦†aÊÀº„ÓXA’›ê&³20Ê1j	•dýB@F2^´LºI$IPêã­ä2ßu}°¦hE£}›èÆÓ�pÂ¦•5wôchÇ°¨Ä­¨ÆÐ´mvæ*6œÂ
+T('J© ’#áÒ	]CBÏ‘ ä|�ž]ÙºÒAÙ¼ÍN¼:M³žßÝ Í¤ŒTbû³fŸy½¾ÔÅúm›°�Ù‡J6�zpÕáT%H$Th~ËÓ˜Â¾› a0�­ýÚ¹‡ÿè}'ýâíéß÷·°¿ÿMwoÐA
+#â)%JáÂE:	C_Óëÿˆ_KßoÿãÿÕ+ÿÛéìõžÇÄiRAPA0‚
+×ÿúÿü/ÿÿÿÌ	ÿ©€�þ¾0°ÿoý‡ÙÇ�¤�I/Ëä~¿ßýÿþŒ¿ÿÿô¿ÛÃö?
+þÃþÒý¾‚IRI M�H&°}×ú_ÿÿÿ÷þ–Hwý…á¼xØûÛ¾Ö*’˜Hh2:]ÿÿÿÿûÿ×ÿáÿý·e;¢áyÝµóßè¾
+Á\ûAGÒI%”8H§Ü"ë0�¿Úï_öž�î¼Ï«iÃï†û	üVÿ£åï�íõÐ¶ÕêîWXÒ¤‚Å‚&�KÙôAë¦�¬4­~.4ØjªŸQzv¬Tli«V’ªÊ6�íiôšiÊ
+µºü$S£$‚K÷ý&ÏÊñ1¦…¦Íé­ŠB.6m&®�m;6”[Q¡SI§i¶b£a= žI$¡ÂºÙPTÃ�~, iœøˆˆ`ˆl°Á>¶oˆ‹@Ñã—ãb
+`ˆ£ÐŠ.Vj¡‚¤•PQÇÿÛiÏõäÁRGèDDpâ"4L$)$’F:G$H%ªmÃPÿ­uKúT’AaÒ	/«c„¸¨ñAGÒ	RI}s¸"ëeEí¯éi¬E%A$–($H �KàÞAA×ŠdðÊãéi$~ÿâßø�¤R	RHN&Â ˜LºÌ+{Ÿ-ñvÞÜS	‚Û*
+²
+í™†@/¿&]J‚­8á ‘ÇXÛÆøÓI$¨%A ‚a$G]½ÏŸØH"?	$’Kët¼Â·�Ò´úAoIPIZA ‚a±·‹eßäÁC�Y‚‚ˆ y9ã�'r�ý·I$’Çb>][Ü ÿ ¶Ç
+ Ë0©„Ó´D|RI$–PçpEÒºÙPÞ
+_÷¦WWý$–�J( š#í}¼swëË×F(oLvˆ
+cÐA5I$’KñSñ¾ÈúAÿn¢øÐê)â:I$’„AÅ]v±ï×ÿ¯²œ"?I*H#Së˜VçÊ®ÿ Ž¾ªA•éB�A$’´ã„GÂ	¯Ž
+Aÿ�`rÇ!ì¸=š3Ùr ƒŽS„‹…q ž¹ß5 h°�È[!Ç%fl.
+¹ì‹6f3ñxG„pA¼ââVF9œŠä^%æäÉA3—�]•˜ô’¤‚IM!O�þ‹¨B®Ðˆqi„0Bÿ´ÂÃEþƒ
+™g‹Ö0…„N!ËÅ¦˜A“²¬*ja0‡aCÓBíJ’I/ò:‚.°EFçïöÓv§—F6ª&ƒTŒOà’pË™‰èÆÓµ/tonøf*1´c£i¡nŒA£éÌ*.ì‘XHÅAžÑ‹ÓU’I+H ‚a×ðjêá›ïl&nÍÎ�‚)Ñƒ{ô“lÞµ¿Ý›[9Ù·ßvnÔ'ý›;ÓÐmœï½=6ÍÔ�m˜?[lÝÃpïT© ¢"ÇT¸ßõÓÿ]:Cýßô<+/ö�ïn·½ÿê»t¶›é…cï¿c¥{XÿH ˆèBI$‘¾Pçî¾@Š�ÕÏŸ­ÿÿÿÿ¯|T?oï_ÿÄ,1ÛëÆOkáÿø/×Õ*Im �AÂD	÷“&@ðË‰ ñÿÿòái{wKûÐ_þþ¿ÿÂ·õz°Ñ€�a§íÿ^Œ.øA0šI$�JëßHcÿÿ_ÿßèºøoýžÿºZí¥ÿ£0þþÃ}a¿Ã~ÿ„®"é$’JM‚	<Šßsÿè¸ßÿÿñÓ×T?~—ýqÿþ–ÿû’wÁþßí÷ÿÿ˜pˆê’ZJÛâÈúÜ�á­pÿÛÿÿòCÿ´ÿí“ý+_]v·à¿ô³Ý×ö¤ í¶¾aß¬›¿¥ýaÂb’A$ß‚)ÂA"œ šD-B#ñoô¿´þô¡…ÛKêÿ»Õ¿µëýW@¬/ÝÛZúÄ+j[íÛýì":ÿÅÿ�$¨*I‚ ­„hâ/—EÑ‹¢êî~ý;ø´Ó[Ø¥è ëm$öãA±\Cø¤ßµšN-‹½ºTííX­;â‚pÒ�ŠÔ¸«)Ñ’J‚¿Ø/½—G0‚gA4.¿ x)D?ÓMœJ"Ø¦�lU»±I„U´›QUÒœ6oVÌ'Q±¦»QM!qMq´ÒWÏH ‚$’IZ ‚h$‚!Gº/°ƒqî6N?js°B Áš
+ˆa<‹†`BËµ
+`¡…„""B:0¤Da3u¢
+!¦qDFaþ’J’PÂ-*ÕïˆH „%p�þ@ØQªDnAl48í
+ÒI$‚1‡ÚI’D|ºH ™Pt‚#Èº©Áj0ÿø":újØÅ$�I(A ‚A†¦TØ÷‹EÔtx¿èU®át’I$Ç¦PùÇL®ºaAÏ…D~PÿTê(&­":I*I Îá$L$’#á!@‘¢¸�þƒZ
+d2VÖúII ‚!Ht#º.Œ"è¾]Änçïäx)p6TîA�ÉŽº �$’H#Ô� ‘Ç8áÄDXAÊU„GPx?ÄF§SMÐ³œ«+v)*I&ƒ „0‚b:=¾Êr¼ª+�ÿ„_á ˆúIRA(üÏ.�ˆ„A#ÃŸ²
+#“l¨(‰„uÒ ‚	ªIUS„Ž8H"èY\¤]X¶g†TPò
+ð*ú#¯ó‹D€‚a$AqlD,}=ÈxòÐT´Êùµ�øˆ ‚º5*‡ÑŒA©ìªy�W² œ®MÈkÁx!�ÈrŽA¦ÈPC¹¡ÉŽBÁÓ#r]>„wT`Èã qxÆc#åò>]Væˆº#¨5ìhRë…	¦0¸U
+(Om3é´pÊ/‘ò>r1RAb=æÙtse9ñ|†@5ÍþydêûýSÖšú†ôa`”FFÄZ¤’Z8ç š8é">‚!¼Gñ_âÅÜ�àÊï�$ww6Wßwðˆé$’I&"¨-¯bCwåÑäaÿÿµzÿ(p‚p’T’œt°�"ú&Ùt]0‚eAXQ€ˆë±ÖÌfÓ_ÿ]~ÿ_ÇŠI$�HPAÂ	„¤ˆû�¥yª´Á(ˆ¿•eÙ¬“à‹©»ÎäGÏdxGdc™ÈiÁVG„nwLŽ<ƒg&ä#®x"ádr°Vñ‰@.LsqwêEð�DtJ‚«÷¿„Ìº4G�ô±âû„2ìÐVNC¸Ö_E¦`…�O/‚˜B!‚d¦Œ&„4 Ðza‘h2æn‹A¨A…‹×&ú ËÿôA4’J‚Ú	A0‚	„ÙPIŸB�|*d[ ¶öïèÇP…ËÛFÕª£˜ö	Ú1S	£Z|ârîŒt-PjŒMó	„cXi……Ü#iÌ*_ý’I$�H$4«±¯	Hd�iEöaýô�ÙåV¦í6ü¼ææ“¥lÝÚRó<éÙ¼�„“iÛfã•¬-Õ´œ3}åÛœ�§A6“Ýñì'IÿÚ@Št’„’�#éN:AôD	p¬'ô¿ÿ¦ýuô¯OuÐ«[¯Cëén×§Âý.›fí:Ý�¯ÍÝ-~ÿýÝ$’H E@A0…‚	A
+e+(çNTÈÌ0¿ÛÿKÿüB¿þüB«ïãK�øëûýÿÿ‡7NüÙßCa‹þL�ŠIBIcªï«$!U
+>ÿÿÿÞ¼-¥ü¸BáÌûü¸�5ô`'Òÿõ¿Ý†Œ	¯¿uæþÒ#¤’I ¨§	$�AH� ‹ ‚0™ùú¨×ÿÿïð×Ñ�|À1ï¯¯ÿþ\¯ûýÿÿÿ†þýŠÇðßÿÒI$’h Ði'b8ec5¯¥ÿëìW¥±_àˆûGÿdžëKðˆë¤Úÿû×ÿ×é>ÿÈÇm~�@›I-$¹Þ�ú@ˆûlª�arèÂ7Èd.`‡ÿÿ¿ô\3úü“ý®ºú_Úßõí“uÿ»×ï0í¶·ûYµG­ý‹é%I‚H ‚h �A$GÐVf�†M‚R‚Š¿{kýþŸ§¼4­&8ÿ¿Ûû†Öÿ†·÷MýwÚWÛPÂ¶½zûa%t¿	¬H$’1Å°XÇ—Eòèº">&S‹ÿ�<
+¿b¢jÅÚÜ #¶!ÓU5w±HTRvÅ1«[µX¦„ØâíVê6*Ö*.Õ¤>ã¿	ôH$�J’
+Ñ&—Ap˜B‚ØBI
+a„A;„]A=×j­7BÕÐºÚ
+šBÂ
+¦i6š}5B!µ´ŠL1Â
+Fx…¤˜Aµwâ4©$•$H �ac¾_ËéH EPY°R¾dx!Ì §	&,»M0„C†a50I„Í šÂeã€à™x(R:Â˜Ã„ÂfÒˆ²è&ÐöwºH$’H*þSô¾FÐè�à¬>?�[¸h†@h‚'#�<8ˆŽ´Ú¤•$A�H “a
+N@ðÚú×ûò†~¾
+ô’I$mo^‚V\ÿýA‚Â!b’T’ �6�H$"œ�à×xï´	ÃKüt’I$¤A0Âa‘ò=™‚ˆ,-pÂu
+ÓU ’I$’ZòŸR
+«.„øˆË�¨ÂAi%I$L$A$GY…È1G|| E:I$� @‡Å?þp
+ uv_RA…•*¤EÒ&þuí;…I$T$ÚDuŒ†x²‹ÕûÍ©4ØA2é’I%ô¨ã˜Tè
+¾ø�ÒP’M‚A ‚#ÿO zGò É¹H xA½�®N‚†Xä50�á‡ x5ÁÊ#™£Dº(uÂI%AHE±Æ¹®……
+@â}…È7€™]�<p™Þç–a/gÃ´@�
+IBIewÐAÈë0©`¡—ÁRþ¸T—ýUP­'òëÅx`û$•$ ‚	¤&þ—Ž¸»�dßí`wwH=
+1Ü›�KìÚ�1ô&é$I%ú½F–@’á~ï¾ø¨»âû¾£"!‡Š"?Ii%&�I‚SÌ*YIŽÿ¯úúô:ˆƒÞ’	$‚
+( ‚†AÒÒ×!’£‘¾A’2�y�;‘Gò
+Ng&äHàÉÙs“rng!]Hx$ú�eƒ¹Éa³à‚¤’A$¯²œ§Û�,ƒe­xL yXKð•„0A“²¬'�Â…²°¿/3Ù,ˆa<Ö_„ Ÿ!
+aIö¡²%
+Äø‹é„,#Hø!ã' Ê™¸—Ä!…	ƒÆ)%¤		>–
+Â¿Ñ�a41Ðh]Ä4chZh8´õÖ_êšÂaÒzŒMU4Õl#i£
+žÓñ¦«1¶N’H$’^•¼":S
+–‘Ã!¯z{F'/$ci:0ìâ°]8g¤b|¼ææû¤á…£œ�Í Ú¶‹¾�›á¤bÌt^´ÍÚaPyvÃþÍÔbÌTbs”:O.…$©$šH ‚	„~–C61ÿ¾a¿WI÷Ûiù‹'˜$óþ�÷ºßÚwJé®ý|f	]6®õïzßþÌ¯píÿƒi%I„Eõ�,�‰ÁÃÚVÆ:¤ºoÛOõ¿ûoøcô?ýqÿo¡Š¥ûýŽþýb°Å&ÿÆÑ$’1ÊîS„HºSZ†
+ÿaø…‡ÿÿÔÀ¿¿ûÿºÚ0K÷ù°ÿ¿ê_¯áaúúã#¡J”,PH ‚a ‚¥�_j½¿Ú†À¿ïÿßÿÿ†ýuÿ¬Òè/¥ú†ïÿôaCÿE›Å$^ýéRÁX.ü? ¶êîÿ×úÿÑ‹×íýïýßÿú1ö)¿ÿôßµîH|zŽ•A ‚Al¨KQëÌ;ÿ½„GÿÿöLz_KÒõüÃ·îMõí.²Oö—Ù7K÷øA¿ïýp÷ßÝÚ"?—…(Šÿédï!¢X ^û½%Ì;ÚÚ½*íqßßúÿ÷ý×þÝ¶—ýïýëª.½ÿû×3·¤¿iSJ’/—ÆaÐA ‚DéeR
+Õïôî¾.ö6.×ì;jÒÛ­+‡i.·PøïVê.>Û¯ŠµnÜ9ònÝqk
+[Aõú¬V�â’ð‚qUˆ¯Ì9Ü„/úqÅ7­ŠBØ�ZŒ Øâ£b“	ÜzmD[´©±¦j.4-9F)°©öÅÇ
+Xu›Ú">’TcçL�¤§˜Hƒç´"Îuƒ=•eRüZ&oQMc5Í¡a¨NÐiœHB×Mnˆñ!L&šMÂ«iœV™.µÓƒf ¹µg��W
+PŠI ª^ÐBKá Zs	Ç¡Ý^"" Á<`C"†w ~8ˆˆ†°ƒ0�ˆŠ0Pi„Èà{0„Dr‡;ÒJ’Q�Ê¤”˜”¾§�úÄriÜDDq$© ƒ	„SÅ{ÿ½ù…—_Õ>Î8D~’I$�¢ðÿ Vmþ5ãžT?ö*‚	„(RJ’\�†KXëýÍî£×	×ô’I ¶G1zGŠã—ÀƒA‘â9—EÒßpÕ¤I$’AAÁÇ6Èd¼i.zëˆ¶Â÷ÛZºØˆ‹è ™~‚I$�|ˆè…Ù2:#£ix ‚#¡¤¨)Ž‚	Ž8A2èžid2A¸â"?ô’JÅ°‚pÌAÃD0Í�„I’A ”'Z)ðcF‰~4Õ%I* šA$ƒi~@Ì5�¼É
+w!Ü†�ð�DuI$’QÿöÒ¿
+BÁà)KL&2ƒ\1Ä>h ‚¤• Œp�A&¶—ë…Ö´Â¿ý$’Ih$‚H%ÐI'îîî.�ý´¶‚#¤’I —õ„RýÅòný4K¤–‚JÂ	„ÂAé/û®ø÷Ã;¤’	*Qw�K\†H)AëóÂù‚Üƒ,`�È-w&8":Y
+qÿ ¯ì‹t‚@Š„• �FaÐEô¥~døœ„üžÁP™8®=ç²NK4Ù™Ÿ3áCÏd|K�f²oa�r=6BÂ`…„þl$æ°ƒ%æÂ¼ö^ÁQ›R<%A¸¼Pƒ	×Å –’a‚`�ªJú6¨Â`…è44_M;Æ>ï^!£M5ì!hÚ¦ªFŒ,i¡žÖƒzË¬º„Ð´Õ¤oÌ'„I$�I¼+e>‚×§A83�tbhníTâz1;=Íôbrõ…Ó£
+£›n�§M³v]·iŽfò=H4‡F*!Ôbm;HÃ	myvùŽáZMâ‚i$©$H ‚ATÿ~á»6×ü'z÷AµSƒZý-ðÓÿ®ÿXº^ÌÙ¹~ÛÕXf[Ö­³½(é¥Pˆê©RH Z¿‘Õü1�áŠVì¾—ûÖÛŠÃøµ´‡kzÄ-xÚJúïínü~«ñ	íßoÔ]C ’I ­L$×ö0°÷îÓÿQõÂÃþ`¿Ž»…ý÷§ÿÄ/òáéÖý$õ¯ˆ_F¡èRJ’6¨$M$•+ðßíý7õÿþµ
+×ÿûú1ÿ´µëü*_·¯÷Å}á6ÒøA$GI$•/ÛI%I}¿ÛõdtÞ¬ÿÿAm¿ÿô—¥î¯úÿáíÿ¢èßýhÅ�Ž™!úŠI$h �H ‹úü†H+»Ù7ð÷âñ_öMÿü×ì›ÝX"êHÖ¿rCÆÄ/µÖºû$ìo0�¿úUM®°Â#ô’Ò^¿êÿvÒó?ÖH|Ï×ÿõýßí„µn­¤ýmZFo¿KOíj´—É=VßûÃ[XA$GI$�I Ò	‚":´C=ýñþí­Þ›OûöœCº‡ÜmÔlvž“îØ¯ö5{Wö+ßöÖßÿ	ìSüRJ�F]EÇ[ñMq±\WTƒM:BÆÚÛLm5kH^Ò'šv…Ä5BöšŠÕ¼'A6)8ºÚa„I%IaÒ#à‚g�×h5ôÒp�ø»�fõT„	„ÓMD&]¦ƒ[Mm-¤h‹Ì0½¤ßi7vH!i$‚H*IM ‚#¯äÀœw"”æˆŠ£""!‘Àü!]¡!eØB#�ÁI%¤“ûÖ:ñQ…T@Ø
+ð&’IRJÐA ’º¿¥�WåÿI ’AT‡¤?J”0”$‚V •$©"œ šTGZÇ¦+Þ’H$‚´A0’	d4¢ôM5
+W!ÞA4’T’÷Å-û.‚ j‰Á¦{ ‚’J’H …‚ºHŽš’/â6AÆ�©èN’I$0ÃˆŠØ"¢§Ñ/iËÃAéA$‚T‘�S”ò?OøÃŠ½ŸbÒ„’APAÐAÂD|º/‘òè¾]DB#åò>]ÈÿŠk´–:ÎàˆúA$’IÞ!÷þ �Y/œEô!…ˆõ�6‚Ðû4Ó­Í_AÒI*IPA2œ ‚a0�A($I0‚0à�lº/„Áù°!Èñð†H*À)‚‚V@ˆ!´ö¦†U�þ7ÒI%	‹h�„‚w÷]ô‚A$ …¸RòœÑeå�<6 *„ÖÂÌ!sE1Ï#‹p‚A+
+‚FÐG+UÁH ™t]Âa0‚H�„J+ÿð†°A7]ÓÉ�J¬Tœ(L-ðÂI*I¶�A4H ’		$›ôGH š	#ýÑ²½L&�àÃîèÅu!¬î"#Daô’I-P�Oô¡l§8çÀ‚l ¢˜Å}'ôÇÕÈdˆéÂ&]$’¤„ŠsŽ		—H ‚A$A
+	HP@¶S„GÑOý_ÕëþëáGÒI%MA �h$!ýeB‚A	_!’¸IÌàªù¼_!§„ø•‘Žaü‡Âpx ðA ¢Í„\"ÝÁùXK‰ÁP]�x!�Ï~JÈ®wR
+íPd+“Å#6‰Áà%E8A:I*A_^§ì§)Â	 ‚a4a>/~˜BZözYÊÂpTÔ Áao%0šeØL»+š
+0ƒˆdN+Ê¸Óa�“ä-B!a?=0© ÁêÅˆI$’TL$H ‚a$	(!‚A"œ ™t—F'£‹—oô,!ËÙ{/m¤m5˜üÂhCCTa´bsjžq4b|ÆÑŽš<š1f6­&ï†
+Ñ�WÂF=„E°„]‘ÂN8"é$’H+¿¥ð@¢",Cÿ³u'YÅ[ýÝm]m›­BtbÓ³
+¤ìâ¶Ížý&ææáª„õ†`×NŒVŸÒpÍ¤)Šÿµ»
+^é$Û7QÙ,’¤•	„Ç@‚a	#©Þ&û^ÃKá>ú[0Û0clcký'¥÷ÚÌ7Jí}ÿ…¾ºíéº¯ÿßß¨ë
+’I$‚A‚&ˆˆa0ˆèâ6‰TI%Ä/ÿÿ¥ïðÿÐ¿¾+_õˆ-
+;v—ë1Bþ¯ú¿ü1Ä,uàÎi ñ!i$‚AkîÎ9Ç;‚a*“s¹­§ÿÂ0¼/_¯ùp¡Ë„üÀœ/…ÿïUÿþ\&\s/
+þ¡×ý‡ay€�²†k‘y$"ÐAÂ	„‚H ‚a µm&ÚKa �7Âÿÿô¿ðÿÿ£Â1ÿÑ�¯þ¡¼}‡~ëÿ†ð�­þ(pD|E=Ö(4Y¤	Ž+ÿýÿé¦MÛ°Dúé~“þ¿ ·GÝ1V}‚#öÉýÿTbý{Ô'¼�þ6BÕEÑ„Žà‚´H§&‚AÒ…h ÕC	ë¯÷ä#ûúD‡ÿo8ï¯øE×ÿÿÿI{_¯õõ"öMüÎßúU÷æ½y…¿þGË¢è¾ÐH �I�H ƒ	¤‚ˆ´ø„A4§ô/¶—ÝhK{%û
++íê¿Ößkí||5¶ÝvëûÓì¡û{UØlA"œ ˜&ÐAô8ˆÖ‡ª¡¿^ÇpØ†ØK¶=}~Gw6Ó�5b¥öÅ1
+­6´ÓkbºŠ†œ4­Vì'wÝÚQûtÓ´&"‚!Ç	î$] ‚A$H ˆùtR">GÐA4^q$-¦)5k^)0Ôm!{L[8’HqI½4…úIñ´…ÆÅ Âq°Ê´Ý8Ù¼]Ô_¹ß;”à�
+	ÂÅûvGÈù|�ò>GÐˆ°�^",Æšˆ ÁcÖ Â!&6‚bP¡P`ƒ#‡@ËúhCC
+š— i¶oN""ÓLÞa…6) ‚A‚!	swÎ9Üãœp‘NL!AI ‚AÂAã‚#ü"?ÄDG©€È
+†˜h5¿];ùÕýÿ2°6fû$Ã�à.¸dÖÔDz¤Âiâ.ÂñòpË™ûçÃ�£ð‹³�¡g>C$\�á¬ä
+à‚¨äÜ†«“‚nA@ä21È>…¡vB^˜R
+á0ªƒ
+!²g§Òü†°ú¨VŸÕXA…Ì,Â/¯ ¶(í:‹AÜ\‚�Ä;´Ô ˆëÇú�Žúõèq_×¿äž² Ë¹�28!ªä îE²NPe¹+"¹‡ n9 “�ÉäÇ$ù7%AqÈlÂ;$çr#�Ús97!_"�ùÈ29<$åA0es¸áBƒ2ø—„!„Â‚>.gô0˜B,ÖT°@ò°–epO
+a{„ÂÂ_úÐa#˜ ëÂ`Ïeñ±4ÂŽöÒ6šiò÷F:j¡˜yŒ5T.ù„âÓ�ôc±¦‹ÍÚ£T-êŸªlßÓéMwfë	Ú14aÃ15Ý'F&óÝ'fë³‰†o³i$œTbÛï»0tbkIläéÑ‰ó‘Ê“hÅF'Ç.ûM#é'¯ßko{.¹³Oûný==
+p›îaÿß¯·‡µý;6íui=~­»ôïû0 dÿý
+_·üu¯¥÷×Þ¾í{ÿ}&¬cøb·¯«ü|ÁÿÒ‹ê5×½mØÌ	—ÿ¿ÿßˆ_¯oñaË…ðýëÿÿ^×]f?ÿÿþßõ…ûúÿ÷íÿ·¿ÿ.¯ou0ô>ûýwûÿèÅÿ[¯ëÿF?þßØ7~õÿ×ÿÿ_ÿÿ~ÁZðDyÿ`ˆû¯ÿ¥ý}/KÿÃ’òOïÿ÷¿d‡ÿ©ì|U‚#ýt»Ûõõ~û]oÞ¾ÿûÿþ¼Ï÷©w´¼Ã·u¿ÿÿ»ïVMß_îàú´ŸU¿¾?N
+m{ÿ÷ô—ê×ßÛ_�{­u÷Jû_[ëÖ¡…É>…§Llv’›Úã­Š×¾*í+â¯§iAñPÕ­}¿×½†œypŸinÅlVŸ<¸i¦˜¨öšM¦“t-4Ó ›SQ	4î:MâšBãb–ÓÕØA„Öú~""TÂ ¢›I®q"Â ‘p… Ôâ¸ƒ5MmSOUhW¦šh'MmVÕ5Þ@Ô5`DD0„DD0™5‚!„""x&	Ä4â/ä
+5ýuKNŽ?äÁª9× F9Ã-ÈB;!ˆ"�;„&BÂ¿†ƒL'�É· x�ã‚Àär¦ärpþ�©
+Wá³
+Ëô¨\*a2YAšaH2¸P˜VaÅè9ŸF;1‡º·Núé®š¨MWÜ…ß\wÿ[|=#ýÈC¹ã¨w|B3n“ ß¤b8Ì.úÿþCMÇ Ã¹À‡iÕÓ »†·!–þaÍiíŠ5æÛ¸´A ôºÛ_ÿ_ÿÿþ>c\6ÝìÅfM6¾=*ÿ_ÈiŽ¿ê¾«œr}ëÛ˜�¢:º¿Ó1Z�c{ò ËÙVDÂ7; ÉAÊ�•f²P\°DÂð@Â<lŒrC¦CÁàÖE´óÁÈI—Ä1„nw'U’äy‡!ŸÍä²+”ä ƒ•ŽO#ˆ†9�þßBýÿ·ÔÃn|]pŒx°˜B,&´"Â„,"y þ,&hZaƒ‹4aU0…„J-5O2\´BÂâÕ4AØ]ûAa·×ÿÑ€ÿ˜ï_O8œÄæˆ$a4a6s<Ÿ£òî&/µYä-ì ÒtbÌmQ�°§˜á„Â‹A´‹Íêœ¼÷F7IÜÆÔxª ¸á×ûþ¿ÿ
+O/÷Ât›fÍ$ÚAê‡Åê�[ù‰¤îÁ0™»Nóut«ëÞ©ÞÓ×7eë0m‚)åêó
+ôØaK·6é¿ëÁÿùoõú�ý�ý{[nÿ·ºuû[Ún×\__{v?BšÿÖ¯Ç]
+½.üz½qd¢ÿÛXáéì5º¿Zê¸~¿¤)ÿì1ï¿�ÿ_÷­†!xÿO÷�Ä+Åˆ_×þëæ�a…‹‹ø‹Šu]$ÚÞÿÿÒÿô­ô`/þ`'×Zl'ÌÏ…ÿ˜—.üÄ/ó³Ýó¶
+wÜSÙ\ÓošIŠOoÿîÿÿ¼7×ÿÿÿÿm£zÿÑ‹¾¸ö�¯Œ½ÿ×ÿäsˆƒLº³	ˆa¢Á0°Dvÿÿÿÿb›ýÿðDÿtÚòCþ•kù'ò1Ð_¯ÿý>IÄW m“]¿¿ø"ë_ÿÛ÷û&úÿkÿöw~þÿÿþ»T¿$õúÙ7Þ´­P®ÿ¿Û­uõÐ+úU]µÿØa/ß†»ëÃX?Ó¿í{[ûI5ýµï¾*šm¤°q·I¦«¬Ò{°þ)t×Žîƒ
+(µbµX¸l?b•Ž!«C´¸¨>­'dt¡
+ŠAÓLTDD]ÆÒqÕ§mD4ØÞ8‡T…»Zié°˜º¦)6©�ŠhG°šh4Ñ
+'#Ú!eèiƒC†™Œ[LÆi›Ì(hE—•5Ðµ9˜V™†˜TÓMÂF
+C  �øâ"""†ˆÆœDDt×bºÁ…�þC$\›�È‘Èdƒc“‚›�<5\�üaT†Ti€L�ážÂ¦†œþý%ÿ}Å¢CärƒŽîÑ'r
+C‡§ñR8Þ»�§�þ¿ëÿäÜ„ŒuR‚+˜r#©
+[#Ãç†—Úy×;’r8 ƒ�h³ÙvJHkypMÈ°¤4ÜÏ˜rüK?	�NÂ~A–á†4xƒCb.'Z„ÂhGƒ@†A–p�áæ´tÎŠa0šÜPáqÜk?—	„ÿ¤-i4Â£´cè4^¦šaF&Œm«N-Ú`Ž$æÖž^»£	ªõJ³÷Ü{´Rô0ZM³NÂF&•³vs£œõÓ°§˜f‡Kß‚IðìÛT“»¤Ø`¦&½Íí®]ßé¿ú…ÿïÿOp·Úoj/„úþý6¿Ö¿t½¥ÓÓ·^ôÖ¿ÿøÿÿu¿wÅøÿúüBþÿü~ÞÿðÇÄBÿþø/¯í×Ë„û…õF/ó_‚{¯á´¾ùpÌ¯ÿiCÔ/ÿë£ÿÃßõÂ1ÿÿ¡ôc_þŒßúÿ¯÷Ã}£ÿïÐ_¿ïý‚#ÿT¿°EÓ&ÿßé?ÿ¥ÿÿ‘�ÿüS~MÒÿÿõþÿ0ïÚV¿ÿþÿù7ÿõ×÷¯{ïµÿýÁß¿ÿÿõOúû{ø­{þ˜¨¯íÓê×UPD{õw¬5Þ´¾¯Ø«?M4ï¸‹ƒ¶4îÖ{ÝüGmTÜV·«bHMa»âØ¨;íU^õj)~"-g•¨¸ÚbšB!§Ðj"ÚMgyÄ©4Þ˜OTÅE!um3‰'ˆˆa3zjƒ,&šaÐí3yŽaGg
+T…	ñaãˆi…†Ga2ðA„ÓÌ ˆ8ý9<�üC@!¦aÈhI�6†ˆDG x4�ˆâ „DGê�é#a®GÈä]Ë¢èÔÄqæI�Ž¶AK²
+:€ZTè'_ úº×a÷‹aþý/òa¤9@ðÕrÎ@ýÈ¨×M0˜P™À² /û]Õ§þAlv…Úv·ÿ Öÿ‹ýê¿×ÖC$\îNƒ®MÈ®@ürc‘#ò‡{ÂA‚3Ã?ž	XM0ƒ'eY.!›‰ Âs@PlS�¢_òvDÉ ÎÂ0�³”8=‘á'<¹!Ìä ä2ð�ÏH¢+�hâÜöGdHRü¹��úhÚs#AÚ£	¡j]NÂ/i„Q»4Ð´Â.š˜BÂ„!„}Ã@až‚
+Bƒ3Ù­ÕkðÍ¥	Òvo£a:A¶y4bË×é¾cËý�Ly„ùzŒMPÛhÄïP�§1íºhÅT^«ß1<¡^úÁiÚzØOºþ¯7iµØ$˜I<Ãkû6ÍÔ¶aÒÙºÛ7iÒÙ»×.þ¹¥hÄ÷_fÁl4¿ÅØþµêßØïø×­¾Ò×Ç¼m}tÝqu¾þ×]>«cOavž¶—ÿ›Èé0ÿ¡_ý†Ã«Ålqÿø…ý~ÿªüBÿñÃøèWÄ/�<Gþ„C§ûß…aá—¯0ÿï0÷ôí.›ùq>á_öÿªï÷
+ÿáá½»i_èÇÿÿõ¯Ñ‹ÿÌ›õ¾ÕúþIÃþØ"?ÿÃoø">�Mÿ±Y!ÿ$:_ýidŸÿb’ýŠ÷öÂ#¨"?®¿´�þ¶¯U�Ü�‡
+ý­¯`ˆ÷_Akö«¿ë÷ÿõûÂòN@»·úëúÿû½‚#¯
+~Õ5¼Ññq_ª¿ ô0ºLn«÷ÞÅèÀeÓÕá¤[ïðÂ·÷ÃAÿ„ê)�MŠa¦Å]Æ·»ªqI±'b¢ª!Ú«­Ý§3âÓ¹™60°Ò´˜¦)‹N#ý°ÕEíU4‡WÍ¤Ô['Cç¶šj�ˆuL(´Ð¸6q¸5«Ž+ªÙÄÿ ¶ â-4" Âv„DYvšwhC280GÈú¸Ch†dr8»A{—\5L(A„Ó6¢#®""ÐˆŽ@ð'rJT�Ä\fÌ~«­5[ûéYÝuTÒKþE ãcI=qa+M
+{â!„dãøˆä:d�| o�\wð�ûÁ®
+3ÙHýob)ra`ã�<®_s¡'ÂCNæ@ó‚à�ïÈc?ø‚ým0¸\¾¾ë©ýë£¤cäßá'ý!Ì!ßÜ†cŽñxHÇØÚçÿ}!Ò~~Ð¨aKþAqý2ˆþ5â�ˆù�W™¸y,#°™!ÂNd2(ä‡ÐeLüK‰YÌ9Â…âxIÏxG<ä.¹à‰ä;‘8ƒá?÷Õ;Ó	 Âa4,&¨ÇjaaUSZa]&°¡M¾¼}Ñ‰ƒ¢ó—›	)s|ÄÃ	ßfœ½˜�è¼åê1;F:6šòõQŽ�ª.Ú1?_^lÿî»N»0é];û0t­›¯º½lÃÕBl3—WÃi=>ôá˜žßxý§ÿýÿý®ÇzõÆ/íÕáXºþþº·¿êŒ":ý(ÿ~¿_¨‚Ã_þ|1ý†!}.Ç¿ü7ä2Ç_Ä~\OïÿßøVûÿm	Ûý†ý‡ÿûø¿á.ÿëÿÿåë}~­þÚû£ýµ¯ýÿöÉ¸oÂ#¦�ýÿýpßþä‡
+ä‡öÿ
+¥ýá¿ÿÿÿÂ^ºýÿÿ÷®aßÿµ"íß‚#»~Mß¿ò íßuÿëñW±¶—·ÞÝzì?[Û¯ã¾+ïþý}µ·z×ú÷ÓuZcƒâ“¶Õmn6.ö×ö­tÖû®*-S‹¾6J¹'\¸¥öÕ4˜j-Š@Øµ›OŠŠB¢šB"˜¤êy·ŠiŠB…k~!„!„k°�‘ÁÍéÐaVÈáœ ÂGdr†¬ŒpÁ28R8Íëd|aG2:ao¾@”ð8¯þ¿ïÏ†?êÒâCÛâ5ê½þû·�3îC 4AÁÈ6ÙÇ· x4Á
+=®Al!¸Mp¡0ž@ðR¬6úþšÐû0Ù‡r†³“r
+.ä2¡Ý¯¯·ëï�<ßñ{ÿ_Uë_éÈdþD�w&ç„k!µdnU›/
+¤«@ÌäpE±ò
+33�ŽBA®ŽA¸êGk�VâV@‡\‚øW5!µ„`ƒx;ßÐ Éq/Zzf²ÊÃÚ!¦hC/‚¡B&yVKÓˆ`ƒpxŸŸ�€ƒ.h0ƒAåa/!l×„A y,[NôýAÿ…FF[Õ!‹ÏF6Œ|(PÁ*1´8µF.�¦B1Ô;I¡iÌo‹^Ñ{0©ú4Âjžc‘Ö[ÖëFƒg“i6ŒM›¿Ó9žM]›4ûa˜aKÍ›žôØf÷8œÇù¹ÂywÒaªEÞyC“a…8²ów]Ú0Ø`´bïZä  áÏ"xñŒ®*ÌBwÂ×z÷÷Úa=t‡Zêîû«ÓÂë·§ï¶nþßÛOÓð�_ííjý&ßìëgrÊ
+™¢l4?mQå�oæ<t1Uýëë~+ñÿÿïì1î8ëÿ¨éõÿ�«×ÿ»H¾ˆˆŽç<OSËú@�]‘å¿n`Lû¥ÿó£\/ÿÿ·º0"öþÕ‚ÿÿþ¸ï]6l5ÍÓ(‚ÿùuëåãG‚:ûÖ\#þ÷ýý_˜	ýð¡¿æ{]ëû×åÃ?dtÿõÛ� jž�êÇqµÿ1Wÿo¼þÅ/éy!Ð_ÿÿþŒVÿýŠõÿ÷ûñ{ÿêy&•+´.#V#N-8ïüu&ö¿ÿÿÞ—ù'ÿý+;¾“‚.¤Ÿály'ÿÿÉÛy7¿ß¬i"	sè3‡Üs™Äöïo°ºûÿ~Ã}ö—ýÿÿ½ðÖÿEÃé‡ë½kÑ�ít¾ý¤’M„â6ÁÓ
+GM¶8¨®á­
+$ãˆpá±ÚÁ«i/öœ5ÒŠb½¿ü5‡ñ·wÅ7ªûZIXŽ"":l:i¤-ÓÓ	¦Å&ÓOÒÒlTZiÇÆÓI¦Ã¶�>
+ŠÓM¨¸§ŠOm/T¥Ó­‘Â Âi„,&GATFÂÂf%	¦‘°@ƒPíhlò	¦MEËÿj.ƒMEµÓ5i±M5Iz0ab"!¡È
+®@ðÐâ"!„)\DD0„D0ƒ/„Èá¤‹E$›ÇÈ€¡×k f�i*XûI}4’^@ÂI$È�ˆªD{ÒH_¤›ÒI½R½$›È\6Üƒ{ ¤9Á®d9€ÎõMë…P˜L*i¤“{¿£$c®©9HÈ-ƒwqûøa;I+d‡]|q|q¤›	œÿë«¤•§ä2AKð‰ŠCS	9Ü‹„Qòo˜r$×tÉŽw&äQÌ=�PäG²n¤ „rFŽhT›—_	¦AG&†2s?atz�x&é¡0…›ˆü#L2ì¬%Ä^A…1ÈæO	ÁP`�šÊ²>'„pTˆ(³P�‡=—i„-$›æ6ŒNcády¬½MWøI¨BÃ7mS
+¨ÆãE@•B6’
+F:6¨XTC
+ª°š6ši$ôÌ%¤ôÃK)Š®Š¯.m”O~¥ßŸZfÒF+£¡›Ò\ææ*1Á ìæÐN‹¿ºM³ž^£˜ï<œtìâÒM˜uö—·_CÛ½y·¯ÐI…vâüÙ«ßÚt¡S~Ó÷ìØ¿´Ú½6�%[	Ù¸Ýkh6’M­?�m�cûcß~*/¯Å^4ºþ?ô�¨c°ÅuéÜBÖ©1¡z¯
+áË…ðþ›_˜�ô£y_‘ÿúGôÿúØráü>Ý†5ÿ…½$•/Ü7†ïÃl?¿ÿF?B?£ÛæuÿÌ†ÿo}ƒþýûÒD3Âo¸D~“jÞHoðÛðEFHý/¿ÒýŠÿÿöò(þõ{ú]/P’I¹=­àˆï‚#½¯‚#ÛªG¿Ýßÿû‚.ŸÿÖ¸wýù'ÈpðÿGºXzýÿê’PàŸßßûþ®¾Ý„¿ÿ[_ôý
+ÿ÷VÒþÂþ÷äÇÿT×!�!PX9ö›A^ÃÝ­aí¥wé­±úi§ø¦iÅ®�Vª±q÷QJ·ÿ}ý¬E¶¤2	Â¤®!Úb�®:Bâ˜Ó�8»i4â.-¨´é†Ò
+·i8ÚM8Ø¤Ð¤"ÓMI
+Aš¤¨†CüA„Èé0¨E¦M††v] ÐhC.Ñ!Ë»ié›Âi0h~šöoqA‘Ä
+ÖÒHAÈAC‘Á€7�°ÈwI"•=\ta{T@»K�¤’!�
+?Š_H"
+�´˜}$�!«ü!kP‘× xjúuˆJÒI0@ƒü-$“ñ¬à$úIdÿŽ©41ü†H+Á¨&ä;“ƒ-�<à‡rpAJ9ä	 �w x`r�\RB/®
+˜MT(RÎ(TÈlÀL�à^�Hd‚Y€, � A%ßþ_kúëºzði¤‘Á›ÈwâîêáÅÜ��íÉ¸wiîŒW¸E•ANƒïŽ>ê¿¸Ó^/1Èd�äQË5	<
+F€f?ÿ¯ëê/ä21ü&
+¢�?�e§žË‚ì“à‹©¼L�ÈmAóÆA r »sºw®A¶3¾Aˆ"Žaè†Û�ŽC�‚’²Nwž
+¡žô“H$Jqi¦eÁpU„PA’òe‹.òü! â?AŸÑuÐyVGÅá­B,ÖU„nwA„!›ˆæA‡*²?ÌÃœ¸<(L!ašªMëJ‚AXþ:èÂ¨Bæ;Œa„Ð´bwé…F7Þ»{Qh?Eî¨\E¢ýQ„Ô°˜MÃO
+…„cHÆÔ†@ZVViƒ¨H#`¬N`£7?©pÎ&“	ÒpÔú6ôÜß~]ç
+<ÞÑ†Ø)Ž“íMî]ÃºÔÞÝœá˜ªÛ6‚A6‹´Ò14r¤ÂF&.ÒºpÑ€^ˆÚ}š
+¾’ ÍaAR�?ú_	ÿÛ˜á>½7ëaöá:_¿N­þôï^½}­³Ã·ÿ»0é:0\œ^¥8dt’YO ÙOÿÿÿÿ_ýþ?ÿo±_ÿÿÿ«èh.‡Mmñÿÿ�ÈÚŽÈ.þ’I&
+z}ÿÿíô¾ÿ·ÿ1­}¿Øqÿÿõþ×Šó|BÿÌ}ÿZ˜	!�
+gkL›„ýT°@ˆkSëÿÿ´¿ÿÿüëöïýoíÿEÿë…÷ªÿëòªru£b´•$Ñ
+/!ªÿÿö*ÿÿKÿÿ_ÛEÇÿëØ¯_ô¿ßF?Çïß�È
+ªQèâ[®Ó¤“@�Ô?ÿ÷þ‹��õ÷ÿäŸïÁîÿÿð½ÿÒû];Ò…‚#‚}[ì›ä2Z€ÅB(q[’@ˆiÒ×ÿôÊž¿ÿKí.é}/moýÿ‚_ÿUÛÿÿF5ÿÖÒÈd‘Èlæ2cÖ©A¬ü4˜µØ¿äàÃµÓÕ†•¯±¦ÚÃIºƒº4-ðþëThúéþ|Skªë3!¯öcÈd=-¤õ ¼R@�Q8ƒ=�M7M4ÛA±A;BØ¨¤µ±LSF©¦žšl5b4.ÐjšÄCj-X†…ÁÒ¦šÆÐA�ÈŠcúdAÎ:T@ðÍò
+3Á‚eà�„fÒâÑvÃ#ˆ­ƒ„U´‚ašjœ4ÁýFÄ)Ä¥û8¨E¡
+˜eûA¤#Ëµ"9¦²ÍFŸ¢oš'AD©�h¦Al
+àŠä2CŽÑÛ°¡dn""â""ÌH0†\lD5à4C$3("L:d9U¤�@‘à4ÒÄDV„D@eZF‡SÙÁ�Å x7ò
+=Ç¥äÁ¦fq¢%ÔT x§ Õ@@ˆ4i(‚Øj#~økP@ˆfÏa0š ¶
+°y½N( I0d	ä3‹.‚"`Hr
+ÌÀ¬Rð`�Ë¦@êÇžC�3¬	Á b™¨m„ÍHXA%@Ã WäS uIŒßA&Á  ù¨PYÅGÕ©#ÀÜÐ
+J@êaMÒI&È*ù
+”È@–´Æ¯ƒ0
+��3gRp@ð.å¹H {‚c�Û‚‚Ãƒ'I6)¦ªÂªaB�[ªI
+n‚çé!ªïú�[
+Z
+H&È4Yé‹»´I÷ Î;Ðr‚�îAlh’¸)Oñ×\}È-‚­„Ùó!)þ¾¾žAl¨’Ø#áÀÔ6Hdƒ/âPTñ�Ð9Ç ð{$åA;&9Ü‡'Ù+"Ù�Ï3Ù¬ždÝB*Èì�Ï�‚#ì«#ÂNTT³Y.È1 ä6q+"¹NO!øü]�[
+¤œ @´aS-A.`†°†heØRSOA„Á_O
+Ž™À¸°ƒX ÂZ!d/ÍûÂxA‚»*ÕXTU§©°/C:TØ APÍ¤èÅ´bËÍûèÄÃÒ£
+‹¾Œmó®èÇönMÌ{Fu£Zp¡]ÑÏËôÐ´b£râ/Zh‚Øfê’P`�ïØfï«³zva¶`“½6�é÷K§ý½Ýªæ�›©
+MÔœ3zzywúõt]¹åôœ3uvâí·DÃN
+>�R¼‰NÇ]¾Û†ë}oõâô<m¯ú_ïÿNº~ž:Ÿý¯ßÚ{Æß„èz�[Z¤Ä›
+{½±ÿ}.�Ëëá°ÅýÒüBúßþÚðÇÄ/cwaÿc_ODÁJ�Ò‚$|7êwì?ý¾¿æßø_ïü/ÿ¬ÀO[°»\'moaÿ0äÀâ•@�¦ÿ·ûÿ××ðÛáþ®—èÅÿ÷ö×oÂ7pß[}a¿ö(‚ØÒ’{•Lm“øýŠÿ$þHw
+ÿ×ïéù'ÿo¤½¾ðßïþIòaº	¨Uí|ÎßäÇî«í†½©Çlã½þ—ÿÿÿúßÅ`ˆïúäÞÁõ™Ýü›·ûjÑ2�ÍOßý6—~–ëíÜVÇo|m­ ÿjÚûÖºìVý¶Ú}ûÚÿÝ{ž/â°Ê\0F°6,SAœmÒß†“Üm'V’{Ä2�¬7‹X´îÖ"zuõ·ÅkÚ§}Ãîœ�˜9Èh.êÂ´‹¦4â«b©XMmFÅcÎ §&�TÚÊÂ®-Š›Å°“tãœI¤âšA ö)b¶�°Õ3çÈ/¦AlŽÂ`!m"@ÓC�T|DXD<4âCôL!
+4×ƒÂ_Y0/L
+�ˆˆä2d
+�[X f‡È„T	3
+*)4z�eåH�˜6NÀÍ„i ²`ªÖÐÂ„`kÄDaÿþC$ì�ðä
+Ü�à¥Ä$<3\†GÜ†“–þ¡0ª°‘ø
+ý× ¨:1Úÿ\ƒ(ë¹ÁÃ½âí<wwvˆ0:þŸ¯ŽØî+ÿî«­~¿•dxO‚v¹nKˆ/„N!Ç Ã•h3aÈ–ƒÉY�îC+	¹à‹d‡!G!†Ž#Â-¦CkÈ09œ�¿’°U"Á'= þ,'ØA ðTÂaOÈ3r„Â(ƒ!�ôD=�N	„,&1Â4aA�N'…!š†âøÖ[…0SY~`˜BÓù½Ìw¤cÔZ.óá¦“G6SFôŒmM…£fäÒ0²ó´bª£—œ»ËÍ¤Ð°Œ[ÑŒ7p¨ÅF*1Õ]]…ôôïTÛ
+q{¦Ò˜ôëôÒ]6Ö“¿¤þ‹áÙÍ¤Òº¶­0‘‹9½ÙºÍô�ªéêÒw„á…M³u¦t`2|P	ãô»ªß¦—ãI×ÛÝ-Ðë·Ú~©¯±ý§®ž‡mºuãÝïékÇ\N’þ�8‚û¨§ø…ÿ¿û^Æc[°ÇÿÅv+ë½éz¿ëö;®ÿèO|ÀhüÀlþ�_°¯Rá£¾–ö¬:ïÿ^ÛÂÿ¯ýëèÀg^ÃÅýKÿF.íèÇúF,5Õ×¿Z5|7ûÓz0¿û]ïÿþÞ�ÿély'ÿ$éKý.*Éé³˜ÞÉºáÿb¬":á½ÿëþ—îF=øoKÿÿ«ÿa¯Úµ_ÝòáßïôCÛ™Ûýjù‡}¿ÿcþ×óýÿ±WñV›wëñ¦¥ßiW¼VŸ_Ë†ÁW§ßýÝûõÃXa&ÕmõONBÝ§†¶Ôqu…³xäí7I¦Ç½Ó øjª¨œ1b¯¸‡ì^•Ú^Ä68¾øµA¯�É1Ï“zÚi
+¦q'wœV™½6Óì&ª6œi¡vÓLWj0›ÒmS§â<±uˆˆ‹ÂÚ.eà…˜”ˆŠ.ÈêL!×ÐˆƒC.I±&˜LÄcx(M5Øeðƒ	›×M4"Y@Ú�r¬äp@ð7‚‚˜â#úøñWYP+ãù7"á£j)8´õÚi6}4÷ÄL�Ñ´}
+*<DYôÿ×…þÂx_Ý°LÕ7¬s^Al3¹À�È*¹
+�j�´ž†T	…L†Ì Í`�àNä<Èà…~�B:§~á5L*�+Ð-ˆŽûNõ0¤	ÇzZ¿ÝÈ*8â“¨¹
+wÑ§Fó�ßëñÿOŽC$ß×ÈfŽºê;øA“²¬‹0RC—3q,A–äpEs92 ¸*”B
+dùg"ÁrÇ £³ÙÇ²8”Èe>A#Â-§�¸@½‘!Ì9ük/4Ð†¡BxM4Â„BÂáBaLšhXA„!§0ƒ5„aa•‰„Â
+©„Â2pO¼'ÌVo£é,»£ŒNæûa#i¬Çg:1µ˜ú6˜—º,*1f7N‹ÍÚ1¸Â ÃMKÏ«§IÒwfß¯zm›©>ìÝjm›Eóq»[N“læöæçA÷³sFêN^Ýtó{tbú¾!ÿ¨µk×¯÷ý|j¿ýÚv–�+þ·}¹†Þ>½]õéßÛJ/þ—óÇÿÅ~¿ëñ¿ø…ïÄ*ÿ½i¥ˆZâ¾´cúÿøÿ·àºïíÿ…õü.×þ×û—	ÿÌiLÈiVÿÿÿþŒoÿý¿þŒ_ÿÑ‹_þ¿ú1ÿÒ#ÿKÕÿüu$?õé~¿×ú_¿ëýÿ¥wÿí‚.™!þô¼�ÿüVIþÿïöÒ¿õÿÿõþÿÿë×Kþ½ÿõmKím^\_ÃVï¸ØàûýaþŸý„>ëíi?§q[­.!Eeg[ý†«ö•1îƒA±.í¦©6Ò»b“ÓÓa¥ak­ª¬TS
+&.šm®»¼iìTCŠÓXÞ¶]¯a4�•
+4Õ±H\ò_lRlæ6oM&Å!3z
+1]3z�ŠŠ¦UAÓ7¦�‹k
+b""y29ÄDD0…„"""@�È08ˆ†2<4", ÂÄE Ó#†ÐBÈÂÁ@X9 �� ¿�<
+àœË9�Ã�ƒýêÃma<�,oLÃ´œÅF˜›0Ú1Ñ�®‡¸ËŸz~þ›÷ÚÄ}È)ŽqÉŽB�öºMøæsYÃ"a¸ó!¨X a6†âÂ}uÿöºtØNì!
+TÓÂwñ¿õÆó	+rõï†bNŒY}Ìy/0ÔU_÷Ì}'H0Õ§æ&Íî¶èPþÝn¡L'þûôÞ,OñÌ;ø,
+¿È�È9ç h>=¤	`w×ÿàŠ}¸ûƒúÖ2	aH¸L�á¼È‚
+ ‚¬<4EüU[åº1ÿþ¬(l?ÿ¤?ê’§…®¿8'a¯ÿö¶‹ìÎ¿�>¿Uzù�‡iþ—¥T¸á¥Gé&ÇW¯jšhRW_BÞ@±ÝÈd
+Ü\�C´A�Åpþ6˜¸í¦šŽ)�U “z×¯ïŠm4Þ ÂjcÂDp€ƒMU5b4Âò ¥@ÝòC«êúÐŠ.Q‚ lƒXA•†²<#Â;#ÂNqÂ!ÆÜ†T�<#á ær0ËÎfÏfãc0sŽC/‰á';‘`†�?®ADäFA«ˆñ27"Ž™7%„¹5­WÂa0ƒ
+ßÂ'ƒõÓ°¨4ÕpƒˆaB`„4.C@ò¬�0¡<¬'Äæšh0ƒÍgðÕ5b¾�Þ^róF,½F;0wÑ�1´b|½h4ÖÖŒPí£¹�1½©¢…ƒ£�5˜èÆÚL!ª1´cÒ~þ®¯V½?þÂI¿ÕÛ÷aMÏúKœôé;75mnGFá©½¢ï³`a\Þæ/];	™æUËÐÌ=>á…ðÇñê;{ôŸ¸K°Çt¿«Ú®Æ7~’±ìzü?½=[6{Wë›.û¯¸ŽÃý!Øc÷¤âÃ×ý»ÇáþÃø~ñB¾´!qãøcøÃ7ë£ý×ÑµÛnÒýX^Ü¸_öõÒõ|WèÄG%Ãý‡·ýá¶ÿ_Ã|ÐoÓðßíú†þ¦ÿÂèÄ¿oðÞC$ÇpˆêHÇl?û¥àˆöyßÜíß†ýßjÿ¿ÅÒÿ¼7ûöÿjêÚ”îqÛÿ…}þî×ÖCc·úÕ�Ø;ä‡éÿ&;zùþä‡^¿ì›í“zßì›”;}í¬5†¶»Ýzè¸ZJŸ}~ÿ~Õ½ªåŽ÷]¹ßom~××õ´»üÎÿa+~* Ø¦**ûÓbíãN>¸»ºbâ´íX®ïu[Ij°Â_ö¼Cc‡ûØ"?b®½›@ši¨¨¤ç6Î/M:qqÛ¦±NšqÃJã{Mb�·Tâínšv±¦ñâÂh4Ðiñ(C.›R8h_lÀi&mÔ\Ž­:Ó#ˆ¶¢Ý;Q³ˆXeØM4ÒiÅ4�0šÈ-‚Èâ)\†@fŽ@ðqÃ"D0„DX&GdtÜB8øˆ©°5¦’[\!Á…�þ@Ì7�,5GÈd‚Å�×‚pR›�W‚À0ä%�°	�Ù9•räpƒdÈñ¨Pž
+ºªé¨L(P¡pî­úo¿ú£Èd÷zû“wr® Nîáöˆ5»�<3]Cÿþºþ+þ>¿ûÿêC(|†`ÿëªä‡Èdƒ'åY	Áq‚#¬ÐgÍŒŽÈáâÉ¹z—„_\ óÁÈ&ü¨ C È`p@È<–¤Â8<Š9c�Îäà¨%2vEr�7;�ËÃá>'„¼‚ü^d¼ŽQÊpŒÃ$«Nð‡h0˜B ò»Mfø°�›ˆaS	Ë¨BÂh0ŒàÓA¡a†|%áaBNrYa´™î4A ÝÔ(A‚¼»Í§.ØÚè½˜Ú£Þ^#´Œl#½…iî�þÚT�´c•TbhÄÐ´-<#}OÂa‚Fö­!a0ï/Q�£¤aÝØHÇF6�§÷Ðu½øO0m],3¯ª}×ù¾Œ6×L)¹´Â{vaÒÓ ¯öÃ7¬æyQŠÍÚz{åæÕ;°§7.ÿºOÛ¿t�&è;6!©±ýÿWø·÷ÛüUK¦þŸßú¯Óþlê“JõVÓ	ºý/æßWöÙ€^ÓÿØÅÓêÿÓî•×Òÿÿ¡âm$«ÐÿÕÿÿøÞñã_ÿÇOâµñv—ë¡_¿þº_øoïý/æ?Â_ÔÀžúúïoÿvý}gÿÿž/ávúKÿëØsßÿÿÞ÷·ÿÿþ‹èÇØ¤¿—F?ýëÚ_ø7ûúßïü¸Oá˜
+Ÿÿ˜
+œ7£ÿþãëGÿïü�é~‚½×GúBÿÿ[þ¯î»Ù8°ˆëúþ ˆÿôbÿ½þþIë|“¥ÿýüÂ¥}ß½~ÿÚëë]$ºkþê‹…ÿ˜wûýýÿÛ^þ¾¼�ë×¯}æíR÷ýß¯kï××I�ÓÝ-Žìð¿~ýªw÷Þ¿ZØ$Å6—ÿámoO×´öÿöÒÖÞ*þÒµÂ#í[î¾0šlT_LCU‹ê:bð°Õ†«i]ÉÞîøôÛáñ½ªÞ¿ìDCµØ¤íVâ¢5x‡ÇØâí&ÕÔm8MÃA¦q$-Â~k´.�¶*Ï4-té
+ŠtØM1HDXA«H[(IŠN�lRqa7j6S	œJ�Šˆ^"L¼pÌ$"Á²í>!„|'a¹\ÓÂFD§Úä|!a0¶	„Læq¶³h&bµ´!„ìÇÚÂ
+bMˆ†^0ƒC�4r£€ä2Ž"".@òr¡®k]!ÂQê×0·ò`Ð9äÃYÈ¹ÊÈ#“‚É¹€Ë‚ bdÃ�È
+H Ö>Al)tÂd,&!·v¡VÈ�$²Ö˜POý-Ú¯ô¸Uÿ—f~C$ �á¦ï¾Ó‹¹�Z|� äÈi>A‘ÚC(wë~ºÕ×}È0>:øãª÷¯þ««ªÿùH<Ù˜rÈiÁìœÙ‘`‡t¸†Ti²Ü‹kÑä …xdðŠç|†Sà¤,�Ï\¨/‹‚sCj¶F9c®D²;Lƒc©(ÈiHŽB¤
+Üî]‘G ðA³ÜðDõr¾hfÙàn,&†eÍC4A—;Pƒ \áƒAÍxZ‚#\l´Bò¬»5®Ök+	xA„,‚®!L«Y¼�	ÁV˜A‚ÐdyîÂ
+n
+ƒ2ÿ;�–†@Ç‘Ý„ Ðg‚à«"àBÐaÌÏv°¨•iýª0·1´Ó]fé„6½T-Ü+	…Eç£xhÚZŒMbû„oª1í4ÒªaBhÚø[tm=º6¼C¨L Õ=0…„P(Ú„Â6šhÞÓFÕbÑ‰üÝtœ3u,3ŠŒMÙ¹†`Ótòõœ�+ÌNr6é8y»14aÕúzfëAÒ
+†m+wúpìçF%NÍÔbÎ^ƒ¼»·ÑM³›a#Þ†
+]Ý…NŒ^b³4Fö�¦Ò/4bl*nc†m(M†nÓHÄëÝA8`®¿ÿz·¸MüØOÇtž×·ÖïÇ×OõzV“ZUô3o¸}/i½®þ­­¿fÛ0ìÛñ×î×au·ùº–Ìš„ì%÷vÙ‡I…Cõïï×¿7cýøc¸…Þ?þÅÿD/ÿëi:¿»ïýûn—ÿþ µÇ·¥ÿïV®ô—|z¿ÃÒot�âèWÿÄ.ÿ…õý¯ÿoÂü¸Oòá\ÀO¶¾\/÷ÿþÖÒ×ÿ¿ÿü/¯OúÿüÀOZ0
+:¿m‡OúÿÌ
+úÿÂÿX_¯í�lõì?F/õþÿa£ýÿÿ÷ÿë_ÿûI¿0Ú_ÿÿÿÿþ¬;ºÿù€Ÿÿý÷ë.
+/ÿÿýúKÿþÉßøDz—`ˆÿÿ_ýŠŠ¾¿ÿÿØÒ¯õ�ÿÿÁÿýöH~ëpáºÿÿÿa¥¥ÖÇ¥ýÿM“û;¾¿­“ýN;äŸÿK¯×þ¿Kº„í?ôÿÿõßàˆÿkÿÿm~¾·_ú,vÛþµÿÂ#¨"?ý�KøVMÿßþýu÷ýzµ½.;Øi}„Þûøßím»ÿEÁëÿ÷ÿ.
+öÖÿÛÿøk­ßkaÓ· ÝÞûþü“ö­¯úþ¨ÀGéýý\}Ý÷ÚQv¬W
+%jøÕ;*‘Ujíí«
++mQ ŠÛKµ¿V/]ˆ}ÅwÚézëðîââ Ê´•‹÷÷Ua¶›%qÇýqù™Š‹^.í­4-8¨¦q(¦“�6�¦“Wi«BÚÐ‡›Ãá±AØJ-4í4Âr€P�·‹icM=iv/j˜ÓœB¡®�¤Ÿ6šuM9@7lD8oo¬D5SÂ„ÕL`…„aLÁ„ÌI!&ç
+4Ð°®‚.;H¹ Í ¸ö]¦šF~Ô“i®š›Â
+;NÂ¨ …±[NÕB
+TGtÌEý´pÏÚLÆ!0±€S�ÉaÄQqñ2ðD•ˆˆ`„D"ƒœqËÉ¡aˆ4BcD2ðL&„Df8ˆŠ0PÂ f
+ˆî¢"­6´Æã§é¤	Jºj�b¡«è;*j*±ƒÂ
+ƒY¬kÿ ¶!’N@ðÌr�ä>™Á¶-2€L�c„Èhr
+,ƒ,<
+‚��<1rƒ@ä\ƒ;“r†Ó�<ŸÓ×OUL&ša0¡p™”A	ˆ2%¨NÈeYa4ö±~Ÿw_!œta?Ô‡†Ã4¨®«Ö@Ì�ñ|�‡rC¸ÌWipÓ»O³u›nc…opîùîC0wzüWÆ‡ÇÅ×otž°ÐÐ»ëä2ANÇ3�=ä8ærc�=ý/Ö»ÿîÞÚMßþøA„!›Íg‚ü»"¹‡	•‡Â\\»ÁA’ân{!l¸%a3P�c;�ÏÖU’ŒŽ44Ù2u(|ðAqÉ™Û6|‚qÉ9
+N ~è2ð�Ê€¤W Ð9VG„[S¹Œ*Ë‚NaýõÿÜ�ì{ò+„ÈáTƒFsÁ<.	ŽHs¹ä0ú1µj4Ða4"ÓBðŸ¡´Âj˜EDùÃ,.d,Ëû4@Êãá�‹	„hÁ•æâsMAaN„Ž¤
+àÐMDAš‡àCA„â¸Öì‡—²fÿýú�Ää	9œ9¢pO‰öUàš ÂåY,A„!­‚a´i;9Þ^èÄör9ÑwžM„ŒOfã›F'nòõÙÏ1Q½¡hÃß£i¦�ËÍ¦� ¨-S‹MQ�£MUØT6
+^ÐMSMèÚwZ1ß¼(Ep_¤ºúé„!Þ&œ]&ÂN¢ÐhÅÃUª1¾­0ßvlÓlÝjÛ	ßë¯Ù»ë»_
+¶r9û˜¡øNFn«°�ª°ÔÄ³t3/gt�’<òsTßºVÍäv»¼¼ç-<&÷kwvsï1wÂQOöú1Q‰Û8žócÞŒV¦)¾‹¿lÝn�›Õ8fïÿK×úïôî*Ó¿oí¥ûP®�_Ðw0jéé¿ö½ßwf
+ï—6jØNº³w�»fíZºafÛÒQöŸu…7^+¿¥ösÂ½=<Ã}'¥õ÷Wþ+Ö\rá{iÿõê!Â­ý�÷ˆ_×i¿�ßµ÷ºÿêþ—¯¡_¯?uè|Œ{·Áÿþõóx)¶Ø¯~Æ¶Ÿÿ]íï^:Wm.¶ýÿÿÛßù€Ÿõ…Ûýð¿úÿ0ï__¿Ä¦ø_¾`Oü¸EÌûóÇuoÿõÿ6æÿKaˆ-_úˆ'üðb¯î�‚åÂ?û_þþ+Õuÿýÿ|½ZK?«IÿWÿúÿþ¿¿Õ.¿ú1ýë¿­æþ›ÿ­ÿÿ
+/¾ÃþŒ¨/þé?Šÿö¼�þþõÿàˆÿÒþµþÝÿcKÿÿýëJý¸"³ÿÿF'à‹¯ ¿´°EÁKû`ˆû\úØ"êF?±ƒÿûöuOŒ]ÿì�éWù'Ûþ²1Üïï^=¯ÿÿkÿúþû¨"<þÑ€cý¿¥öMýø¯ÿÿJ»[õý�¿þ×í|“ïö¿Dvÿþ«ÿ¡ëÌ;¥þê—þ¾—VÚÚõ_kû«_ý¯±^ë÷kh4ëÕõ\¡×þÒÿm{ïn¯kÿÿîØ¦ï×Ñ€‚¾î>Û	v–¬S¤÷Vš÷£<ãé/ûuëÒû]=.ÂPv¶+Oÿïj/M[K‹M7Nâ!Úi¬v.ôí4NCý�†Nâ¶ê*Ö_
+Um?°�Ô]ÅúT5÷m|vÇ
+:í*ÂÄZz¢wôÓLI°’§} ï†¶¬T_Û±Pþ)Ð·MXi'{	ZˆlR
+ØQs‰,vÍ¥ñ\mÒÓaE*mØ ÂS^�!i¡aq«MÝ‹i46šL Ú	´†ÓL|S8�¡l4!ÂÓB‰óƒ¸¦8¨¥M§ŠZi¦�¶ƒj,1Pxˆ‹LŽ³š†1'›A2ðN"Œ6v¢�„!ÂÚÂa4Õ¹
+AÉŽÈõ›ÕYv§;>¡…S0V	¦¦Ã*˜
+ˆËý„ƒLB`„ZfõS!™vaa„!„Â!Ç(pÂ!È”ˆÐ90lw!’ÜE"+ˆÑ€GÈ�ƒ^šJ’®~ã´ˆd†ÎŠ®ð˜a1TÐØOÃ	¦š	µ�&‚ â!Çÿ!’qÈC�5§Â@ÄÈn@ðS²Ü†m„È)9
+« ¦ä2C2Qd2»�<Žk C�Ê�àÝÈg‚
+q£
+ª©¨L*…¨A‚ª`©�°.“OoDŽèÂï�AÈ
+#ý<5é5WÈÇZt…ÝÓL�á”îÑ!Ä&�ü8´í;§×ßÿúâŸM>øïà�–äÇ-ÁHkO	XäGLˆæ�Ã”äŸ!—iÿê@ñ_×íý{
+XR|_�¼˜L Â—ótº„!�N'²n|XA’â>£Ùp˜AåY‚ �…'ä¼¼ ¿’²c�ƒ—Ù,#ƒÁÁPfâá°S–9‡†K�d6‡,rPK‹˜A—yÌ#Â<"ÙÌ9u'ø“žÈlˆeá7<r
+R,‚�õ!œz ÒåAòVC@ä(úÃØFÕ0š£CF:i§º¦°CTcÓŒ,¿¨°˜BÂhÂa0š ÑêžƒXL/
+0�¡`šx!&švÈ10ƒ	 Ðˆ`¨5L!aWšÏÁBaa4& ök%~4d_'„KXDùÂ<r¬”a0ŒàÔ¬%ËîÍ¼'EÝ¤c¤ìÝKF'Rõ+Þæ;¶�$èÄÑ‹z¸a\¼éÛIÚ—˜Fú0­4‹¾ŒNÑ�£„ŒTbhÞÕM›
+4bv)�ë1æ6ŒMß1=ZŽ1P´ôm5Zaê°¨0�ªœX]M4˜aZºìÀ"j7ot�˜;ïOVÍÍ›¸÷ûsuúæ*¸f	8`’Ù‚·N“o¯¤ìÝ§Iún®�›ËªÞ™Ì÷­›º^Å6“ïSq»³wm›�;Ì#5ÙìØ{F&*ywc˜þìòhÃ£FöÎ$Îtbwð›io—n¾½j/L†?Øª~==zN+MWØûÇ¡~Þ†—¯QþÓ¡¥ë«I[ŒÙÖ‡i…Ç^ÿ6Äm%{Öîé=~õ½ÇU«w³Üé¿ØOûÓ´-3¼Ã¿jÌænÿúY„¶¸^ß{?ýÿ
+£ü?ÿ_ëãmf ½µ¿ë¼wÞ)ÒüBü¡Gÿõ¯øbëkþŸ¬zõúô´›ßûI¾ß�_ozÿ÷Çoö¿ké÷…ÿ
+ÿ.0üÀ1åÃúß˜ëÿèÚ#—þ`'ÂüÀ�õÿÿvî›Ñ€Ÿ¿‡î!ÿõÿÿF¿¿K¿ÿõaäc¥‡ü7.?£ÿý¿íõÿ¯ÿ¶•þ¾½ÿÿCzÿú6¯Zý×ÿ}«
+ûÿzôm6ÿ÷ÿÇÿ^¿ÿýÿÿ~�CÚùÝ·K
+¥~•kéÙ7ü>½’÷¯$?ßä£ë­úzÁOü":‚#÷÷$ÿ �|("ë±]õÿ‡Š
+í‚#ýoÐMÿFÿÿüÂÿß¿ùÿÿ×ÿ­®A{]wü›¾ÿ¯]n’ÿùŸþ×É?kßù!â®kø"?ûïëVÖ×þÿõû—Oº¯îÿÈ.;nõ÷ÿßø_×ÿþ¿ëûj½Þº«ØÕ=Šûî¿<-ªÚõ»õb¿øwÇ°ÒßØïµv?þÖø>›I×ìb¬¡ÿŠýo¶*KT`'ê­*íòÝì":/ÿªd¿×ûûïÿûI×ívÿü¡Îú!a6.»ªA§ÃU†ºa4.;JÒMŠbÝ=cÕZXøi'L[T­Õ¤Å6›°Ö*éxÝ�{¤Óˆ¿ØÛæ�ö�¶ôûêøØ¥Õ´¶.Úþ×ÿnô›¥ý½k¸¯ô›ãOŽG8vmN0×ìRq^û8”TU58”$-:j-¤ÚA†)6½ÚMŠŠxºb��4ØMRi¦.o¦¬&˜¨h4ÓcL1QqOkUq§Æ�¡í4ÓN,¬[Ih5µm%V“b­&M>Al
+8ƒXá‚i¡˜APˆˆh†©P°¬D0ƒ6�a`ÂÂ¦fÐBA„ÂöaÔ Bfõ¦A„QÅÔ¸�3¨ h5†�lÞ© ¼E´Å1èE†!F›†­¦)Ši¬DDq˜°Ê0`Ì`��à¸,4""pga†^A„h&Cˆˆ0A„B?ûB¤	AƒZúj	j6)tá¦Õd	`pá‚¬Dò q‚
+C�<°„r„�à\r »�<A	 �ášär
+|(]4Ó!£`�¹€È†@±	…!£ÈH'
+ša!¨ø"=F	ª¨]ƒû°¿…OWq¬8Ë×F%ï»†[�ÍpÑ'
+Lk×ÈºB¢ø»�wåÙ·ü_Èe8¨ä5\5þ¿ûý}>ú®’ŽƒÏK ¸êMËsBB�˜A,“œrÇ;’r–ƒÈf¹8Ž¤Ýrƒ@æ›ë˜r#�™eB‘½yì·#ÄÔƒCŽ¤œ�%‘�jC¬X&*Éq(;¸P„0™>.g„Cáˆ°A“š
+2ÏeX@ÏÅØ&`†CÌüNäH*Á3Án{"ù('2Éñpx%Äq2	Äà«"úÅ„N/CÇÚ
+4kÏA—ŠA„…ãAì�Â&3Á>%‰“ ÉÙVOøVŽ&…¦†ªši¡«HÇTÂ¢ó%BâÂ*1´aB¨BÂ±„,(A§0©„-B"BI„,*ÓÑ�Þ�§îèÂéè4b®ª°ª­L&…£h_¼ß‚mœòíî3um®¼*¦Ïr¬§—6W¦™Îˆ‡ÑÃNvH�£EÛÃèÅF6Î$“¢îÏ&ŒTchæ�º1ZœèÅ÷œß.ý{ºNˆ‡ØHÇ÷aLTb¶�§17a:7¹ŽÎzvs£éãiµl3úïö`»|xâ¼Àcû^Íµºa:v`û7~=Ùº“¤íý°ŸÒmÃo¸f*]Uþ×	ô{öÖÌúnÝý÷fí>×OOM¸uº¿ÿ_ýÿÐÅ~�$ºÛÒ¿Ûé¯ˆý¯µuý¿�†1ýŽîÃ]½új<A{ãÿöø¦èpÇáŒ1®4‡ôš×Ò}á�_0:ÿÿ0÷|ÀOÿ÷þ!y�Wˆ-;ÔÀl]í£f½†¿`Ÿ¥ýÌ¼/ÔÀ0¿öü/·ì6óçÿ_û}ÿÿÿøF×éŠý}_ÿÂø_ÿþ¹p¶·^_ÿZåïÿÿ·áy€ívÛô`'ü-÷ûùÿÿÁÐZÿ‚#ýýëÿÑ�éú7ý´²1þêûÃþÝûhÅûý«×ëúÿoæ%í¾oÜ":`ˆ÷íµÿMõì5_ú_Û_þ›_Òõëý*{_§~)µúÿ$>C¶Ø"?Ã‚#º_¿þH}ì›ßþŽþ—äœ§uÌîŽÿau_ÁÒÿëGo°DÅ{ýÿÚÿï÷÷ú_°Â1¿Õyp�…÷ÿû{_;»úÿÿ÷/¯í„ªÿ[ÿöýÿ{Õ†—í¯ÿ]Ûìi«ëi*ê�±QX=¥M´¶);µZ´Ö8½4ª—Rj©ÃØaVø¯û¥‡Å¯
+tÕŠ¶!ÃJãOÓˆ¾ˆpâ¡¥°ï¾ÒŠ�µŽÖÁû
+m|ñÒHXb­B.¢í¦šM6( ÚM´!Ä[NlEè] ö.)8¦“NM­ÅE¦Ä6"Ü'8“›IªvÉÐ¨‡ï|qQ°šL Ój!±ñI§â Âg© ‚¼azÃE„dpÚ»8�ac	¦o0…¸a<i»BÓ
+"6)vo0†Ôá‘ð˜V"LŽ(Wj,Æ4Ì+7¦š°«¦ƒ[»LâT˜5ÿ�4†H6¹�Z0ˆ¸aˆˆeðD2AhqaL š!˜!ê–@Ø �(0k h'(Ké†þ('°ƒWˆ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Ð²
+.Iò ­„„\!,‰d0‚|DÂ%æâ>L&C¹Ï#âÌƒF0‹„ ‚a´Âhéh4Ði„.‚a:A¦Xi Â‚pA„Ði¦m2 ÊAKÓÓTôÂiýÞšéªh;M?û_GM4þì.Ž,Úª‚ó‹hØÚ}¯Í8k
+ºNC=Í¼Üæù.aæìÝ
+•Ò~mö¤O ÜÝ£[èÝ›³sçœ†‚“§V—ïN—¤)ûÕ~ú´‚«G.ÚMïþAoÏ÷	Ö•ùÇÛÿ[È|_WÓ**ëé¤¿ºßýŠñT¢¢È=¯…Ø¾—þaíª_±Z�Ü»�Ã$
+ÈKý&¼%½ÿIiT7J¿\qÿÂ]Ç¥ÿ•úuê·ÿ÷°ÿ�¯_ûÿ_øÒNû?Ò<ƒœ¼�_ÃjÒ¹µÿKý¾¦‚›0«ý^m¿
+ë	ëý+ÃÓ¯ÿvhÂWø~p9Àñÿê—ü?[íÿ¾Tyo.ºOÚ»IWï}ikø×ùW�úèÛü^©×äW÷÷T­]ÿþÂýkkÚMÕã­£}i¿øv—M°’A=\ÞÖ¼žZÿ±±LWSÇÄVªÇ1\«Ž8ùÒ:H)¯ßjµië¦�Zë¦˜¤!ÓM]ÿû	„Ó´ÓM>­0©ªé¦ƒXi¦«¯ý‚aD28pª„pÂÁP°ƒ	„„¦€¶'|� qÅ¢0R5��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü@endstream
+endobj
+32 0 obj<</BitsPerComponent 8/ColorSpace 82 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 99/Length 604/Width 76>>stream
+8;Z\7!Kt>C#i$Nss5/!?E>NH@(ucgm9UKO`[YVH/JgnD(b0LGj/O]`,f0"PS/dl=q
+DLjFBn:=q&R)g@nqtfL6ZXe-Kq@Tnm[eAn%RMRS<jNs>2"0V;smKb8+k40ZCHuXPD
+;RjrMP/UC\fa0^Qens#D.Q*[Kkl:TW-)2SB"A;5(3"$MGL8iF-NUO"TB^1U#%\e@J
+26jZn*e6.V3O9j9Uim>hfl`j[NLstH.Mq^Oi=\0qak[+>fVb%8V9E19=]Vp2>7c#U
+IbC$BGUREej03[P=ChG>@-5W%mCR4j-RtTi4)nLYk&Ot,1lSe^O.1uY`n"KLKjUUA
+*+4ClCpqj\!)2aj+n+#HIA7`7.&^Y(:j2eef7:"d\ds@6kk4Y+b:s#LU2lo/^,_'&
+h4Go/)(cNb<5,\bn/^"'!A'^hKK%X)2A?+jMUu+ZI]GFtg4M,O+D9toS=?H79l,P;
+/ji@pN[9sLRoW_qDN?:7GG)'"(FN0(8!aAXVO"2IhZG0M91t6[_MR)0>=+U3h=NJ0
+1Z%OkPI_\E\`CKH-+'ufEn2+2Qo=s_=Nqn)/K29Tk(1M-B8#%j;oJe;4dE``^[`rO
+$ij'aP\U~>endstream
+endobj
+33 0 obj<</Filter/FlateDecode/Length 10>>stream
+xœ+äî|endstream
+endobj
+34 0 obj<</Filter/FlateDecode/Length 4851>>stream
+H‰ŒWË’ÛÈüþn¢Â"Ô/4Žða¥
+Ùòe×Ò„/#0$f	Ì�Æ»³€~�hÉŠ��´DWuuUVVÏ8þ6<k³ÍÛOÍ©¾´_›÷ý©ÚssÚ}6´–±Ló"7YYé\fC³¹ßü1ÿÄ*•Ñ÷é‹Ô*Û±œ1UNs#²ýyóöã™‹ì×~ó�Í»›É£Kß~0¸ýæ>c9/ªªÊnöøpóœÉìfÈ6:çÓI�ëŒW,™.M^d7çÍöæ—O?}Ì^ßü^8›ÝL72ÆÉÏ¦Bœd]Á‚+ƒÿÓÅd{»ýxiÎcözWjÉs¾ýüØìÛûv�§÷~ÿ×Íß7ðTÙˆ6;•ã$†ÃB#¶Ãfûù©±—Wî	‚9“WóÕ™�:W™V
+×SØ%û¦Ù¯Â¦|9Ó8jQ2d<Ÿ;Ÿ'[z¨Z?ib’L„ÀŸdò©ûÓ½ËÛ‰DvFýý¡š=YÕ§å+7e®¬�Ì¸)`ìêîáÔø{¤‹¯tÙ€©(ÊE|</Í«Ÿ®"C*¹*Èôó¾îº¶{˜¬ãJøTt%Õi@P‰˜àÅh¤b>ÄµxåÏø«w\ç%«Jª;3JLG?yñ•"×•qWö÷k_äAÛï‡v¼ÔÝ>G;éÂEÅvø²?§"Câ+>#RjCÇ�êîÒ÷59F–Ë-Ú÷Øf8S£>÷¤àóK>)ÞÏÎýgøcÅŒp@çí`k‹Ám1Ð·²B]Ã,8/ WHáÉ#”VÞV(	OÁ–kFý¸lŠEùñ«ÐŒúa²X6L¹ˆéÔŒc*{&/«¢\ôóïýs3$êZJîP2öOCTµ¹�¸ÌEÅ¤=òë{¡þ™®W%@‰”/×M¡îÒ*WÛç¦}8^<ópw?XÈRûúï¼ðo‘BèlWá'üMçÞå)rV:dý‚¾~ÛqÍ%œ-JÌ)ãª±Ì¼°ö»äŽ“áüç¦m•®ñ:AÂÑ÷Çz¨÷À/z£Ý'Šßcˆ„
+!ñçDçíød^ÃÛz¿‚£úA�ÚÁcí8ÑßŽ3C':ÛÌ=xÂÂœ˜SÛ5õÐ^^”cP³Ñ•*×Àá��C.+KŽ„V
+'¹½ôk´jMéõGšîèiaÉgªR—c“ÀøTŒZbª
+8£“.kš	A bª—?Wa ¢p§oñ×vè»sÓMP®h˜žëGJ~YÖ-¤C»`22éªMÔ¯äö{×ìÑÀõðâRÂCJBÍlf¯éV
+×”5¡ý?©¼
+^ðŸÍ«gŠ}ª±Û"Tzð‚W÷Æ�ce”kúÐD/‚F…;tW�ÍaÍ¾¡¯�ÛÐ$¼DI&‘vWÔ³€Î„¨Çõ¥þ1JÀtÔ ÎâvÛß]jt"ÜiÄ�GýÓÃÑ‚áðC)>€Ö·Ç†hwsê4pzµý[ƒþ tAj¡óê¸‘ñ2Y>iCÛ¬K“Ó–rŒãjÒŒ—ñŠç¡:àßÀ¨H ÏeÜá	Ñß÷ÃÙV%Bå¨¾/ÜKuUiŠ)!¼˜Æ†y=>
+)¹£rä[þÆ<WFºg/ÔÇÍðJ9~{>¶¤åh”â»‡éj×ÌÞµŽ¦ßí|û®à(Õ©Ÿå´ŸiQ¼F˜¶G�Jõ*J67¤M2¶•ë�Œì-Úµíýñb\Ð÷`°…
+í0´z¤Ì]Uî|M£S«¿›’ó
+ý]Y¿@ÁÝƒžÛËñÈºÝþþ®ÚáZ@¼@A¦èWñ¨X± •Öã$0§~ö}]‘LRØ1æ�
+ÝŸèê ö%úYGç#Þ]¯ÓˆVšY­>éØ<9..?¤Hë�`î%Í×&Œ‚¨§£ôŽ�uJW‡ÈTÆK³-‚`b32¤ƒÂáÓoûó›Tçk­KWÂÐa»I‡Ï„ia!íŒ�èð«
+-êGÄíV0”†$º%ž À‡¹`Šø·Û}:a‹#
+â„í |ÓJ�µ{$øíl*/|ævF�GT¤~hù,¿ôöCû@ÿ6åV~ÙÖ_^áóíxìŸÇ…è‚®Ùø[ëK"e!ÊWŠpwÐ.~mqýÞ|Cú(áš;’D›SEŒ>=–µ�Úå¡Bì$í·wÍå¹iR½ª!Ë¥çè†'RJ 	b��ÂAúb.4=8Ò2~spSRä˜÷ÅBâýˆËƒd<<%gBØln§^ÞAŽ�omwzI±6«´Cl×w^)¯]96
+?æ'IL);ý¬uèÏN5kßpÂm™ÆŠ
+›åï6¨DC…Ó–ë¯@–¡‰ƒdhêÚè))R–F‡»�—««Ù<˜ç¯û:q�$Æ-p1•#’¤IC  Ô—©ðIw`n¯,ƒÜD×ÝQ×%ZX—ž æ†Ã>DŸ‹Â9ÅHxÚ»§ôà6sW“[„<S¨1@Çúüx
+è+®wL�q®ˆaY‰Uh¡.ÙšŒ%Z$:š^Â~ì=>ý·ö•@˜ÞM�üký4ŽmÝQIR•ŸÑC‡zH�#—9ZÎ©�CóµµšÆÇ¸TÂ"¥ÌÌð‹âZëÃ"žyuÂ%Ÿ^)$éÖ'¿¤rû~zY“­EŽ±éÕjzéúsKÜ´Z"*gRúºa‰(�ËLVÚªhX"¾¿è–‡æ±Ý»D<É¼4ªºêJæÕœMq-Æ�ÆÐû/¯ó«Dœ�wÉÁvQ”ìôÉož$F?6Vƒs{�_Rq† n·ãOõ@‹ËNB�	Ì€Ë±?¼Y#òJuuëj‹�–ãªÎ!*ºÅ±ë@u AËÊ¢!ÖNq`‹†U&:ü½Õ$¼ã‚¥vI¾RpEp[U`€à˜ö¬?{�Â\E`-$ºu²¸±¡­jFkú	ô¤E–¨�]ÙÒ¯™
+.%ÄPdÕßŸëÇ+$ïþÌ2:oÀYx3 ¾Û‡ÓáehNž@B• ì!Idt:ê*Ù�èª*:?6ÝØûcÛC®4C;×¤Åm…œ›Ý #¯~U¿ù?™ÂÝ¨Ì"V§·A;¼øÙ‘UÐÖ™$Ù9Y>}Ùìè{ûA¯«jl† „QÕ’´ƒ·ýdü œ•·šl¦
+Eç)•Œ—‡?¡l…RöÒ*Ÿ¡±ù¡Û|_¶Ü‡sfbi¡u*“è½yî=“v©‹Ô"=sÄœv;š­<2<$®Kì< Ž"²J�Ùˆœ]cWQãc;ˆ\�”í†Å/nÅZfâX­´Í×\°33YÑÐFÍJ­»ò�!	%àxõ¡é°©œ�4ŒHß9f"Õïã¬ðÀæ•OŠÒn�N¼þhÞi[°#¶òÆAÑ~�6ºJF‘Ô’�7¥Nà[5ë
+ñë›[‚€?ùvögæv)¹sk‡.‚UŠ9XõËUMh_›¦2�$£„[S‡Á¯©Šôî%ìQþÁP‰¼tªïRÛY¡Œ›$+uÊéQ^C}ÝÕwí	k÷Ùël0k²zlÆÄí8ªôëãSbŽãéÌèl=�Åúsr}rS¡rý«Ðõ;¦-nÎÃw+lëž‚¦7Þ&]Ý$ÃpÔæ”—ËŽÛÈ†ŸÀï`dha
+¬;¹‹
+;c3ccÚÙD+¶D«™i‘
+Jr�ß>ÿ)Ö�dÉéxÓÌº�Ëÿ'.ì‡ü+á³{ß®e:îlBý£XàÃo|ð©›_I­ï£ã¢nÝÜ1››óuÿ�ãªïfd¨—`¾–ž›�áàKÿÔ�-tèÍ
+†¶£1ª¶¸’¦üö:¤®�fùòÐå@Zæ8¦Àk²z»ðÇÓº'f-Écã‚œªÔÁÍÁ0~xò}Ô­n§³ðýÎú†FÃo.ÍŸ-CÂ�T�w*­?w‡ö4…�Q©ØLûæc‰WhþŸô–À?Ÿ‹¾ýµ+%M?´õÖ'¢N�rŠâD…VÜ
+½³\‹O•¶VÊ­I‘»MÞ¯²m sàiå3¬}ïÎ%�™€ön	ŽÓ”ˆ¸äoc{ú»7~‘¡
+íòaðW"lu²øË›–³ÓÔkÉç¾œ&�\iT|)I‘m�Ò&5Æa	é‚¬¨Ìâ’æÛ¢à_™ð|]Ó¯ø5Pb¼z” ÷J;�£¡Rq=¿SsiÖˆ¶Ì.ÖÉÒ‚O¸Ø%y�r­aóR3ËÒ9á¿?ÞO8 ¶¾°*$@Z¿ô_Ùt],ÕL0‰N%Ÿ/¼C�šñ°î×˜	J1ëì~Õ¡ýÞ51
+ÉÄjfšÆë‰¾?~Ú¾”„¡_~áÝ‡ßï>ÿ±èKLÀ]×¶ïÞÞ}x¿dÖm©%/‡RÖû}{ûe9Bàù9y“¶Wüºwÿúõý§ßÉ
+…þíSC±*æòý©_[«–±ÆE„dvÜñoˆöZ#…2³Ÿš§v|“3/]rö3˜ˆFÜöß»qèOmi×%‚ôã±(�BýVµÔÞ
+¿y0M ‚¢*�_’÷.o4ËD=ëi€Š´¹G&ª K�cê	ÆBª¨5M²§‹÷-¯“×æ†‰±}[Œµ— iŠËuŠ©½5	OÜ£Y¦øæá†ä>YØ¯ßŽÿãªò°ºß_Ÿ`K\–[cs»C†y+îwù66§öyÿÜ®�ƒF×Ê‡úëCž�òæ}ÂF«-÷$ŸÜl^¹Ñ‘)ïÖ
+^o.ÏCqèPÆghUrÁ´¦I­=ŸÛÇG'edå³‹sL¢^c¤IŽKáàüÔ�ã\*‡"vC$;UN[íqä9Ó™¸¬�;K%&z|hÇu8q)#ýVm“çÓ{ZB–.?_†±ÍÄ!¤LãÈ[N64Û´øujlõ¯ˆFùÑæ{óxm×ªi1~ªoæì•+j’$ËU#Y±äÃî’yá2X^QT¹{0nšAò:�)„$§äb¦Ü7DªÃ§©&±äºò�tí]ŒÙW®>ÊZû�ž³=§Š±=Â±ÛÃ,4Ìßtf‰¤XjÖm�¦ºÏ£XÎ‹Nkí›üi8wÁü�]-±•Ë ;¶d†ûKƒ)Wdg@@@ãŠšŽ.äJE;mLë0@k2`¥ÔñŒu=^¹:hB0ÿ±÷`Œ $‹ûÐüoÝ�(9æþ<<^/™ÈŠÄ?w!T(¹4«6o{Ä¤
+3Ê³CÁðiÄ¬÷»c?xM/%¦OÝöö^%ý¥à©›Ã5F8�™ÚJQßrjÄÕïá(7ûÖ¬D‚ªÊ×å¼YCOKCÞÇ™Y8üÍXƒ€“ï!¬û¦ïÑ4v�ƒåCäª©o(r\‹¥P{±0ÝñË»ºÀ{3a5µw–ûvß\ÏùÜ²ZÎC„Â¨×!rÁ1¼ôÆ(®ƒHAª"¦(�³u´{õRX–F§kw€óãØ¶P˜¢B§€á†ëña�:ÌsZù'{:‹Q+¸c¨ÔŽ³Çß…£Š¯ÄVl>¶DßLçÏÙhÙ kJ…‚aµv¥¬:»›Í#¡œu¸•Ð<Q¢ÁãÊd.K5„¯5AVpœ¸pè_x]ÎV/žg$–ó¥]#r¤°.ËrÉò}ÓçöGu{c@o¸²å,ª²ÐÕDÍz^C¥)nBáçn ã–¬Kêü«.…×�æœ9ØìwùTNíÉ£ØâAzË4×Œcóƒ„e; ‚ºt½Ç$´4žŠ ¶JVrVµcÛ¬|,.%’£¼"ÎL73$¥qQÌ¿h¸ÿO»¿l‡7îM•wg?2M•NeóõÅ&$$9^X¹# Ûƒ`I…*5ÅÇaŽç	yæç9îÔ*¶qhôE©EFñmž(¾H§ÁÌ…Œà*�–†g”caj[ø«{WXp¢LÖÒØ]ÿÙ·­Ü\EÎ,È¯^3­±¡•Û—FVñtánsç„§¯¸òÁƒx�‚´Ž‹)l³ÆY÷à›45O«ý>3ê¤MåøZÉMß^Çi8�‹Wøy¡‘«ð•�*ª¹J½jÛœé|¸8tÓ<‡±»<œÖj�Ë²ö
+Ú²CÜ‚’§äHD„ÚoÇ”ðYìÖ<ò“ÚJÍŽ)KžŽ�ëÌÃùýKCæ»uj"vb…ÌŽP;r�rœ�·RoèWü<ªøºèÃ(•
+xâñÏˆ}.°%g¾±šÕeÊt‡ÅˆµÜJ% ¼›*òYVŠIF
+#P°¶yç%I15µ23Rò=ê»3	uwnÀEƒ4S]D¬iÚs 9¤«|BX ó 
+W7ÊYªýnaRC¡W²öáÌ$—¥ÃDÈæB[ðU±Y4(¹o2»EƒÎ¶
+K&£Ýæúð FáèåºsE>¥ö«½zY)	�ÈßøÿK"Üêž_¹Û¼k~´çŽì^–[ØoíH¶õ—©ãŽr¹c…¿w1¯õ6W§›|øúê¿cbŠáendstream
+endobj
+35 0 obj<</Filter/FlateDecode/Length 149>>stream
+xœU‹AÂ FïþŠïX¦cØÚm‘AÇ…‡®csd85uDýú¼Æ»¼ÇÇ×“9)²¿Tj&¬Àqd´®ÐPÑ@-dÓ­ùá£ùê	ÖŒÚ¥"kÒ%“‹gßâ*¥Ä=X5ÅÙ¿�õÃT6ïÐ…h,ÄcG\´õsôËÿ
+7�r4c6Þ%!ØÝª'‘Šôä�™3Kendstream
+endobj
+36 0 obj<</BaseFont/TimesNewRomanPS-ItalicMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 83 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 250 333 420 500 500 833 778 214 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444 389 400 275 400 541 778 500 778 333 500 556 889 500 500 333 1000 500 333 944 778 556 778 778 333 333 556 556 350 500 889 333 980 389 333 667 778 389 556 250 389 500 500 500 500 275 500 333 760 276 500 675 333 760 500 400 549 300 300 333 576 523 250 333 300 310 500 750 750 750 500 611 611 611 611 611 611 889 667 611 611 611 611 333 333 333 333 722 667 722 722 722 722 722 675 722 722 722 722 722 556 611 500 500 500 500 500 500 500 667 444 444 444 444 444 278 278 278 278 500 500 500 500 500 500 500 549 500 500 500 500 500 444 500 444]>>
+endobj
+37 0 obj<</BaseFont/TimesNewRomanPS-BoldItalicMT/Encoding/WinAnsiEncoding/FirstChar 0/FontDescriptor 84 0 R/LastChar 255/Subtype/TrueType/Type/Font/Widths[778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 778 250 389 555 500 500 833 778 278 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389 348 220 348 570 778 500 778 333 500 500 1000 500 500 333 1000 556 333 944 778 611 778 778 333 333 500 500 350 500 1000 333 1000 389 333 722 778 389 611 250 389 500 500 500 500 220 500 333 747 266 500 606 333 747 500 400 549 300 300 333 576 500 250 333 300 300 500 750 750 750 500 667 667 667 667 667 667 944 667 667 667 667 667 389 389 389 389 722 722 722 722 722 722 722 570 722 722 722 722 722 611 611 500 500 500 500 500 500 500 722 444 444 444 444 444 278 278 278 278 500 556 500 500 500 500 500 549 500 556 556 556 556 444 500 444]>>
+endobj
+38 0 obj<</BitsPerComponent 1/ColorSpace/DeviceGray/Decode[1 0]/DecodeParms<</Columns 1839/K -1/Rows 2378>>/Filter/CCITTFaxDecode/Height 2378/Intent/RelativeColormetric/Length 49106/Name/X/Subtype/Image/Type/XObject/Width 1839>>stream
+&  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Øƒ•„ äZâDö@Ø,?~í˜¬ Ì¹xÅ]¿®¯ü|q_òßùuÂ\n@Ð‹HÁÉ2Eóª�näŽaË‚D„4‡#ã›wûq^¨˜Eã¹�Šdäv˜�‚–À�³ÎD�^7ÞGÃLŽÆhŽ†åÁœŽ¸B/ñsÓ^CL}®±]üRÇÿ!��òæÿ$ù'²¡°üƒ;ä3ð¯úëÿÿÞ«hR…&@ÐÇMP¥^Äk t�ÈiŽC$Ç xn8÷�gƒ8þC 7†cÿäŸ¿ëÿÿë¢†ãÿˆÞ+þAœqû�ÐGz!˜þ">@Ô
+8�á�Èa+¯	�kr^�¦Jd[ öGwóUÑ…`Ð4
+kÒq—Â b�†aÑŠŒ~ÿu÷ï½Ãÿto'„ï ŽIÓ,rPHsÁxBXA÷õ¥}{SM3XA•`˜AÆi ë¯¿û!¤?¶Í§/´cjÒ¦Œ&ÍíÝÌ$ŒpÕñ_ù01d,yqÈ3¹§ ÎäÜƒ8äßØtÄtîÐy�¾Õ6Ì}ÒoŽµý0¿ãÿíó2�ô"¾¾ðÿ˜A\øˆÖ>ø}«Âíÿ·þ3
+‡(ú£	¹1Çÿ jîú‚.¿ª0½·ÿ¸j§ß|ƒhä2˜r}_ûó	­˜ÛGKíÿ�[¯ün—òs"LŽdY‘fE™d_"Ì‹2,ÈN"Ì‹äY‘fDð¤ZÌ‹2,È§%2,Èƒ�ÉÌ‹2,È³ræEåíob£þ>ïºîýWúÕ×ÄGêGÁˆ:øˆ�á‘Áhø¯Ùtˆ3ÇÓª­DZÆ„FÆšq„˜Õü‚Ø6Ž""8ˆ‡Ù(A Á<C·fzÚ„ÂaQC„I„Ÿâ>#C 6ÂèÃäÜ�¨mDqñ4ü�˜iŽ@ð"ÉAÈw.ÂjB¿úzi…UUßM…×®šú®"#©vw.
+çÉ~ô®ëýúqfóáŽëúþ¾›'U_Õ_—_ÈiAœrƒ8äÇ—M¿˜~a+þ]5ý/ÿ[Cb½�ðÒZ_Å¾>A�þù‚¯Ð×þ?Œ�jýŠ‚!]J~Žÿþ@èägVÝƒ[…�ÓCÁìœyy°\H†Û•¿ `sŽBSž…�×rz”²C0rzÚòf„�Ò x3�§µÞƒŠôÝt
+?ÑgðÈ
+8äÜi¡ÁÃ~±
+ˆÿ�b8ˆˆÿˆÿõá—ˆá”wypU*‘ÌŽçpÈñ6ŠÈR82•¼ð)éü�Ðÿÿ¢cùX7ƒ9Á©ï!�ÎA�È3¹qü� Ì!�mr-÷ü�á¸ÿJšþ@ðgÿÃD‡˜v‘ŽC4v¿ÿ×qÃ˜ÿÿú«ã�É«!,�÷�fÿôÉY'<}ynh#Â]�ËIEr ær>M4Ç×ÿôL!
+±XM3ŽTðOÁA„Â†© EB0�b/�ð‘´Ðæ<;˜Ú7¸ãUÕÚËÎmrÇü5	²°ÖhÝ†ÍÔºÜ3ŒNbl'I°Ííjº�A”ä$Èè@ð×ò,<?�šdã�y�<<‰Ÿèmwb§Ž‡ßz÷ÞžÇþâÑdY‘fEò$È¾³âÌSâÞG2,È³"Ì‹4f,‹2,È³"ùÈ“´?þ¸mß¯øºÿûø¦Gx0B""�<08(´Ž†fƒ#�àGù€Ÿl;óÿWõ¿aÿ1ñÿÿ†ÈdƒC¿}ÿ£k_ûàÐÿþ�ïoo¬"?&ÿä‡AwõáÛÎíëäË YÄ\/�äŸýµë;½×ÚÞþ÷þÿ˜w�8¤‰¹
+!ü�àßÓ×U¿¸a{íïö8¥øi/­ÿ{[„» Ìäaü��ÑŽgf€qµ×øqWÝ­­¥O­ÇØ}¤šiì!)' x3�þ¾Ì'
+AKËð›M!TTSM*jÓÒaŠB"„GÈ3?ßØtÍfü7zc¯í™tGŒ&]0ƒ	»°Ó7„Õ4Ì#¥ãõì1M;óYð¨8åÚ
+;Ñtü�,4œ�˜l|ƒ3ýý°“}´ßÛUÿÿÛÚ˜^ ŠŽ²p”T�ø}ÿ�Œ[ßýqÈ3Ž5àˆíë·Ì UG|ãëù°kÖl xQÊsyIå‰�<§"P0ƒ0ç¤<ŽE¡ÏåS¼wÓò£Vœ„r
+-S*)#¿ ¶gõ®Ò‹ÐÓì§ÓŠãªkÙ£/ÁÎÓätGDpÌ;¢3ÈäGeó4l;«#¢ C²ÄGDr¿¡LF…E5´Ó0±ñ‘À˜.ö™x�Á¸Oâ"#â¤2C[+!’ºé"8e‚’ü˜è<�á”?�%�dd4œ/\��ò»ù°YÃŽN‚ÁÉà)xCPrÈLòÎAœ{ÿò†ãþ…úh0˜A„ÿëÈ{#ÿôoº£IMtoÿÿÿÿÐq—4¹aNE„Ñ‰Óÿ¿ÿúõíÚª¶šo	Öÿÿÿÿrc�[¥U¶¸þXærC‘¹àœýÝÿûíäÜ³‚^ÚJqû´¿ÂÂ!&C%Ž#ÕU8¯BªlTAûi~èZ#ùcˆýó—ª»V»õ³™Ê¸æÈdœ°JÿµðÃm­[ý©‡}­/¦º§M0Ÿü3ß·B”i?«û]{ÿé§0¿‹øoJ¿MïÓÒ¿ÿæaWï \vGDsûõ0a·ôc}^ž—ÿÿûˆÇù°(7kÕÒL?ônz¿ÿëku3ÌSà`ŽŽ|S1LÅ3ÌRàÐxS1Ae“…†\žDò'‘&GB
+ŽPä?‘fE™d\ûé ˆêI÷Ò{Þ’½-/ýÞGhA„BÎ/i—HD3‚™Šÿ Žh#xpˆI‚ØD6¨G4 ×sÂ�}­%µ]$›é½Kwÿ÷ÿO xiŽ"
+fzï© xnäÇQ~×­ŠÛé«IÒIô;¥»½zæiÿ�\¡ëþ)0‡IE±Lm
+jÇû×�ÒÈÇ²ß¿þ0Ö&…:aN"8Ž©ÏÂþ½ÿÿ#ÁˆŒ"`¿+ïçrã¿ÿÄFš…_÷ãõþþ"#ëþ?õÿ‹ã�qÿÇÄrc‚þ#øþHü†Hj¾?ãÿå�ÿÿÿô?ÿ~ßø�n¾@Ð��Ò|±ýsAÀ‡òaµ	�!üƒ8äÇÌ?¾ŒÁƒ<ƒ8äßÈ-�F�p¤À¿Â&ýö>ÃÿõõTÂÿ�y¹ÿüÞo�aÃˆrÕÜÄ÷ÿï÷ûß
+ŸõFÄM¯¯ÿïµã}uºÿKÓÿ”?ýùwÿ‡2w‘x®4ÂpO´î¯ÉFÿÿ_þ?ø@Ða>;	ª4š×œ2A‚àÉÇÿ®ýW³ž¦7ÌOÛÿFÖ9ÿôaÃ	ûMR[¥S‰°ƒôÔ–÷ÿÿ·µ{wÇõ	ðm~ü{ß¯_ÿŠÿ^ßû»þà�ãU¿ëá{U˜	ÿÿýgçþ½ÿþŒ.ñûïïWP”‚Øqÿ÷ïÿ	?<–H~¿í}Š…�ÕoßK¯þ¾ž×Fzê¡4O˜iä4Çt¯^ò…r¸ÿ·Úk½1Üù|�™B^Ú£’"8Žÿ Î9qÈ3­{õ���g}m(‹]éo¶…m/šHÂhÂ£_â÷ã×½¿ Ø©Î›[\4/Š�Š†ûç¯ÿÖEÿÿÃA„Ë°„DF\ÜòL a[ÿ	ìöDò,ò
+ã�£�?{ë ¢
+ŠÈÄDEC�4Ü�ØK«¥¹dY‘fE™æEš™È³"Ì‹äYòƒæ¡È³"ÌŠrSC"qòS#¡dYåÐ�?×!’ýypÒÑÑÄD>Ñ‘öGaÛý¦G
+hŠiÝ3iä_3JÒ!’r©¿ô"88ˆˆ×¥ä#ˆ¸�Ž±Æ†ûëõø��ƒ0‚azG~«!’Ã–ý}‚��&¸ìº.xí�ïöxˆ‹õWÿÿù àðÂh5ëÿxÿ"#Oÿ_ÿÿ¾¿ø"?¯ÿÈ�;ù
+1È3�ýúî@ðã�È
+Çò`Ûd6A,!`Ð™
+w «d2�r
+pE·üƒ;‚ÿþ¤#äßò`pBÚ¯„Ô È9Â
+?þ/ÿKÿíäv‘„×!¤;[ú1µ!’
+Ç_ÿÛÿönañIÜT]ÃªO.Ù�^w�gŸÇÛÚÿ÷}quþ`ÿº×ßäoõbÿþßþCUÿ…_¯ÿâ?ÒÿþJÉa;Ÿažâì«L·-Êrì–à¾.Ê°´BÁær-äïû©ƒßë–äoþLÿÒ	…;CM!9(BÂ
+ÐhZ0„0Š8Aëi1áqñß„PïÝã�êš1æ6�ðÍ£}žƒÂ6¨§èÆiÑˆ�¨Þôm5F.ŒoØ¦£¡ïüGâ¦!ºO]o»7Q‡8f3zb™Žû6‚ëéÙº¬.Ÿ¦˜]ÿ¯ÿ_nýô¯ÿIü1µ½>Ø¯ÿüz¶>?oëÅ.½Ý&ÿü}w ¸…véÿÓÿÿf6�›öþ½ÿõýýtõö×˜€ÛÒ0™�Ís¾C$5Gý~¿æ÷_ÿÿþ·ú1¬#j¿õªM¦ßþÿ·†?÷»þÿÿÁÿý¤úéŠò1ÿuÿûý»'þ¾—¿í§ÿ_úÿ]¯[þCHÿè�áGý¶Ózûöý¿á¦°eCk­„
+ÿí†^¢üƒ8ä
+Ç¿_ ¸öAœrïëqTL&ªÅ”{[VÒâþiŽ6šq¢‡b”Ž;Úÿæk¿–å×úl2¾)ŠN¬1H[›m5lTE¶„] ïcþû�ÿÿßMÃ[[1„8!i6i Ða`ˆ;7Š
+ÒL Â!®?üÇ˜ÿÿò�´ä2¼\D\†H3ÙGÿÿü{ÿÈ¹	Úûÿÿý5àŠ„¨HŒ~ºëÿëb´¿Kï½ïóŽF?ÿRèÅúÐ9à†c3Á´Àr8__òƒqÊr'�<GòÒ±§ÿïÈ³"Ì‹2,È³"Ì hÌS1™Šf(_õù¦E™èEðBÓ"ÌŽdY‘fD™æñ�¾ Š�a<6ûˆ4�ÿûÔ¸·i‘Ò µ›õÖXâ"#ÿúÈá’Þ¿˜\ÿÿ¼îýå�ÿÂññcN)�îþ@Ì
+Ç¯¬†�à�ÿ©ŸÈ-�\tÈ”4ÐaŸ ÎäÇS¿¡î¿! xnäÇ xn?„/ h|'Á1ÿøêýÿýp¡ šdÍÿÿøZ–?ÿÌ8ª˜™�"?Þ¾êý«‡AK·\?ü~¿Çÿ÷ x`rÒ^ìWß�=ÿûÿ¼•‘Ù(<‚¬”Ê°DâNäà�ÏH"c¨½¤,økÿïÿÿý±0ƒBÂ˜L!a°‰÷ÖÆ<kïÿÉ¿_ðÑ¿1ïyõI ëhÇ˜Þ�¦§þ#_ºˆˆûuilÝÃnÂ½ª˜Û7U¤›ïzû¿ïØjÓÝïðTõíGÍÏakÿú�‡¡¿ÿý_úé´©§ÿÿðÞÿûK÷Y€[O¤¤ÜÿßÈ-�;¾Œ_ÿØ®cý¯úAÇïü�ÿ·dÝ*ÿþ´¿b²OÞ•d2A¤rcÿþ7õÿÿú0Rþ
+ÿ¤‰êCIÐ¿j¿ûØ«Aúþ³@»OÐEÅo¡†\9g Î<Ž}ÿ¼ŒsŽC!\5â-M¸a8îÑ;JÚJC$5Gÿë^ª±²ï�<7ø Ó8„_¶Ä[
+ÓŽˆd†\Eÿ÷N×ÿð˜L!qÈqÙˆŽˆê,0¦Ò�ÿïß{Áÿ¬DW„8ˆˆÿý¯ÿ}ö«²>G/ÿÒð·Æ¿ø©ô„õ»øt¿×ì&(�°Å÷ñûðŸ}d
+‡
+xˆ_&</o„"7ˆ¤EÂ&É$’B’I„RåÄªù�"<97†¢cøÔQT.…AôC¾DÈ'=^‘Û?¿Æ¸þ¢æb™Šf)_0!ñLÅ3ÌS1—NIïîÿ!©ÄI‘fE™dþD™?«áÈà®!¡¦ÓLŽˆúÏ
+f)˜ú×ÿÉ™Šþ¦D$È³"Ì‹2,ï‹È~!°r`²9Ã’ùµÈd‚ãáðÿüÁ‚!’
+�[‰”:�HL& ÞÈ["Y�Ê�¿¢Q�<4Ç Î?ÿÿ^w Îä2w!–>…£u@Š„L Â«ß!¤ÿþþ>A�ûÃ<žr�Ói£{Fý¾w|ãÿýw¯õ–ãÿÂouåí7Mñ§ÿ�¿÷ÿ_ÿ½]:ÿ.m­ªür=õçwïü†qÌ9	%�|22:dc‘3‘ ‹zãÕ­‘ŽA$8MXB!‚üƒ8ùtõÿýü—Â'š
+42à4 a4½‚³„B„qþ`þÿßÿÿ¦š1Ñ´Ñ‰†	á5Õ4Óý~�4.ÿû¯ý¿	LvríBov·jb°¦&ÎnbËß×ý›9œõˆÿzû¿ˆ�ÅSmkHizNÿ_ZZöW&¾»ÓN?§{×¯–?Ð¯ÿßýŽÒï�ñ’÷Qü†@,¿ì/êC«øüß÷æÿ‡¿ó’~z6ÿÕy€7ŸéúñÿÿkÿÿønÑµÿ§ Óý÷~¸ÿOzÿÛF%ìVF;¥þÝ ºðEÔ“ß	¯ÿþ½ðÈçÿÇöÒþ­ýø";ÿuúCÝ:X"?ÿ!’�iák×ÉŽ\éúÇéßÝÚõv”0–ßOûkýä4Ÿßï„ý*D‡ý»OÑ;M¤›iûQíX¦5´ˆgI´¢µÿ Î9qú¯áCîûRîA�ÇMˆÐ»iŠM‹N6q$-ÚL1HSÆé¡lÂ_ßÿÃ×Ü5ù·ÓžGÛ&„5uS‹<­0¶©ªjCQëºß÷ü_üDDQqÈ,ŽC�3ðD2A¶÷Çï÷ÿÿõqƒ×ß×_üî¿ö—ùwëÿÿÿþ;Ü~ïúø^ÿ^Â—>>¾ýÿJ¯þ@‡�Pµÿ»qí®¿ûÿú‡ûÞÿúúÿÖ¿ñþCïýþùX6ŽAlp‡‚Bøïÿ×ø¦aŸáÞ¯ü�˜+AÀáÓM5íÿÿÈ-�E„Á{
+AlÐBS–9
+BAã¿0³õÿëüÌˆá�ˆá™Á5]†„Y~˜A„9s÷Úä4Ç Î9qÅ?ýÿ˜öˆ:7ÁîÍÏM;FÏúÌÄ>(4ÈAÊ‚È³"ŽA”wÒý¯"áy
+í'B®îèÛV�¦šOK¯#¯ƒ„™dY‚hA¯3Ìfbëo÷ÿÉœ�èFp�‘Ì‹3ŽN„s"Ì‹<¹Çþ¿·O.ðžG:Nûúòá¤ˆ3Ž"-4 ÷÷‡ïüzAXq¬2:# ™plˆ?®Er¶Añá×îéÅÕêÃWˆëð·ÿœz|GRƒùpU ÍÄê0ƒA‚h"àAåYVÐô:´¸?îôCÿ¡ÿÿ÷ü!z$FÓÞíX´êØéxß•VC ãÒÿ»ým…1YœÅ„õ†nÆÏv�Í|½:ê+g��úzþèÃøˆþÍÝ+fõã©º–óv�x ÃH*ðÏ
+tþÿÚ·ýÿ[Çâž?W_×Pû^6A„7ÿÿÿ�ÿë>‚ð^`ï_­üÆÃ¤
+ÂñÿÿOþþÿÞ`'Fÿ÷Ìÿ÷¶IÃi:ÿÿûáÿÿÿýàˆü�ýï]mî“ ¹ÿÿßõûöMÿîí{òOÿßûijÙá1¯ÿ×úþÿ]µýXiGý¥ý÷{wI’&ö’ä4ÇáÿÿÿÝÃŠ»‹�Óö8?n˜´Ûô3:¡¶’w�g(ýÿºò
+Ã�ÈCúi®Òh=¦ZuÐlnœCIP¥bºòïŒp¿ÿüöAœÐ‹¦µfàƒ4CBf1ÂfÐY�U¥æX÷ÿÃáz^õˆÿøˆa<3 fÂ†\2v‡ÿ×þÝk_â"#ÿ_~·õõÿãaö¸EùwÿÿØßá-ÿÿöG	Æˆ�Â(Ýøÿ„Pøÿˆä2CQýÿ¡ßÄqÿúÿ�ÿ÷¿­OÈßýý~¯ñÿø{·ï×�ÉÄ?ðŠw×±üBÿëþF?y@T‚`³ �á`†H9
+!Èd¨õþ½n‡È+äÀÜŒ‚Ø6À(A…òã�<7oýû
+·öC 7¶ð¨$m?íHjSÿ_ÚËFWdßönd
+1ÇAS‡ýåß„Pÿÿ¼ ËÞGÿu’·�ÉöBY;ñë„Pñ�¿ãi>?÷ùÃ8áô«ÓM?íqý&=õû¹¶HsA	AVK�…“rc™ÉÁ:óL†�äG;äð�	òªŽAœ®½ú«CÃ¾ÿÔ Â`…„Âšl0¡i„ùóÚf²~0…è0šÜÂdà·ÿáÑÿÛ¦\,}V5úhÄî]¶y9zŒM¥BÑ´ôñj~ŒyzŒy�üÌC1ƒ²9A	äQý®ýwUÂï¢†ãüT»}3Ê¶ÂtÚøAÙÌå„üâ~ÍÙ‹0í{k[þët@¼È³"Ì‹0Fb†œdI‘‡õýûwpù˜¦b¢,È³"qòS"ùÈžD™þ…·a7¿¶1ûMqôïÔÜýy€|vöëúËƒ)NAÐXß]}uìŽ‚5ñßÇ}‡ÿý7ýv4ßì1†/ølDD$?†G%ã´ü"‡!’~chÀG¿øn\ÿË‚ØcÿûýÛÿq|/…·¢1ô×Œ}¼7ÿíßÿûõûÿ
+†õ8úÑnC$W‡þ:Z­_DßîÉßÿ‚#Ü�ÿý’¾ÿp÷û‘ŽmŠMŠ*×Â#¯ôN8ví]w�É7÷uG}/ûn×ÿ×tŸõoþÔã¹ÝÿŠñ„Pøÿ_øEþÜ5¿Ûÿ¦;þãïÒ¿;¿_û°�¦²Cñá=ýz¾?Õ¶*ûIŠM8ê§í&Å1I§ÞÚÚÔ>B">A�È3�ü?û÷Ã×�<5Ç xn? áÔTSQtÂi‹i6š‹N)ŠM0ÔT¯ÿü-j’ ˆëßû†ª˜DŽ-Nfãá[tmQÂ‘ÒïÂÿÒ÷ía��ÖüDF`	`£øåÿßÿ×ßÿßÇþý ÿÿõY
+WÿÂðý7¼ ‡ÿÓûÓÿÿö—°¿õ§Ž­ÿï]Wÿì"—ÿÿÃÛßÇ~Cãÿþ”7ÿê<›×úÂúõ¿ÿ÷‡ôPä‡ÿÿýkãøŠ’I ’I$©$©$’K t‡!’(ðÿ‡ßÿÿä	`ÊÂÈaËâ<Èip¿úá?ÿ�[Ba0jŸÙg Î?ÿþ#ÿù
+g ÎäÇðÛ8ØG*j¯ñ‡ÿùoúÂ„Pÿÿ76›AFÖéßòƒýÿÿïÇÿîûÓÂ“i-x_¯ï¾µýÿüƒ(æ…²;%ÆÚõ{ÿÿþ¿öáÞ¿þOÃñ¬Ü°š
+4Íåá}8º.·]ýýÞ•ÿïÿéÇ¦ª›ºh4ýE$½ßÿdrÿïÿú16nP‘‰ómõF:1½ýw¢!®äoˆãõTþúëûI+wý›ÿpÍët¾þ»Èd�{A„?÷ÿ{¨�Åo}GÃÅ'‹ëI-´“Ur"íûWÿð�oðKö«ßëXÖ½/èP�õ
+Æ¿÷ø_ÁvëÍ‰aÿüÀ-�?Òˆzÿ“�á=Þ\]ðŠ÷ÿˆ¯ûëþ¶ÅW^OÈ“#¡Å‚9VDò(ü¿ýÃò
+øBùÁ`úg;‚#ðßþØ"êH}-*ÿûÚ"Ì‹2-æŒÅlø¦bš_éïïçÅ3ÌPÔ‹2,È³"Ì‹2,È³A‚ÿþ¹
+ïúÿk¤Ù:D1
+¥#ƒ![CõïõÕÈàx>¨2è!~ßµí¥kÚVBÚ©¯ÿëCßuõ×ðŠÈd›ët×\SllR›	!ÿÞ§!¤9€Ü|Fë‡Ã¿ÇÈkŽ@ðÜrîú
+�¦“ÚfÐ¶šIŠ­«ÎïÆ¶A™ü¸¯.?¿Z¿×õaS††0ˆhæšÒ[±¬kýÿÿý^¿®@˜8ˆµm/õýÿõïÿãMSOÿëéû~·ëãâ"?äúõÿê¼ƒ;¿ÿ“w÷÷÷û× ¶P†«�cHCR…îÈLr–È6ŽCÙVQ!QÈ`sŽVUïþŸÿ¯ü,˜ÿü³ 2N"#õýÿÿ±Çÿ¯ßÿÿ¼ÆÿZÿÿj¿Èd¡ÈÇ·þýÿûü‚Ø+
+Ÿ
+ãœr‡ xnLÐ@ðØRS‘ŽBŽ@œ\©–9NA™Hƒ¹@.:ýÿ¯á>¹Cù ,È÷ÿ÷ÿÇÿðWÿýWø{âÿúþÿÂ(xK¯�Òrã�gÿÿÓÿ|Ìˆá�—¿ý�mûÿüÇÈ3¿ÿÿÿÿáü _ÿõø_ðÿÿØXÿÿ½ÊÃ÷×¿¯ÿþûÿÿýê¿ÿðÿÿÿ_ÿßÿKÿþ»ÿ¯ÿþá:ëþ#_ÿÿÿ.?�×Oÿÿ¦?�ÈÁÿé/¯…ÿúúÿÿßÃÿö¼�Ð‡ÇþïÿÿøEß�:|"`/ÿïÿíG^škýßÿÿÂ(}/þaÃ\'ÿÿ�nCï£j¸|†˜äÇ xl×¯ÿûû Ò9„?ÿó1M
+H_"VfA_&=ÃÿÿÿÇ(|�w*iý]_´2,È³‡‘|‹<ýß¿ÿè(}š„g%D,‹äYäæE™„sË™×ÿäpÓ�gDvG­½|"‡úþÖÃ÷!˜8Š~Ð0„qõŽA�ÄEï…Ûð¯ÿñÄq†`û{×�Óý8zûðïï…¡ÿÿÎÿëÑÞøUÿð‚¸ÿ_�6*ñî¿¿ýÿþ.CÿûOAqÇv¿øE¿þˆþòàqñ†@ö¡øÿþÇ¯à‚w÷ÿÿU”>ÿÂï¯ýÿþ£¡ÿûÿõÿûÿÈd¨}½{_×4€'üº9zê¿…¥÷ü>aÿ!¤é4Çø]Ãÿÿ_Üƒ8äÜoû¸k^ëÿ¿D1Ä#�g�á¸þ@ÌÇ ÙdÛ"ÁÁ»�Púù°¿{ÿ÷ÿýÉ‹Î¿È-’fCRÓ	‘,îB¦žÿ�ÿýkÿë¯OðÓ^]40¿ZþXå¡ý}ûßÿßðQ¯ör~êFÕ8r´Awñøþ¿¸Eÿÿ¿&þ¾Ðm7PAéôãÿÿõÿü=×ÿÿÿtŸ×þ¯×õÿøZNýïþ®C@äÂ	?KÎêCLu$91ò7á>ßýÿÿðÿ×ÿÙx§ãX eØPƒ	ÃrXN
+²\OÉÏ†Oà¨6òÜ\Ï`� Â`ƒ'˜ˆ^=Zþ½ÿ¿þ1IèXOã
+¨Ú
+«˜BÕ0½ ÂM5L!¬xO®Cïÿÿ¿_ï.q^+µ˜îÓ/˜­LZMÌnÑ‹.Û\ß›YhÄÏˆÄÊ¡Y1Y·F&�ÿãÕ?z…ûÿôHwúÙº–¿ïé|4œ3ÕÙ€úzm›ïð½›.ÿµO�_úðûÂÿ_öŸÌM~ÞöÒ†=�xn=ìü|Uk�á�¤-×ßõðþ¿¿ûÿðn«ÜB_ßu
+ÿ
+ð´+CþÛü1Èd›ÿ½ïýÿÂ(ÿÿt7Â{ik¸n`'?ÿ°_—	Ømä2‡_ø_×ÖÿÿµýÌ?£c|;~BŽÿ¿ÿ£~‘¿÷ïù!ÛÈiŽ8g~CÿPŠ÷xAÿ!ßúH7é}#·˜vô»òOá¿Û"?¥Ýv�‡“zÁšú„GŸ�g‘Ü“¢è\"‡þáñ÷þ›ÿ„ù!Ó!‘ê¥½ÿoÛúïiyÝÛûþ½{^û÷}µßñÕ.aÇU[ÿÿþPñ×¬2†ãÿ„“VÕm=î®é´»J?¾ëa„–ï­U!Ç÷Ãâ¯ hYŽ©�ºPÿÿ×Ö>ÿs¿øCÐiÚqÛQ¬lR´šqLh0Ä$,¤\ní&œV›Wù�göÿ÷ýWÿýäAÓ&ÿò�
+#g_é¦GÂŠiÃJÓ.eÈ[MS_°¨5Tdœ›�YGl$Ö¡Ã½ýêC½oPŠ¿à¥Æ¾@Ì3\�âŽk"
+G
+p@ˆgyà¸.Ë¸5!°rC“‚c’…&äÜ›‘ŽÏð‚,r1øEÞ=ˆô?ýb-¦MÉ¾BŽAÇ$äÜ�äŸ&äÜ›þ@–ŽK#æÁ0A a0B"á6[ÿä£_ú†N/.;ÿ[ÉD„à…šr84);°�„L
+OÈ�Ž^mD&û$
+�b Â;	83àA„W9t¼DFqË£Ì¸¤r.Ë™pØ\5	 R8•$]Ds#³ÁÁ¹!H�"Ž#™ŒÙ‘Ãr^@–¶ŸÇ®=­¢
+nOŽJÜ‚¤Zr(än@ðVr7#r‚°ä|Bi›i„L»'a0˜A�mÂð¼	„A�mÂ+—a_õ˜M5Oí4Õm;OíS]<5Ì×˜M4a4ïæ]=T¨U[æçÖßy…FÕRPÿ#ùÌ,�EþGë0˜:ß×ün¼ø¸þ?X¿ï
+ãë®µúÞ‚ý.é'_¦ÿõ^¾õ®­ú¢ÿZ{û˜Oö}t¿­Õ$Ÿ§ú�tˆ“ý_¬ÕoÒýWÒ0ïêŸïþ¿¥ŒÖcz?b”§@õC¦4‚ê�‘Y°T�äærƒk�Îä$\rCZ®@ðkub˜õzøýãØ¤:ŸÓ‡Al´=‚Ù
+¾P�„Â…
+@ð°™HÚ¤Â	­Š¤“¥^f“JÏ¤×§õªê¸Q„DZhDj˜B!ªaa0¹vaÜ„tc´âû�Ã¹îALvˆ;µ�.9�h5×¿†‡Ý÷WQÈ*8uÇk\×ýSÿ
+åŽƒ8ä „°ˆê@ö>w$ä­ý2NŽ¨2ã�.ù‡"ºäÈ®–¿•¸‡ ØÂ
+0ƒB²|k+H-B'R£+²9Ÿòù0A‚eyÅápU“àA—0ƒˆah<Èñ?eA† ÐyÜ‹h?‹L'Þ“HÞÃa†š[
+�¡ãÂœZ°“
+„Z¡§¦„XCM
+SFÕ¸†Oí³µtbìÞoÕ7Ì}ºyÎ™¿6•I
+èÅÄ]ÑºÔÞæ:1ÑŠŒTos{FöRhÞ1�‹Æ*1
+v´oa„@Ð5‡ù»V–ïû»û»6ÍÔ°Ì6××{ÍÏzÝõBŸA>ôÌß}›FÂ'§kfÕêm-›FÏ¾õð¦']37#ÂVCÚd¬‚ŒúãßÚUûIzëûÿþú‹Ú^?îÅìUõ¥ ý5Ç]�©ßðš¿�£ÓÿÒ]býÿßÄ/ì=ë§wm.±×ü9Bì?ÿ–+Ž—°ÿoñ·[Ò{ýòàÿÂ®¶¿¯…ßnûµõþ`%^`o÷n`NÃÿôcx*óvì?Â�l±ÈÜ(-Ÿ ¸ÿúß¬ÅýŠûý¿·]1Kíÿ¥ÿ÷·øcÿÒ­÷þÿ‡ýKÔÐNË³Ìþa0«ªg³LØ]åÙÃÿÜ“ýº[ÿûú_àˆíßÂýŠðEÕ/×ü>ºïîºé^—„G\":á¿²nßè/½0šñiëÁ±ziéß¯ß®†¾í7_ÇëÛÕÚÿÃ[þOü�Ø¿Î;ýÿê»k¶¾qßÛ†çýùuEÕ*>mcF<Çîm7×Y´m~ûŠc´!ë
+áªý„:»íy¥Þ¶+´A¡qÖËâ—¹„ëŠâ#û[A„¯¾ø‚*4þ·ÇÆÿ³ÿnža9�|Æ�ëÂ~üD_LRi¦�HRHEÇ«§SR8“Îa­¯h^Æ›¡ÄEDzÅµ°þ!ÃÚé÷Ö`Ìý½­¬kÇÿ-„Î+6�æó¹0°Âmzª »Ëæx‹Ó
+#ÈÞš Ìh0ƒi¦Ô��Í“é›�M
+fë „S_Á+ÿþëüø†¹w˜y�0ˆì0ƒ†‡�ÙvƒBÁPâ"!éœÈñ.Ó¯GTGÿØ"èú|q§ÝØ"?ÿñÿÔ‚ØÁ0Rwãˆâö=‹ö/àØø4"ýHm÷GI$Å2±ŸIöƒ	„tñMa©µþ¸Ðè�°,� è Ã
+‡_µÄDGÿ ¶7 f
+®@ð×RY1$„Âd@ðGîõ	®C^j.ÕjÓ´IÚrO®"!ÜGkÃ�<œ?ë¿þAl6œ�àÈ9Àœ_]|‚ÙY|	‘ ‹eÁpIÊƒa�ÆÂP�æ�‘ �ÉñpK	YVCYÁrC’·"áóB!Ç‰7<"ÈÜ¨.dðŸ„ÈfÁ™óÁƒÙ.%Ë˜r5NÂ
+šaM=Âa0A…U0…¦¡p˜!
+0˜CZÂZ„ÂÙ|a‹	¡¦š„Aú1)�¦Œlð6ŒL«§^a5F:ÌMÑ¾Ï(FÖ×F6�ü3rkMÚHÚÌca:
+4îcÚ14bÔZx}ë—t¾Ã6×[tÌ6èÄÒpé;7jÚnž�›tž°Íš§J™Î­†	'I›FÃF,ÄÏf‰¾¶Íß«aN*1~Škí}>¢þóf>»êÚëI÷î-úûöžž©ãm/éÚë¦£xOäÁjÈßØaqÇñ	ö—þ7~ö„ÿ÷¡÷÷ÿõK¤ñ×â¾¢—ñ…¿múþÝMëúúÿó¶•zÞ·0üÀOà¿Ì�Ì¢/ÛðÚ_þŒ[Šþ¼7ýèÅúÿôbþÇÿ__ÿ¿£ïþ’ÛðDz—„GPD{éVMßûŽ¤‡¶÷¯KûÿòN—ÝUûÿy'ûðD~¿ü">É¿öHuß÷,{îÊµÿ»þ·Vú3‡ïý}ÿûÿ«ïÛÛ_û_õýµ¿ý:Ÿ'÷„ãm(ïì&ÅQ+µá…°·ÿéÄ?¿ýŠMÜ:"�ÿö±KzM¯ý¯qQ_Ã¥¿N;n)¨‹�§â•Šb¸i[šq]§­1›ºzi°ÒM‹¤á•|UÝ¬Eîð}±÷ztìÇv­œIªá&ÓIÆ›Q³yŒ7M·g¯E±I¸kiŠiˆeaVPm5Ók˜¾"âÐa4ÌeÁ ,<À�0šGAaSpÌa0DW&ˆ¥Ï²ähC#Á‹L)¸Ø+0»Ýú x5Âä2CiÈ�ã¿PI,†HkwÕi-&—þ4)×i.Â¦��ÄFØ^â–Ýv–,G fÖA]ÈdƒÁ‘_	ÙÁ¶È9Ø)xÑ´ò‚�Ö«L†@iÓUn&ä2`ï�Èð~"¯þA•Ü*ô©þ¾AlK"ÙÈjA¢‡Âì¨,r
+C‘G3’r-’sÂ»È) ÈX.Èm9äW"ÁÈ®.Ô�ÀîBÁàöJ×#ü&h;>ÍÀƒ?›˜MsÑÌÄg ÂÂaµ	ä,‡Â~Yí0¨2
+²>0A„ Â½2xAü»*Á•ñÂ
+•dy‹ó	Ìm¡Ü*h2²‘½†Æ÷ ªƒ	¡hÇ¶Æð„Ziì-¡M4Ñµ˜UI¤ÂBÓÚ˜Ò6©Å„ü�!¨)9BD
+åqBD—(sk¤é?îèßFûµNÒ[7ZiÞ]°ÍÖs9é¶nû|ê³oiþÑ‰£˜´é<½Ú#ü0¦&ŒMåîï/(M°¹�é"2;,�Ã$ïí$×°UÓé-ñï{³zé§C­épÌ0®¶nÿxfïí*oÝ¥I?³ÛÝ!íZ›šOÔŽƒràxB�Ìäp(#�\Ždt\HàÈJ²èÞGdp+¸ãô>-õõî—ÿ¿×âë§÷a×pÆÄW¿ö•\B÷¥\^—�<6"8ˆŽ@ðnäáWüÞ·æÿëüÀO…ý _õ‚Y€�†Ý-q
+ø]ÒJ\ïZ�ìý¿ú0«kþöÚZÿÿþŒ_Õ_ý‡òâ=†ßïûáýéÌ@Z@ðØÿþ’áÓ&ÿ„©ÉÇ’j=úÿòOú_úÿÃáÔŒpíÂö+éë×±öHõ¯ÿÿmn¿®Öºí}¯ÿý¿ÿÿÿüÃ¿ØDu[R�°DwTÿúßKé EÕ}rOÿÿÂ±ÿþúñZ·ÿñ]Å¯ö¾¦ŽÊ¿í[VÂ[§Ý«ÛzÿûIqûÚB?ÿñ±M6Ÿh6*˜t›Ú~¶•Ú÷¦³ˆ_ßî•cÐþ**;Jø‹¨}1
+V/ì$Õ„G]�ÿþšx‹�v4ÚCib�ˆ‹
+EÓ8©¡R"­Ònš
+Új8¦ÝØâ-Ân†ÔpÕ¯ÿöbA¦mœI„¡„!„>“£<æG!ÂÓç%O0 BCa4Õ4Ë²8/¦™¼ÂÍé¤…„Ò×ÿøˆŒ�ÄC$!Èdwagqÿñ¥ÿÿ f
+3
+C 4p%Šˆþ·Zâ?A1ªý¬Cñÿÿÿ tÇ(Œ‚Û�àÜ^@ðØä
+ƒùÁ»ù°Ï ‚ˆ q‚ƒ#�7‚Ab4ŽC\r
+Üƒ0ÿÿø[P˜P¡T*`˜Pœ†¿ÿý:zë�ãß¬Žÿþ@ÃáÈ»DqF)îáÜ‚îZrïˆ¿ÿ�â¸«¾ÿcû�Èn¿ÿÿÿê©:ùÁš{ÿù°‘�È¶¤4 ¡Ô“’²]®A �JÉ9ã!�È�D²/�Àý‘ŽCE¹áU;8äW)ÉY7×ÿ8†.Êƒa|_žÐ´PƒRÀ� Ô¬0¡†O‰aåp hL*<3Ø1/Âa8´xJ‚¬�ˆýÂL»%™Wø�éóCM„Â0ºÌ*7Ðrþap¨0±j©£jƒZ®š6�¶šaL'Vš6˜oDð¹ƒâ?1fö–èÇF;
+c³5IÃ	Òn´a°Á0™ÄåÛVÐM³vb£^chÅF-<Þí³0SI¹¾ÂFÓí³0§œJotb§ïétï°@–Þî“³Úßjß¿…¯mC_ôƒ†l0m½ö½'¦Ù·Ié¾žž›ªwÝí/§hWþ™ŠÅ¯ãâ´4©?ì1ô†¯ûÇcÞÿÓÒÃ¿WÅw^÷ëë�_¯ï¿ô¿üÇ…Ô?Û§ëé†ŒTÃëÄ+mËÿø\Bÿâ¿ªÿþ·Wÿýø_˜	Ã†ÿ¿˜
+�økþµn…õÂáWü/èÀ”ÿ×ý/˜;�ÖâCœçÝ�+J Øçsï?ú}ÿûd‡nýÿ
+àˆÿ
+í~‚Ãÿú1tbÿèÇÿÚÿëï~µ‘ÌìW>ˆäv&ˆèò#ˆvV�¢p<
+=“×Òì˜þIûGÔ§úý“rÝµìzßÖ�p‹¯þý½~—ûaÓ¿öÿb¾?pÉß¶¿iëþÚýþÃJÿÿmmì-ö¾½uxa+ßû××¿Kÿõ×ÿþß�4
+ëÇñk¦Çÿ
+Xïm.Å^ÅkÿzV…»]×ÝÚqî½µÿ�¾þéô÷Èƒhü= …ÆÆÕ4ƒN>ê)�6"ÚŽ�ˆ{
+%ŠdøÚvÕ4Øˆè1ÅC)šmEÅ¡aŽ!Ík_´veÂ8“M4¼&aM æÕ¦h‡r~Å&ÔâÓA›H1H['Î+1I Âj�‹i¦c†…²íoë�3c�<5Ü�á·a„@ðÕÁ�@ð\q dx!f0±Nñôar*ßòÃ�'†«�0ä
+'¿ëÔ#àÔì…²àƒ ­4]i}„£ôcfw¿ �­äý&û¯úð·\R}„ÖäBm&LrC™ÁKrPS‚»JÑ„Œ��IŽ¤‡µC^›c`ƒBÔ Ðµ#óYð¯5Å›
+0šªeùàóÍ`¡uDQñôÈQá°“Ñ�lŸª{„æú|PðE:TEÛ¦©Òv �^@èäL*:¦ß1æ×ænó
+Œ+Èþa?FÖm5ºŠù¢³$af<Âµ0´’_ˆƒ<ocÿc¯Þ7]ë�wÞì1sÿ�xö;…×ý#Ý÷õý~+cæ¿ý×þ/÷ú xlÀ�ßêI‡Ñ…×æÿ˜§ÇKë¢:¥ÿ0³:0¼Âä4‡\ŒzÈÎC$	Ü‚ÎÈ[ Íc¸þ‡ÝÄ}ÿ~½î¯]•ÿß¡èvºKé�<4¦z&MHbýŠ‹Ž.ØØàê6h†¼|w}ÇÁ±O¥ß�SšæƒŽž¿LÆa-ŸÌjŸiý¨Ã]2þ#«+š³µÒ¯iCA¦°ùÇF4ü�à²8eÒ
+<Ç!˜DGÚUñ¿…?ü‚Û�Ý¨UëÖ«ÿúŠ��[
+Ç³AXE��Ì9!ÈK&ætþ¬Šäc�{"Ù® µX(rì k‘ŽqÈgÖ[“²Nw/‚�ËsIÈ¶Dü†@$ztéƒú~°�—2¬†a0„5^�9†L�O‹™ìa
+Ðeá?BÈ8i Â™ ¬%ÅÖn$@A„.V�Šw"ŽEûõôcaá8P†…£Ã
+^Þª�ª1´bª
+
+4c£0AÂkHÂ³ziCF6´ÒA¡1Ñ‹´¸PƒñÈc¥úNÅ3
+£
+††n7RÙ·¤Þ4a°ÍúzF*1YÄ_ËŸtƒ|)yË¸a$Ó¾“7›iôblÏ
+b³hº9©7^Õvúø¶¿¹�ê®7½±õ¦Òt-¥ßÚSßýtÿ}ÒŽ¢ÙËócI7BÖÜjós~=*?’ø^ñÿÿÜ9±ãühBÃúŠ†=ümŽÃÿé«Ž—þ¿éí&ƒÿ�$ÂÙÁ�Èc�Ù�×0þ`%}æ}¿˜	ù€i°æ]Ì
+~¦à˜|=4¥ÂfGJÛ[ûåÄþÿ×¬Ð<‚¤¶¤5ì'd}/Óÿþ¿ ßÿèÅ
+ãøo~è[ÃqÿÌ_ý÷jþf)˜¶m7môß\�cž³"Ì‹ŸdÝú¹!÷ûÉø";þIþÁRN•·’ò7mÒý½¶sàˆÿ$û¿]ØDuúzÄÿ‘Ã[¿î–ëE™dY¡ìŽ�`Êý´–ú»×Ö×îÛ0ÿuï¶º�Ã¿ýå8{ÿ$8";x";õkÚëdÞ÷ï¾Õÿ�ÿË¼¬(äì°Ð"‡ÈqËrPLs9 �›»'2-Â @ä(ær7ËpSZ¬„@ðÍ�eïMÚÅñ®Å¤Ÿ±üTQ¢-·ƒìKî­á…·ï®+bº¿Nÿö8iûUù9sŽqÎå9YªiñgÌ”ÂaBÓOÂM2Xfªh0©ÅÑ
+!ñö“N*¯M¡¨¹Ä>Ó¤Ói¤ôö)>8i1„6*Ò‡{» ëâ½´»Ó¦.ÒõÛý AHÆö™hÂshÚº{0”AE:ó E;Zm•eF�/¹¼Â~‚½„#4B"ÚØUA4Hm4ìÜ¢šM6l-¦£ãª,5Òh6(&„a¦mE/_Âý´¦ß¯˜^mT¶aû¯ncöë0³…¯õ¼†ØêAÆ`"�Ä0„8ˆh0„CDZh4 ÂA¡Â-Ócñ…ü}ÿûA�¿Žßÿ¯v?~ô?cÃê‘7¯ÄEH-†ÈšÿûÿôßÌù�»ÿïÿ÷ö`']]KÄý¯þî×ö˜tGT]}oõ‘ÓFõÿý?¤�¦‚Èd?ŠõV+ã_²�ÇÅ{«Hz÷\øÆœ~8úbš�<©é†­ãj8‹¶*µÖÂŒ0•�´"#M«*sk�<(éx¦Òøˆ¤C^çƒÃL+ x—L¾™pæÐBB"8©~#ø)ÃÈz_˜?Ò7ïP•ûþÓ¸×è~ Á=%_I$"!IkÏIã#Ç~eò°s#æhŽ‰c.ƒ|�˜g‚
+¶CUÉÁÃLrÉ9
+X Ë ƒLe‚Í²9r
+›HV§ãì¨®%´¢
+c¯êš„Ó
+Ó
+˜Lƒeˆäãˆ†\fðØ\
+…Á\�¬† ð¿ Øî®¯ï^Œ*�ÈÇñª¡(_Üƒwv�È£»�Ú°ù!�éõc…¯_ñõõ„:ùÃcö—�[‘ý×õõý/¿UKÈ-”†°A—ÄW ƒ‘Žw-É¹à‹a•d¾‰J'dnx#â\Bq^xò8 ÅåYƒÁÜ‚�ÓÎäKrVEÂY�\r
+n™²ç½`Šëv’|!�„¬0B0…„P<]�ó	 Ða´Óër¬”aƒ‹	¡a&k*ÉÂ
+B
+4ÂÐ:
+^Oeä^8þ«èÅF&�«¾¨ß+F:ª1Ú˜ê�í¡¦ª,.š1ùŽœÄ´-Z´mtbhÄåçªi¦ÂFÓ¼&¡?xf»Wõ»³y³v˜\ÅIÑ‡t¶Xf÷]^üß~]Ò¹Í¥†aÒ óËMÝ¦ß]…ÌMœèÃmS³Ÿ˜á„ŒM˜Kþ´6½¯Çvþ·‹÷ßúzj;ô­õöªŸÿÚë½RéßwIëß®ôþâKÿ¡±úÖ¿úIøcŠþ*ö•?ÅãX¯ÿ^ÿÇö¢!ý|B¿÷Q�<
+ßÒÿæaÿ½õüÀ/öÖ`3×ÿ›Èá×‚ýÿõú6ýÓþ¼Ay½ï¯ÿ˜íÿý¯ÿíèÇûÛŠëèoÑ�î—úÿ_èÇõõýëX](z_þIÒÃë±_äŸðú_áÔŒyå¿üºOìWìWí’¿$é?ÿþ–þŒ^Úëÿn=ÿþ¯ï½[ÒýÕµ§¯òO®¿èÀO×úý_þõÿ®¿^ä‡{ xl†@*¹Ãc…ÿæŠ¦ÿý>Åw�ß×ï†¯ûPß·¯×èÀû_ÛK_¿ÿ÷õûV\Ö@ðØþ@ðn=~·LC¿_Öh=iµï‹AüTS]ß±QV±
+tNýÜ>â¶ê8¿û¶Ò¸†š]Ý„GÆÙãßð—„#x¾"ÓM8lEµÅN!¡m5¾ª�:iÄ]­è (†­&ÆÕÃM†–›
+¦+‹c¤.ÿô½›ÎDq¼cÚì¼]�>™½m4Õ!i«MFÍæ;dêm˜Å»°šf/lRJÍê‚mSW_ý>Al	 ‡eÆÄDC1„ ÑÀ¸äcˆ†aˆ¢âÆ^�<¸aC"31-wÿ¥â+DÅ�HÜDF„Dg½Zþ—ý¥êë×ú¯l*÷A}5A1Ž""#ø0ˆ-ƒÖC `ªixˆŒzÚä€C—ø�_«ä€áõäÊ5áÄÂ�Èw'l�êw Ø9ÃÁÀ¢fÇ�<69€Tr†Ç x7%öL*…\&CAÂœƒá0„Œ&C¿�<6¾þÔÂ£w
+†H&˜]0¨9ùøAxáÈj=qw!”9gy¹³
+ÌmÞ(Ä•™ã�È7o÷ü˜ëã¯éû¾Ié·Ä>ëÿ„’}W!°õ÷ýµßu¿ý~¿ ¶P\�2Üã‘¹Ìè2ð@ÁAqÎ99	à�òXA�7LÂÅ�\r9'AåGÿÕä497*È1äG Þ­k¯ô‡ÓlD0A„-SÓEa	…AØ h0Ž˜0«õÿü(BÂgÂPU‘Ìaa_»ÿH�ýÙäÃ/Ñ´í…10ÁLv-Ýü½æ-§Lßka¥ßúÐL!i¦ŒAÁ{éŽ"")Wì'Á›JƒlÝt›é¶n9á77ßI°Ìnaæ&ÂÃTï7b¢ºßpÌL3blçF$ŒOpÿ†1=!ÿúÿÿ]¦× ßÇþÚNÛõÿÚëûï×¿¥¯O¤DÿÖéõðô¿ÿÿÞÝ¯íÌ0Ûÿý+·ñïÿ«z_ÿ~ÿ÷®þþü¸(­þÿÿþsÏÿñýLÏÿþµÿÿßþŒ_ÿ×ÿÿôëÿÜ„Žÿü#kÿKýÿ�Èí¾ÿ÷ÿÖ—ÿû}’zõöyÿïa:_úZìvHvÿ¼�ànæÅÔÿëöÿõïÿ×¿ßê¿ÿHÿKöé_‚Æòlr©iãúö·¯w÷iÿ×KÇý­×‡ÿUUÿÿßEÂ¿íÿZä±È
+ÇÖ¿´iíúÃa¥q§í­¯m&ÅE6°Úî[T’m%´ÓM´ª>1·¦œTV»äã¦’úÅ±H[LPMœJÓ	±QI¦Òm4Å{§HC4(LR
+´Øîå
+1I¦õ�=r
+]ÿ­y°T›	›“A„",tÂ hM0ˆqÚjª0™pÚI5B3zCm¦Øá¦ƒ}æƒ4#™dZÌ‹2,È³#Œ��ÈžE™dg#™ã•„I‘g4ÌS0ÛIˆžD™È—ä	A–8ˆˆ¢ãD2AVœ¸+z`„Dâ40$R/æLŽ
+b™�I‚#îœ‚Y_Šúd2HqDFˆŒ¹ª zö‘µ xfø@„BUñ†rßÇ {q_ØA#¾¸ˆ„Ê¿
++lWi/�íz_Áê>‘ãñÕY?ý�}¬T ¶
+…‚a¦ä—‘Áª@ÐAW�[‚ È)èC °ƒŽB`L¸
+Akˆ[!,‰‰äã�<6@ðP9Á¸ú�…M\(TýT Âiúþ("Çû˜�6ÇF8Too¹Ýß1´by1ÿò¡ÖÈ0?£–­ÓáÝÛ�nïá¤ci6­Çÿõ‚øýÖï‹þºã	þ¿ÿT_ù9äËÂÇ x…[ Oÿin·÷¿ô_Õüž‚¬¸ËpA—@ƒMNÉ9æ]�¾h>à@ÁA‡	¿“ÂpV˜ä±^sÁâ™|'3Â?öDâ¼‡r1Ì9;¯ükü/ö˜BÂ
+Qµ
+6aÐÓF6Œlh?tB,#jMBaM5NÂ Óéýª5‚!h9ýú_á?ôbl†œhÃ†oP›z—œÑZF+hÅ§IÑ¼0Áu£žGº	ÕíL{F&ŒtbÌpÁ#i£i†Õk
+RjŒ(ãB)S^ÿõ³O­ãJìÙÒöb½¯Nÿ¥°š½ÃÓµM³w}ÕêúxMº[½¿HÅ`Št› xS hC¨�ƒêÖüÃÓûk¿iÅqöÿñë_±õ¯.±^µu¯öïö‡ïÒ÷ñÿæëÛÛð¼À¿ÿ¿øx…ô§õáqÞ—ÿÔ|uŠ^ÿÿøÿQS6“t^ÿ÷×û÷0tcáUõ¿í5˜	˜Ák¥ýí×ÿd‡c
+ê—‚.¤ŸúÿßðÞ�ÿÿKÑ�ô—ôÏ/^C!¿÷®¬›ÿÿkY!úG¾µ}­þéY7ýýø_áÓ&þ—¥ºM¤é7ÔUù!ÈÈq×ÒÕ÷ÿÛ®7µÝ_ôÛIŠþÒï3ß˜võýµmoµ¿½R$?ôïdÇí?ÒòeF*8®ìð�­µ±ýö”\}Ò¦ÃØïTmZ
+?b¢˜ˆ¸ïô6Òmz°¼Udã�<6@ðP9Á¸é)ßéÃM Ð»MŠM§ ›QQ»MZ¦›Ò{á­”�µ$+ÃI5cŠ§b“j^ÿT¿‹Qµ¡ÃL¸hZ÷„Ë´A„¤í¦§‘äÃ/ œnÎ#ha¦ƒ6‚f$Èí1IÓ	¦·M¡û¿ hÎ3VÀ»ˆˆ0ˆîLpÂ!"‚Ìÿô»üR h”ÿ¤ºÈÏa/ï´¿¤Ú‚8ÿ^—ô˜Ð_úK½….‚kÄDh|DDr�œuò@0üW�:yè/_ô©K ¶
+P\'‚³�ÉÑÈd�<
+aÕVµPL†x	�b„G!©d;�°�åa8� ¶Ç	_ÚZjÈs	„˜j¿�<Ž@ðØ>@ðn8J·h†hî‚¸f+V“‡È†va~þˆ5?ý¿nø6(ÇI¼�á»´ªâîûý}xO·÷®C ¡ézÿÿñ/ôï
+ß×¥ù±x—y‘!IYÈ>‚¬Ža:0ä$²pDÃñì¼'åñ²à“�ÉáÈ˜G<‚E�#ÌƒöV\ƒE„Tm4PärÉ?ýøK½4ü Ðh0ši„-Xq ÓO]˜Tül	¡a4O5ÉŽœ%MµŒ Ëâ¸ÖMˆašÄ Ë˜AÁ÷õóa«ôbhÃ~š0œ)„Ñ‰#{ÑŠÕ£L&ƒ	¤còóÝ¤a5FÓF:1´bÁª£tm=³‰ ÚzF;	f8`ƒa5Fˆ¯±—ý£IÚI´ºÃ0ÚO
+s¤ÛíÝS³nòõªA6Íê�&:O«'TÿÂtn»UNÔÝKù‰ÌWA7â!?M%õþ»ÿý~én¨]Eí·þ?è_ÌW¯ÿ±úoûÞÿz¹³íizŽÿ�8…ÿéã¿_èW¨èWã÷÷
+âaÿÝÕ�¶)ÇQ†²`Î:_ÿÂù�jÿù€ºnÒ˜	˜
+Õ
+üÀ¿~Ô>ïû}X‚ÿ¥£ˆCŽ2£ïþ\N—£ÿþ×_õú´cÝûþŒ|7ëº{£þ`&€ßô*¼":þáÓÒÿÿØç±àˆÿ$èÃÅz[¾<Sé{÷ßð¿þð^¯×¯°EÓ&÷kúýþ¹!éê×¿Ý°Dð­_Ú[ú!\?½NpDvÿ_þÁõ’¯a¤Úýí¯kÚÃû¿í^¶Kb¯íuÑp­+ËF©k÷ýÿ}ÿw~ë·ù¶={i&œqPØ¦-�U�ƒ½Ž·�?N¢»A£Cšjƒ"Á
+ñ¾ïÝ«x|UÅLÈ
+Ç xl x7¢£ûLW´ÓTñôš�ªi6´›Ãk ƒ¹DÐ­ªŠCb«Šb/i¤Óuw¿¾õðÂa°š¦šeÃ(�ñ†½ÃLŽ.´Ò³r¶f0œUºiÙ‰+D0;NüÇfôÂ!•í[Q�!ÿ¾ù]ÈdäW\qÄXT Áˆ‹ÂÂP¿ÿþ¾î‘°$8KúÒü� 3e¤šWS¡x_Ö8Øa'´¿ôôÂh=! ÿª®¶0˜B<9˜¦b™�â›Èâø¥ÀðÌ‘f@ðÍ$Nòˆþ"?tÈú"L‹2,È³‹Öf)˜ÌÅ3˜¦bè‰2,ÈæE¡ÈŸ@¤Y‘fE™dY‘fEše9»dyM§#†@5hÄ""*>ìŽí<G|DEC 3�ë¥ýi^Al �á¬9ÃTv=/È5Á›	„ÈdC�.åÁÁN®@ðSv´¿
+’…
+Ô*Ž@ðn9€Ur†Ç	<7Ç²ÝÃ�Pä
+AÖéVt xh¢cþAlÇC(pÖÿaÜƒwpÿ¿„—õÓµý}_ªü‚ØQÈ7“úë˜r$dÓRÚýü�á¡ü%þø¬	„<q•h8†d3Ù'*åAxGóA†
+Ìl‹åÃaáœ‰¶!£‰¹,A›	AVG„¸†�ÁH.ærpG„°�ŠÃ†\þ‡õv•Úqh5‹ôm0˜B"Ðal'>¬ön&†šï
+
+©„0š`ƒ,áBÂi ÕàË™ü”Äôˆ£þŒMÒ…hÄÃ
+oa…7¸M£IŸrîM4Ò6š1´æ:1Y·tbèÆôb°‘�ÜÆÑŠš„cÅ£F*1]Â¦Œ)Ác:ü$¿îÅ>ï7:~¾žÖœ3fpÌß½¿„ôá›©uÿúM>ï»7Rz´b†ntìÜméÿý¤b¤'‹ˆÒCñµÃz§_ßøâê’oî?t�¸ºÞÕ¯Ú_w±Úÿj7nµ}ô-ûf¥Þ!!ù€ýÆÿ¿ÿFgÿÝ	¿¤¼Bâþ!m+V!|ÿ ì>ø¿FKûÃ»ßÿù€Ÿÿ÷N¦0…ÿÚ×½ákY€/õßæÛþ`OOÑ?þÝõÿÿ‘�ýÿükþŒ_ôú†ôcÝ¾ŒkýF+ÿÿ$:.žwoû¯ÿm\ÿûdßg1ù'ô»&ÿïw¸oIú°™7JÿßòN–ÿöºþÕ[_ÿ]ím¯JÖú°EÓÿõÿ_óþ¯è¾Õ/ßþÿ3»uØ"éía%ö4¯·ïøoÁüT0—¶¿ÅC­´˜a/´Ø¨vš¶º|h5¶8«þõö*Âõí/
+ZUô¶œ=‡a&LEÄCj;»I8¦�®8Ó¸ëbÊG­ñÚm5vÅë|qQ{4@ðnä2Tz x.?†½Ø­Šb­˜H4ÐM0Å&x[M5Ðv™´7Ótâ§C§ˆ½¶8–Í¡
+¦ü�á°|�á±Â_�[
+·ahDD0˜!hA‚ Âx6Áˆá˜ÐÐ†G …›ÌpÍ¤Ëƒt"!›V™´ê¨Wä€H?éÿDÿ÷{Oò@0ÿ¨H±Êµü�Ð¥Öô!×õÇ!�Ž�cþ@ÌxUì¹tÒ�ÐCÿH/ý|‚Ø<@ðÖrà�æ9!È¹ÌrÑUáp©…	¦˜P™Å‚‚´Hãâ!/è‚ï�lµÜ.¶C QÇ xlr†ÁÈ
+ X:D(äãûŽö.î@±Ü†~�ÿ	 —÷]|wOq_ð‚K¿ý}zûÿ Ëb“×�[	åÁ|d6Ç3“‚;A�dƒä-�îxÈ6ŽC¹c¦Wy‚¹Ç'Á‡—?úi…UÍ„œöK�4ÂyÇ+bÊ³X@ÉØF‡+Ô!–ÁW—ÁXGÀƒ.�44È%’‚¬‹á4&°ƒ&ç‚'’ÂPU›/ÅÌ©„“�È8äÜðŸÿ„½ôb¬½a&´
+[tm6ZšjžÂkA„/P…¦šòMBÂÕ¦ŽŠ† Âi„4Â&¶?þ»^œ:¾ŒN{Ìtb£ü'Ñ¹Ï£É£Ù»½3uŸìäÑ‹1ÙÄ_†ž¦>ŒPÔæÑ‰³ˆºMèÅ˜º13Ì©£
+§Ýà—úû_ÚÒ_x·¦ØL'ý¿÷ÄÝÚ~é¶…öô¶n«Õ~Ðû7wJÃ0Íß˜#gpÍ¤ìÝk’ÿïi{Æ:ýWÿßw×m&÷ÿŒW÷I÷n½øñé{õh~½YÁœ|R_aâ§æÁ�ó¢»ø_û¯ÿ_Ñá?Þ!õy€Ï·ÿõ>—ÿùÁN
+¦—þ×úÿþÿF>÷·ÿûÿŒÝ ŸÿþŒ~½oî`'ßþ<‚Ø)‚÷÷Ñ�ÿÙ!Õßô¿ö+ïÿüŒt¿ãF/þþH}/¿ëÿõßoÕÿæwÒú°EÔ›Û~ëé~—ÿÿÿûj—û¥ýßöºÿÿý“ÿöGÌ\Bü5þ?NÒ†¶ºÅCoÿ_ú×¯ÿµµø:ÿû^×þ¯oïoöÿÔa>AlÇA.Ä4ãˆk±±±q
+Þÿ¸µUW´ÛUûø¨‡kOiû
+8z±ÛÛwýqWÚZý®©{¦cm4í0šb�ˆÓB/Cb¬&šÐm1iÕDZlqÐNõ‹b�h4Ý4Ø«ï<�àÜr†ÁÈ
+I"
+�<Žøˆ‹7˜I„Â¼	—‚
+RFm—aÐ=HGÐi˜‹ÄpË³ˆm3´c†29ˆ¶šˆØ^	¡ÿ¤—~@ÔD
+W xx ÁÉ
+´kâ‚ÿ j
+C¤ ¢"!—¯é¡¨ÿ„¿êˆwÿ Ó•ëµD
+‰�!ÿðKüEWM.ŸüE¤„~]Uu/ˆ×EÒKõÄP^Ì/3ÌS0Ú0ÌSA™Šf)�Šf2qLÃ`Dœ†§"L‹äÑÈb<�(‡è¿‚(r
+³"ø@ïÚgÆf)˜¦c{Ë‚™ fb™Š/È“"ÌŽ„t#¡s1Oü‚Ø+¹nAgÈà�á–ä`†¥�ð!¬äàƒc“r
+Ph Õ!Ð¹2¬Á`t`µ.ˆàx4¿j2Zh42#…
+Ul È
+ÐU<�àÜrª9H†H5�®÷Ó—°Õ×Õ¥‹ü�á°}4H‚�þíQ'pÓ6v¥ê[�!Ã�.ä0îîAqÃAÈe8Ì|†/ïAˆK x7qüwu¦ýWqQÖ…—Eäÿú_þ¾ã¥¶¿ÿøˆÿ^ÿ ¶8*
+Äø�òƒ�· È>ìƒ¹0•‘p›ž2
+ãì§üƒŽ«�È—§©!ÈìŠê@ð(qûôøCM42à¹‚4oM¤à«“˜i Âad1ÁW–ä "p0¸†ØAå` aƒÐa2y7'È3ù¢iÎa„Â&S�Ï�àHû ¿ôbÌtaB„Ñ´Ñ�°‘‹1°…êŒ*1Ñ¿¨Bô•B¥½F�¦¡UíßTohC	ðÿÃH/ðÌºÒìç¦’ö½-î^i:
+êÙº¼[ÌI>nxa\ÄØL)½Âp�ý¡˜�=»°ž�›Y‰†�àWâ¿ëîõõmzM5³
+ÍºÝµacì8f/úÿówöéâéßðÌaÿûpm+i<haúB÷ovÇñ¿ÜSc¿·7}Á¿oëiÕ.ì}÷ÿKýð\BCüÀZÿëð¿¼Ú\C>¾þ¡ýïñÿ0ýCÿýýÿ¾ÿF/ÿá¿Ñ�ÿBÞ«ü~¿ßðºÿûÿÿúü,%ý“t·ÿb›û&é?þHvðDuGÝÿìWúþŒZÿ#ì7ÿþ÷¯ü,%ûúþ¼ D{¯ëÿØ"=µmëÿÿïö×é¿ÿõ÷úáá/ã´!ûèå¾ì0—þ•­¼5†_ýG
+Šþ¿_°·æpÿÿ®ÿ¿¹ß‚ûjQÓÕQ£zÜ8¨†¿LU»Å~¿s3d=«Ú\vƒ‡â®ïì­¥a8}¤½é¯„«	›ÓšÃ�	Ði‹M�¨ÚiNÓM8>+b¸†¬SèCi‹áÓwé±Wl4¯½"Š?ˆaƒ
+;kÓ†5a5	¦…´ýØNbç<&§iÓŽ“V§MmFÅãÈ
+Ç xlt²ƒwñF!’ŽJl…"‚­�Ä4@ðÊr‡hkòƒqÂWßêî4@Ì§ú «¯KXjý4¯øâƒiñPÿì&�/ÔÁ‚h�˜ùÃˆŠxäìq…Oþ6	P�ÏËA‚ù ïÂAzTGédÁœr
+NCn
+pC$œ�àÜrº…á0Ÿ�(²
+qÈ9n)Â�jrá;!¯ˆ@¼†H ë^¨i¡¨Pª»XAx»�`qkÙ·G�ïîA‡k�àÜrƒqÂDG xl}2ªïAÚ„]ÜqÔƒ3¥ä
+�ÿî“ŽÿëÖ)y±á("Žh-üŒu#r¹> xmD…× ÔäWõÉ>ÿzÿL Â$çŒ–y‚
+aT‡ÂN{'‚^n,‚àÇ0ƒL•©ð»È1Æ³`A„˜ä¬�ÏÝ?‚°�Â„u ó'eñp[“àƒ4ò1ÈfeøAèÇ—šCÂj�#	ª1ÓXBÂ ÙÍBÑµL'ª¤žèÂ£&ƒ]Š¦Â¦j5AêcL#@C[¥ý{®¸Ã~ŒMyŠÂIÃîŒNÛÑ‡AÙÈÝ¦éÞÓY‘ŠIÒÕ[l0¦;9´oÌuFèÆÃMhÄÃ0ó&äaýB_þï×†n¯ßþ>ÍÖa°Ì¸­ªë
+$ûÖŸþöÓÕ³u‡]´ôôÛI:N—ïû¤Øfèzr‚–Ÿ„÷Ãý?m.+Ãkiý}ÿÄ/·á„×¼1a‹ÓÖÃëô±V`Ó¯ioÿÿ‹¤"þÃÿÿ¾°Ä*þëµþ§ÒñÕ‡x…ðø…ÿÿðÿõðÇÄ Cá´bÿüÀ/ÑµÑµÃaïýüÀMþŒ/†Ãx_
+á×úåÃ¿_Vÿn_0Õ¥[iÿú´î‹ßÿÓþÒýØï/vÛÑ�äwÑ�£ÿ·KF/¿ûjè†H4ØKÈ-›¿ÿþH{Òë¼ÎÚÿëèÂÿ×ä‡Zü‚#¾—ûôßÞ—ýù!ãÒÿK|<zûéÿý¯wÚ¯º÷ë¿WþŸß»zö»þ—ßëÿëÿÚµÿß®gmøªî¢ÓMt¸ØhD8‹»K½.»I[¿ØÕ�«ÛAÚßïóEÔZ~ÃB>ûXþÂ·_{×<‚¾6".4ÚŠg8âíb“cTÐˆ¸l:ÝƒDTkïá…ˆ†œCØ†Å´éÇÜw}ð¼}¦]‘À‡	ZÒ1&eà…¦˜ªØ[È„1*tðÄ&oLÚ7jØ‹â™¼â0†¦o÷j­›ÓJI¦±HÀ5H
+Þ
+' xlrƒqüDFa!‚ x40‚˜áˆ‹M0†�„@žˆ¸‘Ú µá›Ac	„äÚü�á¡Â^µâ"�â"*@ÔÇ¸KÞÿÒf€cèÂ×îðUü¬&˜N»ð‚÷¿[®µ__\#n;ù ÂIä�³1	ø'a°,þ"�éÅá$¼�˜/à†@-AñÈ ƒ@¬r
+//‚)Ðz	/°¤2¡;	„Ó!´äˆ‹Z_NZÕÂ{Ëüë fîî.í }Ù} ˆ–ALrƒqÿß}Å7²Ü‰2
+ã�<Žk�<Ž9°Õë§æb‡ds"Ì‹B9‘fE™v8dY‘|Šr9�AÈO"ÐŽ“ALÅ3
+¢?"ÁVE™„s"Á>Al|N
+Âà ÉqÈÜŠ9C™É974äxeáÈ49
+�Cf²>%„q‚.¤pF9Ü‚îxÈ)MÈÜ•ÞA±Ó#‚ ù€ÙñRà¬ü�ãù›Ô
+' ¢víL$A²„s8úhÅÓXBÂÂ´Âa4ô�_ÂaB
+4DâÈ?“ C0…„!—ùøÔ*Èø™Ða0�"Èø�'ÅÁ\]„ Â›žiQÁ@ã#ŠxBâ"0ˆ
+ÇG}¬ò†qU6¾-›	tb¦¨ÚhÇF*14a»
+˜UMVÅ Ðù„ðAª¦ÕN‘…F(Bõ;ø¤AÝ¯Çý„ð›fÒF¸NÍÆßßÒy‹.ôûÕÿ†aQ‡—mœItaØ"‡ÜÑ»´Ëç•vs9·Iîo£¨»†Ý&ØH&Ò{OCµ xl#h A
+øíøöÇï¿¡÷ý¼t4ÞÕÜ
+Ð×Mî“	¾é§§ö½Ò~æÝö»÷pÍÖG‹Ÿü#€ˆè'ò‚‡Ä½é^ºñ×ŠÃu][KúK�ßû×Ißñ_íþ6½!ã§ëT±i†H+ýûÿïþ˜…l+hÀ›ÿÍëÌÿ{ÓÿþˆXcèØO÷0/ýŒpA ‡Ð]WÿèÇÿÚ°ÑŽÿãÿÿ_×ÿý¸V×®ûëÿ¬ KëÚýú÷é?‚.º–pˆé‚.¿üúÕþHßØþÿízÝ
+ûõàˆþÂ#§þú!�~¿¥üº}ö·ù‡oÈaÞÖ÷¯¼_ï××®¿ÿé;¬6ý“uý}_üpDtNöƒûë “úªZoßÅ1W¯÷ÕÜ5ú¿ýéWïüÎ÷Ú¿°Òá…¿ü#ÚŽQVÃ_íSŽ©‹ˆwQv“»«wul[¶¯í-Úú|_h;í8¤×�†Å6¿�<
+'�ÈÑÁÒkÙÄ¢©6)a¦„Fí5ÇÆÕ4·Æ›ºqL4“xØ¤"/Mˆµcj)Õ4Å¦š
+t"}‚„
+`K_S‘¸�‘Ùv†eà™½S7¦š&í•„Âá1KíNˆâA—‚aM1NÓ	 ÓM<F¹› ¤äN‚&9Ã0rƒqÈ
+ÇñÇ!�9ÃmÌ8`„DfÐ¤@ðh4pØ`
+ÈøBÌ}<#è"ÿÄDqÄF„hðA¯ëêœ~á!ßßôÐi�ÍïéAA%ÿö©éþá!Aû#�˜k¦—ÅH2ÑüDDrO£Á�ù IÈ*yCÖ#ù hý"qGAbÄGÂè+A'þD
+J~Al½d5œ _�[7(é�g‡r“ xh‚A¡È*Á�Ã�jtcy†Èá} «ÁmÀð}„Â…
+CZôÜ$_øg;I ˜a›žÒê«ë`ŒÐ"9(´F8£
+�|6äÜ9ÁÈdHî÷1ûpAM@ðR�àÜú·Nÿ­»�jv¡5ÖAPrž‡òƒqÿé¿×õÿÛÜrõÿù1ÉA?¥"Gç²c�qÈ£™Ôã�Ë‚Ü›ž¯ÑÇÈà‹QÓ!–9
+G"ŽaÉÁŽ«‚D2Ç ¤ÿþ¡P~~°Í�,à¡¡i„Â0�ÙVa�á„—Ÿ€ƒZ)x.¸ƒÊ²>4óÁ<�àÜs¡ÈgŠíý®ŒUIOŠwM4=„ÖœÂ>Zz1´mUB„þÔ'0¡h0ŸƒF|‚ ö‚ƒƒ_ÿ} ºNÞÕ#Ã8žÝ8fî0®^étÜ½)‹.Óº1X Y‰¤èhÄØS‰£“°®cl.Èi ¡Ð‚ÿÿAõó}ºöaºwþµ®n…¿Zíë×}úmÃ7ŸðŸm'jnÓ²85Ü†f¤> _ÿ0Áü|Ô§Ýkß÷�ŒBõØÿŠoc[Ç__þ…ŽÈàÜè3ëÿøúAÿÛzßû«þ·ë—a�
++Ü%£ÿ¿_ú|�àQ™ÁÊ§N\Xˆ�ûû÷£ÿ¾ÿó`ÓÑŽÃ}j¾þ`OÝÿÜÀÈ+ŽXç4-°ŸÉüROïñKîºÿd‡K‡·~èÇÛ$;×ýü%Èj9NŒÈàÖ‡ý_w¯¥z_½z	¿dß¸ðD{‚#··é:ê�°DÿýÖIêoä+!«Ó÷£0×·
+,·Ò}}}«ûðÚðÂ0°í»·Ò×Má…Mÿµ~òßûé_EZ!ƒbM83Ù–Æ’qµö’ý§Å[Ço”=ì\DGñ þéˆiþÅ]|º.‹£º.)w!ð‚`"àh
+½5mâ¶¼%ñQ¦èEÉÀº	„ÚMêÒŽ+aµzm1i±÷§Æ¹Cè?EËÂm­¡¦oP¡4�Ëí¨Ú‚a] ÆÖ¿7—fôaDmE°ƒ	Ø‹j‚óÄ!È
+±ßÃˆ¸¤8ŒÀCa²¡È
+ðCPqÈãˆ‹²á &—h‡P@ðÎùÁ¸äãú¥y'_KÆ„E¬YÀO÷ñºHW�_¡úC´×õí0ÒÓø¥K¿×¤Òa:i1ÿíñ
+m(¿ÿ¯þ×ÿ÷ñ÷õòa¥N@‡!`�àÓroø[�×²0¡Hk9
+¾×õÂjšªk¾ƒŠ1²1î^¸}Ûþ>ÖÒ‹ãŽ@ðn9€Ur†Áÿñ_ôˆ†wòƒqü�àÝü‚Ø£™ÈHÌä'È ä¯Wüˆ=„ý{ü! ô¸<ð••f²P<& îh4Ê‚.ßàƒ! rC“s9¾%ç‚°øMïÿ×MÞèE ÐˆkêŒpA¦›Ÿ~ƒ+ŠôMEÓDZhÆÿªßg:O´òó�F'µº10Á£.ß£íR¦ŒPÂF&Î¨ò¿ÿãí7·òñ†ÕÙ¶¿÷º¶ô�Í'Õým¦švnõ[³	ßýÿ÷_m/I·ý¯Øc_»Åÿôí¶¯º»ÓãòV
+¬›œs­ä	>Ud#ŸŒ\�à®?ë_ÿÿâunºªûÿ×ÞÞ­ïäb<Œ,‚�’
+½ïïûÿÂ6¾ÿNæŠÿï×ú¥ÿ×�È
+AÊòå9Ã,‚c�<4Å�‡Â­?ýÒÿÿK«oïkÿûî×ÿnÿÿ Ks_ÿÿý~�oûòO·_ú.…~Å%ÿßúMÖ×éýêýßÿõÿÁÿ{}þßÿþ÷^ÁþÅwöÚ¿úm×ù‡b¸¦)7M8¤ÓM=4â¡éÆšè6)4Ø®•VP±¦š
+4\&ÒèD\æª©Š	´…†a®šiÐ‹´ÚT#r€ØäÁ˜
+8†À½ˆˆaˆ��qÈÇ˜Q!‚dâì�äänG
+ì— È3Y+%d
+Ü‹„à�øä3�é[àŠâ)ªj	®š
+4Â
+Bh2V~A¡ÿ˜OF6* Š…IU@Š„¨µ‚*a4ôã³þòãþÚáà«—ÿ__Ìnczuè?ÿÃñëðxIdQÿ´a|?ÿ½>ëýÐ}×þ"?ÿï×ÿ_…ÿüÿ®�¿¯ô›ûÿü?ÿuaý+ÿ"G¿ÿïÿþ÷¯úNôßÿ¤@ð¯ÿïäÝ'àßoGÇ¼‚Ðí~»S¬Tj…EŠŠR£�?Kö©«ÚÜ5»¥Q±±X†pÂhDD0…¦ƒA„ÓYÐŽ#��;ˆ!lÃ�ÈqÈpE uƒö™9k xkXAé�Ë²ïf÷oª¶Cº�Ö{È7zý¾šU®—uWü›’ºSb¬.f9
+9œ‰ ÖT	Ù§…H‚ã‘Ž[¦[�ñªþøA§ªk£ÌØÎˆÃL'‚nNy²3Yeì Ðw“‚wy°Ä~’£	èÇx"�˜Ì.šlÞ6á>ÜO6µéÎi=…T#ml&Ÿ­üWÿñÿ6ºóÈQ1˜èw1ïn1¾aZÑ�Í³µÒû«àŠtaiP"¢c1ÿ¶?÷ØþbWÁWû¯ÚõüÿW÷ûè^Öô×ÿ1¹²ÿ¿×�ÿÍ–›ÿ÷ÿ¯ÿÿüÿôcÿ¾Œ/ÜÀ_ÿÈéý¢:ëþŒ/ýýúU6zïÿVì‚.±{vqÿÿ²¢XØ«ÿÿû»»­o¼":wÿý¶ÇÁÇìUÇèEãˆ¸Øÿì¯b¢¶ö}ùP|[i˜F8i—d}M*oMMa
+siµÄm0š¯iö¢?L�,Ü0ˆ
+Ð@ðUÀÂhpÂ˜QDqøM­k�oXˆäÁhrd,‚öD²
+˜¤4 ‚öAc4¹Ç=ŽP	…"a:4ÈG"�B!—�BA�0äœœi›F6ŒM<ÂºHÆÑŽ	àèQ¦ª
+Þ–Ú¿ÓÌO¤•ÒmÚ®‚´«Ò
+Þ•=6“}¥‡ÔïWÝXyƒ…Þ\t•Rß­ÿ¯ß¡îº»Âª Ž¸ª0	Zvò`Ø9HH…Ÿÿëä+¥Kï^+ýÕê¿„=+!¡Öû«ßcÿßDCõ¬4]eú[è,#‘uõ÷ü#ëÿF5ï°Òuþù‚¥»#Œ¸MuõéWÿê—ýk¥ÿ¥kIb>ÿß¥�o§ÿô–E´h]C¥×ÿúÿýÿ¯_~þ•G}^©§ÿî«‘tßþ’õ×UR}-Ðˆ¿¿^•{¦ëI××W«®¿}}n»\]K‡V×­Sn‹†÷þ—¼·¢(ôD²®ÒØö*â˜¦Ò¶6+b­-b÷JÕUÿðÅ79é¦ƒM1A9í5´Æ¦¶+â¾ÿ'!ÄDZƒ	¡a^Ì0„0šh0½Â±±H�°6¡„¤Á™ÈGÛ¦Æ’aí„›I/n�Ro,4’Ï&ßËßIGÿßûlÏüU~»†¾Å-ëmváb?ÿÿþ@ìNC*ÈNC<lrÜ‡ƒD|�Ø4!S DÏ Ë˜Pƒ5Ùºé¡�Uˆ$:l7@Š„c…ÈƒW8q—¨Á˜ê*2òf6é7Ø|‚Ø|ƒcâ4“ÿŽþÚOáCD$ x,Á·ÈŽN?ÈeŽD„É¹7)Îåâg‚v¿œï×Ô*ÞaÂ£0]$3ìö{L Âj†69ñÿÃîŽî�ÑŽíQBhÂg‰}”‰~»/ÓNµ¿ÿÒÜ;D{~¯˜ó3éévaíëW—”½
+ELMµÿÿñæ?àýt´+�v7ãz·Â®+þÈ‡Óýv—ßðøUåÅì?áÿî~ÿ ¶ð®>MàÈñÌ`Èx/�sB#¢á¨`SœFÙƒ<Í‹È êA‡ ðE¼v+÷]_ý¿Ûÿò8ÿéÚ´BÂ
+áUmd%
+aam0˜A©òà h3ú40Â{ÂÛÕú[‚#ûGøD{ùnÿô…º÷j§<¼ÕØAVŒPÁNtÐ´chÚ£;òóÃ…Ta9!S˜MÞ¨"+‘]r7Þ¯øa.?·½ŠG­ÿÒZÞ÷×nÍê�,?Ü.blæsi=7û³nþŒ?AÃ1&Ùº“Ó§s9Å0Òµˆâãƒ+Ó¸îû~“Xj“÷þ‡ŒZëc_ôÓÚ×cõZî�ûHZ­Õ1H]ÓPšMi¥j6)4â‚NŸéo0®´–Ãý _ã¬?ÿ¯lqZÒF\â!¦dxŽŽ…	„Á8ƒB;iÿŠÌWvøÿ0Ë‰ÿ‡‚ïÌ·ä
+ ÎkžB¿ú÷ÿÿF8oû»ü7£[ãëûGù'×
+ß·þHtÿ
+ÿ·¥ß„GRNÂÝû{ÛõÎïþMÿ¸ó»ÿhº­ø";éuºÚƒõ¬0—{‹[áÝØ_Ù¢jŸ®Å0ï¾þÿ†Š4Ó¡l{õqLE±Z¯iD^ÆÃO¾"íŠ×ªdpÂM«g$´Ëç’
+!ÂdèlÞÚj4sˆEÓOˆŒ!a9ÃE²è¸g	—
+B"P¨C/eÁÂ!ÄZ U
+sZ�%lƒ�qÈ;�Èg!G Ù‚$
+dG-ÈsA§!‘Á�$¡‚$#1²šë„ÖÕHmò¯TØföä;�ÈÇ—ì6ì8¹
+>ävœ†‡}ßžƒcé>ÌmïWcîA†kë{©!ÈÇ!Ü�ÈW*
+	®ÞõZzêA°|_'�öx7 Â™†aÉÙ</
+³ÙøØzdðóOÊwóá²}ž�ÆéñF™ËÄÍ‡yøÄc¨/�0O Žg#‚vJÎåÁ¸ÖOÈžaÔ�ä×Ó÷Ui[Eú0›6ši«é§‹îØU|Zwwøf=(Uˆ»»ŽÓL&KPš'
+T&ª�á„ pú—¿»/Ú§f*¼tÌTcrþ^¸v	¬Äb®ÌwïÑŒžsiËù�¾ôú/Þ_³m7vb£*ÏíµËî_Ìwòó—²÷¥˜X_¯ýŽ!{¡ÿ�ïö£þ=þb|S.×O]?ý¤®ûì¹è?ï[ZîÌF*§øüZ¸d~Ô¿­ü?¯ÕË‚~ƒÃþ\OË‹õþ`^Þâ÷ëá�ÿþ¿÷ÿƒÃþl¿Š¸â¿ E?Ó·£¿þ\KzúÿûÓÿ×„aoÿcý‡ÿÿï¿ÿË‰oúÿPP¾@Ð{Kÿ
+õõ‚fòc¢ô7¿`ˆÿ¼ýßýþ—¯÷Wïÿÿºÿÿè½
+ÿ„ÿ@Š}èÇòa¬áH59ÃÙ��Ã——Òý,¡iûðÕTëÚÿs1zÿ®—õý¿áçÿÿßjßýØ.ÿ¶‹¯hW¥×ìø
+pª	ê@ðð[“‡b…&…1žÒqÄ_lz«¡ß×Û}¬DwwÕªßØI‹†œRwþÏ¢E‹â˜¶4ôÓBì'Ü'ZaSuI+S„6šfÑ½•ÌU´„msâ¨&›Å3hÆ´7Ø‹B´Ø­¥
+!‡M4:`Šö-Ý™ââ7¿rC»Ë×�÷ xk8aGGÞÃ	CB Á8pÏvdsB"ý'á¦^L&\E—I˜Œ+0“_§ê7n/t"")8â"�¨*ÿýªðÚ«
+$¼„‚‹"Y8<á~l×0äH ÝÎæÂNx#™< ªä6IÈ®TÏ™‡RÌäXÈkŽD‚-ôé¥^j"}¡i¦žƒˆhCL!jƒ.f°ƒ2pA„-2yøŸ3XBÂ'çá˜FÃ9¡ðÂd~Móñ°a!ôÑ�/;F3\þÑ…D>š1QŠ‹	ª7†¨ÅÂ¦š0«hÇ	„ÂÚj�¦Œp¡[èGÙÏL$­›©3·ö
+s¤ØfÚl3“¤Û<³*…}8i&Ã$Ncivoí#{Fþœ½fÒ„ûËÕÚkÚm>:ãÚþõÿþÓ7?fÌÁ®`4}›w§÷§^ž¶nÍº¾+ö®ýÿú^þ<BÿýWíÿ¼bµÿ¿O½÷QŠ¥ýÿÿ.Ì	_ù€/þ­þ�¢è/ýoè*¿î–"zzn`?ýÒÿ¿ÿF?ýhÇÿ·¡ÿþ`'ÿõ÷Ë†WÇÿè†HÁ¶@ñÙ
+H bÈk¹ñþÅX">ütÒýûÒÿõëþÿ¯Ñ‹ìS£þý/úmB
+™
+¨!\‡¿ÿ…¯·ÿêÞMô¿¾ëöÁÿûà‹¥¿ü,ÿ¬“ø"éÜvŒtc¥hÇ,pïäv¿Ð(k¼Wwšûí{þïûí¯õ´—»ý¿ýmvßí"î•ÕÓt}ÅG_“Â´þ-=‡ì|C»bÊÅþ+¶ÖØinÇhZw|Ð3°©ëìW4Cïúýr
+Iýp ˆúô"íÐ¶“žI>-:6"ÚbÚni±I±I§LŸ3B.í*	´ÄZjÐ¾û›�0žGb™°¾%ÆãøP†NW3—h3Á;/ðû	˜‹Šˆ‹lÂi¦b/eÆb4„m{[H4ÃS�š~˜°Å¶™ˆÞ"õï´aµ	ðí0šÞ‹ùtÐeb
+&ž(Àâ"-È
+!È
+Î"#.8a2ì¸i„B"ÂfÑs#˜]Ó1˜Ì]Ûm°¥û6¨½F;tšF*Ù}ËðË¼¼ßõ\†@6º_^5õûÓî×õ·[ïþ¯1=RK_û¥ÿ¡Øx«ëˆ]mt=*þÿc…C 5¹-u÷×Ãá{ð¿üÀ�Âÿ¿´-R]{‚#ÿ{ÈÇ£¯F>ÿO£ý/†0© ˆÿ~×^òÇÿK]¿ûÛòÝí/ÿñCººŠ»ûßÚq]Üz÷mI�Št"ö*£bâÊ;U±ÅÅ!}a4Ýjb/Ã	—Ë‚ÂƒOÍ«0�iñq¢Ó5¶¹0U†@5½ù0h°R†]�l°¤8äœ· Þ
+�CV
+N\ÒÕBj©…OP¤6à'�e�…»£i¸}_\�qÂþ91»½4ûNA»´áÓG®ÖLü|]Eý_\‚ØG!"a×õÿõÿ0�„QÌÀ¦Û'„žÏæ²‹ÃŽB9°ƒ"9ì›ž·*Éeäu&äpAìŒsÙ7=“üÃ‘ ŽóÁ¬¸	¯“˜åŽD‚1×L#i¡a°˜X¶´Áƒ°…„0ƒ‹Nhf¸ú*&XBÂ›ˆð—a0˜N.Ð´x#Âd¸œ˜L&a27*è�Í�ÈËÎƒlã£—� ¥æŒ[v‘‡tÑ‰°W£´bv
+Œ%0œÆîôM8´æÝ›Â
+Å„ÐÓz¡£†�}ZKj§]×§›®—³F-6ìçfÍ<ÃüÂ‡Ã¤á—:MÓ†o³t3aåê1föŒM'›ïð®^sÉ£
+†onÐfö—/T3®‡o¡‹ ×ôþ“{Æ¾ÓºÞÛ^N?Ý?kºvŸýë§ýé¿z˜uv×N·Oá˜.õ¯úXÿ»kÿ÷Õûø‚ÿì1~„B]Ýé6)ãñÃúÿ�Õ¿wüoûûÿ˜Ë‹ûºÿ˜¿ºÿ£ÿÃõ÷ßð«òáþÒþ¿ýkåÃ‘×÷Kpˆéÿß¤Å_ÿ÷½þ‚ÿðÚöŒ_ÿÂ0¿á¿ßþ`ÿýþÿoízû
+Mý?ÿü�ú__úÿû’¾´»Òjÿ#¿ûÿûÿþÁòïüWjÚûË§ö¿»uú·úýiþŽþÚ¯¯þ•äßíJpÿÿù'ÿ÷ÿCÿ}Š½5ŠŠš°Ó´ªÕxÿõm~!ßýïÇiÿïZÚü5¿JÂ°ïí/ëõù:þÓ“MÞsQl{vÓií+b¢½+ÖøvÔqQA;[B+Ø«XiEì>ØîÛ^×M6´þ
+­ Ðƒ°š¦šaPa“iŠ‡›M3zRhz
+¦qj¶*Q „6¢˜§¨†­!lRhE´ÄZmxˆ†aˆâ,&Ì B""œÎdr0�‚!„Æ´Íè4Î4ÓA„ËÀ†-ªjn6
+a.�õˆâ9€^ ¶
+�3Œý-WP^“	¦¸÷uˆ‹�ù@.øRÎAJ-9�,‚Íê
+@ðÒòý0™A	A÷_´aBÞ®â0ƒ†Díoµÿþ)Ã´9°ŽF9‡,s¹p¹Çÿ]| Â¤W*%’Âp{ �{%È8²$’²7<á‚à« ã�0ùÜ�A0øk6�~A�Ì9Èìƒ|%™�Q=ô4à!aƒhZ¡„PƒZ
+0…¢lÁè0žžïÉøBA„Âi“óñ|O‚ðOÂ4šjx#r}£´o.�µjŒTb·=Ñ‡aMíÚ1Ñ‰Ú1éœTmº0±Ìm ÓS§ô-Tm9ŽŒL!aS�M4o0“ˆaW÷Ü3`ŸÙ‡a¥¥¤û³u'zzot››š[évÜ+*’ìÚ7iá6—MòóF&x.!6Înž˜^Œ~:öé'ý&ý½WJë‹÷wýªß·éu�KéãÃ®ƒ6ïUêôôßÍÍ÷åÂ=ÿÿï{ï_ÃÇÅ=hB½L…Ö¢´?ÔF?ï¯î×c¯ÿ…ÿÿæ�ÿ0ý†×…nÔ-ûÌ	ù€QÛù„sÿÿü?ÿù�ÿûÿþ¿ÕúøFþº1X­{ï¿üWÿú½½²oÿÙ7Kÿ¿ü�ÿäŸðˆûûGú
+§�ªÿÿRNá×ÿý/¿×Ã}ªíÿÿ¥Ýú_k÷oïÿ´ëµ½‚.—§ÚÚ÷„É¿¿ý{~ßÝÖÃEÕWöøzPÂ]ÿ±W®ÿköŸÚûJöÑ„SÄ5n¾Õ{½w__3¾ÒaCkÆÄZi§ð{Å•uw¡wí¦Å|^Ó’�Xûb¢•ŠµöiŠ‡Ýk}±þû_mEÅ‡¦+v4-¨ã‹ÂµÕ(A¦ÒM[Li­V¬h[v�ÃK ¶
+�A¦]—
+CC4pÂfÐL Ì0A„!¦mÖÍábËµ½¦Ö
+;	‚M6ƒM[aEÇ�6wa<4�¢‚ð""A„@ð$ŒG�´9.—¢§çò¼†Ç Égr/‘Ì‚Ë�]È“ ½�<5(r-‘,�$b½„i�QáŸ†ƒ’“‚åÃšg\2ŽDA
+A9“W(�)ñ“‚ØC	„E¡Ãa…6¨æÃ8œ¨vÃ¤­°ÃA˜gL´ÿ`óc¾‚�„Ûz6óc³fúÙ½³Úé¦q6lÛHÙë~ÚÝoöî�ú{[Ûÿ~6öé?úo�ÿMþÚþ;~»ï¿ííôû¿ýÝêÿ÷½ö×ÿûéêù@GUØc’]>Çÿ®Ç$?rê×ÿýÿHrbb�×r
+°@ðË‚6Á
+W Òä‡þõß‡øIÕíá½ïëÿÞÈûü'…õ´Â¦þÃ�oa¥qJPá.áÇûËï»J+ÿý¿"öAln�«®@‡Ô† í:¿ì?o
+ýDjì?û]^?ÿý¿Oè4@ðnáÇQhÈŽATzü70}¼6ÝM¬ß«
+Ì÷®®1?ýþü5®?ö+ª�ï¿{M¸0ã
+ïý×óBÿõÓk²gÈuÕÕü7ŽÅ?÷ºañ¿cÐ½ý÷cü"!–9VAì dL$åAüÜOÈ¶ñd£$äà“™È#—Z¼ ã�Õr7"ù;$åA±39,¼îEÂÏxnM2äW3ï� wöíõßåÊMÿKù…[ò ý{·ôèXOA„#L&’ ÂÂ!a0…¦a™ã6�˜5TBÓBÔ•K5!¦´ò±Eâ|O�eXA„/û|ˆ>þÝ[{jÞùÿiPD[z»¯í}ÿÅ—ÜÚhÚ
+„�ãF&ÕË¾�¯Œnü0S´ŒuqQŒ×0Íôb*„ÚÓMÛQ¦šq Ó_ýw½µÛT«ÿÒ÷ýRuõëöÿ}˜xMÐvªo6Í�Ù€êö7¤“³spÌ7¤èÃË»9ºwA:LÆmút›g“pÎ+
+orô3u'na„�ôb£fpÍÛNË‹JÖÞÒl%Þ«v•…Á+iVÖÒ´–¬Âê÷ûiWz_RMý‹ÿQ»ÿ÷êÛO½­WþÂw„ý:q½{U{ïWXBÂ¬PB‚|So·B‚ím464!„ÂIÛ†þô=½ý‡ŠÅ_ÿï�ü1×�»ÿÿÿûV(E«ù³ý©A„¹+ZØ&G… ˜U0“#âìW·\øcó7ý°ð¼ÀNÿþ—íÿ.U¿ÿù€Ç˜¶æžÿò€¬9€8q`¾>aWÿ¿ øF=ÿÿýß°úïF?ïÿÿÿì9�]â#í{‘ŽßØ">ß÷0íéw‚#ÿþûëÃ÷àˆý/wÿÿòOù'O
+ÿßÿý®–Ú×Ö�¿óµõÿ¬/ç½ÿþûÿÿí~ÕOvÂ‚#ÿÿƒí&_ãµm~ë_vIàÊµmOû{¾=S†º_ýûa/b©ò#½Ë¦··]™új*)†©´©Å ÓŽ"ÜvºiÓÅu÷[Õ±ol}ýÃ»ŠM<-ÃÞ*8~·§µÓLBA´žúœB!´„4#všb‚{A:¥
+ Õ¶"Þ-®Þ6štØ¤/Ç˜a�áÇf"ìŽˆƒ	 Ó9œJŒ ÂÈá–¡âä„™xº.Â&G7TÐi…µ9¦´² °9 5�[Ê:^Òxµ�ÿÿÿ�;±ò0jò
+0BÁÃVd
+K ya
+K Ï+“‚
+°A±öÂªêšªj=„ï´@ðØ;£«¯ù§r‚¬8«¤äwh8r¯úÿßÇ¥È¹ë¯ÿÿdÜîƒÏ ¾!à«%ÅÂdÇ;§ž¸Aø¸<�…Y¼†�ä‡"Ù'< Í™‚¬†hêE‚8*yà�j�äpAÜîNò­H7 „4âÕ0„4ÐÓZ,&¡v57²¬œA ÂšxE;?�„qa2
+³X lÑ›pƒXAÄ2Xƒ!` ~¬ò÷F+hÄ6£œúmKÖÐhXB4aS$o{9í61µ+F&‹N×F7£ÂjO°ÌMæÕ Ì?Í¿7¦¦í]YáÛÞlË¶ÎpÍç&“g‚â«Úf4b³É´“lØ"˜}çÑäåÞo¾“³fžnsa„é?ïÿk®8.¸ãý%¥vžšãý¯ña?¿a0�[¦ßµÖéÒ}÷ëÿÛìæ_ª^Þÿ÷ÿø…ÿß_¯ÿõ�ßÿØcÿþÃÝU¿þ`0ÿ­ÿòá>ü/þÿË†uûoüÀ0¿ÿáÿÿ†úIúÁïÿú_¿ÿþŒð�¯ÿßßëÿÿúß·ßÿ‚#ÛT¿õ÷r1òOì×ÿ`ˆÿÒôÿÿä‡¿ëÿ$?õá¿ÿý¿öøa;õµaÿ^ëÿëþ¿ÿÿõö¿ºÿë}{þŽþ½„G_ºø‡Ó²qî½ÿü0¿__öõƒö?ïÒøkÚé÷„ôâ-4ãŠÐßN.Ý¤Óâî•~Ø¤Ó�4Â{í$í+tÓ¯ÛK¥¶+m(k|u²ìlEÕ3z„ÂObÚt.“cˆˆÚ‹fó‰'…E&Å'H[A0…Ç…p›Å1T„y˜2Ž Â˜æBpÈá  ÁˆaJ|Ù„ÑÃqç‘‰S0„D0£ Â¦ƒC@Á4Ò>–#â†HkŽ3’@„GÕGp—¦p¯Úž"ò`Ã‘l“á	�%†ˆ!’ŽBÁ,�àÕéªj
+@¸äìîkýOkF?#ô`w J‡q|8y©,^ÿüyvaý(kf!Ç8ç�iiMËr·„5œ¢åR©AÉ¹œÞp¿ÒÇkÓOåó5ÈFó`ÐvO.�Æ)Ø"m¬�<3¹PNÉÁV#pR	„°ƒ;�ŽC`ær-�<8à¨œî@òr æ0åF9¡ÈlÑíý<49Ã`âÂ xlr†w xg€…„ÂË‚ ÜOÉñtA‚*i�L%Yðƒ3áð!&IÎäK/
+„'”9¦
+„eá8=šÈðØWžÂ!|_eAcˆøf³`M2xFær.‹¼6JúÇß¨Æð†š¦�&ŒtcÌm0…¦šnéÌp„0ƒ]�YÍ¦…¦ÚÐið¸†M4÷BÐhCAþîþ@ðØ?þ½S†nòó—¨Åžá…14Ÿm'F7<³F&ŒMÝœéZ£jÓ
+b£ÝF<róiÚF®Ìmš19vß
+Íª£ª÷û^×èPº°Ì}êÚúþ»­ÃN“ï_´ï†ntÛüÃ6_ñÛfãm«¶õÛ0T¹º“Óî»¼ÃÂm›µ·Y0qó¿¯âýþüpÅ¾4œU‡×·ô8ÿŠ×M^¯Z^õÓñú«ñ_Å­ã�î>û¿ ÒB¢±˜	þmèñp[¿Ú¯ÖÔ]'ÿï¿í§ÿûûÒÿ¯j?Å4×ÿòá\ÀOÁz1Ã…ýÿûFþýü/òáú_ÿÌ?üÓëm,0L5þ�ÿ
+ÿ¿¥†ÑŽ¿ÿí$×î“ÿ£þøÿ‡þ¿ÿ£‹ß~"?Úÿd‡|`‹§ÖaÛK[Ž˜"?íRþÉBûý.¿$;9ÿ˜_òC¿„Gä‡ÿ…ÿä
+�<6@ðnä
+í…Òõ8í¶µ÷Ý§Ý¯÷M«kÿßêòá?k×þµ_íÿÝÓ}­¯¯öMß×ò†wî*þ[xí`â˜¸‹¯_â¢›OãöÖ—Ûý>ý†»·^Ùq÷
+-a…�ôŸöÿÿý6¢•Š´š[§vOŽ!êÃIÞ.*þ)æ�§ƒ	Ä=x§Øjšwß±°ö)¨¸ô±Mÿì(H6£j7i¦o[lSMN%Lâmqj�ˆ‹z¨¤Ð¼&…´Å;OQmÿâ3ƒ0„D28i&b/À¸A„A„3²ü5SànG‚o/žG�L'pÂÚa0šeà¦@ËæªÿÿÈdƒLˆé¹°"DGÿÿô¿_ÿÈ¦ ¶–	xâî9ÇM4£A¯ˆˆ«]0–¼À¬!¦#ïë¤–à¤× fCùÃ@ä2Tr†ÁåÔã¦CŽC<<&äœ‚¨ä(	�.9Ã| xrƒqÿ xl}H‘ÀðÔ‚¨M4Âj©¦™ÃÂûö-n@ uv—}]0¿ÿÐ¶Ò¸‹�!ß Àî“´C;ïÿÿCÿê8Žïÿø"ë«ëÿÿÿ«düœÊ¼†‡'„4Z$g³làh#è�ä‡!G! “žø¸%„£È£‘‹„w¹<Rƒ Gç‚›„ÈÜ�{ÿñßB2è0ƒ_L!a0‰ðÁ0…¨Pšž	v0@Â	øMh%Äì«4Ô†O¸Kˆg³Q4ÈóÉ÷ˆ�Ë³q´_ª£c†aÚi˜UBÑ�¦Œ^bhZ{I£^£ùŽš¦…£{„Œ]0šj›HÚhÆÓõòø("‡Z¡y‡zzow­´aÝœÎZlöh­Òl3‹1ö»î­$úÓ†F&Îzl5á›¨Äæ6ŒMç»	é6Œn´bú;J3�‹ŒŽŒâfÜ�+ÿKtýT½§i®:ì_á7WöÞøÿ]Òz´¯Æ›ôŸöÓ{¤÷ÿÈæKQ=—c¿ÌfTFÈè7ÿ}†"nýµ¿õøÿú1a�âÿ§þµíGþ¿Qý�äÐñwþŸ/­yþ¿ù€—aªß†Ÿ˜Ë…¸_ÛýöˆZ÷ÿøéÅXmÿVÿýá·ßÕ|6¿F/ÿ_†ü*ràcÿ¬ÀNä2
+ö¾ß—±]ýÿî�ðß¥èÅýÃy!ý/ý»ü7èÅÿûß÷ÿ²Þ])Ñp½ï0í×õãÿöµ™ý¿ÒþÉ¹C¶qÞ×ÿî¾ü�þ–àˆû$?ÿØ"?$;á¿îÖ=uíí;(v�ºoÿ†OuÿíöÒ·¾ÂßkÞªº]úëkkë·V.Õs;ú�<5Ü‚ãÑØñQRŒ;a§ÝE±ûZ÷lUð×a¤½„Ö;«Ø­8¸=¿ÛÓøih8¨û¸;V#cÿ=û�YtÁK÷Øö4ãjªš{EÒ›ƒN;i¨âšA«8ºlRÅ â¢£v�‹¦)ªî*ÿÈûiÖA\r1Úi#±tË°…Ä2>™Ä¶yÂ!†	B°«Ziª!
+5µ°¦$
+BfôÓSÈöƒMI§ýär«ùk¤SÓ�48ˆˆÌXDÇÓµÂZý
+)4‡ýS%ˆêÏP­µ.ËòVJüQ�·¿�˜qF²„×L&Âi„Âw�R}Õ„š_¡¦Ì^a=×ÔÂmëˆH§ü0“¹ìˆIÜÆ¿ÿßkæÖan“({Y…ï!²Ê±�Ãÿ�ÔVÐ ¬¸‚y0_	Ù+ö4ïéØxj¾ßuZ¦ö»ÿ£þøF¿‚â!&úiß†We=ö…ñxD}ëûaöw¦®ù6³±¸Š¸âÝn¢/ãŠÔ¡ÿ«ìtÑý4ìÍXˆÙŒFÓWCi<ì�á•2CMÈw'eÁÃ;ÿùœ¬"ydÈ(r­¦^#ƒƒä‡„Vv¡H*ÙpC €©®A¼&Aš6Y›!ßÇÅ®@Í9æE™'£â™Šf( Shú…º÷J¡4ûæ×—
+^#3vŽ;6˜9Ü;¹§wâÑ1Ü†³«£
+ø÷èD28+²³ýß ¡ÅGáÈg}ÿÇ¼† þÒÿ¯ë¯¤+÷Ý÷ì¸‡Â�<>
+yà�¸ä(ä+ærgä\‹d� ƒäÜ•êCQ×ÿ fûÓïU�hpD~‹¦SØX¾,—óp@Áqi’Ï!Ž¸—‚a0ƒ ¸ær7*É¡f†ð¡4Ë‚|AŒ%ÈìÔ5‚
+NÁH&fÌök'Äû Àé—Úq¯ðÂQN¬Üš´Â¦L'hÆÂ~´˜TÑŽ¡aAÚÚë1Ó
+šjª…Ý¦tû¸i„L&»	„Âì�%‘zÆ(¡ç�tïÌ:1=œ»ËÙ‹7iÑ½ü½$a·F'O14ÕžŒNß—FöŒm¡‚ç³›F(`‚6š1ÃÒ7½§EìÅÕ¤câ#è5 Y„.8á\+ô¾¶lúÞÝ=jÕ?«ý³ïös†lï7?˜;ý»OZOûµOü&Ò~«ßWI°Á;Tûä48zÞÈwê8Okü|qˆUÆ/Øc¤üpÄB´Ý%tí/ÿ~ôÔ]�×Š÷¥¾ÖûÅþü7×~Ÿ¥ø"ž•í/øSaõ÷ÿ00¿ÿˆ_ý‡Ò�0ÿ|/éUÖ»þÇöG†¤Ü•’³ÙV{;™üT†qÉAäÜŒ{ŠýåÂåÃBßÿ˜ØûhÇûßÂ6¿ø}>`(®µÑ�;x_æ=ÿaþÈá›Â
+-ˆ²s"Ì¬?C+Í4Aö½yïúÞ�¯Gþºøo¿Ã¥ïWü/ÿo«ßÿA?þ’1ÿðÞû.eÓE×F<NÍ¥§]Õ¾ý.Â«×Ø"?Éj—k÷äŸÃÿäœ¡Ûý}}ü½¼›ä‡Goÿ×p»_¾IÛÿoôÿÑ�ý”?svæ:1x Vo8¬ÇF\0Òízµ{
+Ø]Xa/b›_ ãû×%n¿W×¯ÿ§Þßko~ÿ}¢éÿö¶–—æwþÃñ\n·UÆ¿ñ]/á¯ |ìW5+½!qKwQ_|5V*Òbÿo´¢¤½ß
+b˜ï‡Úñpá…»¥Aö¬m÷ûë�ïÓÍ¯þøcõÚãZç•¤ÚiÃ¡a¦“N*˜¤QÜR±QNÅ&N7Þ¢šM¿b˜·c¸¶˜õaÃ_Èl¾¹�˜VÿÇ×Û×ÞlN|Ô¸ˆˆjƒA„Èà�µøa„0˜A‘ÍU´f ƒƒ[”=&Ðjšç#pA—aM4ÍéY´š`�iÔVø¾ý‚#®u»ïßÑtoýçO­‚)È†¼r!˜á—‚ xià‹_�ñÄG„G^×Wˆ×™¡õ|Ÿü�´Ö¸M¤*h–¬l\Gqm5‚hÃö?_øÏAGi Ëƒ	Ø©ˆÚTÂak”<4CõÈê+ù0ÝØÆ	-x´ûS±ºÿtozö?á8ð¿ÿag_¿ÿ%Ð/ùµj‚#ýS�þ„"žáýÜÈ+9'eÐ×K‚)ï8äÓ�1œ…‚à†@k¹C2È3AÀÀäÿ!’—â‡Åw�ÈO
+ºjªšD
+Ç x1ŠCÙ£ŽU4Kf;ZÚ®«­ÿ­½ä;ìŽÂzÃa<3\ƒ†´ÚÜ‚‡w!”í¯Ó]ÿ†‹ Š{Ò#÷8ýøî.û¾6?|Zí‚ô+Š­~úú¯Õ—…Avk;Ÿ	ÌøCŽ¤ÌänGdìöx5”æ°\„„É¹1Íì�ã‚5k¾	?ßý¯×Óˆµ°ƒ²ZM;¸´Ô‰ç°š`ƒBÓOcapŠ’Rƒfà¤Qì›žƒÙ¬—ùÜŒrìœd~MË‚¬�ˆAîT„~GÄ à¤ ‰è<ðGÄ4ß0ä$ Èlr¬‹„|™!È®DsÇä ×OT2„Ñ´‘…N­m_�Tý�ÓÈ+9!ívÎé.œ0�áBÓTÊä!„ì.¡P´�€Ïa´Ñ#—0¡¼Zd6L q i„! Ó8åB&0…þœºn’\Ûûú6›³hÚÌ'0µóˆŽŒnžcºSÍæÕ˜èÂské¤Âí±ä~ŒV1C§§18ÝßÑ{ª1g5ª£G4ŒUTÑ……hÞÕncm*19{ªiÿImñí+ªõ\_CªûµþÔ~ï„¦ûh!ý÷„Œ|3u›�ßnýõwfïNíKÌ3iSÂk½²î“†¦ì/—oIØLòtêÓ†.ìòýŒ\UTqSlŽIÿÒmïÎWëö?Çð�T"�j¼BÛîºMÕu·[1fmý/v÷wI^…4ýðÌÖéúãfÏÍÎ½„ë¶/AÖØOô¼Œ+ãÿóbÛ×„ÿíëüØ/gŠ
+Â„Ý»Bñÿø…§Þ·ÿÿþ>?÷�uÿVéÕ¿~ïýÿî]¶¬hh¸ÙÇ×ÿF"ëý„GOýôm~ó¾¡ñSŽÛ
+Bõø^þÿÿúÿæpºõíüÀeëÿÿáþ¿þ·ÇÜóÿ{¡Â•|_x#3CîÂâË¨†Gã†Ý¼Àjôcÿ×ÿý«i¥0}†�F/U0'þ«ûÿ÷
+ÿÿú{´›PÚb•¸ÃQnìDFÄ[Md3\ Ñ©Xm—ô¿ÿôŸÿÿÿcÿøëÿÿîïÿývÿÿþ¥ÒaØµÓL¾cL¸Á8`…¦^0Œi„ÖÙo7¸L(´Èƒ¶�";ÿäŸÿõëÿÿøSØ¬�þIØK÷xDuÿÉ¿ý_û¤�ÿüDG!’wþ¡R8‚8ëaéÇ_Töÿÿÿû×¿ùpÕö»
+Qpµßmo_¿ÿëûíûÿÿFþLºQ°¸PHb>Èàx#â.â�wñôµîÓ×F„GëŽâ‘¡�¾ÂWl?�ÛXzWïûy°X¯¦)Ø(®¹�áÆÆ*q&ûMM0�ZÚQö-a8a7i¥jÅÆÅé¦×
++Jûµb£Xki_¯†	Z…®žÚ Ë´íRìÞ¢˜¦q%M¨�ïÝ6›fñnÓÒÒlTSQMRolRþ:§ÿ
+õˆˆˆ`œ�àÕá„0B"(¸ßNB(¸±eÕ›Â&cD0Xh4Â
+A
+;ÒµóžxHèâ9• =—EÑ„JAh¹jí%�ñp<8qVˆdƒÁ°Ò5Óä6öRMzÐg{N·K»ª×Är†w xlr†ÁÈh9ä6Þ=n…-b‚Åy5ÄK%æ½êÄyµÔðö–­SIäÁhé¤ž==sÊ†Í®°Ð†“Õ=<�˜¹!ì<aÔuX8ˆÿSkV¶±U.�í Ž><ÁdzŒ
+bÚLp¡Vê“#ƒO|x}™Þ�UQá«.¾:†¼Ðfƒ3.!8)˜¦c4˜¦b˜áÏŠf!˜Íh3@h#ŠaÌfb™²‹WôË™¿ÓùpVqª´C¸28`à ×ðÈøDL‹8÷ ƒÏ
+a:ÇÂ(vG.©çÑ0'ë+*¤|Þ\™
+â"
+< �ãr9ÁLr‚Ðäêƒ¿£ýG0ïáH4@PA�Y€˜L†Ô ÈA
+Ç ÖüÁUþÈÜ�á°rƒw xh~ì¨U±Æ¯ÕBªªúawMúÿû�U)È.:[�ïóÈã¿þº§Ž?þ8E8V§I²vGO‹ä
+Ü‚“«¶äv‰8«þ…5ÿ´ØR Òm&G~®–ïýj=¿ì&¿ö§L}6¬Ž2á«×ÿUú×öG(ˆÿê‚¬DDr†~“Ì“‘&ær-‘< fòð”‡Äó¹È/d'’²P{5‘��Ôr& ò¬�Èqò	GËríNÈ$„»!–9�2$
+7ÄôáB½>Á!h0±„Â„ƒ	„Â„š<Ã8fÀƒ
+œZÏ¡;	ªa…ä|\ Ÿ„.]BJ„&ç°ƒÈ-‚ÔÿþèÃvÂMSF:1C7eÛg“¨ÓFðÑ�#�46�"¢c°´biÚ0¨ÚnîÂFÕQˆ5\*a=Ó]ôûo†@,�õ_lÃ¸ÌWßIºè3¶7C
+oríÂt›Ý›�Í›7¥TÚ[S§˜�¤è'ÝÚ¦Ã7´›—žO10ÍÔ¬3vb´ÓHÄô¼o	ÿ¾ßý<jïÓôßOzû¥u½»³ÿ·÷‹~`û÷ÿ§õi÷IûÞ´�¿¯¤ñÂ\¹½.¼WÿÕSÿþ=´½÷ã÷HU±ýGøb“ÿÇ¿°Çþ÷[ÿÝ(ø¬�˜j�qÓÒÿ¿üÀŸëÿô`ÿÿÌ/Þù€ÙÝ¿ÿF�Ýÿÿ¿ë¥¾�#5(Q…ßøF?ô¿ßÿú÷ßþ>ú1Ãá}‡zÿúì?Õúëöí)€É¶*¬Žƒý'þÂûÿÿäc¿ÿ¯üR[änŒ_ïû‘�ï†ÿ´\Wñøa|Ú¡Û­/ïùþÿÿ¶·Oý¾Ù7÷\ÿo_Ãÿk÷Oþ—]×ìç²o�[‡!�ò`\uˆPlŽ‹áþ¿jŸìpîÖv·ðÂÚÞÚZú__}üWêwÛ®×�KÌ;ÿeºý·Õ6½®@ðÐ9Ã`äî·â*CìTTE÷tÅ¦›…¬5¶)ºbØ«M68=â/†šnÚÖûUb6¡«½Áíú¦·kw¼WÿUHãÃA„BŽQÐ‹i¤0ÔòÛm1M4„mD:dèSH[LlTSŸµš�ZMŠBôÐ‹bÞŸõ½ß¤›ñ»B!™s#ƒ„BBÂff$
+‹1„M˜&b!…0‚!�êÚØSh�‘Æ„CU°¶·¯µ¥ fC 	à†`ä
+§0â#�ø¨_ý,D¼�à»’]×È‚Ÿ×`�&ÁáL+
+/ ƒÿ"�ŠÕŠúüEØZ8•#íÕBúDÃ9Ð$t‹‚æÖ²`µe?]9'IµÕ¾Ö”¡ÿõòpÿCh(E:wr�@ðk‚ÞÿxéSˆ±��<H	�<5 �á\)§ ³„²ƒC�<~<�á rª9÷(|/tAq×
+¡Bªiªa=ü�á±Õ·OA9Ü\ƒŽù
+qÓrtc»û_î¡,E‘Á;Ûºd2Ü;«[�Žâû_¹Ãw&ó¬ÂDG ïõÞ¿Å!_ÇýU…¦‘îÈÜŽ°w× î@ˆ#}5­= ¶NXÿïÖ£b7…�d°Ž
+‚ðŽh<¬A…;™ÎäìŽ
+‚	2°ÖO�fôìã‘,ƒÁP^âYŸ
+aHaÈ®g Å„
+•d|C-È�EÎFær8-Ï\ Æd£NÿðEýAèó#ñ¯Fñ ÐÂj±ª6ša
+}4“N!„M÷«BÂø´È' ÂÂ!
+eÙVG< ÿÿˆªˆe9Ý_Þ¦ãuÚËÍ¡…8š1a8toz1Cº10Â˜Ÿs
+”¼åäŒOw$¨Úw10Á0­š1ÓFÓ[ôbSBÑ„ž•ã�â!‚ýÛ§ÁÝ'á?vœÞGÍêœ3ëÿÒpÂ›©6ƒêÚO¿‹Â
+³u+®aëK—zvslÝÍÞ¾{¤×.ßAq×#G÷ô›âÿøã¡¡I¿�ï®>6÷þë½ïÿëûO_·»JÓ{]®ÇßY7ý/þ—ý	ÿ_ÿÿþÿÿíuúùŒŽâ!oëÄ+ÿÇÓ�[WP³Ž¡/»ÿùq?ð_ÿ_Ë†~þèÀgË…ÿ}ûÛúúêúþèÀd�{JAlp±#Óÿÿÿÿ÷ýÿßøoÿÿ¯k¯Ãz1ÿ¾ö4bût¾.AlÜuþ¾þÂÿ¶MÛ&ÿÿ’~×®ÉÙ!ÞÒÿïz×Oì›·’/úßkþ?# fÝPE:§7ýÿÑ„ÿím­ÿ´¯¯W^Ôã¿÷ÿWoß÷‚#½Þÿÿ¢àGöÚäÁjše9Ç„Ô}Í[K†»`þ*+ÿ†­¦Ç
+¿øaxï¿´ïÕ{øö–¿w®§µô\=†\‚Þ;p°FÖêÅ1qi»A;aª±qtñPwqIµb“�‡·êÚ[›^ÇÕu]9@Q
+thX¯È xl~mk
+ zç°Šv)ÓSh[M6››Î$Õ©i6¢š°Í¥I±H[sh[Qµ)[ž[	ÃMü„‚7"ÃþÅRiŒ¸â"BÂf „CƒCÓLeðƒL ÂÁ5†ƒA aˆì Èí0„Di¦o/Ï†™sˆi
+¼0¹r„Ða>ý=ªõÈžˆ¢ãˆñÚv¿üB!ßõëTm4m7¯¥…×®T¾_ÿÿÍ¦´>ÔT~/ÇÿÆµá„Âar8lÿ3Ðf``Ž�ˆÈ³"Ì‹2,È¯DŽCáC‘&E™dYª�ÑN)˜ÌÁµ�H*žE™d\ÄCX¥ü¼
+¯kóÏ
+f3AEÛ†\3ò9ÂR�Hé289˜¦c3kì^9>ëîˆ-†¸àèæÈ¸Œ@i‘× ¶T^mk!hX‡Õ-ÿ ¶
+nqÎõ„¾§Õ_ý*›Ta…óN¬TW
+(US…�á©„c�<3 �á¨ä× ÛîC ‹Wø¾†+38SÀÁáÂ�<<-�Ër¡?
+�|ã¨L,‚Þ=ñZ1¶QM0º¯J©øOqÈ�á°á�á�ü4ØfàÑ†Ñ½áÈ®È;ˆ^]ÝæeõëÐXUøÍÜ?Ó‡ý«uH>‚ü,Âßûtêß~½¨x_þ:·ÿkä
+–uÝúþx"âær-�\s�©¡Ìä|j×#‚$G x6ø!ûóRÿ„ÿþïÓ%„°»6Ä¹ƒ,�‘á+£á­x'á	—ÞÚ�ÄÂ!eA;#Â
+øœd|^ìã ÉYïÂæÿèÄØ+ô¾¿F6NõÚ¦a0ƒþ-4é=b‘…MÅ„
+0… ÷FÖ!¦aw¯áhWû»ÖW¿üÞéæ6Œm§—œ¼Ã
+qQ‰†oÌ,¼¦7‡pÌY‰³�¹�ÓIF.ÍÔc£›9´n‡zjØHÄý«ñ…õÚÞ˜Xõõ è]>îêêý?ô“k¤ßûTõé?ºþ¯7ªn›öž›ôªsµ»7ö\ã�<5ª]#TüB›ÛÿK_|1‹ë�m÷ÿÕº½±Õ:xú¡CC�ÿ÷…zVãŽAl¿j7û0nyýï0$D-mÂþlÆÃÿÿ·áôŒ'ó+ÿë~ëþþAl ÷„x"œ/ÿ»/®ö´ü-ì9€ÏúÑ°�ßûúûúoÿæ0ÿ÷ïÿ¡äÁÜ%ÄWÞ+Oý`‹ª1ü7ÿ½7éÿÿá‡ª¾»ÿý{þÞÝ”:Õ~»Ðê¿ù'IýòOþHu²C†þ¿«ÛÜ?ïmäžäcä‡ÿú¯¿×L!hÚÁ_[º¯_°Ò¿_0ïkïkºœw~ÿ¾—Sß_ö’¶ºkkïú0ÿóëÅ&{ö®½7WiFÚ_­ìUÚl|5¾ëµÁûk¯~Gì5cš=¤Ã	#û«N|Ÿé{KéÜÂìRl	1§Ôq!ßWiÕ±WÚìC�Š´Óº¿a¤ÅµvÒi±±pkì=q¬�á�Èd£ØGKÈf9Ã@ôÖÃP šPÓ	ªj)Ý4¼aŠN©0ÒÆŸLSM[Mm!mN ®, lR
+ùÃ`ÿQxk[¦GEÁÂi˜“/Ðaˆ†4Á3!¦°aG
+]ÃA…††a¹IOa2>²`°ç?ûA-4ÿ lxÄEÄE\DDxÿÐ¨HWÿ_ÿðª¿ŠX®_ÿÔ" "æô•dÍßú‚
+ØQü4!­%| _CøŽAlÇá¤B»¿ÞC$‡â‰»b?öqÌ?
+ŸþÅV„~G‹•ã0¾8UÖ<†@j9'!Ü›�3�ômó!�;°¡S ®9rœ†@€L�âÆÖá(Ó]{ðFxƒ]v²†�Ð…¡d‡ xhÚw
+0ƒ Ã¹—|UH x£Ö‚ýÇÅÝ×QÝòÎË�8FÁcïÿÿþCT—äðNïòC“sBG�V�w!R7!¡òHà�àH9‡ÿl§Ð¯ÂÂa2pUÌÙ¸ã0äæCœTG„à«#ðA„ ÉŽ[‘á\¨ žO�`ƒ�È1„°‹™V4Aš
+rÜÎA~%„°�•a ÑdLÿl§á7°…Ã·ªÚ1îÓBÓMáL!jaU¤m9�„!„Ó	Å£k¦……CP˜MR¦]'oþ/›×ìÜmºÛÝÝÑ‡vníj‹·<š1Q‰ÓÂbÑŽŒAÐF›Té6³F&ŒNstá„Œ;k£œÆç»éÌmÞ@Ìßì"øE®—ÿ¾Íîa·ÝRú×�vïö2|ÝK­‚ÿývni½{ú³{ÍÚ}éÚÙƒ16s¥	'È-‚Æ˜ÔYN”b/¾!i÷ý÷ýÚx¿¡ŽUÛ«ÒNÒ¸…¦Ýãk¡ÞñÓûpÅ&�vöºox¿Æ)9Ä¿Âïÿÿþ¨ØómzÌ€æv÷ø…Âÿâ
+¾Ãæ_øxˆ_Åÿç*ú1ÿõþÿ¡û¦ÿm_Ô#k£þ\>ßoÿé¼/à¿ó’
+3?Å£|/ú_ÿÿ¿±]~àˆû$8|“øaõî‚ô»þÂ1uÃù!ÿì7hÅü#ÛKäx üWKÿÿößðžì›ýú�`vÛýÝ{ÿÿüî�rvûÿ¬¼_õû’|l/
+":0Iÿ°ž—ëíªúqÈ®»i}¬53ÛÃ	y‡{÷M}mºûUí~ß°¿ßnÚ¯ú[èÀ�ã!Ç%åßSL{M8þÒ‹µ‹îäóøûcb“´£ûßâÊDE¶¾ÇØ¥ï†Åi|TCÕ[ýX­Á<'ÔF@ðãèFÍê*)ÓMÐ‹½0›H4Újã
+Zpø¤ÔÞ˜ÓNšt.*š†©á8§b-8†©ÉÚÚ_È xl…�<4ˆ�1ªÌa¹ÁÓ¶ª˜M8h0�¸ ÖÍ ™‰4pn_Ha¦oÔÂ.´!…„{LÞ_3ìŽ"Ca†±t‘´þê¿˜Á¥ xqƒC$,G3Š.v@Íóÿ¹´¿ïQDpqÁNúæb™Šf
+²#•dWÈ+¹7êˆÿ!²ÈL(|�àññIj–­ðÿò:Ì‹2,È³"Ì!ÌÎUæEœZ±Ùdt#¡òæqdY‘Ð#1LÅ3ÌS1GÕ,÷ò8+¢
+ˆˆ‡÷eÐSiR>ÐŽ"+NË�êa¡AµÁ×#ÏÇDF!*ˆŽ"Èàx7Ðƒ†áÿ’Kñÿüa£{HGÚËßâSÍ‚ÙpÖƒJ+¥`áxDp]Çõú{0ºò¡»�É
+!üDz¬†E2Ä8rÜ›„ÈmÁÃZÈh‚
+¶Ÿ’æõ…L&O
+
+¿è$C�½.á§]ò�Ç�<4@ðØ=Ç�<6@ðÐ>ä2wpî"èÅ!ÝÜSÿºþÿÝüwÿýgÿ x7†�ò†qÈAÖÿ××—?é!ÿ‚_„ÊŒðEÂAPn'Y?„r70é’²,È/Ä»
+Lrnx.¶NÁ/6òC™È‘�c	AP6ÆÄyÜ‰„3Ì¸'È2
+.D¼Gò£‚a.ýUˆh0†˜BÂiÁ‚!
+0š¦¸(L!
+hZ
+U0…„ôÂiôA~MÂj¡sùvU„O foý“t§Fàºù�ÌMœÝ£k£¾c£4ôm4cHÅF>PÑŽ‡1yŠšz6�#i ƒêÑµF*Ìv¡aM<‚Ø-ûTsúOís‹	¶lÖÍÐÍš}æ+=Ã
+i?ïÌWæsÓ†n7?I¶sÌ~œ3`ûó Â›ôÚNz˜œ÷¦åÛÿê’›Fa•ûÅ¥îtÂñÓÒzVÂû÷~ßIÞ.Óªìiºoßµ[úxÿ±ü5ÕZÿñ£k»ü~÷Ócñ¥ˆXcÿ÷µzþ!q_¯[ÿ¯ðú]µù‡Äj‡P¿óß.ó]~Œ	°­ä½ÝÛÿ‚ø[ÿþ`6}¼BþŽHl‹õWËßÿÿÃs?ú1ÃÿõøoßÑµÑ¿èÅt»ÿÿ
+ëü,‚Ø-©‰nHuÿò1ÞÉ×’výÿ¤œ7ÿ÷_ïºúÐ_¥Ç×þF?ï£ï#úŽ¯ÿû__ï)îÉ¾»aÓ¿3ø½}[dßó»}þ—ÿû¿þÚ¿™Û´¿ÁMý†‡þÚðÖý†Ýÿí_T÷ûÿ´»÷ÿþ¿§_ÿkµ„G_ÛÛø]Î/}¥¬V•ÇŠø8âØ»®ÿ¾?[Ka¯Úwû‹vëƒö)ˆw{ëÅEcèVÓH\n�Fj7M:kã	±i Ó	´…§lBM8Ö,'Ôh7A§ÒqÍ¡M§ò†�ÈcÐR
+�<6@ðÐøi‘ÁvL,5Cj-¦ƒLÞ¨ƒxt"6ºi—(ÙÄ­›Ì+PìÃi8Ha„´š¡i
+ÚÈ-‚Ôü�á±Ä&ì.üDC"3¦`ˆÃ™Èd[°ˆ
+N	aÞCŽ�"?H±ÄDRþÐ QëúÈƒgpE?óí Š9O­uûÃAF5øA×\U_ÛC†__¥1*üq�PÜGò`ÍLZ¼}zŽ¿êÿL„² �Ëå×Â†²‚Ä	�Ú‚8�„�áu„�Kò
+ƒ�Êwèƒ@û1ì�áœt,ƒ;�<49Ã@øq_q¼G²ƒ’}]× f¹ÇôÕÍ¥ï�<ÎN·§Ñ�p·ö(ªýt, Âd_&åÁà‹ˆ3x@æ„|ðFä¸– ôÛøˆPÊ¿|*6œÆÔ*@éö˜@âÂi ×®¶·ÿÚP�,#YŠRí†
+sËº1»ÑŽŒPÂáßHWþ)¦÷»†oiB¥~­U&æûTßü_ýF!RúÿÞ/z
+Üi5[ã„]!ù€«ÿýou˜ÿþ7µxRcþŒý¿ÿ}oô`O†‚VO)RÒþ+Úëúÿü�™&Ÿöºÿû^½öMÿöÂ#¦�ò`°úÌ'0Ÿ^ÚZwþŒ ¶ý{IÿõµøÃÿáî8ûýFàÝXïÒãb¡ž?Ý_Q	´Ûi§(	b¨!m6•®Óºþ±ÜøCâšá–G
+fEãü�à@ä/<qÈ äÊ„ò-“vƒ	—a´„[m4ÔòµÄ-¦©ÿþÓ¢,È³"ÌŽ„t#š¨THÌS1Æh0Ó"ÐŽdY‘faÍDÓ#¡È³"ÍŒCXÄDE˜ÐËœA‚
+A„#ÏþGsi3	w Ï<æs@Á2>‚»�`v„EDF˜L¸ÄR"-àÛüÇñ´®ˆŽ"â.@ðØéªá†;ý|BCübˆ±áƒÿïª× x7¨®ñûƒõaV�ÕTÄpA	­Ø¢1÷ü ™pˆqKþ1Äzø$ôÐ¤‚I~šäH!�Èdx IÈ xW b	Á	eÁ
+·!­¸^¯£Ra5L.VÂ�<ïÈdNIÐÞ4ß÷ÚÿíU—Žtb�È
+í8»�kÈÕ—Â xj¹Ã`ä
+û†_ãß¸ãþ ]ÿÇýÿãÿñÈ¹'!\‰d³!°rŽMÉ¹Ý2q�^ùœ†ÇÈü¸.FaÈH%gïê¿ß*Èø‚ç4Â adøƒ0A—Cr(C.È®x%Y¬—DÂBË‚<'dC>áB©à�ˆùÂ
+ög<Ï¹ïú¿þ-0© Ó˜TcªM7iU°…¦š|Âz
+^ïèÅÐ´P[F6ÍÖ"Â„/øUûöŒVÚF]Òm-èÄÃŒMœïAØ"�M8Ñ‹†O†nÇíÝô°áæ4ó'›é6í_ÿVýüÝí›v`¶¾¶ûïý[ûB‚l3u›�Ï¶nÿÔÝ¦Ã79·ÿß˜m&Ÿ÷§ßåãuÙ»ÿý}qµé>1°ýÒo�}/Þ½Þ?ÚOêõ®¿õÿþÆúíÚUõ®8ÿëèÀG?ï·úÿÿ^!/ñ¿õÿü6ÿ½{ßüBˆÿËƒ{þ¸vÿ—ÿûÿåÂ__õýÿïÿðÃaÿ]þ¶þ¿öõÞáÔŒvÃw÷ñ^ïÿÝøFûþ¿÷ÿÿí¥‡
+ÿ³È{¿úÿä‡×ûÛPDvÛÿ$?¿õïø"?^µ÷…ýWûÿ±[`ˆ÷þª¾¿FhOÿkûÕ¬5¼îýv¿_këö»ëþ«þ¿÷þ‚Ìî¯íûW}þ@ðRpG€Ñ×ã¿µb˜«÷oãU{ßÿãÓˆ‡ßÚéZÅûšè"‡þÿºkÕuûÚi´… Ø§¨áö6¢ô!ÚWz«Vœâ¦¾.±NƒOBîPâ£BÿÿBÚjšaª)ŠA´­N$Å!ÒLÞœƒr
+Â®)¦cU3D1K½¤ƒ	¦�´"�<4†C�á°r†�ñFöGH0Dø!„@ðËòƒLÈpaˆÏ$?ÑWûÜDDfðÓDWþ¾ý}/ÿþíõúð˜M­õÿßa~CŽF8_üDM0¿þ»Çˆ�¸ØEŽ8úÄ?ã�<4ŸØYÁ€Ô�ãÂœ�à¥Á€f‚dx xe¾é~CjUU
+ÒÙÃ´¨ßÝ|†Øéú{N+AÃ�ÈGÐuáHd�È�á�ÿÕÿ½ x(tN‘ÃwÿÈ7uý|†¸ÿZ�<Åÿù1ÉØ&­¹,'Y//ÈG!�Îä ‹'“ràðEÂ^C]Èg²-‘ÁP/‰zd ‰ùVn.ÁAy‘ ‡‚C˜rï »ž¸‰ø4w‡‚¿þ«WK¬1	„-S.a0ƒ
+¡Hc‰Ìh0ƒE„ Â
+bý4Âø˜!h<!a5£Y¼œìýòŸ0ßøÝ&ÒÛ—�ËÙŠªŒ&�¦ŒuNcÌtÂ¦Œncu1f'I£Þ¦6ÎmMßF7Ü¼Ù¶ƒZkP²a—ÆÎO?ÿí/
+[<
+é7ºON�pá›©0·˜ÛRïN“a›3�,0¥ÛIæëÕ=p�Ý›Öû7UÝ»jbZ§†"àx?þaþ«
+ÇðÇÙ°`Áÿþ¿±§`•5­ë‹Ãê/mý]¾ýÆ¾¸ýÒIÙ³iu0º×{þ“†ëØ\b¿ÿÃuãÇþ?ÞèB¯¨…÷ý¨„BF’Þ¸ˆÖ=ªÃs;jßÌ¥þÞØ…©€Ñ[ù€ž`Oî¡}	Ü/ó/i-ø ø_ ‡ö+!°wü6ýú1ïþÒ
+„m}zÿÿøÑ‹ÿèÇõûEÐ÷ïÐ3ÌS0Ö�$™Ãhs¹ˆ,§"Ì�á”9â$½¾Iüõ¯Kö(´ä�Âÿ‚.Ÿ„G_ÚKGþ—ï’~7þë¾ÿ#¡Ô¹‘fEžE™dY‘Ð‰2:.dY‘fE™"ò,È³"Ì‹2:3ÇèÀi½¥÷Ý}‚.½ÿ¢áÿ}ÈÿöÖÍ¯Õö¿¥úÚ[Tési�#‚º˜â8¢"5Â x.ýˆ�DDAïŸ€Ñ'
+¤Çû·ü0—ÿFfé}°”0·_Åm…‡v¯h5VÒ×¿íŽßÓy0Í¿ÅÉº
+(� mŽNu�¤!ÆÇjÅFÄ4ÓN6!ÜlS
+SM§‡Å¶•1Hq±kí;­Úº»÷ëÐ —LÆýéª¦	4SÉ5mÔ[M1V›L-¦˜­›Ó76¢ÚN0ÓU±¦œ=ÿˆHÇ!�C�<6ˆÐm¢î@ðÊq`¢ÌEòú ÂDD0ƒ2ð@ÁPˆ¸a2ñpÁáu¡ò`aÕþ‚†Ã`÷dïjDiÈd· h
+†´*+aPÿðÊzM"+6šðF_üjÆ¸�ÆDü1L*é/ÿ x+æõÿâ#ØN¿ÿÐ¼ißôh¢">‚Ú’í|�àÄ<3ƒl<4Ü†@3�éŸµ I<…€¤`&@ñßDœBúáU{´°îã¾C"¢ûA{ä¼�‡¾C]ßâ‘�á°r†�ÿÖ­}µÿ¢Ž@ðØ>«çr$_rƒ“ëÈg$ä¡VÈárƒ�ŽC(ÿˆa�‘±dvNdüœÁBvw#sÁpC/	AVEõÎäH#sÁ¾%Á@ì�“‚Ž_Ì Â ò ‹„2øak5˜äpEr¬‹eáwÿûö�¦Œ(L*z
+46XBÐh0……AÄ0ƒZi ÚpššÒmÄ4ÓM=´Â!aŸÿÿÎ'ONŒm¨ÅÑ½LM™«V†ŒYõF¹}¦ŒTbsÝéMFöŒPÂ—nŒmš14bo¶š£++ç—ÿá?Û¤ûÿM+³…7YÈÝö~Â›é6{4}6×iBpÍž—«µ74žŸ}ßfb³Ÿwþ?ÿÜBÛÅ¥¿ý_þÕ]o¥ôñ×B®í¿\{ýûÅ­ícûûMÓO^¿ÿá[ðÿî¿_âÿÿëÿÿézûõºB’þ+ê7ø_ÿômXsu[ÿýÿýþŒÿ®ÚHÀO.'ÿ^`3?oø/î—‚3F8â#ú	Ã£Ø¯ÿæ?õÿÿ¿ÿÿ¿ýÿèÚÿÐˆÿ©‡ÿKêÿõý'ûÿÁÿ`‹§ý`ˆÿ°ˆéû×ù'oÂ#©!ÿÐ_Ù!Ø¯ Ñ€‹¥ÿÛvº|¸Mþê¿ßí¯ß×»kö¯÷ÿM«kÿëúzVƒ·m.õÓ(v×ûo×Áþßý¯±Mª¯a/ŽÓ†ßk±N±QZÚKû
+_Ð®*;¨Ø¸´å¤Óƒ×½ˆÓM‹aûÛQV›QÜ6£â¡ëÃIÞ.)ˆj±UóÚfõ^¶[bÐˆºBëM:BÜ4‡´v� Óm1M4Í¥T…µÿYÁZÚ	˜a.vŒÆFg”28e•!µL Âi…	 Ìa`™s. Â Â˜Âfû9Ú¯¶C 9PÚ‚�ë�U†@*9Ã`ä
+ê¿ñYÃ`ÿ¼0K ÉŸKë«ƒ_ ¢Oï»	kÂ×¨ˆkëë÷!iAJ¿×ñ_¿¿áq¡ÿ	4?Î•¼�àDÙdN@ðV‚«“‚¬9“r
+�àpÿB>ƒ²6	…
+AªX x$o0©Ù8 « _…èÇPžŸ…
+×Â¡ü,vÈ¸iÛ‡|ïNÑÝ§˜�æ×ëë¯qWw^¨;þ@ô9€UÇÆ¿ß×®½ü�á±ò†ÁÈÈÜ¸<
+2ˆærbäA+\ƒw ÝÈ£�ÉGä{&9�KÇ‚F@Ì53˜Ÿÿ…^n%çƒÙ¬Ÿ„VBÓ2	Äø�¦�€ÂÈ\>Ìè<¬2pBÂyVG“C6åØ@Â&pÍeæ{5’îhA�w3“‚<$ç½zûûa‹¸Ñ´í�¦šv�¦Œ/éáV4¨MQˆ8†�®¨Â°–caðŸØO°�¦†	„/‚*=¿úÜ3£
+³ª=´b†aá6ÍÔ›19‰£œÜ'I»Ü0šÃ
+q:l3›ÙoF'oºNÐtºjc{¼»ó~›ŽcÞ·ÐÿÿÿlÁ&Ÿ÷W¯ßëÚ…­Gõi?	ë…é<Ýù‡·ý§÷ÝûéãfãmÓlÝÿÿõ~¼WûÿãHÛÿñ¿Ý6ÒïîÃQ´š_T?ÿõ§þÊADÈ*AªË³“RˆŠ�j²,‘gÿþø__ÕºG‚}ùp«ô¿Âÿþ!ûýñüÁ…ú0þ!{ë–^À�ÿþ¿ûÿÜF=úß·ú1ÿßÂ6¿øoû ¿ãÿ¾ûÈ*áÁ�aNE�à¢eh@ðhÂ �à©ÿÿþ‚ÿKßô¿Üu$?èºú_÷úÿÃ~ä‡Õ¾ùÿ¶Hzôbÿä
+¡™ÿÿûÿim‚#ëro÷V·±µþ¿ÿÿÿ˜wûXÒÿµÿ[úúÿýþÿNûîïì*|5øØþ¿ÿ´¶ÒéõûãjþÕµ0ÿÇ^¿ÿ Ó	Ú^¼]¦ÃK¶5ŠˆlU«U§×wíS‡ëí%¾iµÄ>.)iÛWñ×é»b‚
+Š{b�Ã	íRÓIí:t…µ˜b¢šb“M8§Úi¤ö°ƒBÚ´Ój+c
+0§�‚í†ŽLÄƒD8á„!Ú ÈàA„C#¤LÄƒDdt„Cfõ³xA„Ðˆa!âÂÚ$äÃ~.È3¹Èì�àC�gÂ€QÁRðÂ2„óaÍÉY+ xoi¦a™¾'è5'„ó¬WL4ZUU´“´Ó»Ñ´ÒFÕSF×©�ÜÆæ]T_Ì&�¦¿õÛÌ~Ã£äªü¸ö:þ˜OÛ@½ûþbûAjÓ¯ÿø?ÿøKßé�÷ïõéÿïWéñÿÿýûúOÿáþýH+ÿò%•zTEÏof·w¿ÿß×Ý þÿþ“ÿÿ×J�æ:©‡ïßò›�<Ç!’Ã�G y¹ðC 7�ÿúü¸þ?ô3�]YŠ×Ó brpA½„È‚
+c�=ØNÉÁpA¼&	�f€™xâˆ-ÓÞô¨S¬TR ö8úb°©¦¾UÂ÷Ý¨]¨ôØ¨ÓõÚ¨ª„PìnÓº[ä]ß÷F=#ÃL&M¦„áÂ
+°˜C´›¹‡ HãnÅÚ Àâ9§;äa©é~âºâÿ«úÿÚÿ�9‹÷§žÂìƒÁpU©
+ƒ�Ðá2C“s¹Ð: H9çr.eq8Ô�äv@‡.
+°ƒ/‰AV@»©!È°G‚ð dGÎøUÊÃY°× âîÂ„, fàF™¦CDávTp†(OÁÓ‹\¸'Á	…^˜GDs8`Ða0A„-�~%Àƒˆ~ŒN.õêé¯¤ÐÑ„ÚÓF8aD0šaS´cþªÒ£i®Sˆ´õ˜Ý£`“
+ƒ÷ÚÝÞƒ
+o½fèa#FãzWa4ÎZaSÌnÞbsnm·ôb°žœ;77JÃ0g‘å˜¡„é;9÷tbsF,ÞþÆa¶�þ›mwê™‚_µ§ó'fÝ˜4ôÝtþûú^ïï°šßm§Jÿýé÷aïûõ­ñï�ÿWüoÿ¸…ÿá�ãþ—õm/¯ûñ×�ä
+KQÈáÁ_
+E‚NC/6ÿþÿþë‚íûu÷ÿß…ûöÿÿ¿üBýþ µú(0íÈhÂCº õ
+ÿ÷ý¥ÿ.ú0ºýþó±~þŒý‡ÿÿá_¿ÿ˜_Ãy�qÕw  xAÝÿúý�þØ­&ÿØ¯ÿÿÒÿ÷û$?ÿÿ ¿ÿÿF=ÿ76–M%Ú_Ì;ÿ÷ýoù!ëKëá’ÿKÿÿ
+ï¯ÿÿÿÿßä‡KrOÿd ù7'ä¬œ&U�>r‡'àîKóZÑgLÖBÜL»&:y!ÈG3ýÿ¯ý?ýª.öþ�_Úÿ~«õù�þ×ýºÿ_Þ¿Kµ^Òÿr¬ i‚a>Ö^„L/t0ƒCAé¡gÃMƒ‡¦�oZk~•§ðv®ª¶Ç<=„á§w4Ãö?Û®˜‡kýì5bµÖÕ?vÐpÖ×¶ôãáÇßí­L'§tÅÚ®�ó	¶úTRvÒ6·6®�	úÞœTTi­ETGtŠ7I¡põ^)U1IÝÇÛHD4b“NÓ�¶)b“i�¤×þšùµ˜Ja^Nœâ6º1¶oq¯6”ÞúÙ½#jÏ£hÚ×£k·ÇÖ¬Ú6¸ƒM3zí ÂÈi»´Å³zªœÂÈg
+…J&a ÂÓi¥j\Ì€†#fôÒµ9 ÂŽ‚jy&�¿úÿu/FëmWQÕVøþÇõs¿«ßù#OÍê¿B")†.)pS08†À
+aÉ·ƒÛÃüâ^ÿúûþÿÿ¿õÿ6q¯|qúÇÿ}WèwÿÛf·ïý_ÿ×û^¿ÿü‚Øo‰é¥ú[z0¾Ý�ÿÿDtïÂ#ïKëCÿÿïû]?ÿÕŠcû\ë3B•zï²®g¾Ý�Ž/î–ýˆ¨ãã»ÙýëµL ž„(Žol&®ØÐ‹Ši)¥©Å‹c´"æûU°ƒý¼C~¦ðƒL¼_#¢8PƒFª˜NÂaØf…³aâÓ[	…ˆä
+ «dLÄ]{j×¦­¬�Ì �á´9Á�r‚°øRnAJd6œ„°šd5œƒ|ð¡T*©
+¤]§º»ÿÖŒ}Ã¾AwwpÌßýÿ}ÒüŒ×ò·ÈÄâ]ä4AÎäO"Y°ÐVÌL�Ár¬�ð–Ì…}ÉA<.ËÂ|\âpC;“Î�—„ü¼'YL'áCxBÂ¦a,&	ª>FÀõ;Âi¦
+VCTÂh4-5Ñ‰Ë·èÚz7Ýù‹1ºM÷1¹{/4bÃv’6µRó—–�Ö5V1½³ÉÌmŸÿôìæéÝÃ74ž°ÂF&“Î}Õ×KFœÜtÛÒêï»8›³�ªlö®ÂtŸô†?ö�/éüoõéºØuûm?ïÇc´»MèuøÅú1ñÿþ¸^:÷¶:_üÛbý‡ˆOÿë¯Yô@Úˆþ>ÿÿÂ0¼À¶ü+`W­ý
+éK…_ÿ˜	˜	ùp4UaßèÇÿÿôŸ¯ôc†ÿÿí÷ØmÂ7/ÿÿû$>“à‹¦Mý/ÿÿÒû^–ø]ëý-ŠÉúWÿù'òOî�ý+½µÿûÿ§ÿîßK3½¢ûïÿþÔã¿ÿþßßö°ÂôÛåÂÿw…Öö‹ïÒ»ÝŽÓÿÕwŽþÂÿâ¶+Ø¦2ÇÔžm4¶›Õ6.!Å1plTZi1pÖ˜Û¯°“Új4â“½VôÚA ú	ô›m5i½!´ÍáS8ŒFûM;QM4Ð†ªÚ¥g5i¡
+¤ÚŒ4^¨ÇÈ�@ð°Ë´ ÈðB3Òšh3@ÂŽ!IÂ aÍz›"87!„"/ïâ!ÄDr C�6Y¯®¾ºY�Nô^ð‚Ýo…Ü^#íVä ëØÖë°ÒÃÂÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ rX"ö@ä¡¨Aú§à·�9¦soÖ¯©ÚúÇ×Ö––ý-tZ_¢A¶¿¿õøˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðendstream
+endobj
+39 0 obj<</BitsPerComponent 8/ColorSpace 82 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 99/Length 567/Width 76>>stream
+8;Z\7$a.Dj#b2iYs4_E0"oM3pT_mRm:,\SBbD82%L2_-PENoj!9nFL;I2Y5FF$o2e
+f'(@eBZPc2F_<CUDq^toqROMq-*$^#$NI\BcRp_kRe_J@W*,cWg2`U7Q`KbZ:DVu"
+J9PPkXl33f.FEFN_Q"pR&r^nV%/"T8V`Dt_Eb409gpbkK0+%;gbA<^$l9IBb;Y#C%
+LCsE=cCe*BDM6%`J9+!h[`E9=W_NT#&cW0?'apG6k]g>+,5i[f'(<[D+S/m1cN9po
+;A.H5*_9Y+[O<Z'NfmdW9KP.U'hAE$>0KO2?poFF8i.&+YdH6;?h(5(Y1?.7I*-JI
+IApD05ln9O"F5V9B2r!6Jp#^dAOBms%d2;,YW'j4GKR:p1hg:%GuE4^EXR-$W8:0i
+\Rt!1c`O#t@9mm?K'>=K\O_12j9qrG%"HucC:u!\*ngQ;WWKrj5Rsu6Ses!NC39YC
+%hLLr[=jbbku43m#i'1^b:X,lpF%eK'\D83m$MIGBKuAh0kZ#SW5T3tY$'4Y+cr9T
++]<T%>AC@p-NE$K)5YlD'R=\<nN6LS!&oY$.0~>endstream
+endobj
+40 0 obj<</Filter/FlateDecode/Length 10>>stream
+xœ+äî|endstream
+endobj
+41 0 obj<</Filter/FlateDecode/Length 4194>>stream
+H‰”WÛŽã¸ýÿƒ5ÀXÃ;©yÈn2ÀÁä¿5ò ‘Õ¶vmÉ+«»·ÿ>U)R=3Á³Ý-Y×sNÑŒÂÃiG³6Û}úOs©Æöµù¹¿ôC{mÆ¡­³¡Ý‘ŒdŠòL—¬`ÙÐìžw¿ã
+B�Îð«ýb„Êö¤ ¤öÿ‚ñ¬¾î>ýrÕÙ_ûÝ¿w?ìU_üôÙÀÓ‡g{’?×ðåð–ñì0d;woÿJ�o®»§üs{*²L:Ù‡ÿþ—ñé2‚·ìT¡œ5Ë(81Ûæë^Û¡ï®M7V—ìÃá×¥ÒšGO+Y˜ÈüZÝ¬‘
+²,íiZ”Ìà{‡ã.ÿúÒ^Žmwº]ëú~wððw�îtQÚWÜÏ˜^¼òr?Ÿ–¾�eéßÞ1!vÿú©<ú (	�jÿhYk\PK	V’áûhû—ÂâqæÎrwVfFÁ/áìÏý04õØöÝÆKem�m)˜ÅõÏ	·OR.áß`ö¥ï.m×TC;¾Ïžú¶Ù‰¢4%›jðùƒ
+d´Aþ¥y°Ò¥($ü2¾õÃowß4”yÇ©ðéõ½Cá�™�1IüˆNÎMÂyÒùOÖÆ›>å¿¿Të;çEi³€>„¦ƒ¿j#]ù>[\O#JâØÜšîx_�Üh:çá†ÚsV˜|D×ñEâ*Æµ»«>WCU�ÍÐÞÇ¶¾o_–…RJûkÑwøÝØ3Z0*i¶§%’O÷¦»÷ÃG0Ãn�^Û]Þƒ-”.ƒ0{œbÀð+›üÑ%ÿA¿p2:]Õ5¾~ÿ‘5$2Üô'úçlŒ³-	vFÒ¹d?0bgÕL9±mºçÐdù­¿·ÓD-
+í(¤ëì¼êŽü¬üá3¬Ðÿ�?ÇK”Ü·ç­žûáZuu3µ[ô¨wF�êªíÐÜø®z†1tn/%ó'ªË	hf<_‹où
+Áuv6?ôöü"½ŒÁÇ(žº¿a 0ö&ƒ7Ö¡ˆ‚ê&%�-è>a„;ÑC?Lg Ãe%v8QœÙÏ=vÛ`Ë¹*«ù<�ÏCŸ$…î[OdáÑ§¼[€ÞžÃãËšzÓÑŒqL˜ážö„~t9£î”Ê˜"€ÌþTõC°Ì4D?Ût\-# €JcÓÓM¸K¢æ…öcªtÙm×8Fb0l»ºnýP�Í1Ñ)²à�3wÖ#tLÐÆ!z‰TKfF3˜^K+_¾�)>W	l¤’>åÕPŸÛÈñe°í”#0÷»1‚ŠNÛU�×0ýË°¿TïÍÐ±þ F|.‹‡‘ÀaÆsh©p4”�"Mb	Dµq;D«K³o»ÛË˜b`.&w´ýÙu�B%”Š.wuáàåÆ)%™ŠõSë’,ƒáIÄC"$È5Î«ÒÓºþØ$ª
+ï*æAÁÃñƒ'�Ó>áM¨Ü7)ÌÎÖ|zé‚JºÐ®&‡ú�Öˆ/ïçv¸�›øµ³ˆ²ÁÁQÕ=þz1?·Çcƒš‚™‚ç¶3ï0¶‡Ý@IY.eÀÐÜo¨_›Ë{�—”lêÆåxèB6ûq~júÚ_`Á	(Aô�Uw¿ðCL®mƒ�‚ÛÊé ©J†hóq¨ºûs3¬2²gdð(àµÎjßDwê2 nÐ H›ã:JàS>Bcì�ô¢jo0ós¶q’.Ý‰lkT¿|Õ”å<6…�Å‰oC×¬fq&šÝìmÝù8s"WR-8qUí­V°’}Ñ ÿœÔ£jM�	Ò¾�Ã‹ÃÙmt)½ŸNÐ=˜óåŒz„á5ñÏbè÷©‚à¢·I¦ Ôp_ñc‚û
+Íy´ºÄn2dU@ÿù6íš?Ð‹Ù·›AœýÛÐ×Í1ÎŽOaìºIq”aÚP»HˆrQ0]zàøÜž
+‡¸*–z–T[YAˆÛJå¯Lw¯Ù$ò¹µžuÑ¼.˜4¾¬uO NpPCóÉÍ’aI�[1sã
+Ñ…=P“�ÀŒÏo£:¸-"“ma¢DS�N3²¿ö—WGKÁoì"×~{;BMN4°ŒÕèúªý3&aÖ"ƒy+*§"î´KŠ¶T.‡×Rr¥ —)¼7ãB™b�Ì@Ûo_ÿÖ2£2®K¿[Ýª�ro—Âi_E5cr'^ö”¢2›ycÁ=ó¦»ÆÀ˜:`ÞüÝª&¹³ïQ™º˜“+5óT�„¨{ìh>¼\š"ð*F¬¹GaìK€m;ö$è4Ñ>Bc;ùvÝú‚œ0äg9s§8«zm†êá‘™›5¨5¹*·•JŒBYbéçÃCS!ü$‘jAýv0­M+"âB|g{SÀ/ž*šîÞoÉ=ÚT<¹ß.ÕøÜ×ÍÁ§¥Ï½Ø'Ñ�—&á’'�x±ë¿þ
+Ô¹V¨g-)jÎØÜ5N`QÇj8áÐÅ
+fØ‚Kãi|õb.CÑáÇýhßµ{„ns‰ÛIA¸y;¦Ä
+¦]r­lU‘»Eò�Ú8¶w�}uÀ<êG=À"·ý(Eb@_ï¸Y�OÎH9ÓU+ØEŽ¢¤³(»Ô’è}S"¤Í†cŠi 3A½?X´‚D�mˆI¸:º´O±WTpØ Ëè<pÑñ¥^·*�[D÷Ù¸ÍÌõ ôoÝ·=˜ø–'“¨Ì ŒÓ;Ör˜ •ð*®Z@û×›ÕÝkÀ£’ÌÄ:n/$Ó¶2xkÇófz�NÁMäQ¬)Ý€®¢b°JÄCtõBÊÄB
+5fKa7Ãõb^UÂÅ�‰¥kj ”>‹Ü”–¯ÄÒRº—à*Ø:cÃcuuf<visÚ*8Ž— âÄºy±}gN�vZmp‚NYI­)Ç$ûî‡ŒS]N9„FZÀ€Î±_qy‚pVfÖúPG`²„DÞ^�›øt…ïv0âˆøn¢ÙŠ¢~µô[‚Eõ#ÍÄfoJeLÏå„9�íŠÎçÿ¼ÍMå+¼€�¤¹Úvß"{˜#”O�’Úî¯3NJ£7`ç›ÂyzTË¤®RJN@nüP•ô#ØSWc¥œ!ø#f¯,N©rA{`/ì±-%„l}Ú=8„KŽøu¥Ë¸q~êJ#F¨ÛE±^_¶÷¸·Æ
+Vd}mêsÕµ÷kjnC¡‘ƒQÃµzFöòÂBºŽÒŽŽƒ•šÄè.Ô7$+ör&2ŸšXÆÄXl°>(à¦*ý²–n¤(µñ¨	Î	™5s/`¶K¸®½;Y¯B¸T„#Çöùní6‹�¢+¿6ã[ÓÄ‚ÃÌ·ÁfnüÞTÚªúÓÜÜ¿¥ä§ÄwéŽÒZ°GÅÔ–­8JÌàïVü”ÂivÏVysG×$/žôöƒ©’¬î»D¥Ýè`€à¡ü­iOg$ð=' vB*7ªŒ*üå±|EÇ9¥f!–»þØ$Ä;à‘3;[:Fë‡çÔl¶#QÀ25ËG”0{„YØ&m¿yõo/š†Á>‘}·›<€›ËÅŠqø°Ú«äJ6ZYm$åB3>1%³Œ9�þGóÚü�òjÙ�Û†¢_à0²Éˆñ!‘
+ÐE	�E�¢èÎÓ=£ØƒÌ«ÒL�núí=—âSâLïŒáÉ{ÏcÿØõOw¿™þï³é×S¬Àì¨Æ£ÙlŸ=FL4µ§ðà0^ž7«©ASá
+½…ææÜ™§!ëÎå-P³•QåueÝñXÔ}?!;YLe”ë>qÔ¨Ô*©œ—nÇ.zB&�Îø¨Ãjü¶x4«op©GódFdçØAkñw±µÉôtØŽµŒXÀïç›y‰2Xz¸…YŽ§n}E³ŽXjŽÕ_]K¸y¾£l`�bÍéyv@v¯Ú ÷ŽÄîç—¾ã„.1’�–l2p'\¥xå�×¶3}ÐHŸð÷æ4·J0žƒ³r¢áãÜ/ÃÌç¶9¦9Ã	’WE“”ÚFSQ±’¥‘Kg)MûíaDÛ@=‘5êÃ&Y&àÖÝfoN)ux‚¯™óàã†Ûn˜‹àˆv.Üpã«ŒÞ€yµö mo[™Tõ»Ræ,ƒTÚ†Â®ïãKnÃv	t™`V±]Nû
+þù�Uoî_Å!LQÀsÅäÛöf»ý÷=Q8Œ�“%ü"ÕãX@ò
+=÷�
+ê„È ™×ã r‡Þ½	@ÜB—dIéÑàúWF=™øy«íÉs�õTzÙU@2)ØwçÞlgäÜ4ÍäA–\T¹ñh{±~JRj]w#Ä`L Û,|=D„q�œe¹àËw~".uÜ´nˆ$¢MÇÛ¹h(÷˜S
+¨¥¾•ÙËPõö—‡�Ÿ>þuq±aRŒÈ"”ã¯ß»ÙöàÇÂ¢ùÅð<±¦´'=ñ$ifa"¼¦+ÃÕÊdûg3öõ¢#ÖA0qspQ,uFºq‰IÆ¥«Cß[Xt¹ñ]j‚áÀNP·t/Ów¯m0bë}º÷º;nV^“âaEJ­›ý\@ADÆd•lßD¹Š«æ§h»æJSÙÚ”qkÏ¸ð1Ó]'”_¼È`›|Pd.;@-©­aýä^¬
+kq1Š.^¬üi¥³»
+Ï‡—¡tú&Nªk&%×Ó‰D€JïÚwÃy{š;�TYx­¹•ÀCZ]´_e<I¢ÄXÙ}?výf×íO%flÂl¤ÖÙŽGzè»øÖâ`ÌYSOd­Gå[|Þ¯»©7º<
+NŒ‹Ó¾`R�<Ûm0»k“
+Ù¶¸Éj½9Eì¯†ío¤Áµ¶�¡Èü@£“TŽ/T>8ÔÂƒIb¹0–åI>|æSÝõ]eDõRÖ„ÿpˆ__ˆZ{š²žsYk	)íîÜ÷¯Þ¹­é•Äë;ÿÏñUDÌý�¿zr^Ï¸Û!ª¢™XóÞ7?)¢ÓX=‘©ÉØs“;!T-´òúÞw;Ó3�[ÄS!ÀÒ«¾3ƒ÷�¹D´þ*	gôpVZ|åà»;B_°³„KZ¼ "YcŸ1"m<�£˜ÄÒWÚ¬©Œ©ç‚>â‚¨Lð
+$A R<ÌÜ©TH#‡Ñ««ˆÇtãÜÍ»ÜÿN'Hnââ
+ÒdzæÓßÅ½t_�@¹(¬àîÐ´;­Ž¿³ÂPñ
+xÛ!Á0ôŸÖ,Ï‡ÏM~ÝÆ¹3FN*·œÏœ5­k¨Iù>DâF¹ƒY¨ó‚ÄdÕîëuâ%‰nXìl�g>‰À¯Ü÷U[¬Êl—óÐ]Ãˆôí/³¤,!rHNh3�5Ïøf¹X™°Wˆ4¬ö{ÉÐ
+â)
+±øËòÝ\áT:´„ÍGZ¹¾I·W—ª	uÄ	b­®l.+Lí
+Y,zž�:úª`/ãÌ%ÏCÎy°©öGoVaÍ…l@_ã%Ö4VœF¦ÅM˜=_ž*žLAg&ƒ.Á[�É)z»¶±l2jWs«@æË…]ýéÏ›ÿXÃ
+endstream
+endobj
+42 0 obj<</Filter/FlateDecode/Length 150>>stream
+xœU‹±
+Â0E÷÷wT�˜”Zi·Š+\K›b$Mb’"úõf•³œÃåöô¢“¤ý¥¨ gà�š³²@É5äB›vMôWM0zT6fY£Ê±è”=¹×®ëp÷ÆÅpvokÜ0åÍY´>hƒj‡‚óC‚¨šòˆ9¸åÿ†›Š)è1ig#ïÍ‡må“:I=ýŽ`3Gendstream
+endobj
+43 0 obj<</BitsPerComponent 1/ColorSpace/DeviceGray/Decode[1 0]/DecodeParms<</Columns 1873/K -1/Rows 2421>>/Filter/CCITTFaxDecode/Height 2421/Intent/RelativeColormetric/Length 43609/Name/X/Subtype/Image/Type/XObject/Width 1873>>stream
+& 0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�4S*…91Èk ®(rnqÈi„)Î9Ü…†…y0hnk£ˆ�ƒQˆùÄ]EÚGËät]T�ò>GË¢@ò8dƒ<�¨2a°ß»È§…!�žˆíÿ1¦G²àxc×B>CDä6a—dX#È�"a("¹Wk¤ša0Ÿª1´ÐaPwÓõ£¤ý½åÕºÿè»Tè¸ÌoßQu·—ÿkÃî¿ïýÅÿ}>í¿ìBKõúðÚ_û§úýø~Ôoêö=\‰í«ýL6øoÿc¦¯K­'pkzè†Ø‘NC`‘NC5!\A¤7Äk�ÿ½ëßîW˜_ê—úÞw0úKÿ+Qta‰ù8·I"án½8«B‚Y?ú—0ˆ3ÁMXÿÁ(¦?a©¤KŠˆ�x�B„×�=äÃ5ò†›þ"#¦?X_ö¿ïÿ¯!]uõ¶½ÿú_÷úÿü�á›×úë÷ÿ÷Ó_ï×kþ»ÿÿã÷þ?_ù0Ì|�àÞû¢
+ „ÈH"Y`Œÿõ2xOÿP’
+S%ÿX@“@Š„Ó÷@¨ Z~ÿßH½¦Ñ…¯Ò‘Î’£õÇíE¿„ò9ÿÇU¯ûúAÒ¸¸¥ú”?ýÈi�œr
+Êr7 Ô\ÐTuÃýï†‹õ¿R×Ÿd
+·æ:M­ÌM)Ž—µüÔf"J¬'ä
+ä!ícT¿ý(Âëï./ÕvÑ]'Kÿýˆÿÿ%2¬«¦\_@Õ/þ“Èkù0Ìï'eSŽñºA*ý´ŒýË�Oÿýh|âÞÚž¡¤hþœR¬Wï×èÓÿñ^	RÖ!¦©§k×ÿ_ˆ¬Da5W�<0þCº�p¢9Á?ˆŽC\Dkýˆ‹ý›eóØÿyP
+ù`ÎGÉ`0]?ÄDýeÃ%ÿõÿÿÇÇð£ÿ�3Çü9
+>¿¶Ûm¶Èàh�¶Ûÿü�á´†Ñaâÿýä½?ûÿÑÏä¤2ˆñ¯ÿÿìŽ%ÿëüWÿïü…ÿÿÿü†Áü�B¹(ÿÿõ2	a0ƒ'„WñÿýÓO
+ƒôRýSòašÿÿòþ^¤�/¥.Våô—ÿÿôÚÚ.*‘çé'Ò�ÿÿø×ÁÐ¿ÁÃc†¿õÿÿÚ^�Õ„cÿß¯ëáïù½ƒ¸?ÿúÿ�™La¹�¯Öûi~?ïø&“ZZ_î‹íÐ¿ f¯×¯ó ï¶—þ—ßÿÿâ•o¥íý¾Gu×þC=þŒòå3¥u�þ(ðóÂM_ü?×laÚéŠ�k ¶Çÿø" ŒÚê¡~" Ó	¯ ¶ƒA'!G"9ñÿþU£0käË+ÏyÁ†@bñžM4Ï	§þ¸ìGáZýº_ÿ¤‰ÙXS…ýòùtäÁ÷v¿ßþùš3X�õ¯X"ŸÈšUúð»@�y!×þø¨� x5+§µ¾úØ�™ùŽÏ-½^š*ñÛõïÿeõýp@‡ê#�<2‹˜½ñDÿ6™{ÿ	ñüõäç0BÓóë¿õ^#	¯Èg�ÿ|�àú"'AM5C]8¯�3ÑÿµÈ*–¨¨
+·½ö¤<ßïúðJFÌ†È„xSYëAïÿù!Èi>@ðÞeƒ$ Á“IôhzË{£8ë×ø§äT‰«+R|}ÇÓ�Oï ÜPîC*È93 ŠöB=¸"?0ç|�!AÂ
+ˆH=¦Ÿø]y°$rõ û#ÿŸL§5
+t0„A_S¨›&�3£#ÞÐùãøMk˜Ë‚™Ì"è½—²œ3?¼DD~Ci&z�b—#Èêú�L îIÈ£�¯þ2'„ì„¿ ¶ïs¹âÞÇñ¥”"m<†²ƒÆøèB‘@új&TcjƒKäèâ39V×L¸*ŽAwÿÿ˜Í¯Rë�k¡=3GS9RÈ0Íï0šú¾_tòé£
+_p@¶…W¡œ?ÿû®/¼(#ìBcGã«*Ñ8iV¡:»¥ý=¨¸¼/˜�¡ó4‡Øÿõ
+ÅñL¼²|m'#¡ˆQX¦?éc�uZþ³ˆÆa~yHï³ˆ?ÿû ßqÄr
+Ë•¬„3Œ†D$ÒþPÿLR  ÿˆì¸ˆŒ·ÕC4‚*iuÿHr(EA°H"²wÑ{èCõp˜A§âÈù6¤„`;ÖƒmëüZ!¥tÓ?Ì«†ó$ÑzZüÚù	:MÛ˜Ÿ�[
+<=Wmœ_ÿÈW>0Œó¡•xˆHÐ	úH_Ó~	$Œ&?ù²þïƒ¯ÿÃÁˆH¨0SñÎ€³¥þ¿eÂªwôV ÿƒvûÖ¼àD C(!z„yˆ DX
+ê—÷ø©‡ÿÿ‹þo§´÷¯¿Bì†ºsi#l†ŸFqkÿÐÏ�ÔÃ¥uäÃMÎLƒ£øâ Š‡\…ÂÈŽO¯¿ì”/…�UpÉ
+z§ý¥ëÅ!Hl~#ú!Äsú@�øˆ0Y52Ãö¶“MŠñÂaA5óa?3nççüÞQÎÿõD50§ˆˆˆaxˆ��è�ÝŠa¿Á•Ê¸p@„_ýÁdu]ñÿýVÑ¾ßó‰!ò/þ¼rˆ0¹¯ÿúI¡XnþJD.ßV@ðqŸþ>� E§Dt
+ßøˆãDèÿòaš? §� [I»_äiÈWÇëÿÐ]1íßˆ²ñŒº>‹†d‹ÿÿÐBá0Æäoˆˆ�õýÿä£#g÷Ûæk]þ¿ûy‡šˆAE=‚Ããÿö¿óƒâîÚË‹ÿÿþE¬ …á„QËA‘ÈÇæÿ×ÿüÀÎ"ñ¶oÒìžã‘lãÚ|.ûÿÿápM’§Âk…ÛãÿÿÿÂÅ‡8œ�²‡@‡‹r¬ÎaÏ<•¿_ÞCCIüqÛb¬CA.„D\2sB#ÿòŸÁ
+�äAÉY‘�Z
+BŽÉß�3Ñý¶3›/Š‚N¿]íëúi„Á}} Ÿß°G„ätÛ/™£‰G<¿Áàˆó"AæQºËûùyª1°‚F÷õöÆ“®	|G3B?úXÐ†U¥©ò=W
+}iÓ×ÿí†ÕØÂæ26»/íô#›Kü_ÿ»JŸÿn)X­DDC#ÿ¯3Içÿ¢ê©1_è¾ïŸ·ëíÎ!¼~ºâ?ý,*o¯Izßûû`°¿ÿæÑ*eÕ‘õÿkï¥ì¢¯ë]Ùœ‹ÿÿ|"+žÚÄDGÈZ�ÃkúH\úÆ—þÇA�Ö±ðF¼ºzé`Öÿ�º‚Pÿß�âï«¯©‡!oyuü�˜f?ô!ÿòÈ(„«wô3ÃIZ·_þ„/ÿÿÌçó¯¯„˜¦?úb¿¬?ÿÕ1Iøˆ ª½ü2èÀmÿÂÿˆ‹0ŸÄG×âÿ¯â#ÿû×þÿÿ×�ÿÿÿßý~¿ÿý‘ˆ(sŽIÂÉÈŽŽ‡ÿÿÿÄDGûÿþ<ÐØ9œ¡oÿÿÈ†câ"#úä„9À"‚ÿûm¶Øl28 ˆ‹m¶Ûÿý‘ æR‰h0]Kÿò
+ Ýïò�¨þ¿�b!¨ÿ¯ïûy+Èaó�ä9ÿý”9G*yvgE||õüG|D]s 7ä6YÈl‚	YßüÇä4>\4ºi›ÉYwêA„Ž?ä|Â1�ùäiºß¥T“÷‚*Ž«ïîÆ‡»÷ú.›T/?Òoy�þºbËöø"žmkÔ†@2¿xº_ÿëZÿ�<îº
+$’_ÿb°ÿøÿúSð{ÿ[]¢ëÿZø7WÃuòÿ×KÿÿÈ\t´‘‹„h÷§Çÿûù#¶…þþŒú0žºÿ×Ù°ëöÚñþŸ¿òÑÿŽBÚ]ü˜ú[¼ÙþÿÈ
+g}µK¤Óc†±Zã�i‚¬ ÏCg÷ø®–(%û°˜¦¿ f£èDZ×Ø_M%â"!‚¾af!ÿò‚>?Z]OÙÅ×ýV>Ö?ÿù´mn#ÿÕ0¿ˆˆ†GdxÞ^ÿÃ(pV|ÄDGþ-©€5Ïÿˆˆÿÿÿÿñõÿß|¼õâ5þCiþÿÈþ¿² ¯×îADÈ‡úR˜ýÎÃG‘x™ãù€È¯ÄD�|!\„‚àŠä4 ‡²7%ÅçÐd 4›É€×$ÃT�…ô˜L**„Â¦¿�Ég¾cºŒ}åçª0ŸÞ	õm%Vî»ËµAþ»ÿ×öëüG×´ÿ÷äÃ4r Ìÿü7_kJÒ¯ëú˜öºÿý?úM±úz]ÿø?Ëÿ
+'÷ýmõêÞ¡¯]®ÔÏô—“wúI­ëÃ¡6)%Mb“Uÿö�Ú+wk ’ëo�È?ÙNw(s¹Ç! !NS”çr‡!–¬îSœr(ä6)Êr¬�ä¬~vRŒ”@2ÿ fNS•jCUÊrœ§>¤6Ç;”å9ð¨!´ç§*
+8þ@è»ÿÿùX™^CHXÃþÚ˜d?åTÿË�à«ÿÿ!�Èdãÿè2	Ù+"¹
+, –h#€Ÿþž	Ý„‚
+Ÿÿ#ô¹z¨Ç@µF7ÿ¯‹ÕµJÒ—œ�kÿÇA‹·_ãŽ¿þ•ñHºúUÿú`Ú´—÷„í]Þ­˜š[þm$ãÿPÝý%/ÓÿIÃÿõª±½zTÿÁÔ·;ª3Y‚V¦~‘˜éz¾¥B•´©ŠV5+Â_¯	¦1[NÂè/þÂ x3îø�ëÿÿ�ÙÁ×!_ü�.~×G_ø{Ñ
+*;.ÿÍÐÏBÂD?òÐ\™PC,LÏ±s¢Ë¥ÿ|ÏSÍ_ìŽ¿ð¹ ^"=
+åÁHÂ#‚À-Yå�|�á¥@ð£ø‹^4Í ™�HæÿYßü%!ªã�ËÏæðOÁ:ÿ�È
+Ñ
+Žþ;ˆù²åù!ÈW!¯d%‘Á„„	„ì•‘#!’žQû»	…	¦4a}QtÓOÒ	°ÿô_j–SQ�£Mü¾Ò‹Íšá-ÿýÔŠî•\�w¦ÿÅ¯ß×©yÞ¿­ÿK�ß«úñûú‹·ÿU¢ê–¥õÆî¾·þ‹¯×ÿ~—ñÂ|P·úèP¶©}/ÿÿüÇ bÊ¯øã�È<lTq¯­_ÿt…¥ÕÄxm§ò?ÝØ‹ô¿ÿÿÜ†œníy
+@Ì/ÿÿ©	kÿôKÈgª¨^¯ò—ëÑ�ëºm#9‡ªIWC4	(¿¤Xÿþì¦ÆÅha$‚	øXA�î‡ÿ°E”Ž‚v«¦¸A “ÄF&»_ü†APÐãd2©È,^")m/ù��š_{¸×û½t¯í¥óñ6‰4GeÀÇý·‡«ÄDF÷­pý´²I+èV¬†*7òÈçÃ‹¡�Ø˜èœëâ#>¿ùþØwí°Ø¶ßù¡ûÔƒŸ¿!�C´Ñ7 ¹Ý¯<}z~˜2>Ù¢êÇÚÔGKŠ‚*?ñho‘ô?��Èãî#Y
+�_¥�Ñd,âì„r
+vCÙ;"¸'¤–dY›	Ù?×MSL*i íÒþš
+?ôŒoôtŒuAPÃÑ�ËÙuÐ"£þ¯pò;¢ûJGt\wTºöÇH6‹Ô›þ†»Æ…¤‡¿ò‡Çúõþëõ‡ Ø¥ˆ_ÿõ×ú éºF?ô•k÷ðDé'6™
+ƒ�Ôë˜«�~ô«ü|ŠG¨zp„M¦«ï‘†’¤•ÿèÎAüRÑ„"=V}¾©/ÿ/ý.™
+}ÇÔ$–—ûæÑ¦_/-—$Ú^Åôišþ)4Ò'í¤’¡V»õuH(¯öý1Ní1T^#D8î×øˆˆ†Ã5ññëÿÿÿÿF`{ÿ¿þ#ÿÿÿÿÿ�5
+\)É@ðm¿ô;"9ÀÀèÇò1ÎçsÙp~C 4_Ð9âñ`„E�YA~CBY+'„ø†¾�GdW	úèhyr. EBi EBjšvŒsô!Î#èNA•ié:1´^i:£taW¶:ˆŽ†�~½kü»[mSjÚû4Bò
+¾AP?ïý¼ÿŠö˜G˜
+
+¹�Sþ¬o×®‹«^@Ø9ÄYõòûWKïÒïì†™XQÿ�Ëûôü�°	 xcOëV“Jÿˆ¹ä
+€®AÀÆŸƒËü†¼UzþÃH?÷õo×æ lÂaüf{I'Õó=¶‘Zù`j �ànG´¬P%QJ�b¼�°�@ðZÓØBÔ&M4Â¡òÀÌA‚ÓÈdSà‰Ã !�á�ä
+� ‚£OðDá�D4pÿ‚†@mm¶òÀ‡ W„K(?ðŒÁdê¦`xh!ƒ/ôpˆ€ØkÃa ?�6)„xR!™EÀðÇü ³äÐÞAz‚_ä
+AdäæA„ÙYQ©þ@ÔA®¢"ƒRSü�¨) ƒUÄH0kdiþ@Ô�Aª„0#á8GÁkùPÚ@#0`2æ Ñ0�yÇ!‘_‚'³0\œdìŽä&A“½CÙ+%ìƒd{5‘Â~ÐÌÁrp\C|) 4ŸEé ’Âi¤šuä
+A¤äæ�/è F`Öpz/BA²õ¤hP‹‡ä
+C,áàà™¦f
+`ˆ+Ÿþ©{t¥í7È‚ƒ„lIàÄªf‚ým$»­!×Aø @‚!¬@#áƒX3S@<4Ÿ�²ëûùP^„5¼‚®¤äŽAŠT§ýÚ[\:ð jùÜ6F‚A*Sý¨ßKÈeÓF/íùQNÎ¡¦g’à ŒC@<µÿQwú_ú>æ8et¢pT4ÃS¾è¿ÒúðŽñ@�@ðné÷˜Koôºü�ª™ÄA‚Ð
+¿jgµº%e»z3êù 
+S�à¬h‚¿b•Šb»H'qIG^Í`x€ˆ
+´öš
+5LSM¶ƒä
+Hrh xAÈ
+Ô ¦?�È§Èƒ!�”ÿ jG€Ý¯ä
+C-2¯�áõÈƒH`‚+!�SÈ†©2ÎÈ`\ÞDƒ$	†@7ä
+A´0@�ÄZ�¨+�@ð,88ä
+@�‚‚™ÃYPX Ð@ðÔ8ä
+Aš°F€wÉdœ�àAòÀBÈ‚Ÿ lX9`��6^€�ÐË†@l l È6P&ù`j†A¡ˆd¶@ð+… l
+ ÈlA0Y®4d²â–A œ`->²°	›	æ@Ø
+ä'0X÷H0©—Æ´ôÓý¡šy`�oZ0¨Z1ÕÚû£
+)u—¹`'w®ƒ¥#º.'µÛ‘Âté¾…ÖòÀZ#ü|júu]»½ ëòß´µ@ô·.¿Ãøë�Cõi7úUö‹ýÙ?ó;ö}
+ô¦>�Ù?KcÒOò_ÚV�¬rtZo}
+$!î…þ?î­òÏKÒò
+1ä£ÿ ‡úé¢c¢pHÕ×ïµOèÑýÝi~åþ¤ÇûHÎG
+‘eÄi‹¤aÖÔ¨T¶ªõV*�­ŽðH¿}ZŠNØ¨ –.Á„Ó[I°ºAPî*Ö"$)ä2Ã¾"#¿¤ûøø%à½`¬,aãã�ÿÿÿ�%ƒ��39Ã`äœ†ÁÈ>Ó x["�[´d3`‚"ÂaS=ýÍ¡ŽGi‚~ÒÛ[¾î-¶hÆý˜8ìÁ"ƒS»‹âÌn`Ü½Ý­Ý}]ÿm+"A|¹ÇÃAÜ»$ä#�x'fôÍysŽF9¸óÎä øSÁ¼žŽqÉqÈ?eñ°Š9à©“ÿ}û0êƒFÉŽ}0˜Ažf¢a4í<†
+·Ïh3Þ‹ª¦�„!„,þ¨=4á¶�j¿÷á^cUvo½;¢ó¹BËì«;°¥÷±ËÖc{¿¤ï7æ4Ü\¼ÑŒÿ—ï£Y�/+J+þ¸úÒãiô©‚]˜ìÆ�
+®«ÙxÄÅ=åÛÝõÝÞ¹ŠÌ2î­FöÖþûú¶—üÇýy‡÷ï§ÞšæÞ!Â_ÿõ­k_¯Œ¸¡Œ?lZÿ›Üã9ü� `r®C$(ý?u¿Ýÿö¿èOÿ_ÿî¿ÿ°ÛøÚ]8²+A!0¤[! &C1È6Y	œœxìW�Çýø"?ô^ÿ ¿ûÿÿb¿ü Y1Ü7íþÅ5Øh…z¢`á4Â÷
+x2*šá¿ DF�÷ûÿÕµýWÿOú×ïýýé°°Ôz�|?è¸aÿj›�ª1ò
+îÄÚ x#¾Awýõçã‹[ZÖ×ÿŠ^"õø½+_ø‹µ‡×|S÷é”íÚ§>&ÒIŠÙ¹Óá¢7ŽÞín*â²Žšpý
+t-ŠM4ÓM¤/[´***.ö"àã[I¦£Ž")»M
+	4žøãë_zû»ö2ýú—
+–¢"È7v]—×!‚LÇTåÃ9µla„ÓTÌÒ‘Árû…	!oTõŽ�Õä0>ºãŠƒ�Èx xG$óxk q¼¼&çp™("ŽaÈ09<$ç‚, �Èc‚
+<îD„jÎ¹‘ââ«ïŸ™PS’², ÍÄ¼„²7)É9L¾&ç‚1È®ƒ7™91Ìù1ÉÁ+õí-4¼&ˆaOÂa0ƒ@Ó´"AÅ„Áaœ¾ùuí‹Âjƒ
+X Õ0…„Á©¤	„-UQ -†ÌRÇ±ú1S	¡sMM5F&&{i³yuª0ÿíèÅFî�¦Œ!
+bóTÑŠŒBÕ8$c£TØÕÞÂN‚l-*›Í’H6û†nÓ£´îÂ›ò÷fÚÝ›š1>¶ý¾ºl3lÞ¡I›é6€ëyz“ÔÞq^]Þ›IÃ³�C¥ã­+›3Ý®´¾=oéÖÿÿúöþü~±A§¿þÜÛßÇ	½~#ê�›þü/ý®±øÄ1ßþ=Ä/ñ¶ûz­üt?â�wÇ_îŸþl!pŸïð¿Ì2;ÿ^ÝŒ�cÿæuð^¾\'þ`T×ûÿÿúþŒèXk¥üÀ/Tcï´;ï¾¿éÿ£˜õÿ¿Çm.¬÷¿éÛ¾ÿþ—ÿk¿Ú×ë¿¥ÿØ"?÷ðŸÿÅw¯ô¿¥ý‚.¤‡Gné?òOÿªØ-ï¿ÃPDUÙ7_ðD~ßuÿãÿ×‹_´­mí{ûXÖýíA®ûÉý{hÂkvŸk
+cÒXk4ÚþºB¿´š·ïÄ]±±ÞÚKÅ;ž±†-7MÃL5OŠŠœÆœFÅ1©ÚìU4ÅÞ¶œžz
+¤ÐlRi¦Š¶ª)�ÅÕÒm4ƒÂnÓ˜M¦ša-´ÓQIí5HZa5¿M„ØZ5˜A‘Ù�4X`ƒ#†(hC.Ð3NDqa8†E„ÂÌEÕ¡(DAÃD2ò Ærá°¼ÚÈB@Ì �à¥p8ý|\&ÅvÂÄü�Ì‡!’ö@ð°A°r­‡È‡!�x!H5�j¡.kañ…è	„òa‹ x®AbÈApAJd£�/UoM<(UtÔ&¹�WpD€?a3q‚ùˆ!§Ä^
+Eàš„	Ý¤ƒè‚#»–èÅr£ÌIý®ŒpÞþHu
+þ‚x\ÙF`äG›( �ÚÆ´ÐAÈ8¤í°œEZm„àØr;¤îõ‹½kë�Oé?‹¿‹¿tº‚â5�Ñifr-“²à…�<á9·6h2��ÇÇ3�ƒ�o‚à‹c¦A‹#²NT&A¢Ë‚;"w~½úßßéÙdnhÉŽN	ÚäÇ'@bCGi„aV Â˜Fqã<Ÿ¦Îš¦†¦xZaŸ… A„"þL‹	„]Rr¸¤‡"Aªw�.ù7-ÌäG! ãž!˜
+£ØÍ†Aì¸&çrqÞG�#fGŽM…ôÌ0Âê‚Žª�4Å£{všF´m4Ó]önŒPí&„qhÆ.‚hÄ ŠL!1Ñ�þA'2¦n	 Âeù(+iË§’âPÂ„, ÁH…L–Ëòà´Näºì!aøNÐa2Sè,4caeÝF:QôÕÌYå¦ÚkIØ)»	ÙÄ‘‰¢îï´Œ6.ô™ÎŒFÕ›fêLÆn†å©¼Ù!„gLÝAZMhÂ|Âhw1¶–aÂ10Á~˜CÖÐv3iômBèÇ—\(wÑµå÷ËÍ›“M#a-){7÷Ü×ÝZ÷ZG7ð¿î·zÐ¶†»ß_~6)§½›?\´ñÖ»6Ó¼×¤t^i;N�vsi_·£ðìÝF*16~ïNôîÎT˜[|Æý›Õ7íêîíRNü-Òn·t¹»ÕRÿOkIÛêÿñØûëû]Ç_ý{ÇýÕ~“ûésd`ÓÓ_VÓïÓ~á˜¯ë‚ûÿúþ›ÒoèkûãßöÙ‚|A}ûÖmÿÝ¿ýU‡üÀg£ú÷£ÿ0'þ\'Ö|%wïåÄÞ•ýüxú¿¥ûzWÿ¼nµî—Ø÷þßø…öúîÒKê÷ýc¿¸ö—l?þ0ßÿ†ëÿÞþºÿýæÿÿCýÒõÿÿØ÷[þæïïöÿ÷ÿ…÷åÂÿþØ~�ÿ»ûK]Šz½žI¿òOíú¿]“tþûþÁ÷þØ"?ÿþÂ~ëË„ÿÿû×õ„mt½¿ÛKc˜	ôcûí§ßØmúÿßb’ùpÊàˆíÿÖ[¿÷í“pDwµ×ûÑ�U‚#ÿûZÿµû®¾Ñuùrëý¨"?ÿï÷ÿÿÐ]|~ßNÅo‚#ÿK÷ÉÏ!_Ì&�u_ÛU¤`3$QþÊŠ÷Ûûimn«±]­Þ»
+¿ŠJï†ÿ�ôÒŠ×_ö6×I¶ÁÚ_„GÚýÿþ÷ÿþ�¯ö¼êôa¾¿¥ÿkÓÿ·m·Z¯ÚdGÓôQ·Jý8ÚïbÓ¥ŠÚˆ½´•Öí&*ô-6“¸8Ý4Øuv4ê/öëþÖÒþ¿KWz×ý†©÷åýÚzj)¼4µï÷cƒzz÷ÚŽ#MÂk'šXA§ìqA;/Š‹
+ Ú�›Fÿmv…4B-¨¶˜L$á±„Ð‹iõ²âIºî66ÃUØÓ·µ[Mm8¦!éÆì]¾¼œ/cb-‹íê«†¸Na3ˆè)„®Û¯ù†Ú.	¦šf	—¨DD0œDXM<ðF\6‚
+3€Ð^M5Si´Õ&ÅCM¤AìU¦¨Eµ¯Wqm„µz&íVìPNâ„Y6â"4†Øä2CmÄDqÖÜ0˜U´L!aFË B"Ò3
+TÌQ˜Â¤…ÛBÐdx¸9v«¨5�Øâ�8­
+kˆ´Al\DFˆà� eZYSïZŠˆI§‚VqÕéRÕˆ Â¸DtÂaˆâ?äÆ91È{ x7‚vA!Ç xŽ@ðG!¥˜w!¯4òžœ0°È58L(\�Ì^Mm ÞšM®¿»´Hqf
+Ò/RnÈ4;¹1È7wÃ�Ò}ÅwÒm}Ó_uõÅ§ý~¿ÉÙ?�j²+�R²#‘ònKÜðC8ù�Æ’"Ãi‘yr9ü¼%Úaçr$P9¹ß r
+|>ÍYÙsÔ3€ìf²°ÖK`�„ÊÂS4!a0…‚ŸäÇÂ4ë?MÈ4Ó‡pƒÐ†2	`˜L‡¾°¨ºagÓNaU´Ñ�¦†4}fÓT×]L&¨Ú|ºrö}4ÕÜ¼cþÂÕb~@š
+ßF:M•6£Iæ6Ï#ÊŒm'˜mœó˜O	¶shß˜ñµ	¤ú}]ZaNm˜fÚ÷ß.nsžT›fç�[
+Ž@ñ¹7 §d7 ÍÇ!·
+A¼½Ùº�tÕ˜fê^ôì&�'ÿjÒwzWiëßÖŸ®ë¿¯ê4ëú÷öŸßÈ-•aSL&
+[U÷½ãÞ¸Øb!z¸¼RuÿµÚ[‡ü7B[a‹ÓQû{ÿÐêÿs‚Þ‹ï× °>AqÚF9wýþ`Oü0¿×ï¯ö¿ˆX{þøW�¿ç˜úÿÙpÑioÑð[£y¶_´$:´î@ðnîûØâ¿ýuÿ01þ¦�¯ÿîú·ŽÞöŒ}[þ}¿ÿ¯úÿ„ÿ�âúúŠ¥×úÿ†Òþ÷	ÿÿN—£7ñU¥¬þÃkÿ·ÿÿ¯ÿøúôûê¶�ÿ¿dßÿ$9
+î—õ’{ÿÿ],~ÖëòâËþì�ý–àˆïÿ÷dßßñÆ³AYÈ±’HfXRä4¬‚üEr
+Nx"q(!š9XE²70ë�üC˜r6âœG0äÐf‚xKˆ.8@ÐyPEÏÿµ×í=ÿîÖÑu¯ÿ»ýS·ô\ÿÒW{õkØ[ÿÉ¿ö¿zýáKˆcÏh0ƒÂh‡4�™âaAk+	aC„,(A�–kXA¡
+•i‚qŸ—0ši„BÏ±¦ �´±iÚªß±ìUñö)Šmu†½í¥«hn�£ä`º\CÍœi±^ØOƒV5Ší´µø´Ó·F>µHÄØ"‡Bì&ŒtaPÐíèÇì&ŒTø´bÌnÕf:10Â´9ŽÍÔchÅM„+F7|[„§QLZk»šlEÚlh\EÓ”n+~N"­6“j8µ‹‹tíŠBú›¨ÄÑvƒ¾ÞìÝkv…œÎtbs•' ÛhÅfêO»µ8ôÛ7XWWMÍÙ‰Õ7]"í³hÇKÞŸåÛ®n¥±o	ãk›Ä[	¦£oa0�œF;Óu	¶oIB²sóL¸ELÚI³—Ï+
+h*}kõþ¾·é¾7í>ë³W]{øw_êaãV«­‚×~úW·WúãeâáœÄˆ´"!¡�DDCB(¹D0XŽ""!„@ñ �˜)šÛøéüWûIö¿K�â½xcý÷_ë�ŠÐ…QÐþña�þù0'‡¡ù€_Ö¾ÿýb¯Ì¶—ûÿÿÌ
+á~`'o®ÖÿYp3}6’_õþŒ}{KÿÂïÿÌë°ÿ÷ÿÿÂ6ªŒ_þêðßÿÜpÕ-~ÿÒþŸ¿ý¿ÿàˆÿ|?ÕiùöMýÝVIüá‘Óë$;{_¾Ðt×ä‡ûÒÿŠëÿþü�úÚýæ¿ÿÿÛ_úénýµñîîÊw×ÿ$ì!¡ïíoÖÿ·ÕKÒm;^ž½»·ûïûøÛKÓûV]¯™ß¦ÒÝ¿¿a„„¸ØapœCîÃïµ†œ5‹b¾4Ó‹ºmm&Òÿê?�‹Ž+ô˜wý áÚqá4µm&®ÓhZÅ?Ô[Çâ˜Ð†ÃMZibÝªi4ã¤ÚŠcM‹M¬|4Î+1ÌKë'‘âÌ ™´jš!í›ATâS&HXa5s‰²áÐi«á4Õ4,ŽvšÄDw È8ˆˆâ"3áˆ‹
+ˆdÃˆˆ0B"8â¾#ˆúý�3‘È¹w xg‚VA©Èd†œir0r‡.2¹
+ú�RëU	šdKL)
+¡H
+à*j…ä¸%OM4×KõÕ]Ô3‹ Ò
+öÂKKÝ¦�Ý÷!¬îÑ'ŸdpÈDp3´.#û¿û¢î·ˆßÿêø�$ßD5ÜŠ>A]É9h#²1ÁÿŸ€R^^²+ä>ñA
+UšÉ¹àŽ£˜rC‘&DÃñ‡$:~LrpO#ÏÉ¹nx"Ú ¦†aœ#ÁX@È_7ˆaŒü~Ê½4Â—äúÂa0�›ÉM ƒ'ÁL! a½E8%Uƒz„ïÂ„, Â0«aSUPšak6«IÅì&‚6© Ñs	£5Fú1ÓA£è_1Ð´^´Ó0¬å�F*U1¿ MûFÓVÚôm4m^]ä8§ð›gt¡L{Ûªyz�äíi=<ÄÑ‡®ža´aØLÃ³s«e
+¤îôíMï~�~þ@Ìœ†�ÈjA€Írì�á‡ x/;„Èl�Ù»=lÀ!†Þžž¯Á©¼Ü¯V‡Knm¿Òuºf5÷^»öéVßôÿ6úÿý<Å÷^·í0 š¦·¯Ö‡A}ö½îñÕb¼Bit¾=¯°Æ:ÃÃWÿÅxý»Kÿø|?átöŸR�ßøÿâ4Ã×ðUß~õæCÌ¶Ž5êÃýÿÂó}wÿH7¯‹�Íw—¤(î-vƒ«×óËÿõo~`'Ñ¿ÚþÇÿ¤Œvá£7Ö¿èÇî)/ý½­¾êê+ŠŽ¿þ¿îŒpÞßþ‚ÞÑ‹ý{`“†ÿKoOÿÐZávsÞ¿ÅzZÿýkÿù¥ÿ¥¾Žß`ˆÿÿ˜Ú_ÓMøPDj¦Û]?Sö¿þ¿iýWëË _þAl,¹Èƒë�VÂ; ¬9°» »è;*¶@‡ ¢ð›“ƒ¹ä‚°–x�êAx%‚Yž#¨Aç‚.Úþ«�Ã}¾Úÿªï~•ÿ
+Úñéö¾ší£ÿk~Ú0štÿþ¤+¥ØAæ|†H6ñ+$æ„?'2ÜÎPá0™¬«Ï…Ú*Éyrh3áðô+É‚ h8°ƒ2XN‰¦°DáÅ Ô{BÂa|XOý“¦í/Bû½b¿ˆîâ?v!•Hí™â/ŠbØ´¢­+	„í(Ž*-û�M9=!a[Š¤õ0…£
+�¦¡Žcj…÷°¢ÓMÚ1¶�tÞ‘´Ž˜èÆÂ
+MëhÚª7´c­*7Û˜ÚaC
+q4b¦š
+>!Å+’qI´ša	ÍhRu´ÒmFÖÎ#Úb�Ž)¶šªN-4îâ¶qF'/='¦ÞH�o=öª¦÷.ó�'ðÍ¤ŒMÿAÃn¥tÔ»Â}Ý›´Ðf§Ü8iÐM³–ºŒ„ýÄE°™¸¼ƒW'C%[HYË�ï$$3h&šEÃ„vG�iœQh4ÓSA´.ËÖ™\4ˆËÖ«¦½¥Ù»n“Íƒsu÷v¯êëM:Õ­ß¡úª¿k�?·ñßé¼tŸýúÿøÄ0N"" Â x3ºˆˆaÈ¸!�#‘\EµÆÓv?×ˆ^Ÿ~·�ñÇkÛ¥_aŠÃêÿ×‡ßþ!}ñDt‡½ÒØkì>ÿÂýw_Ì‡ÿ…­÷—
+ŽaÅì>ß­ý‡úþëþ\ÃT}¤ÃKn`+Ãjõ¾‹½î¿á_ïÇï×õÛÇÃkU¯øoÿôbÿÿ¤œS¥†Þ°ßMÿ^¿~¾“à‹©!ÿ®ÉÅoÿd‡o÷ýŠûßÿô¿¿û$;I´õ‚#Û$?�ÝµKõ¿]ŠþÉºUiZékëßÿ¨";äŸÌ;Ö—F½­ÿÿûQ÷µOÿõô—kì":[a/c†·ëÚM]vºñÞÃKíÿFgmm­?KôÿNãï�X{udïÖ!öžÔv±Ú˜¨‡±
+ŠÝVÐiµ|i§
+.ÓšG
+U†¶A§�ÃX´ÚÐ¦“¸¦)=i³Š…¦Ø‹j6šbë¦)QmFÒšƒ
+4é6)g‹b™Œ[[†ÐTÓ^�A‡®ˆi;	œHA…1vbMa…´,*jp8D6Ì„DQÚvX&G"í3a¶AlÜ�àîC r×o�:ƒ9¯Rù_„�%MWIiŠ¼i„Òì!Žj"?ù° r‚Ó�È
+Ü�@ä2A | Â†½�1H6º†@*Aá<&¡=S
+A^¬*èÅF:6´ïý�P;øãN.A”w˜�Ò�»½ÿã¯Tý+ú¥øúë�Ô²1Ì>C$Ç!…A;"¹ÜÎaÈeAVG„GZdòà–¹à†�òXD²(æ˜ë•dàð\d'�Ïd["Žg"ñâ¸Ð[§šyVGÐÁñâ>0^C$eÖƒDC>à…¦2{„Ñ9B ÂDBÂhXBÂzaaiý…AÅñi„atzi£L1´.ç•š1´Ã.˜›9^]ôcÚóbhu<±|Äæ71´Ñ‰´Ô%al£›yvýžTblIÃ7‘óqÎŒM§®žb´ïxt›fìÄþ’Ù¼¿aS†a›ºN“¤ØoÝðíMÞaé´ù³6wfæ,&ë¯èjûM« Õ'Úÿ±÷¯ýöÜ~×÷Öóõõÿmÿkþí-øÅýˆ_ïÿúUßÿÿÇ÷˜û_ÿÖ`M/û×ÿÝ_æFð¿†¿‚úÓëÿþê¿Ö¿ÿó¡òá5ÿX^¿éÿ·ÿ£m+ÿÿÿÿ÷Šÿ×ðD}õÿ÷/RðDµ¥þûþ—Åÿÿ®²o9õÿÜ“ºõÿö�íÿõï¾É»¯ÿ˜wÿÿFÿþéµ[^·ýø|[ÛÿJ×[¯þ›
+l%z­ÿuë}”=Òÿþ[íñWôÅ4ÿÜñQ]¶—üw¶¿jšÆÆô›vq¦Ã[XÓ“¶¿i¦�±NÚZµë
+;bÓi¤ÂqH>)¥A±A´Ê¡Ãa5JÅ!
+®Ø¤Ób"è&ÓLTSUIÄ/UÙ"#†¾V,"9ûfø†ƒ	„!‘Í2éMèD0BÌ0…‘Ò˜ÌÁB Â„Al²WÌØmÜ†@4Â¦ŸézT EF±ëÿí×ë!® ‚°‘!È*d‰•d2ŠÈ*"¹)È.RS•dí+ëòöRaÊJ,sÐà¤t8!‡s–9"Âs#4ÈÎT/ÈøB2:ÿÍhFbŠf3F]8ÌS1‚!‡—dtpS1B!—„'‘fA²„ZqÈ äI‘fA³ˆ“g…429ñ?ùp<2äÁÈd`äÁÄD}ñÿÈMûÿ xe=�<3ÿ—ïßÿþ@Ø97 Häà†Hk¸ñ±_ÿäÁZ,áÄ€©ØA�På9
+9ø�BŽškëÿ°˜UôaA2ÈL&Q®ÿú˜\;MzvaË¶ŒM^ÿÿƒDœ>#¨³6m}·ÿü_o~×ÿý\†ÿêÕërã�drcÿ_ù�T‚ÈX>ËãAPg&æ‡À™78äœ…«5§�Ðd2ÜðD‚+“.Í‚-‘`Š9Ü¸‡£ƒÿÿÁ!˜ætØiŸ¿ýü Á	¾ˆÂ„#ÄX@Á´âL! Ð½Bƒ0„~kýz„,-º§ÿÿ£FÓâ»èhÚLÝFÓD=°°�ýšûh½FÕ(f$Â‡# ZV×æ'hÆÃüÇñô›¦á~Í™²†oi4ìÞ¡79'æ÷
+Ù»M³wvn¥ulÚ‡WÑ‡Ö)×ÿfê_³fµÿtª‡÷éëÜUÚ~©ð»¯_UØZ|B½¥ßÇûK^�=wÿø¯×ÿéÿÏ%_ÿ­{é?6Ûmÿ»ÃüB¿ëÿÿ÷ßúèÂoÛÿùpü?uýPr÷ð�¯Â¿Òýÿí¥ëúßãZÿ×èÇ¿uÿî¾´ÿèÅïÿÉÿýÖýjôþIïzþþÉ—_ÿê?þ¹!ëÒ×}û];ýoßß¿~½¯úýZÿúo×ß[_ú fýúX%­ÿ _~¿öV}ÿßÃTûßëý-%"� õŽþÓ|†@,@ðÍHƒÿLlTCû]3Ú¯W«
+x«Mºítö8‡„áíªiØHn°œiíD\kd¡ûõØ¦©‹Ml'Ð¶8‹¨iºi±¦…¡Úb×iŠA¦ªc	íD8LÞcm'ý{í4eâí|[8¸a#`�RTÔÐ2Ó
+s0¢;R84h L'ÈàaÕkï_h�[‡Âh†@7pÂ„Cˆ�ßÿŠÑ°qÔEzëÿGX¤«ýþÕþÿ±	¡ña
+‹.ÀW#‚Ø*kïü¡úO J¡Èd‹}dÀÝÈd#–9†‡!•¨!¬älƒLÈW	ä±È£�<3G xf¹Ã-ü(&‰iêCF¡a’ B¦Œ/ÿþŒM˜pÌMý8fæÓ»D5‡ßÿpA9O�[né6íÓd2C¼Än1í¦Úw!�ÓHõ­¿êûÛúßo¿ÿÿú
+úé_~¤AñÇ¾ü‚³‘GÔ†xR
+v™ÿÜ\r!¶9‡!GÏ‡ãA;"w×ïl‚ã“òÁPD‚r,ÊƒÙ¹Ü¸R‡)ùì�¾ü«#Â\ƒÎ>ç‚P™;(pƒ‘gÙÀ\4@ÿõ‡‚Á~ƒ^nåÓå×ÂhÂ¨BA‚„ZaA¡„×BÂréòë¡a5Âj±aSBÑ´ÞÂh9�éÿîºk?Ú¤bkÂJ›öýiýÚ
+Ñ‰£¦Ú—¨ÅÙÍËÝ¿o¹ŽŒ]Ø"žbw°‘�M³îŒT›7üDF°ÍÔba…¾“lÞ¸^ß·ïnìÝ§˜y³0Ý6¶¶·§á>û~ß7iý-¡K˜¡ÞžšßfÍ{õâÑ‡ëýúú-[ööÞÇ}]+÷^Ÿâ×ý¿¿kNß_ý
+GúBÒö¼þ>í{â·¿¿X~Þ?ÿx®Œ	éy„þßØ„¡ˆ¯ÿÂÿþñÈd ä
+Ü˜ä@£
+‚‡3°Š%üØ�uÿV=�pßþíà¿÷øì{á[¿×õ˜¯ÌwZä5ÂŽäFáCþ¶àŠÏïwßÛÿõõkF/þÿOºèÅ
+¯¿ÿ‚#ÿÿÑw x7²]¢æGŠ˜._#Ä¨4ˆæU†¡$ÃL»*ÁˆÂÿâ¾¹„ý÷\ÿõû®—¶ºõù'OßÒÛKì˜ÿ¾�µÿÉ?ëêlè�˜:ÿ’éÿk¶úì÷úö·ú¶“¾ÿæwõ×ÿV×½ºõOO¾ÿ°»OÞ�ý/Z{k¥éø">)»3ßÆ¯ÿ ÷PƒØývÅAÚìUªÚ
+TÂõ�<ŸvÅ_°Ò½»MÓ�=b›Ðq¶•Ä8Ú‹O]&öö±ÞÄ]ÓáÅ4ÔEÓƒŽžcúBû¦˜ ˜AÃtÚ	¾�!ì|&('ÓMPO
+&á7BÙÅŠ›‹ðÔEÓMS6�¦á­œHR†¹cù~A·Èž¤LŽ„_KeÑA„Ð‹Z¬DF±f0ƒ!—a4 ÈðBìØhXL iÄCZhDDCDE5ù˜§Ä#©x'„5lƒ5öE™PùdY�qÝ2,Ñ)Ì>@Ît„G j8ßË¥£nƒjÈe=�krß x�àaÊ{ðÙ+úéÕÕÒÝ-§ÿo&ù2PD ¸äÜÃÚâ’ga¤~õÜ=3YV>dý#0Ëü«	¡
+34ñhwKSÅ�0<i±ÅðÖuTãÂ}Í¡ë�9�ÒËªTL~µ›Í­L'ÂFÓf;1üÆ´C”?	 þ•<6û0¾ÄR¼Ûÿÿú÷°„}ÿÓêÿÿÿÿ¥gKy²úüù__ÿÿÿKý"1ðùÞûþQ¹�}_Qßÿ±øêìTzw£k~Å\Ú}w{YPd†Ó�ZrŠä2QÈXñOi½Ö6šiÚ×b�¤·ÈdPõ�É\ «d8 x7²õ	¦A¦,‚ öA¦È|EA‚þ""ÈðL,�ûˆ³xÈÜB#¥„Ô*ÆáqÔ7tþC$3ß°ù…w!®?/�¤.ÑHjˆA­Ûf
+?þ@ñAýõzv·Ø¶«»~½úuÞ¢ï×¿õ÷ß¾>”?®žF8ã�jÂCä3RŒŽÈé�^°�ÿžì‹Ÿ÷ØáJ.9~åñvN	A9›ˆæC¹œ‰�ÑüÛ83¿3ßžÈí0™¨GÙ‚š„à¬5šÐak5•„»LeÙ±T‰­Ëï—O‹A„ÿÑ´âal	é¦˜Aªj„0›¾aáñaŒuL xOL!}¦ŒuCEÚ6ƒÝ¹]…þßhÇ˜ëûì1·Úæ;M#	º14bª1¶a¦SÿÑ‰Ó»7f.ŒmÙÎîì-ÝœèÄµzwÃ1GwÛûæîÚ_�<5GÆGA{ÐmÝ˜i·ªv`î–ÍÚ}½*vlÚ˜zîŸúÒaôìÃû[»Mít
+“õ³sõÛ÷ë®Úò‚ƒ!,ÎC¿úÿ¾­ë¬{»h?ï^¢¿ŽõïÄ"O¿ï\1ÿô,®ÿéÿÛößÄ+cä]vÓ^“üBéGÌ
+ºáÿ]õþß¿^?û[Øÿ6+ïÿ÷Ûö×ÂÃôÕýtbuÿÿ…¾`%/ù€–Ó]ÿùpÐ®¼ÀŸ÷ý¿úëWïÿ^=�Â7Ãoäv‰Ä.]£bg²ì¨'Ÿûõÿôbº_òèW]ÿ‡ý¿Ãÿõ‡ý†¾¹§®¿ÿkþÚêuÃÈæ«ã	„Aì¾¨÷ÿK�$>áÓÒòOÆúó	ÿd‡!uø…ä‡ÿ¼‡vÿb¾†ÿÿý½ýpD{ä$Êƒ�iÎ#jž—³kiøã‹ý×ÿµëkÿimwû’uû[wô`.×_KýÿEÂã×ÿ×ßõ‘ |Çißæ=ÖÌ,ß˜é©€ÕG_þþ×†¼S
+m[X>¿Û¿ãµ_‡¶¾Ÿ¶·~º´Ý6ƒÒˆl;ktî"ÿtñýÿý�ã xrŽw!ÇŠÕ´˜‹âÝŠM¦/âš§b“X5M;j4Ðh9;qHZqQw�§'ob¢ê6¨ ðƒt,£•OC¿ßúoþŸlT�ñE Ø©§MœJšÚia4øi45qmBûV�ú§®;VLÚMS/4þC@ìÄ˜_èÂÿhŽº÷»b!¡Å„ÌhDG
+†G‚â"Â„D0„DeÎ!¡€B<DeÉ�<7ƒŽC$F+e:Æ‡ßVTEó
+ºe? ŠqH†HÀqÄE_¦â˜}¬]ÅhY]á&`ªý~šAÚv­ˆ ËÅõNÓý'�[^ŠX¥ú ²9�i|2;#‡#‚àŠ~šM¤üG¦R,x _ ÖÕþ()Àvñm‘ÀÌbÃáòÜ›áÿÿ»ðÈà»	?û#†k¼�0ä2²
+XAk0‚dp}ÞC$
+Ç ´9€j²
+nA¦Èi9‡!� „‚Èw	�Ô�MÈeŽä4Ü‚‡Ú(xßA¦@ðÞÕT!d(
+ªS¬‚Ã®¾¹À¸ñtˆú)ýWõþõäõÂ×~„Çú]­ÈqÝÈwF$C)Ã»‹ïjšeÙàð\Ër+‘G!qIù'-Ë±ò^N*f›‚•dK.êaÎéþÝGâït?ŠïïÓ¯ÅÅ„FxiöˆhèöœE„ˆÂqz~Ýqþº×ÿ¯äLöÓåÐ"¢-S˜V­9µ¿@Š†h�ªð¦›FÓázHOÈ-‚îgÈl‡²(þ\‚NASÈà‹<ÎD… ½›!ã!ð•‘†XäYçr ø$K‰¹ã#rsa¸¸*
+×ÃI2¿oùÄqf5«|ÚûÊ›Oæ!1¹ÈR¿S™ŽÌ/öÜîC$6¸¸7i¦GÄY“Â\˜Fƒ„.Ô d-•dx¡d$ZÅ‚ gƒQ4Â»*È¾š Éy8	¬C%5L!x ÍÎ¡]~4ab£hõýãù¶?ãÿ«ÿÿßÈŽ8{Õ>Ð´a©ªi­4èÆÐ´1Ñ�£BÂ½�QŽèÚ¡aQŽŒ&šhZ1oT^£ûªF7!ò†kÓ†Ïx·‚X­}~m(}]ÿ˜+6—ÿ_¿äÜmSåçµ	›©F*/4c£}›¨ÅfëÒNÎ*14�'§vy^n£f<îÂ¦ç•©=:19wÒæîŒU´�›º1^©³ÙÇ*xO5Å
+u\NÅM„úô;ªõÿõÞ¿þ6g‡^Ó·Nßi>ûM7ZO¿[tôëëu°›ë÷wzý§W±_um˜}ët�'‹¯öê:p·Sì¡p¸¯ì¯}óþ«ù´ß�ýSß‘ÖøcLW¤þ…Øˆ_ý»Tº×§ŽÇÿãøPÇ«­‡?éúõøú¯chÆÑ„÷
+$õ«cŽ?ã¨{Ç¡±MÄqøŒCûúÿêÂÿúÿ¿zÌþèØ1öð]þæKÿ_ýs>
+ÝL°Ñ„¿ý…¨†¯ƒØ^×áªi¦°Õ‹[8–9€ÃÚ7vÿõÌŒ¯ô¯ýþƒúÓðÃzõáºÿÿõÿý]|6?þ£¡ÄDlD2f ¥2'�l¡)�w†ûûïÃh*ôþ{ëÿmÿÿýèÅÿnïþïÿüúNÇ’}µÿ™‡#†"8ù¦E™4ÈæE›ÙÜ¹Ã�}ÿ$î¿¿O_¿Wä‡Gÿl›þŽÿÿ‚#¾„G_ÿ÷ïµý.›ònëÿ‘|‹…�Kˆƒ@ð!ÇFY�môa5úûÊwÓûî·­u{µ¿ÿ{Uûõþôû[Wý¿ûõl%þ¯îg‘Óÿ‘Ã^Õäaãkíí&í[[Ø­¨¿»Ýí~øØ­õáêÅ_ß!é÷{UýÅÿjÅÇwÚ
+­;¤ÅÿñÈÇXI…íuÓMŠb_›Ãªb­6Òo�=8†žšwÅìqÓ±I¦è4ÐlCv�´ãÃIÇÖ¿�×�à´çÂ N0§ ¨€]^—ŠO¿i¦¢™¼ÆíªÝ¤-ŠÂ0ª#eÞØI¡TÂfó[MMLÄ1…µ7Rùt¶oJÂ¯þ¹UáðQAv!
+b!„4â"!—ÂhDD4CLr›qÆ8h�éÄCD
+‘`$Å1äG#, ÑeQ‚ b
+Ôƒ%”A�ÊÜCŽá#:aB9rÐÎëÅ4Ö@ðËDqˆ�ýÌ'—¤–Âÿ¥ˆTñ^@šÕ#ƒÇþúø_B#ÿþ”Æ´@ðeFAuü�È)ˆÖ1ÿÝÿý¥òåÈƒ[é…®×É�éyXiŽC oÃZÂ9ü‚ØŽA¦2á8!´ä\�{.d³„Ë€ƒöaý0¤6º0¡5°ª¡|†@,C 
+Ü�á–ü8ôa)ýÑB6«»DQÕÚ x£Ìy‡ÈcäÑý>äÁ]ÚzîîCmÕñ\=þŸ<‚ßñåÍ>ïª¾©õ^‡xëÒ�ÿÿÿ­ó	þÞAlG=‘`‰¼ÌåHqóÁ2/gsÁ22nG
+K‰ÁÜ‰+ È7²70àˆë—Ç3�Ž@�L·;—	ø@ËÂNwý^–Î=zy�mòøŸE„A„ ükOBÂ
+âÂ*øˆai£A‡„Â
+„!„Ok<*
+aPB ÉðM´3ú!sÿ¾î»Ó
+¡Q�£Z1=¦–Â6±a©…M[Eï£iáž�ôÐ´6šk®šnÍô¨Tb†	ûµÿõxZ¾¥æŒYÉ¤ôØa8v«Þ¹»M÷LæÑŠÍé4›Þ�‚]›µRõžL=;7Ñ‹NÍÙvåë6á›ÒNÍßéÙ´•¿B#­¥®Œ"élÁ_Úx×ßJ/þ½f~û‹0ÿéo^û«°Ÿ®�'Ýõþº¯ìxºÄbx]�ô.Ç¿o®Ò�î¾>µ¿Å\+Ýqþ!ý[Ž¿ÅiØzé.�§ÔßÛùý0ú˜þŒ¾¾Œouù€‰[ßü?V”ÀO…ô¾ž¦ÿöù€–ÂÿØ#	sjù€¯ëý/´¿ÿ¯«¸ÿùÿþŒ¿û×ôcûÇ±Zñ‚#ó�ûkíùûîF?Ç÷ÔÂ¥þýŠÿKÿïôbþ—á¿Gíhº¯‡òNü"?$?ÅZõý¯¿ä‡ú¿«&úÿ$?õû÷õ’t¿Òõ3ûk´®×\ �ÚGím}í-ÿµúÖ××þÒû]µü¡Óÿõ]µÿÿ÷á¥�+r€X:c×çñì{ÚLS¦5ÉEüW½Óß
+.Øì!zsä?Ž!ü5ý8«BáöÐpÒN>È$9€(rV;#²8PÊ�xEBAµ§WLSú{IµÃBÚU¨¦“b˜ÂjÔòH\I¦ÓÓbÓM4ê.!ÄCãA´qä±ò†cìŽŠ¾cÂq0Ôi0ƒM&á„Âð�‡#ÐÒÓ[LŽ‚i©°†Ò¶�ºœÅ½~g€j/Y¼Ú`ÂÂjþËƒªÿüXA…0E"‚»Ì˜"†œ�„C#ÁÉj•ë£\G,iÄDôÇoòÑt¡ü�àF<6ûM/ý&GôP"8¾Ö•�ÿI‘Â—Aú
+]7²Üs§TƒkÿHx‚PéÚ�ƒˆèÂA„8a;Ž6©}†!\|9Pb-¶Ûxx©7Èc–ðtè;ð…î?Rç�/Å½;ZÐEqö²€VçtÂ_×þ@ØC$Ýö!ÿˆ •‘Ál$2A^29�‚”k2X!­d
+g x+XíXYŽ6A‡&˜MBz…Pž†@QÈ¯�È‡ xf9Ã4t´oèŽ©Òé¾AP}_ßrŽA¬w x2Ñ�ÆÊ@ðÊäu8øK½4Ž?£†»‹�qÕ·wr;ªº„ÒOÿˆAt½p“."‡ñéz÷õõ­i7ÿ®!q¤SÐ¥˜W×ÿ#‚¸í'�qÂeŽgO"_à…y…à¦:×éðEÕxþ¤4±[‘Á
+«#s¹;!›Äø‹Á2(áž¶çrPJd¦JÉ9ß¸».ÈÜ§/ˆ'‚¬‹è<¬†8»."!Ÿ
+h<Ÿi„sh D üzòîS±j9œ¡ö§¢¸:$G#³i…2ÎOÂ!aBa­S
+ƒÅ„Zª„Áz~`…¤˜BÕ§i¦ýi´ÒaP¾ü¸!¥Y‘"9¾Aƒ‘Ó.dY�/B9‘g‘\…™dZ<Ž„s"Ì‹èAÕ"TÐS2þ‡1°Á*1µTbòýôb£F;	+—�º0èÅFùŽÕ#}º/Z›Ü¼Ñ‰»†aœîá…£©vÏ:«ù ÌÅ]‘ge{äZÌmìŽ‚ñ‚-jC�hº0Z�”!G¼¹{†aÞy4Ÿt›ÞåßÙ³M»ýi;HÃ|Ã®ŽÒéÙÍúmÔ+=œr¡ý›š»Ó¯»ý?ýn”s`{ä[ùpi� ýr$é!ßa>ÖûÓÞ÷Q÷c¯ÿãiô½Ðº|]ê<lZÝ×þ-+Wëÿk½j�Aþ…nªÇõÿ_ìD%ý7JúOþ¿éáSUÛ_¯ù´GKw]ïüB½LŠ</^°½ã“÷ÿÿö]ý‡.'ÿùpÑÿù€Ÿ
+üÀEÿúõõÿÂ¶¾§�îõ»¿ÿÿý´bÿaÿïÿ¯ÿÿF+¥á´bÿýOõþŒx¯ yzÅ1UáW¾¿òCÿøm/ÈÇèÃ·aÕþÉŸû~Iÿ¥�°D~ÿÿ­äžýÿKÛ&úuM^ÐG,ßëïþ×ÿÌ;þÚý½«wõþ¿ß÷þ®Ö¹7uþÿí-&ûÿÿ{^à„h� 4ëÂOWýþÇ«u÷ØAñø@¯Š¾ß‡ñµí§
+Xa,/iðÂú#­ ×nàý�þ­„áë¢²Q0ãihBß|}bøumU~"Úb8§bî×M6“BØ¶.5tãv*ìiŽÖ.�ºb¢ÚŠbôØ§h Ó¦Œù€(†@A­Ò…ÃË ŠrAèPi¤Ø¨¸Ù½ÕSNìSQm!³i;H^Î%TŽsHCzÃM;P§jç’I¯ˆ¼�á”>@ðÍuÒà»x„¬“ø†^
+„E„Aâ„C	›HD2<	„Ðˆa0ŽY0™t]DG
+šÌ šÂ
+LAÀ2‚EúïØàŠ´õéÙ¯ mG!�
+°;ý×ôØ>‚Ý¥ä
+  uÈbRçëñµðãV!¯[T¹ÿNA©Í}»‚¯ m¤¦»þ×x¢‡Zª3¤Pþ@Úcíb …÷ÿâ¶#Žm&G
+/ˆ�t8ØDt¡•ç¦Ó#…ŠWöˆ¨‚é+›úkt¦ÅÄ|GJ•s	ðë¯ò ,§\\_�[qÈ4ÇÚízkûMHèÿ�È�Èd[áSKò`È;¹h6¾@ðË xf�áqQÈ-Œra•Oü‚<"‡\„Ãœÿÿó�	QÏ6º��[9œ‰#©ËÇÿá”ñÂâ…ü†H6ÌØK¢A„·?ÂyøÙþ»Šáÿªj	£i¦˜Wåç´Ðú÷ÿÒ/4bÏxZ1C´Õ^ùh7�þ¡iŠû·»N¶—¿¡÷Aã�Z1±úC½«�m/t“Äoé¿é†?0'þ\.ÿ½wþ`+ßýµ]Õ?\Ú‹ÿ·×ÿWÅ0Â÷^B:ÿ’pÞ¶ºdÇøÜ›ü~L:@Š}/ï)ßôµö¡„¶« fáô£kûö“Çä¬5�3!Ò¤¿b½>FÕRtÐM¬rPö	]bÃkÓj8MžÜ0Ÿ¬�á–>@ðÍØX";yßÄ0@Ô¸e„""*?®£âŸâ8×ÿ¨£ÿ xÚýùõ¦‘h5º¿ôãÿ§D
+¡–:ºýù
+â�~�…ßrŒ|*ˆKñ=qdp]VAÞÅpÛ#�˜5
+¸28
+¯ÇPÈàðŽU"¹1ü�È ½“²WÜVÁ
+_áSMÁÁ…äq f
+Ç!’œ†AŽ@ýÈ~Ð"¡5²Þ�|‚Ø\	�È
+L
+@ŸˆüƒL†¤õùµï@¿Â
+BjCOˆÃõÂ¬�<¾»ÿ_­p�¶@°w˜Rwmž›rÖC-Ü�àãŠˆõUä5‰d
+æB¹
+¹œr|A¶dO!!›2,È�S¡A3ê~Ù™d_"ydY‘fE˜]&ÕÈ2¹ÇH>áÚ¶‡Qºÿ}Íf-"Ì‹äYà�‘fGNÓ"Ì‹7°ŠÌN„<4é“†X"‡ìEðF>“þ¸¯uïëï]|»	—XDÇ_ˆˆhr†cˆˆ¾D¡Èq«]ï¿]rã–:Íuýb"#ˆþ÷ÕËs9°�©PEÂ
+Î9DÉb†Woi óÁ_y
+ŽIÊƒy“Ä;#îXå¹ð�š\"ú*Èð!Ÿœ„
+rŸþ¿µ‚)ÈQÉ�¯áL ø†úé¢Fr3Ú
+±iß/¼(BÕ5	„""Õ	…X´›9×CoŽÿÂTêÈà¦ÿ»F6š# \ÆÑ�>�Ñ�ÏwYy£yhÇ—ÿ~Œtb£iØEB}Ìmá…hÇG¼»½¬S_ú0ô¢?¥³v�£³IéÃ	›>“†�Ý-'`‡˜zooßzt´�ªlöUnìÝIÒz˜}¶­v*…]ÿõékÿ×ÿx¾·þ¿›1íÿÇ·íýêññäâ¾¸÷ýx¶¸!axñ]#†@6~©ñ‹ÿ†?øÿõÿýûúýÿÿÿ˜ËŠ²ü#�3
+å\,YpÈ
+nÿócÔÀ¯ÿÑ€/ÿÑ€Ê¿Ç·òáhÀOÿËˆ¿æÆ±oO‹\_ÿöõÿú»ÿý�}‡ÿÿû÷ÿ×®¿ Àÿuÿ÷†ÿÿ÷&ÿþäcï¾ýY!üÿëa×ÿ#òNŸ.o×!G×[]I>¾IÁßþÉ�ÿÿÚï¾ŽÛÝ®Úþ¿Ú¿ûkw
+$c|5íí|†IÚ_iXJý†¿íl/üSuÃøþß·†¬j�†¿zý…¼Ñ¼V¬i7Åzãâá+¶)Žõ�á¦Ä6*nÚ®šunîé‹¦8«í4ÓMŠˆvÅ„ø¶–ëæ*Rèºû…½4…µtü[LR�ÃA7·N6šÚ	¡ñÐkfÃHäš}ÚÈd@ñ…‹)ÈÇöXA„"Â¦„2ðL&™ŒÂ‹	ÄX[ˆÂ ÈðA„!„ÔÌ5‚f0±ÁÈG xe�<3GÖ?Ã@ØpC cþÑÅ—Èé~<:ü†�ôƒÐ·úPwýÇˆÿ
+ëôŠÿþ,¡ÐS®üuÈxW�¥ˆøÃ¡ÿ‡ÖË¯ßab¼�0¹‡ Ì</	¼‚Ø+A]È)Á‚Ó�Ö�x yÁ˜!�Âœêðšé�ÛÂmW‚©ª¿¯»x]H4�èÇ p;äßD�aÃ$îÑ‹LÁZ§ Î;Û	ñÄ*ä±È£�<3Gò
+N@ðÌÜTw-7HGMþ� ÿÅë¿ôÜuò`½�ƒä3,ƒ¹êC-ÉŽgÈ#‘ºdÇ0ä4¬ÜÎ:f‚ ¸"MÈiaì‰2Ü–²à›�ÉºðK‰9áÿÚ÷ò Û²pTˆ0@ÉL«6<0¡à¨5”8Pš»5û-Â„h	¡d¼¼*z ô!a0‰ÌÃ1˜"€�„:Â¡¦°ƒi„-›?äs¹C¯¯¡hZ
+MBÞ´]ta8�
+PÕ4UNÇn÷¤cµÎ‰ª¨BÇFö˜N
+ÑˆçuNqÑ‰Ûe?ýÒè¾÷ò!½šAÑ‰ÌPï¤Û¤Ðf*1°ìçÎ*1ctbZO7´a·aVì)¿/0ÐfÑt�Ã7½ÕªÑ†Ùå
+5×³ˆõûlÝVÿâ(�Gÿn³fŸ¯I÷fÍ¯o³g}«éúßh‚‹º¯·~›VúéÝ˜z÷ö·ÿ´IßÒëÿý[zþž–èc_øöÇj¾ŸßæöØcé?ðcü~+ÿïIÿûþ)þÿß�
+'J„ÿTlUýLzˆ^þ¾·ÿ½×u¦þ¿ÿûõþ½/Á/ÿŠÄt­ßÿû¯þ¶ûÿÿŽõ†ÿî†þæŽ�¯ÿÚÿÿèÆÿÿâB?ú¾;ÿ²Cá¾‘�ÿ{kñ´ß·èSþ‚zÿØ«Ž¿ÞÅ~—ÿíp²	ûú¸Duÿ×G¾—ÿñ_	Aßþ{“wÿ$ÿÿþŒõÿ®\/ÒþëÃZVßÿtÚÚ¿ü5×ô¿ýQ„åÁ¥zúµï}6¶�ÕoÿÛÛýu¿ø=×Ëqê—î½X¦*áx¥·‡Ü=U!]5Fd`!†�~­×ÃJÜTjÄ?þÑ8QZ_iÉÛ^ÂzpêÓ²ÏóŠA�þ4Û¦©‹ˆ¶®>â�‹´Ó“Í4àÖ|Ri±[QÒa6©¡
+4ÓM¶˜¤ÓAÝÄCŽ•�RSÕ„ãô›ÐiœI›Û]PM„B�„]Ô¿wci­¦£i„Ó7¨»ˆRé†šF°Á~Ìfû8“!„Žë�È�ÈƒþC8äœ�á˜?Ìaa††ˆ#/Z\qˆaˆ‹DîG!R7!�L�á–>Ð‚#�GüDDRÄE\k˜}xÊo_ÓþÒM*÷XñÿìŠcc�û!ÇÿMŠi„ÖC8äü¸ÿå	¦Ðh0ƒ„ÿÂXÿˆˆŒ¿
+”Q¯ÂéüFØM•Ž†Y2àACOky´9QÍ@°f)ð¥Ã,ÌS1LÄ>)˜¦b™ŒÐþŸÙ
+AÈ³"a
+©‘fE™92,È³"Ì‹0BÈõ)GB3‘}ì#1O�‚?ÔF_‚8ÿ3 Öƒ"Ì‹0dpü‹1eù
+€Ëè2à·òÌ99h;ä[ùQ�ÌÃŽ�‡¯ÈdîC ‡ ©`�àÏƒ xfáp÷üh&¢Èà·ò ¦9( Í@ðÛ„ÕmB½tÒD¡ü†H6ˆð¿�<¤b�Ytoù®£ÈdCÚ‚0‹­�<3ü†›í;M�Sw xk>8­¸›ŠiHOÅ…ÿ—f…Ä\i}uÄP@ÁñUÿ[ëþAeÕ2áAˆA�^Âd D_áxã�ÀêAVs9W/¶D|‚þl C“�ŽÏÆ²ì�•dxA‡;‘¹Ç¼ŸZ»DƒYÈ–2ù?Âº+õ_þx4S?‚Üð¡%Br¬”&0A’™VlM#Hôo Âu!‚œÂa0…¦lÝMPa‚˜èÇM„Œ6_éüXN"Â„/´caa
+—nchÆÂ1¦ôCš¦ÖŒ7†šF71Ã
+ohÄïEÝ&¥ÝžPÁLwmmœÚ1>›Ý¿ÒÿË¤Pÿý£ÄqÛÏ&ìÝI¦á+i=i6îƒJ›®Âïé'§éý›¡˜1Û¦›	ú~·iÒo×xô›æÿh\˜z] kvõõ0pÂú/z~=ýiöÖ8cünþÃûÅ?_÷Ä,1…þÇ�Éh3¨ˆÿñÖ+ÿ¿þ–´•z£ß»zÔÀ�ÿ07£\ÀO‚ÿøV¸OókÚ¤Bÿèðgáïoþþ`_ïÿ¥®Úá¿êŸvõð�¥ýèÅ
+àˆþþšâ‚�ÿ¸Fÿýq_ýýÿd‡ýŠßŠÃÙ!ÿ²C„Gž¿øOÿ÷éPo_õÑÎ¿ù'ô¿ÿ…ÿ¸"ê"£ý×¯ëì˜çþ×KµW¿õý¿úôÈ;ðë(w¯ì´ÿ¶úëÿF¿Û¨jÃ	_kÅz´ÚíX-¼5ØïX«Ø¥õN¤¾«¼qÃUrc¬bŒ/ªñL5°š~¶œÐilS]ªn©ÞÅ'±WÄ]XKj*“X‹¤˜MŠAñM4Å ãÒÃúvœ(¶4ÓM¸qA6ša<FÂˆ¼5»HS/PÔRa¦ƒQlÞ„4chY½Sˆkø]ýÅ†³b1—�b!„x&b/‘ÁaˆaB"( äCˆˆa'0B>C ªr9Ã5ÈƒÖ"DTŽ&l70`YÈc®-ã×Ž¾?üW¯ÿAB�3ßð—þ
+]�[š~ÿß Ö91ÑÏÿúðÖ«ÿds^1ÂÄGÆñB¥Ð#¿�9Õ:¡¥×¡ ¶NAÜ�á¤9�Òr¸!�È98­/ ·@&¡4íBdÄ2ø]~ž«^›ãÿòþQÜ†Û�k†Û“|ƒ`âï1Œu¿ñPÐ¯¯ºcÓ½/�È‡ ã¤C �á˜?�Éããºª¯â£Â¼�á”ý–8)7ÿ ¶›ä3ŽLuUÈ09c®C0sD @êC,r§;ïÄØ„yò ÛY‘\Ÿƒi¦U’sÙvkA�Ç—eYÈpl@Ê‚°ÖkA„ÂŸ¡¼$çt!„‚üIÏ‹¨ h39Ü¼	œäìÐU‘p"qÉç4#à´¿ƒKÿÂƒ
+# íB‡Új…¨@Õâ.íP¾ÓF©„,!ÜE„×P…„Púµ¤)|�ÿûFÕQ¢º10Ò³›ÝÚ˜›8¨Å˜Ûxf+»NŒM›`‘�£VÑ‹1Õ$o³xÞstÜÇÿ}üâ£
+¿ÿÃ7é°ìÙü7	ÚpÌ_aWN“¤í>ÍÍÝ¦a¿~œ3h¼Ÿé°Íí=t´]»NìÃ¤ÔÁ}&úÐB#ÿÓt»Ãßöÿu¯û¿§ÿq_C¡öý?m}ÿÿ×ük\d	ßú ¸ÿ×¸¯¶¿_ïâIëÿÿ÷ü1þ ¾+ÿÿýWü†
+Úò#Þ=þÛï½÷ßÚ¿ÿÿø_˜	öÁ}-?ÿ÷ÿ¹€ÒüÀ3<G§¯Ñ�á¿ÿÿÐ]ÿïÿóÿÃhßÿF-èÚÿü4¿­—aj#¥ûo_ÿÿ×ÿÿÿé‚#ÿzþô«ÐOÿìÞIÿÉ)iýäÝýÿÖ×]>ÿ×ÿÿýµüÃºþþ¿ß÷èûkýª_ýßz}§×Ý ôÛÞ­`íu²‡´­vîï×í;@ÿOÿÐ]„ø¢ß½Œ ¨†Jâ§ö±‡
+-4ÖÖ-†ÄZq
+†¬]E1qÅGq±Ý¡vÅÅ0î4Ð†šiÉÁÃbý0ƒBé"
+VFöC 
+ÇA0«ŠÐÚb�|\BzfónÅMéªœV©›ÓµA5¨¸LâÅÂŽ"ØnÍ¤›TöÒDÂa£4¤vG0kð™ˆ&…4Èú‘ÃA„™x&„D2ðMŒÂ	…	©€l	àˆ;†G28‰œR<0
+eøˆˆ0œD0TFáS^*ïæð7�ÈN"#�Ég#��˜÷D±á�<c�< xfÿz¾ÿ0· C¯þ·
+)pŸ÷È2�ÏÄ.È+Ì‰™
+”"ùÚÌ‹Ä2¦GB9‘ ‚ydY‘}tÂi„ØÄù˜¦b™ŒÐfbš9æ™„s"ÎT
+f)˜´y:=‘hE˜e×†E˜°´f)#‚lž>�îÂÿåäé²íyWh†,¾„G xf¹Ã0r†`øˆˆÿô""8ˆ¤#oÿúú×ûÿúˆ�ØccdpÈfÈà¶{§²®èÛ. Lã¤jˆd˜à‡þC$6à†@4CZd]�'˜äÜ¡Âb#Ä,MB‚ Áô«ýAVµá´A]È+IÜƒHï7ÝÑŒ"ŽüUTUñqÇõ!’#�<2ßý}/\�áÇÈcär†hÿäÁÖPL•’‚§Ôã�ÓÂð‚AÎ"áãä4APN±�°{#Â.)s6Áà¸\¬%Ä6aÈÜ«>#ÿIò!µf²¬œv™ÎO�°˜D4p4td¹;5 Ëór(Ø aa	‘Ì»CDûƒZh8Ó	‚!iÃáýP°…îÂ
+š=ŒmTcµ…FöÓAL!Ìj^hÚo£	Ú­£cLhÃq}£˜ê�tb£ý'ÿÞ{¶Ó´—¡ªIÃ7‘óÝ…7¹yÖýú14šW„Û�$ózfïIXf³á›�ÖÃý:16›ÚIÙ½z9„Pÿë»[0ÿÍÕþ:w±é×­´”˜?ñjþ1Õ¥½jö×I7U¿Æ�{ðÇ¼|�$Á#ÿý}õÓµÿþÃþ1ñí/×þ+ÿûkÿµý†1ûÿBûëû½þ ¿.ýÿ1ÂéLˆVù€Q¿—ÿÝ+_þ¿FÃ—ÛWþ‡_ï×ý_ÿÃâŒvÿÚÚ_þŒþÔ6ÿÿþ†ßñ„>ýþ‚þÿÛ×Òâ½±Y'ëì�è*ÿØ„ßßÿí’"=ÈÇðDwÒ­/ÿíWû-ÿÌï¿’ÞÉ¿è¸F“ÿ¡ÿú0Ž÷ÿõö{_^ûÿÿIÖÿðEÓ�ÿ{û]¶Ö>1ßðÑ…NÿÿJÛI}µâ¯†[ïÿÖïâáÚVqVÒªðÒ†»u±PtÝXMŠ‹a§h4äøîØ«M8qnžÅ!qLR{^šiÅ4ÔTtí Ð†œm!tÍ¤î›Vìa=¦qX´âí¤6�‹”+	Ši\4¹€ºx4ýAÆ™½8††^Y'f0„D0¥Õ˜²äÃÂq&	›AB`á©›Âù&DGKÄF`ŒH5C�È7@Î�à´9!Ñ™È5Ž@ðÍ�áš9Ã1ÿô“\�á”ö¨çmõâ˜¯ˆ¡¯ÿÕª^P•ÿ	 Ã0½ýÄGëñôµÿßÿüqq|¼‚Ø7²ƒC�V‚r†µ�[W!•Fÿ�ÉˆAª¦@ðK[ò†ÐêþU]r ²?èÎD#û� tœ�Àä�Íw îäÜ�#�<8äßÈ5¿‡ÝqO|ý<ƒk¨ëÿUõuÕiUWA<Ü�áš9€YÓLŠ:d£Èj>ƒ!‡ÓÎä ù¨'(êC5ÎätÈ/ºÃA“²1Ì9c�hâ{$>@ðÊR†hÿ�É
+¨*òx„0@ÉÌðU—	„Aç²<ÐÍ™ÁŸL eÐŽh8°@ÂÞ°�4À…‚»5 ÎçÄÐh2„±A„"Ê²Æ Â>‚—ÿü!zhãI¡l$m>-4m;T´¡5`­tÕM;A­Ý¡ð˜M�FÕ
+‹ôÚFÿÿoF6ì)†Ûjm…£¦÷F*1¶ÆÃ8¨Åy».Û
+b³‰SS0HÞÃ6’0Û¸f×vÌmØTÛ6Œ#�ÕÃL*]ÿÙ‡÷}-˜#ÝÖÞn¤é<Ã}^×ON—ú«ÖÐ¥UôÝoÐg?ìÜ÷ú\k{Wúÿþö¿ïêýÖ¸¾÷ãHqZ÷ÝâþýÐýôŸ~ûÓ´¿}†8®¿ÿˆ_Ýÿúÿ¯Á}}.sX‚[¯¥ÿÿúø…~\#¦öþÿÿï…õ_ÿßy€ÏÑ�:ýÁ¾`'ÿ¥ÿÿ_ûûöÈ
+>[ä¡Ârçþ½þïýëZÿàˆý¿÷£±_ûÿÿ£×üðÞx aiÄGõÒÿÿûëì�ýë¥ÿÿ’JøY'ÿ¿ÿÿÒý²oU[ø"=Kâ„_ëõí/îô¯û¿öÁM/ý×Ö×ë@›_þ¯ÿÿKîÿO,wýé*4ß®ÃÛÿá·þÁ„›­.)‡ÁÚ|;¶?PD~�ÅA½m®·Õ„ò‡êô8®ý?‹áWÂø­ˆxA±ZiôÅC»�Ž[ÅTi¦Åé§Pâ"Ù<ª„â¢áÚL[…ˆm4éÿœ=?z f	2Dõè êÒhE†š¤-¦˜®ši›Ô^ÔmS'NÚØ«íG7…QMU0­O¶m
+¾Ó*È6L‹äHR	B:|�zÐŽdN"PŽ„s"ùdY‘hE™dt#™vG2:Ð*ds"Ì—ó!f$ÐƒƒTˆ°„Xa8ˆˆf0„CM2ç`á„M
+b	ªLÄœDG—
+DßÅ‘Ì‹:ÑV
+)‘ÌZ´Å—JìA…â!—K¥Á”/Èd‰2UÃ�<4¢`2CYõ.Hƒ!È-ƒqÈdÃõ¦—¿â�àaÈ��<3ôÈd›ñý_¯ÿ¦…5i�É«ØôqÒ¯¿Vš	§XAÿû. ×i¦²�Î8A^""8!DÿúÿÿA~#í¸ˆ·ÿ�[
+W fÈd;ÿ… ^r†^†‚
+xEAÚd2
+ïê©Å·pÂëëï¹ÇFóy´ƒa—6[D�¹ÇÂ¾Am»¸«	Ã½÷D
+î:n¼ß]}G~û½ÖºÈ2ùúG‚Ø6@ðÌòò	?ÝQ¬Ž£®g#²Ç!©	¦A®	9à¸Gä3p†wL“�ÏÅáðÐg3ÔB!˜9Ã4r†kÿ�ÉL"ÚdKCG“xa?‚¬�·ç²].Ÿä1v0�ƒ‡„Âa3ÙVN
+³bh0ƒ7`á ÂX|'È0¡h>â!è/×ð˜A¢EO
+"þ“Z ø´öù}öòõMV4m5BÂ÷i¤èÞÂ6¯„ÑŽ¡¤af&í?_]üÆÑ‹9^bz1U\0¦&ÎtbhÇôcíûx}^£…p›vs{»	„Œ<ÛlÞ©ºwyŠ“aá$ôïÈñ»×ÿûöÓõêáéúÚozo˜zooûBÚy·�iÃ0ïÿnø¥i>éB�÷_uîÿ¿ö–šüW¯ƒWé¨ÿ�¿ÿaÊÿûÿKÿ¯ØcÞ¾ÿÿø…QüþÔWÿcØý¹�þ\ÿëýÿÿþ`x{·iW×þøF×ý×^Þ�üÀiý÷ßÃxoÿZßÿÿãÿü6¾‹¡þ�ú¿ÐWßƒéÿÿ¿·‘Žßù'ÿ¯ÿÿ˜_¬&Mý½&6¾‚8¢+×‚#ÿ_ý½°EÔ“þäŸþaÞÔõß_÷ýÿW_ú.Ÿàˆõ¾¿ÒOuõþüÃµýw·™ÿ‡þúûa-ôø¯õ×úÒõ¾Ó½Ší^ÿ¾Òø‡`ˆü!ÚöŽ°âjÅE&¿›ÛÚh>;áê÷§ñpàÊµ†¶Ã¦.ÕŠu‹âškZ ÕÀ‚öšcžFøMˆkNÒïA4mÜ&ìâ±MGm!iÅ{LTPM�bé¤ØÁ¯Bô ½˜“TÂ„„í'BË´ì&OÐ‹¡Þ˜A Â¦aÂúf ƒ	¦¦0„0ƒ6”Þƒ†	¦^A‚!š9³üDEÈd8ä2Cx)ÄDG Ì9�it¼G|†@.9€+r†`ÿþAH|�áš?úÝWßúa;!ßúÿázÿþ#SÃÿÿá×ÿû¥#�_ÿôÒwâ„GÈ»èœ
+�”²`D^Èd	‘,�wÿUõ	ÿï´�r£ÿ�[!È5;�¯�ÈÇré�e†£’ýW]}?½z½Wý~•Wò€Ì=d2AVò.Íi�ã‚…ÎäH#�JÈ®x @ä8åù¸‡trÊ´x\Ã�£œtð“�ÉÁ
+è2+žñ0™ä?{�<‡ xfŽ@ðÍ�ášýá3a¬ eÓ¸+Ãˆa VƒYðÖeÍ4Â¦2º5‹AÄ2tTÂ<„!¦„0@Ìœ‚Ø�Ë®¿üÆñ»†1Â1ØZ0¡9y£‹Bù"jÂiåèa]Z†ÆôciÂ´o³˜HXO¡ßúÒwpÌFßël3{IÞni6|<.“lÃ7C£›kN×ó…7f-VÍëaK×fí[MK³èÃ§�ÿêßï×O];ýt×õÌ7õ¿OïÖ­ÿŽêïN×ê°¾a?ÿúÿÿÅ}ã­Gýý­ÿ»×ÿâ±üuââëüGÿÿÁÕypŸ[õÜAypcú¿ÿÂÂýL":Iø_˜ë–:�<3G! r†ç Nƒ¾C-9QÿÿþŒÿ¥ûÚÿÑ…_ÛN—ÿæÃbµ®#ú1ÿÿæ¨¸g%Ž�™på`!YFÙ6ð[
+¿×Õ~—þþÿ¯ÿ Ÿ²Cÿ.‡ÿþH}-6+ý/ÿý’€…ÑUä2‹¢*
+Èñ" ÔDÁ°«s Ž%Ý_ëú_ÿö�öÑt×ÿU½~+ÿÿ_¾°Dÿø"ëþ@š
+f½uÿîÿ¾þ×í/ÿKê^Ýÿÿ¿M-®P÷¯ö—æwöû[†“!üC‡ÛÛi}þ…±\>¸j°~ÅDCæf8í&!Ãƒ*ši§ÖÅEÜVÓÓj"ô´Å!kÒmVœE±
+:fÐ¸:j*¶šM*?a3zj1¦§1³xL¼aXQa„ÕÝ3`Bé¦„2;7&avƒ.Ë®¨LÄš¦“cÄ4#""!¢‚¼È8ˆŠ0PÂ€3cŽ;Ž@ÙÁ‘\�àÆ<3ŽJÉÙÎÈø˜äÈ�_ù0cyv Âd+L» yri¦¡aWUŠMtÕTÂéª0©ÚHQ EDÂé§I£	Ò0¡öæzFù…—X/‘ÓKïJÈdÅŽèÀ÷úî�w#þ÷û¿ñø{ÿýî.¿ð×¯_û×ÿÐj©qÚIøOßþ×øú®mjƒÿëþ
+ïóØ7ûþ�7á¿ðî¿¿‡õGõª¿¿ÿ¯þ¿[é¿Ñ˜ïU¥×@ð]ÿâº³Et‡G´¼�ê7ãÝ
+ŠMØÖ65kX¦**!5´ÓTÔ-ª„!„!„Ó	¡ÄCD	`Vkÿ u�È®AjÈø@úÈ®A¨rw�:�t&™Ã^È#®œù
+ë®A±ß!±éönm-k	v•Ô¸L·@Êƒ9
+9‰›²àã‘¹Ýã5—s¹œÐ¤¹úN	By°ÁþÝ§ai›ÈˆfÐ�½S‹Bóe§h2±;°˜NÝ;ÿÖ.ÓM›Á„î§@ŠŽôæà�"£¤Ð"¢c}Ý,ÂÍ£kþû1˜Va¯ÍêÙŒÇù¿uÁ;1ôa~¹ÈÞo´�­èÆ«ÇßõZßÝ¯ßþ¿¿Çö?î�úÛïõÇÿëocñ_¿öÿ
+ý~ÿÿþ¿üÙ¿ÿÿßFæÂÿÿ˜.ý_ëþþë¯þÿý,"ëé·ñZèºØ"?B;ÿÐâãÕxéŽýŸØ"éì¯ÅDv�84ö�‹Ž8¦*ã[v®#œCj+¨¦ö¢?G…6“1­¦�…†žš!‡
+uex†LÇi¡ ÓX��;ã°ˆ
+ð@ðVáüEk_î» Ðâ#�5÷�3Â6�ðE?�qùN®¸äAÐd¬¡ÉÁp»2ãÁižgÅˆa3fyÁ!8¿MÕa}ªhÇ˜VbüÚÁS	A6fmf50«ÇÙ€Ír
+;Øèw�Ø÷ô:ß|ÀÕÿTm}Jl'ÿG0»±ôm}Šý][@ˆ[ô>ŽƒãÕã‹ˆÈd„›!„kzEÆýü{è Ýr:³	\A´ÁeõðÚf¦^/¢Ñ	8â"#d¨C$êù…—ºOÙQu÷±LP«‘ J ¡è‡|b	ØK f€D•š
+rÇ" ±S! *4Ü)‡0ä¨®=�¥|›8™‘t�3{(!
+1ÌL†´ÊÂ‡)‡8æHC(rlïr6FóX6ò ÏœÀ!>ƒ<�¨j?Ô>C$4¨[�V™
+W!—ÄN¤5`†Ë%BXIÈ+¹1ôžCáô�Ì¸aVÝ[nÔ,>®<>¿I3ió
+@­ÚD~Û/0ÂK|m„�ôPTîgÇ{ý'½ÇñKU ¤:þßD2Ü›íö¾Xå¹8KÉY;;–>™“"a;'„Ü›’äPNÉ¹à Ê³Ì• ó½÷©,.Âh?ÛKÔ&�ƒÒ	„! ôÓ´Â!aB, ÐÈ¶x[´hX²ò_|�¿M5Oö×�æã˜N_0¯¼ÆÃ	óŽ_6ŒJcÛè+LÚ£ahQ·­ôŒtchÇF7ÞÃ	{¥HÚp�íÿ…OÓ¤Û0ÌFÕC_M³n‡¦ÿ˜é/ûëNþ1ï°Â˜¾ôÿb×ºô£õÅPúôýCúÿn=�cñ‡.ü1Çt¶æ7. vÿÿÿ07ÿþÃûzú—¾þ¿ðÂú�öí¿×ü":ÿ„GPDþ¾ÿQ_ÿý¢ý»-úÙ€Èáyc„Gª¿z¶¿ÿkýƒÿ.‚þË}ßÃÃ]zþˆ;u·ï÷¥q·_a(áíöú�Öýþ4ÞÞæj™O±_øMQ¦íB
+†WÇûRmFš±µÆ¡8Ž�ˆpq¦ÕºoµÒ~—ß±M;
+˜·j©¤íÃL½aFÅŽ\ö7¡v™šX_â2ôCDDXD' ~9
+�MÄFÄDR×Pâ">õ×m®»M6‚ëaÉaÄvÛÒÿ×ë×ëÿKÿKÿ_¯ý/ü�°`�!Î91È+W”9C[R‡)ü"¸Ø~aHÈÕ×è�àÊ9PPä‡ˆi¿â"#ÿþÿ¯ÿúÿùÁ°{ÿü�á`ƒ+�Z�|†_)
+\4Õþ¾š,w¯¯Kÿ�ËR7
+º~¤H3˜pŽ°dì¯?ô_•æÃAàÜg8à‡¿ÐBÓGÕ0¬^«…UT.}uý^¿«Ñ´ªazZ—Jºý+)Òæ¤mR‡)ÑtÏÂIk˜ZK­¿J¸¤m%§D_úÕzõþ¿)ô
+º„¬÷éz^ºKT5×ÒJ¬ôm D} ˆ£¥ZHhqÔ_üŸ?©ô’Š�qÜ+÷wëU	¦¡5PÖš—Ìi©�3J^/þ!‚DDU¡@þñcŽÿÛ®¾ÅZûb-¶C _ß!�É@Oý4ÓõÕ9…÷ä0»~C!?‹ÿ�ÈŠ( �½D‰–9
+%f™P@Â¡‡!ò‚îl Ð:eŽºKù0"Îå9líÎ\´CŽg,·Ö�q}?ôUËÅòV
+¢(
+F„GD@k—d@+‘ÆGEÙ€Á€Ò.$ƒŽErÇ Ž@ó]¢Þ½ÿåÁ¤Ž‚ª Öí�"4â8×ëˆ]vÿ\�íÿÿ \tˆgÿ£y7&ä‡
+¥Aæxö¿ÿÿUþÿKL ÂVFÆù�c}ŠÈ5Žªßõé%þ‹®� ‘…v¿íb«ïûýý
+(Òç’Kþ!8kdpj_×½R×ëºð^�ª3_ßýUV¯ôbõªªÕt¾ÈàÓVÿ¯KÿKTaUQ�¤Ÿþþ?úÿ„“ã�Ö½ý‘Á¢8Š�t?ýC¥›ËÉª¦¿îéR_ÄEC,"†´}Óõ×èÅ~Ÿý%þ+îýWÿi}íºÒ¯Çû¯­ýÿU¯ÿ¼�äö@ðÕ�âŽ½d4ÿÓû�hèƒhô£þÿÿù3ª�§RÇÉUúû#��ù
+UÔÿûÿù”ItF�°«Wÿ×íþC$G®g—EÑp×$"èÜG
+¢:.Èè�‘È�‘Á°Ú#ç¾G
+»dp/ÿÇçdˆ;ÏWúù�dGïø�ùhG4mAsÐƒ(åŽU?Å¿ñ¡ûÿÿßÿ×ïÿëßµý~÷ëßúõÿ¿úûÈNä2‡ yÿûý/þ¿ÿÿõì¸1­ÿÿþÙô¿ÿ×ÿÃ#‚þÿýÿÿëÙ1§Çÿÿ}uÆÿþ²Ø;ãþ«Þ@ð7þŸÿÿÿý¶GÛdpÈl�¸ößùqöGåÀðÛ„3a
+H µ¯Þ@òò›ñmd2ÇÈ59ã¿Õoÿîö®«úÞÈá?ùùtMÈAè��±—
+Gä0åÎh‹Æ2óþ—ý¿ÖôèW•Ù)¦ˆÌ3O+shEÄZúýÿù:réèQ6±}«1@Š*Ú@ŠŽc19´¿§ßÿÑcÿ“®ÿewsÝ¿ó˜Óÿÿÿ�QûÇól|ÂûðQÿÿúú¥²8½ÿ÷˜=oï0_þ¿øÿúûÆÄv½~—ûæ×û¿þaoýuÇv¯ðpÝ®»�ŽqÃü�° ±Õ÷ý½wÜYYÖÆšµuOþ@ÔÁ””Pè©£8�€<Ÿíè!'ßH0„E„Õ°B3@]h®0[·þC Xÿ/Ñ|¼f
+ÅÑ¬5É0Ò0�ÿÆÿÈdƒÆ¤‡Ûÿ÷­‘ß x|Éýä!ò?ÿ�<ÿ÷¯ÿ÷ûÿýòÑÿùÀã?ü†@L%ˆ<ÿä
+‚ã�Í·ÿ «dÈ[ _ˆ+zéª»ïôªùÿè8aš¿¬ÆÇÈë½WýXhÅ˜Na?‘ìÁwù¼–#L¼^#Æ§ÄYÿ/‚;ÃIêGZuÇ‡å¹("�Tr,È+ŽE™ˆmL‹9ÞIµT-AáS‹�Ó#a ü"?ý?™Šf)ñZ)‘fEžE™dYÜ2,È³âd_lˆå9N¼Žš³µdëÌ,Â³„ÿyõAœv»WÒ¿—œá‘ÂÄ#�Dh‚ãˆƒ�àã²	y�×7o^>9¿„ˆˆˆqQKÑüDB±È4��ôÇÖøö!Ét
+½ô›Ô  q[ÿ¯ýÙ½¢t“æÁ¯L§k¢nALrcÌÀðY{#†avÿôa]oñ¼0›0l:èeFÇˆAÍÏç�ºàî>/ˆ¸ÿàŠ†‡¾íþ*©¹ÃwÈ ä'Ã
+Ó+›bÿõ÷l=†
+¶ßêƒ
+ÁôyŽÿb�†S	vÌ‚>·û=°ÃØf×‘Ó'}õD2A‘ÿ¶Òl{ÛýDßßKû8¸cmwö|Çÿß«m-‡bõðh?õ×¾†á‡·X�·ÿü"�VÃ÷ä2°ÿÿâ·�¿üGýv‚w/2Çÿ ´<ÂCû}ŸÜo^Èçÿãbï‹¿ÿÿàŠ‚\\=¢C¿÷·ÿî
+8'«wûðþÝÜG}øèßÿ»¨Óü28¿éX´hfrû‡uäß y:ÙÜ�ä?ý¦„ó^ßÿàŽ?ÿú1Ù¦zÜSý¿ÿÿé-¡·G8Wþ?ÿù·JÝìÃ
+ÿ¾‚	‘åÿûii6á)ÒnÿkØ?ÿé&!°Ûvßñ]…ÿø¥?;Â	�‡þ»Oÿ�4Ñí*ÝˆS
+¿ÜlGü�˜f¡¤¯°�.Ûÿ¿û8›�GÕ)°’'Vÿÿ´ÿi/3éaƒ¿ÿýp©Õd	´cBÝ‘ÀðSd
+Ó�WNTÛ+ýòðÓ'Äà)ù3æÝ·JÒVþ1úé¶˜M[Óè ¯{ÞÜ$�nÿÈ-ƒx)A-HlrS&9³ìBFÖmQµF=s
+at’ö!„ÚJì†AC 2‡…ÁØLŽc®¾þ7�H$ÙNŒUºRéÿD!àÎ9Æ8ÑC�Å—z_Ì+÷Ôk¾Þ’
+:q	vÜÃÿéÞ@ñ¹Ç |?< E?«kÓ|ÀNºô‚ƒá;Ia¸ÿøý|DQáŒí£kìBþay…ÂA(íµ¥a¯÷§õˆ²è»eù‡Kû�Ð+8ìh\GáéÚ¤­…ÿïý±yE}6-ŸÆï7ô’°�AÖNßýlÇï Ôâ91ÂÈƒ+³°Ðˆi—úA‡
+m¨¤°Å˜~-¯ çð¼DTDGI"	SL4š¬?úxh_ ¡Êµ±ù‹¡„9è-§®ÿø�¸BË‚
+Cý�o×ñäeC¶Œmiµü�'aÜQs¦•Âü0ˆ
+£øAy½†Òˆ¬)WüŽúd2r�‚ÑÈà‡òC�âžC¸F"œnwb™ÏÅ�HõI‘ÄöLp™
+»áÚ.Èæ_kE8'û‡S¢�¦« H9Xh‡þ=¼ðh#ƒh/zdq„A¦-/‡˜x{>ŸüCM°ÿHŠ>Â({‚0äà±ÙŽÂ!cô§$âä†�3Ò‚c�…E¹PS�¥ÙOM4Ûâ,ˆZCaWŽï¡Å0þdïA�#Ž9ˆ­ó%¸Ô(ÞÐ C^"¶G2âlDEšrCŠ#‚óÀ":	„wK,}Ùá+ò`Î\ƒ[‘A�i™NCÔ|8| Ý0GwN\9.§ü—�_d2sz8pA”9Çá¤ÆÁC‡ô@ðƒ¸AWˆŒ.yÛ$C6’LSW�U
+g¢à¶v(¡öC�Z&!”$èŽc#�LAŸØ±û#œãì"|‚Ì? \!a‘Üö–›¶ÇpÂdqýw(pÌ
+t¸F‘[#‹ Àó3â˜ëð¸M�JØµ´ý™ÁBñ¢‡û„Pû˜|29O�ŠÁHQ„þ¼qa�`†ÒDûo¡÷?ŽâÏBƒŠB
+ÿ¶Aº	ò1^ð—�f}¿¶88ý“îÖCñ
+˜—«ãû/‡µNÛá_	ÿ¸°í|g´Uœv£KzÊû?^í´zk‹i`±Æcú†þÛ
+ºVÙO„µý„Pî,Ž
+(Dx@¡×qÇöÃpE= ÒEöíè&Ÿø±²ãâÈìŽ!ý¶Á²žiÒ·}‚}ÙA
+­ûa†6Á0àÅ¸a†!†öÛvÃ
+—sÀÚG&îß¸oÅ‘ÓI†ÞK´®á®’ÿa†Œ5é>*Å—K_Ý½´bÃ+'€¸^Ñ‡dpÈ�áŸ¤¿Û7Îôl¬Â¹qÛdp‘RìACþÛãØ6ÊB¹°b1ÙF@ÝÈC�h†¸ö™°™r“‚#ò#þØn4‘x60–C$°�§�<7+#‰òÆ�üZûméa†ÐA*i EFÓ#Šý¤^};_IÈŽl0éR7'àŠŽêGQqòqa’¡ï/Î?ÿa�%\�×ýïB"8þ¢ ÿÛzI†¨%¯ï!rc‘p„r
+þB�Ç�/2/©ü‰äYÜÆ,‹2,È�ûa×0–¿ó1LÅ>!´\Y3åÌ‹89 ¦c3r¯#£Ùš%¦,Ž}‘fÍ#ƒô2C‘ŽÈø"‡Ðý´kÕk4ä2A³Jÿ—:d†]¡zg£9
+4Î?Ÿt"##�ú y?¶…+aX:¿èDw*BÚÈ â6Gß¶ˆf‰Žœ¡ˆ^—øÙ,ZNŽ¥ŽEÁûd/ÃB6š!’�¯Ñ1ð˜jŸiDZKöÞ8J*ûS	8Û	ÍŒ,†@*æ¿¶ó¾\Ò² «éE5yÇ°»C(©;(uMn§ ÷XWh{à‚âÐÝÇ~ß1µˆû#…BÌ@uŸÐÛÚ¤i$æ/ZtëïöñÂCXoÙ#È+@òz²
+�<ž•¯Ûm G�VÅV[aohãÖ¸k"ûyÇHO¯¶‚0þ:Mxãûh^*¯áãÿµùcþá%óû�Aî¿ÿV:x
+]~Â»×ÿ÷H ¸ÿvûúý/õûq¯ßòãú @¿ YÈá’
+‘P#¿Ð*„˜]°­s�dpXüÔÔ,GDq>A|JþÁ†� _ì"‡² ¸û_ÐfhEd2AR
+ø§øþ@ñ÷ó¿eù?ß¤¸ÖìŽ_ÿ…¶;÷×e¹P?]qì-�Ù×�ää!è‚°ä!íŠû×k‹8k×[¦ÓÚÃNLŽ×ñþ+»ýkòßðÖC$‚�
+ÿýWÙÁh~<‚Ðû�_ô?ùcÿ�PýÿÿðlŽ#ë¯L~Îä3¤+5¤)Ì9C˜rŠã•¶\Xˆø§Xetà¶„p=²ÜY2d6\Ã^Ê€0]qàä¨)|�d[’uü�° DG	ä‡?úä|-˜ôõø�Mð^–A`pD|*kÿ hÁÇì¡Æ´¿I;ñ¢+îA”r�ä'È2Ž@ñŽˆëúÞ@ðÜ{+ÿïø2ð†½�<7ÊÕvÊuï_Gõ¦ÖC1Þ7²‡f`§¯ô¿Fk÷È`øeÆG×ÿÕä3¹ì§.28R'ÙOž)dvG	Çÿ×þG\žÂÅ„>fáS âõ´‡(pÈàoñúý-½7ÙBöœ�iMê‡ñeÙ¾C;ÿÿ±£yƒüÚ£n±«Á\"|ôˆß(vÙ2At:A}-ãý�®/�ê5üP†Ø¨áÿÿÿ÷kûïÈÇl†�ô©}w˜Ñ…~ ¹µuî—†6ðÉ´¯ëô5îýÿ¶=žo½Syž5c¾U³kX¥¨ ]ý'µNË£6šÄ0¾ÚûÒüDC#‚Ê ¶
+CõU‚#ÿH� ³È,6ä5Ç y@ò n9Æ:¿ëûKßôþ’úA…úú¿óÚ�ÿÖBg¯X§ý~¨¼þ¢ÿÿÒÒŽ�|ƒm¥úÿÕ¿^!ÝüýY—#�x�ÈK
+:ô#XuL=yÜ‚ã¿äAÿH� yû8?Rcì!ýk§…Õî×®C31Žˆì"¬ ‡Ú¯¬„²}äx…Ë\˜ïúáV¨Ý×a2ú¯×�æ9Æ9Èz °8±�AýY…äÇ ®9
+=kŽ@ñŽuí5§ÞÈàÁü'y`k½›íy˜§Ã\d~D‚³™ˆ|™‹"ù#œÐÈàA˜†b¤Ì‹2/çrdY‘gvG2:ÕÚZÕïÙÈ¾gîf3@�jDñtÈèÓùèC�¡d_æ€ØGÑä æY1ãx>”Ž‘`ÃˆˆÈàyDDdpI‘ÄFGDAø�äàü;ýþÿúcû_ÿŽ:ZŠ“Œi—%»Çùc�ø+.Õô)ÅW”øŽC  ¶§€át@Ð4:Ð5°ƒª(R>Ñ@^‚Cˆ9;Ó¤†úÇa§UõÂøIÿøÁù¡ÿô¾—dsâ×øaxîC#r�ä ä‡ò X¢ƒú©Éô½ò#á¯_íòcãþúuì�öGï^«äl|õúò XGþ¿þžAhr‡_ÿqöÙ�•b"â.Èà¶
+Ÿ nðK×�9Ó“}7uDt|úk„WüÇö=+¤²c¯ø#ˆ/Ký­Qz:ùß¡}sB#Ï÷È—�<‡ y9Íè�èr�õ°Û_Åmw hg3�T �C�<4 ‚¶�A_0žµ“~ª}‘Ïë�Êë´È¯U!³	SÚßúÖ`á˜qåã§Ú—àˆõì4¯–?wZ_ºUM¸¨«†Ùvò \s?ãýt–HuüeÁ¼ï¼!|=kZÇdt¿"Á;NÉñð¸3�È7™)žÉ9Q�2àØg;–á0ƒÎä®ûíÐG%oýüBüî¨=P…žÏDac0�ÏÝT!DçâÓ¾ÿA�b#T8ünŒi½›Fû»é4Ìfö‹î_Ü¼æ÷Ë÷Fh0­Üºòÿžê—§�Éïù�Ö
+ôö^ìÇý®4žcŠMonËÆ'Aþ^Ç·í«IcÞ)ÿOÞþ!~Þ�ëÝ,iÂÿõ¿þ›ö0×�dqM?ûKKÂþ¿k_.? E?íÿõü¸>=Èd†w	§æ6ˆd‚¿ûíõÿûû ¿Ãÿ÷ÿ¿QìŽÖÞIÊýéuþ¿EÁúØ@Šrãûüÿ¯f}öþÓÚZ-ð™CúóÌÀ¥ÿÅëÏˆ×Š�â?½}ºXøÓ}©uØ„Ðí.DpXé§B“MÐˆ‹	ÃBÓxI…b.*ÓXÓ�¤ôÜ†H4¾¢· y@òz {�ãqüF]6˜B,ŽÑ´]Å¦j,ƒqê"Ú_µº�É¡ü�@õô¿å¿¤IÄDG@ÐÀ_¯ÿÌ8(Aýª%Èâ~ÿ|3�üSãÿ_áßØL/¿ÿ�Yrãßˆú_ŽÁûüÝÈmºü?ÄE/§ÂäŸ �øŽˆäGˆ×a/ñk+È�›ü†„V>�)ø·Ds!’2JÞGˆcá¯ÿ‘G.?ÒùuÜCæ}*ãØcÙÓ�<‡¢Š9Æ=Ã«Ù…ØJÿêÂOöŸûÿv�/ÓvÿñOý"ÿ«I} H>ÿÿò@h÷ÿé/ r�È)A±ÕqÿÐ ¾žãxˆˆ«EL²×{AlD d²vµf„„°åŽŽˆà³È€²	ŽM*6-¬Ð™€Râ¸öBAßˆ²cÖAl69„äW!�C�[
+;�ˆâwâÈd¡ða�¦A{ qÇ&è0L�áˆ	�<6Ü†A¸O_û»µ6©\Žˆô±ü‚ÙøOÁ;EÓL*AB¨_ûŸ‚9rÔ"ŽPå9Ù‘,†Ý>« ¼ÈœCjdY�l™d;ªE:Q‹2,È¾qý¤c�£»úM#Ü�`ê@ðÐ>C¸/ëÙÈ³"Ì!¤Eò'º‹29¶�h3AÛU1�Z‹B9ùdt|Žhl1¦´"úHW\‚‡ xAõA•Õ×Ÿ7ÿÈà®cÏ84 ÐËƒI5¤3]·Ïùƒ�WrrœDdpZ#œA‚r‡ H?ëµþ¿ª÷ÂúÄSÄhq-
+FÃn#¤ÓÿÒ�(„__]zýÿý&s±ûÇô óÁÈÜ¨'‚|A$8Fh¸¿/	9à&<«"Ú�ÏeáÐ�ÌÅ8/Â"B=3b—Ëò
+ø¼4 Îæ‚Ý!øœžyVGÐ¿ü]è.¿
+”>¸@Š‹ôª, ÂA¨FÕBhI¦ƒXMN!„!ê‚i‚”0˜B@Ò{A„/6&é¡ÖÒhXV¢ÂŠ±QY
+X‚ú­±~Ad{„ŽŸ ÔâhÄôc½:/T;	mÑ�hÆÐMèÇfÝ¦¥ÛEçÂœTbÚ³oP‘‰×
+]¶ƒ³{waL{F+
+qeç}a<�þ“ºÞ? oš_¿Âzv`Â¿ÕÃ¿óf›f&­f�éµ_pÌMá?lÝF&ûé6Ì%núg?ôìÝ§éÕé„:#‘D>áÕøm{ûõÿ��†)?\t‡øÇ·¶¼Z¿ñ×û}¤—û	ÿtë_§‹Õ‘ÆÇü$×Ql7u¬ÿ˜Èé~ßþŒ×Ò0:_¥0 _ÿ¼_Ú¯Å_ÿþ!ûëÿÄPB!‘äGa±¿ÿÿ¡\6X¯ó:ÿ0éü¸_ü¸hòázÿÿÿ„¿ÿ˜Á–#ˆP�ˆ†G€i?ÿÿ‡ÿ¯ÿŽ¤cÿÏ!]ÿÿûEgÿÿÿ¢ïëÿä4‡,}ÐL¸dAÉÇÿd‡ì�ù‡oUí²oäŸí[^²OÓàˆü�ÿý’[$?_÷ÿ}~¿¿þIûeÅxA0ÚwÿþÕuíïõ´¶ëÝ+	}¥ý­¯ÿkÿôÿ0›×ÿÿÿÞ­¥±¶SºA±Çõ‡ìW�Ów_ÃXõcÚ¦)�àþ+ía´÷^Ý®¸">þàíö°û�a7„eÃ 4¾�ÐBôÝcbí6“i4Ø¦¢ªý*ÒiºvÅ~ÃUÛb¢Øí&:�4Ø¶-:Äp‚l9ãúi´Ï+iªi4Ãia˜A§jƒM!uvÂ‹i…M1H0ƒ†fõQTÓ8”[Ì|5�8½&�qïÈ†�à¨8¸ˆa""Ðˆ‹B"ÁˆŒ!A3DE˜Âï*È‡ y8A80Èlr“ýya@ˆŽ±~Výu­ù
+;ÐXoí—kÓÈ+ŽŒñÖv¬ð2½>èˆAa¿jGŽ»mW„•‡úÖ8ŒÂú?zÿBBßAÇÙlh�àÎâ6BŽÈà¶
+œ�Æa&ÕüŽ	A0ÓDä
+Xrî©ƒáÒŽï	Ù…†qÈ+AÁ^Ü‚£�ƒ‚Èý&� LŽ^Ó	ªè0»„ƒþC$G n9�È‡z x;N«ª#™.‚m÷=ú©QÖÜ�á_rpä
+¡ÝÒŒ�úEŽpÈ°Ã-ÿï_ÝrÝ=D#s yV@óvÈCþþ¤6Ý5__õ§È6Ž�3Âô¾#«#£¿A—dnw$àƒA�Ðçrt ÍÄà¨;™Â*È¶IÌ9[ždà†g¹œŒs:ÎE‚(åŽA¦rPA‡Ô–y�à… ÔîB;ôaØ^_wÇˆPŽ;úh0…„hø!j˜B"
+aB˜AšfäÂL—‘â„Â&!³i„vyVƒ	åa.‘Õ2ì«N,k°J>•xeÀõÇÃ	ú1´]¶ EDãŒ]…hÆÐû`‘�ªríè]¦‚Ñ„Ð½&“TaÅ§1âÓ¶�4Ð¶§ÜV[áûywô¾©¶oIBúg<'~¬3n¼ß¦Ïf€ìÝzpòóÛfæÎt]Ñ‰»¤œÛAùwtšÃ
+žqeæÍÉéš1=©Ï/\5„¿aá>×ýhwBö›ïã­¾žÖ½¯^`î½m7Ýnûmo¤«íLN®¡6®ïÿ[7z×Ãþ‚®Ã}ñ_Šÿ0a~+Zþ¾‡ÿñ~Õñ…_{~/ýøc¼uÚQÇ¾ï£§„±¦†Èè/ÁÇÜ¾`/ßæ}_˜	¡OÿKõ©€¿þÿ·^\×úóÈ)CÏˆlqù�·_èÇ_¿_ÿõÿù�;ÿÝ¯õøoåÂî+pŸütÐA0Ødzô½�$÷é~Ù!÷ÚÿÿþÿÿÿýÑt?a¯íýÔ÷^¯ÿ¨$°_ÒøWÿÿ¯÷í“ÿrO¸DuÿðEÔ�ÿÿY'V+ðDwü�ûí‚#ìÿäŸ N=†�M†^a~Óô\(¯KûŽƒ_ÿ¿õûûÛÿÛïÕÿk´�ÿë[Úµµÿí-*ƒ.‚ÆG‘CüD=‡ú
+†ÆÅ*æˆ~ÅzÚpâ¶ÖÒõX Ã´¿¦=N:ýúÇ×¬›AXq°‚aé%û7ˆrƒMEGTÒv�Òé4ÓM=¤âƒš¼WlRa=Ú'«Å5
+­Úö-:íª
+”>»#�'b/Û
+5LÞ¨XDG×!¥�¨±vši6šâØMVÒ[Wh[7„ÓU´ÂieþÜ&.¿ñEÊ#0‰!�+ˆ‹A¡DeÉ�ƒ°„ ÐÑ�Gdp"@ñŽ†`ä' xÇÈ*�T#ø}ÄDU¢`^< ¿aðˆ=ú¥„¼‚Øj»Þ‚ü7©ÐÔVƒO	~pláœdpeí&-hŽ½ûx+
+ü0¬5þý‡­ÄGKÐ_†õÿñkKðË†—`¿òƒ´ ‚ÛÆ¿ô…·g�KóÀ”eÀðhµúÃI†	y°w xl²œ>‚ðAV¸]�<È9îAš)Ã< ƒv¾Bª�ÖŒ(L&škca&îG"8)õwõtc3OÚò
+¯ ƒ.†U!ðîä;ä]ñÚiÈ;Bý4 ¦;o‘Gÿ÷÷ÁÆ”|rÎ‚ÈN@ñŽÃ!°zÇÿ]«ü‚°ð°—áµkò!·‚$.¤°ŸK"ŽB9ó<`Š9œ†Î"údnA~/æx Ð8O;��“pƒ27 Öä["ÆA®Ô†�ç²NMÌäG Óy+Ð4œ ¿ovG"8)ô, Âi Áa„XA„!’™C¦0A…	ªf²|Kî!„L,X ÍCq7Mƒš3ŒØ�?’€†XDá	Aá´Õ/Ã.Õ¯Ñ�£
+‹Î^£F7.öŒUF6ŒTb°‘�¬¼ÑŠFPÂ´a5Ù³	5L!hÆÂ1»Öcqv>ÑŽ>Œn…p‚_aáZöa´›A:^ôìÙ§^aûfêUV“½6Í�Ò÷I´]¾aÒm®õ.î‹ÙõIé»i¤¶m›I¯9]›»LÍ}�<5ÞþøoPFcþêø,1ï´ñö·oxÿWx÷úkëþŸÞ³vû0~Ÿªö¾¿fñ�<39>ðAá—Âþ—÷BÒâþcëý/ñˆWñ¯ê…ñŠ·BúßßúÿÕ*=×öþ¿ï®ƒ`¼À/ð¿ÕýòâT«åÀ�üÀJ_Ìµâÿÿÿ.†�z ¨;B";c¤qÌ?ÿú¶ŒKßÂ7ÿ]ÿæ‡ÿõüÀN¿o£Ñ…_¯ÿþdx$!—ÄŽ?ÿù'zÿ$?ÂýŠ°ˆÿ^»ŽŸ÷’ÿÿÿpˆêF?QI:è'ý}ŠÿÈÇKË"ó8ê@ñ]†Ñù‡ÿ~öœw[ì›ÚúÿZýëÚÿ¸"ê¿Ù7þü“ù'ûV×ßýwÿáÚÃù˜¦b ÃR?"aC�10�8FbÌ™Š|CÀ`ÐfaQ˜¦cdÌŽdYßE™d_ÿ«â¯×m&?½t` «^ý�µÖökì4¶ÿµ°ºÒ­þ¿ú.úðÔÏ¯/}™‹¸²,Á‚¨29Ž¤Y�ãÚŽ„8íÁ‘Ì`¡åÑÁ……žÌzk
+bê8»Ž“MˆzÌÊÅ°ÛJé‹‹ŠŠ†¶Å6©§qñ]±QV“±
+‡ØA÷wz4Å¦Å&
+ýÕy1G°h.¤Èød	ßBÃíS8…´BçBá†Ókvš¨Úˆ´Â
+ ›I¦ÓLVÎ%H8ÕB!°ÓgZÃ¿Žá[VÇ|XA˜Âdpá†„DFÄ2<i©€ ƒ/Ìa4ä3¦N-¨m0š¦MS7©8g7«XPBÓ_Y
+aÅÐA—¬&GŽ@Ð;‘\†HŽ"#�< ”È
+ï�Úrdá"c�<œ�ä=â+ø¥O
+*¢üžWäxyÇûÁSJ6°ÂO	ÁÜŠ8A¬l&>‚¯é†Ì~2³ØP¡äóÂWý†ß¶ËGJ�­´þÃCg”|DG¦°‚ÿÃjÈà„pUúC¥_í©ãÿúB#ˆeÁ’ÿæ …†ÁØû#�éˆ3`¨mä2@±È4Ž@ðÞdqÈd¸ä2C`ú�WvNg�_�É
+±ÌqÊ‡À™˜!­,Y‚d4AÁš�WÍ!aƒ†¨j�
+%„×_]ð�o$ãó¸ÂÓ†éË}ëÞ�ûN‚oAýoþ­nAYÃnÖ@ðÚqÃîápÚAÂ(¿W_¡÷H†`ä' y@ñG yÜÀ_è‚îCUó9?‘¹
+¸#ú"�ä(þA”u"žAX}Bõ¶F9‡0ÿåY.Á~.Ân‹Þ^Z.¡\Ëò¬¸0ŒÜ È|°F†xÌ#�Ñ�JÃá…q¯;‘\¿r¬†ž Ë¡ð¼3¦2ì«'åÁ+"¹œƒxŠ„¿è7ñ‘Å|Z|Âma0‡hÂ„Ð"¾a}L(]4m4ÂéÒ6šaî,!ßÂ¦…„Ó¾ÓAÚi£	¡z ÂÐ~¨/ü2àÒmpmüâ£ÐM½KÏ›šMži5ÚZNF+½8fÒFa#ºi›°­Ž+A…V³ôc«³�­S
+›g•}Ÿ10Ád#A¾ÃCá	¿ôÝ_íêá˜nŸæÏTÿó�öº}ê©'fÍÐÕ?ÔÝt¹‰‡Þ­®­ºt¸_ºM³u'~!¨?ûka Ûÿ\t‡¥oébºþ!z}­wÿÿ­»ë|w÷×m
+ŠãÛ†?×ë‹„½ü7†˜E@ÿ¿Ìó/ùpž�Û~ÿ¯ˆ/kßÕýÿD/_Ë„Uÿû ¿ðË‚‹#úFGm,�Öø­]F?úÿ¿ÿûzÿõ°Ñó�o=[ò
+Ã‘Gp�ˆâÛ—c×÷ÿ¯0»þ‚ö’ÿÑ�±_ÿÿ EE÷†ÒÿÿÛÿúý%A
+Á6G/õ¶H|":dÝ¬�÷^Ù7èvµ÷ôëïÒøZ_ÿñÇý“Ýuò1ÓÛ&þÿý0�l†TÙ}­­«kÚ­õk£Ÿúÿ÷ïzú.ÿÿôÿé~wm/ÛT_}õ˜{ßûõÐD2CZÃ.ûÿqQÅljÅp{Køkñ†(Ñ¡¿ìÿ½~Æºï‚qJüU§oßß[�Ûã>A@ðx"ÃÇÂh5p“MUÛIÉÃ‡ âØâ"Ø¸Ø‡
+†ÅÕˆ¾!§_íkÚQiºÜ:M8i&ÚIìh<"ð­)�f
+õü[ƒw
+m Ã5ØHXLÄÙÅdñ˜Vª’—ÛWv„^èCM¤-8Ù¼Âì.ðkâ¶)
+„ž“. ‚Wivö¼D0ˆ
+nJDGeàˆŽF:DpA±æ°jTAÄD4Ðˆ†‹ƒXâLä�NA!ÂVåÁ9¿.ÉÚ¦D…‡�ŠOˆˆ«�5cún‚ n9Èr“¶)—3áv_Úk:`Ï7ý?´¼Sëû@Š�AókT\Â9Õ²£þÅl}øA{æÐÑµê>¶»Ùp´a+“0AáãæÒ®kÿ›YŽá…ƒµ>©~CYÃp]_úïý~ËÅËâ#´ÖgKýéöÿýÓþÿŽ¿¸†µí+8ëUÿ3O�øïoõ>¸áÄS±Tœ|mÿÆ"4k„×³
+M?ÞÄDF�á­ÿ�[î´C$ÞÈ
+±ù�Rµ!¨ä
+¨ OG!l‚¤V‚Ë�?rÈ±Í†H)¥uP¶5PL)üMz§ü†H*Ž÷�<5h>ÿ…ÿÈd‚˜â?®Óã´Hwvˆ5;Ìrc¸h�ÀïëÿÞ¸Þ?Ð®+øA~½k®þ½/ä!ÈC�<�"
+ƒ¯ yVE‰¡ÙËry|IÍvB9h2ÜŽ®g!¢òVBBç‚Ng&ämPdàuÈgàžaÈj¹œ‰
+A r7;åÇþ–@ñŽþ±ai„ôì¬´ÂƒM0˜A„,'„QNeZ,!&A‹'È2S%„ ö˜A„0�—‰ â;/‚h†�FÛ^ƒÿÒÿÃ£¹ŽŒO„…„¥Û´c£4b†
+‘ˆ;F?1Ñ‰¡÷ªŒtc Â‚F6Œ}¬+Tam6½ðŸ[ÇUþn¤ó¦ÿ¦qY²Øf-6“UïNÍÝ½&6ÌÔ0¦›ŽoF.ÚNŒMÃTé8`‘†ç…8®“³uvaÃP‘‡fÎ‚¬†‡÷þ»	ûªO¤ÐwWÛþ´ý¥ýy²¥õNÿ_¤ìÜø´¾¶¸O[×‚ïéu@ð$ÿÿ�qŒU}~!|B_ÝnýëoÿíÄ*Oôúþ·ÿv?ÝÿÖ¿„ÿï08_ïÿè¿ýíß¿ÿ¯aˆ/öÿ0'ÿÿaüÀO¤¯û_¥éõèÄ»ß¾�íéô¨½í/úþý¹�û¯ÿïÿL?÷OþüDRÇÿì�þ—`ˆù„ÿÿAlR_én¾ÅuéþþÚ_ÿøDuÿÿ°ÿ÷.…kÌ'¨�ÿ÷¯ë¾—úKÂ_ïô½×ßúðÚ]ú_¶¿éíþH~+ßÈd†°ÿØDtÕ†	iZ
+ƒKoöÒ¾ô\$ áÿk‚zëþ¹�í];ÿ†»ïÿÎïì0¾ÿí’Âˆî)ŠŽ>î­�J-1é°Òî4äíÖ±iÚ{ãn´¡ÆÇ¿pÞ�ÅCj­$ûOÇömv™ÄƒH8q„ØHSÃfôÕ±H[7¥mŠAÛiÅSlqÐiÐlRqÖ*-¯Øt˜AÃë!’Cþ"ÂÂ….Ú	—a2éÐˆ†…îS´"‹›j¹°hVá—
+c	ª6—H¸(#³‰^-0ši±«Âþ#0
+HDR"¹Á»‡ x58ˆŒÀÁÈÄo¯ë]hq y9ÈtaÈ1úîí(ñüu¿UŠ¬�˜/�<‡3ý^¶�„Oþÿða�©1ñÅ=úÄfßGÞ¿ù€ ~+ÿ\°Ê‚Ü†‘ÊÃÌ†¸
+@#ŽA¬	C(
+HHU�ò©‡"¥~ÊéhÂ;2‰˜…d4ÿ�eâ‡;�'³AhˆAC�ZÃˆŽC$œƒS¶T&ƒi¬†Hmè ¤Ü�à^
+öAj69ðC]È+�Yr;ü}ä¼L‰zv'üÆqPû�V&Œl/î@¸ú¯\&ƒ^@ðSq²èÜÒmÜ‡v…¥hƒS‡v+÷ýzýüEGÝ¢ÐïŽ>ª»÷ë¯�ÈÉ9'#²C�$r+‘¹ˆ#ra¢ÈÜ'ùà‰>%„ ¨0ä²¬‹„
+rP¤¸‚9, –EtA—Šš¾AˆA–9‡&ä3`¸*�@Àá^sŽ[˜rC�Ïx%O‰a< x4âa0ƒ	„Âh‚×gãa{'d¬ƒ%“ãba=4Ñf1a,A¦	„Â
+ô÷ý^j„XA’ƒYV!a„6Ï‰L! ÉÁp˜NÂ”ôÂi¦ºªj�èQª…M0ª�ÁèÂhÚòóF&¡YÏ/%˜Û¢ïËÙzŒ'	„ŒOëÓBÑ~ˆXT-íªŒpÂF6……úsa#Eú£^£˜ÚT=L&aP"¢½**¨t¨F6õ1¹­ïó	½_Ã0F(v›Vƒ0IØ]º´ºM»ÓuþŒV{„ŸfòèÄÝœWfïOO¤á˜ˆù¸çvŸÚIÒö­SÈÿýÐ_¯è.ë@½ÿÞ‹ÿÿÇÆ×íÿþ¼{c¿úÿûí7û�nÐ}¯wºâñ¨[µµö~6ÆÄkûïºí‡ßÿ ýÿþ`Ð‚ÿÿâ—6Æ¿ø¯¥ê!~õ[¿ÿ^?y„Gðàëÿ¿ÿï¿¯þþÿü¸gÐ¯ÿõ…×n¸_¿ß‚ÿîý¿IØ|ÀOÿ…æZÐ‹mÿ^òÝÿ�ÛÀßûkßƒÿWÿÿh»ÿû�ÿÃ7¯÷¿£ÿÑ�þ—~ßÿþŒ[Óõ
+†È
+3û¢½ƒëÿê¯�=Gý~ô®£ÿü�ëÿûA}“}Ãx"?ô�--/ÿÒúÿb¶ü�ÿÿÿ¿¶HvÝRGÿÿÿÕþõûÿþ×£ëÿöMöÕWÿÑpÏý´²Çr#½¯ßïûÿú_×òážŽý¯ÿé}–ÿÚœw8îêº¿©nýÿ�eÛÈ?Öýùoô¯µ¯Ã
+±¶ƒUõTf	Óã»þ°ÿz´½}°Dtìmtõ´Õo†Çÿý®Ç~Å_x¡±Q�ÅF±±HTqQQ¬lR¡LtÅ5¦šlRmD^ª�ÁñpÚXáÓPØ¦Ôœ1IÄ5X‹¾!®ž«4¿¥TíU6!Ã¦.øáêÓ]5m4ÓMSVÓÛ´í¨m	„Íæ·ôÙÅÚº�¦šj)]8‹§M¤-;‹†œm“B"Ð{6•4ôU†@5AlD0ˆ(â2ãb"B ÁA¡`ƒ	¡Ë²;7 Ë†‘v™.–#.q¡airá¡Âf0²£ˆŽ"´@Í8r``×÷ñQ[UƒY°ñì‚­ž,ÙùðÞ’z¿!^Ÿt«iH5¾üQ	† ·"kLø_tNËóÇ´¸AÌÕbÓ5Âq~@Ø;tçþ�¯lÆa6Ö]tm[v´ª¸_S0¨_µ1˜ÿ	]÷þö=ŒkÇÿ hã¤šû·üÂÌÿù�R€ƒ#²®C�‚ƒ‘Á¡È$!ÈArÑ�÷÷z#®Œ/Ýœ}ÿð¡4xPA¼éBf¼*…M[UÂÇ¡Ä^¸">>~ÿ¼½MU*˜l3kª½ûªÚLEhY][HGä2AQßbÐzm§¢7qh‡wvˆq`™„@»†G‹éÚdpö#¯®°�šXÖîÿâ¤
+A¼�þ?öBŽ¸þ¿ÚážìŠ9œ†&x*Ë‚< D3ùxFçrPáÐd3¾®…dÇ#rÜÏçÂì��jr8Ì:�Ì«"þaÈeñ„Ôã—„ ¨/_‹0BÐ‹	©ša!ý‘#ü|(BÉr÷„®=—Ê>! È'-b(/–Í`ƒ%Èh0†Ga,Ç¶uBÂ1QÅÑˆ=á‚¨n—]…[AÖÂ¦·MQ�n¡PŒ[
+œ½i¤m4ÒF,‡z›š[7fÌ)·ø+fÌÙ§fÃ	½H/m¥ünÍÔbýÓµHÄúaMÖ18WO8›Ìuwá:1CI6·ÿÞë­ýõªú§é¶×ùŠõÿ¿½Vë×øw^w§±Ò[®¾­þ¨Bÿü1@Î?¯¯¤ñ_áýÅ~Òõ�ñ_ÿÅ6|j?|1ÿ	^Ã„?ßúí�á}öÓÒïü/ÿáXzSuöÿÑ�ÿáºþ¿Òtý/ðŒ×Ò˜ºü/ÿáC¿ÿXoý/ý-òOÿéihão×Òõb§±ûèÅëÿF+q_¿·ÿ_ýçvô½þõAt’¿ÿëýë#@¿þÿô³þºdß¿&ïØDuÓPDuþ½ì/ßõ¡™Ë}'Ý/Õ?¦‰El5Ð_¯÷õú{L4­,":×¿i¦Äz¦šk
+&)a¤­Òi&…P„ã bÂ±ûwŠäöáÚ
+5bíVÂqñ±ÃcN´…ÒœDFÂ]ŠA°w[Cl.ÓA é;®©¤ÛBö"-â®6�¦¶“ŠÄC#‡/‚)È*CB!‚ x8ˆ‹1+]ý¤\Œ6D¶7˜FÁËá3zM,Ž–@ÚŽâ"4@ì
+F°T•-$£êšèXX�ÿä2A�r
+ŽAl(øA©Ã*
+à)ø!¬>
+˜UÁH*9|Mù�´CYÝëI;Ò!¨8{ß Ã‹¤›d
+CTr‚Àþ¾¿ë.í�3±Ê¨&ä2¼‚pL�àb!©Ù*ÂNAS\Ã�£ëë¥Ná†©Ááunô�l< eá< ÁC¹à‹dÍ3eîx"B!£Ù¶xeÑŽk"ñ^{.ÉANJcÉbœÌ²p\°H%‘æ=³Šé6å¹qÃˆ"=vba¤·ôCN4ÁAŸT'„, ÙÄštÁíÚÂ!a0¡53L*`†	¥íŒ»ÌOI=^Úô¥çx`‘‹°¦öŒMžM›»ÌO´cmz—m®M5/tchÃËÍ„Œm
+ú1´aQ‰Ëßo÷ @ç}2
+®EuÈh²?ÚÞ¤A'­ý&Ù°êŸÚuwv`þÍÔŸý[f
+“ÚJÛ6jý]éÃ8‹£Úwf§H?íiyÉÙOZ“ÂÐUé‘x¼,å@A„øOÉA�OeP— ì¨%ßDx\&bÕÿÿÇ\ŠõÇ·i ­øýRãâá
+¿ÐëÖÇüîé4{Oº¦Š}£	•‰­ÃEÿa;Œ'.›Ë§ªh4_Ë¦¿÷ÿ0Þÿÿë¯Çª]Gÿÿÿ®ÐXj—£XÑ�/ÿa#›!ªtì$c£ßwfüÞ˜W/½ýý¨Æ÷W«õúù€‹P�­ü¸[õþÝòá2à¿—Fþ`N;}õ
+/ú˜`¢1âëøcµ×RõoÛÿ®Æ—ÿÿÞè.¾ùÌÞ‹¡íÿÿÿÿ„c†ô¹‹ÿÔ0Dþ)[òãòùÿß¿ÿì{¢!n\×º_ù!ÿ$?õÿ’÷ù„âš²CÕý’ÿÿý-·KÇéf7.(ÿï_Å~¯û¯åÁÿøJô¿¿þ×îÿOÿúkýßÕ<�÷Úí“ÿðE×óú_±×xoÿ�évÂ#¨"?ßöGOðÅï¿£‘Ó²ÇIÿ®ýŠÕ°–šÚøaa¿u÷Ôukwkÿû
++ÒNýI¿]uÞË"=¿»[_µl-Ùžÿü WöXûï¶böªXë„Ã
+xqzwh[­±_LRjÝ;VÅ-¨q_¦©¬S
+8ïÐÔÐž�=û;¦/¸ÿâ¢¢;õ0á×MaÚö_w™ª�íŠ	´ƒ†[³;9¤âÚa4í&ƒ†ôÒm4Õ4h4"Ð·bÙÅŠm*ÓN/ ›ožÓ�»Íê.""�‹ƒˆ¶)< Þê"©/ÁDD0™�ˆˆhDA„#"BÑ
+††ÉÔP„5µÿ�ÛT0MjL&ƒA¦g—AÄ[¸ˆj°Ó?—A5YP8ÐˆËÒ ^	8ˆ‹�YŽÒP÷·[k%k¶”SA´éˆâ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù�j¾@åGdsÓÓð«´<¹�KÐ/Wý"%Šõ„µÓé_KdtýÇõ.ý_K®ÿX¯ÚéØXˆ`±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà endstream
+endobj
+44 0 obj<</A 85 0 R/Border[0 0 0]/C[0 1 0]/Rect[103.07922 540.96021 113.51953 547.43994]/Subtype/Link/Type/Annot>>
+endobj
+45 0 obj<</A 86 0 R/Border[0 0 0]/C[0 1 0]/Rect[153.7196 398.27966 173.75977 406.79956]/Subtype/Link/Type/Annot>>
+endobj
+46 0 obj<</A 87 0 R/Border[0 0 0]/C[0 1 0]/Rect[306.2395 527.51953 309.83972 533.75977]/Subtype/Link/Type/Annot>>
+endobj
+47 0 obj<</A 88 0 R/Border[0 0 0]/C[0 1 0]/Rect[511.19934 536.04053 524.27966 544.20007]/Subtype/Link/Type/Annot>>
+endobj
+48 0 obj<</A 89 0 R/Border[0 0 0]/C[0 1 0]/Rect[328.55933 525.60022 350.39905 533.75977]/Subtype/Link/Type/Annot>>
+endobj
+49 0 obj<</A 90 0 R/Border[0 0 0]/C[0 1 0]/Rect[353.99927 525.60022 374.99963 533.75977]/Subtype/Link/Type/Annot>>
+endobj
+50 0 obj<</BitsPerComponent 8/ColorSpace 82 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 99/Length 486/Width 76>>stream
+8;Z\7!Kr'X%,;rcs1c7HOq90q!3(*elu]7fZ3fhD+OS3K`l?!uJG1kWo>_$)_e^q_
+^>p?Ylc;L*HO:7:?9e%1@%8Vl:(+tCiLNY5U[jmMiYaSt&6Z4"i,f!a`>l;:\-XMK
+EJ,P?cI"9c-mA^=Z_(u`pi$I!@>;'Qr^Ra'q9hrcYgPMM39;;e;Wa-7bAbobl?!5;
+RNBRM!M6?0KV[dJE(PnZn7bh)Y)b5>frst\U@^t@<0:?mAa/46*hEk?ljW,!<-VB)
+N$H"(pj'iInunTB)Yt!_;V#;ok_H&*3B&SaT%U@s%>N;6dQ*C>rjIFV]g1J,l:,#\
+q!'4$"'@&<YR_qUVBNh>"i3Rhbq!W/R,^O+.^JI:<[:p3@<H7&?FC<n`rZtpN'XVb
+^]`aWV*&h[22i"]b_oY24V:5e=DB?_TsZgk]_n`RjUXgr&m`0lf6DRIaV?=q&S)e8
+r02W=&o(odj1jSl!!0I$eG~>endstream
+endobj
+51 0 obj<</Filter/FlateDecode/Length 10>>stream
+xœ+äî|endstream
+endobj
+52 0 obj<</Filter/FlateDecode/Length 6684>>stream
+H‰ŒWËnÜÊýýw¡©Ýovg—›À€d‘@A€HwAÍP“r.IYW^äÛSÕì‡”=¶!�¤ªîêªS§N±‚ÁßáåŠmqõåÍ¡žÚoÍŸûC?´ÇfÚ]1´W´ …f¢¨,'¼š«ç«ßð„ŠJø[÷««â–ÊÌü¿4²Ø¯¾ÜYUü¥¿úûÕ/÷î,ŠW~ùÊ(\~ÿ<ûP
+Ÿwð«û÷B÷Cqe‰p¶–¨ÂR¸XW~t¼*¿¶/¤¸¾ÿœ>`i¼¥-Õð5™VÎ.¿bq0c2?”ãkÿ>×¦"¦œ^ë©¸þõþ¯WàL­µÎY0Î=Ø÷ÏÅµ"²l~?5˜±Î{,îS¤ŒÏ.%Ø=÷Ã±ÙÇ¸x8—2æ�Þº}3¬çDÂIÞfß>?7ƒ»‘…(ˆÂÔÏfu·>ç–sÅ2Å-#ÔH>¿¥é¾µCßá# ¹·L—wþÏ­KF;â7’–»zlnÖ‰a”TÔVáÚÃØ¯/fÄVF…äíúahv¦âÖVÄ–ûzªá³†Â”§¡ÿÖî¼“YÂË—¾ßûÜ2N´1£g\‹ù¾8üÞë©	ù`©déÖrÚ>‡È‡¦>¬RÊˆ®*ï‡ÃDEtùÔLCLóˆiV…ó�Ç'¤HœšB+êá	 ›´Ý¬r®ˆN¾ÌŸ«dhlº±‡@Ö^±o»—‘ÄÀä|zþ*K¤?\›G	}†qýB6¢âëö¡CŠn«O[°ÍÒûÏT";ƒ¿ F˜`óäíP¯ªpÏ¬¬ÆÂKÉ™³½m6q&T¨8ã©~jíô±:QÍE¸ö[=´õÓ¡ñ/ç4fLû‡ë˜.f‘34ÇŠâÃO�eóx}q)�<ur(ëqìwm=7 :à½�^ñ›
+R\Ö¾áÜI•öTîšÃÁ_kç[oÌÝd ¾ÜÚE ¿_TW,Ê3/lþ5‹Â��°BUÖwÏih‰ÓÁe©~Z—‚Ne$Ö	ËÊ¨ bY¿
+rµÆòä†œÍ˜c¬&Ï™®°¦Lº>£ÐÝ›)[VRIÌo4ÞÊ%b€c¿Û½�Úf³ê+u˜u·(ô «“° ¨eµ¯½|˜ÖÌñ!
+)^ÀpYö²i"¤ó§>LÍÑÉ…
+Â²OÙ&\	ÓnQë[É
+ÜÛ|‹3ôËW�¿½"j®PÁ5Œ¯ìá½¸ðå�Þ’>K‡î™íe´Æ
+]x}í7¦qbO]fÓûÔJÃ(£f <Ì@¨»ÝŽ<CªòÔ�cë€Þ6ãf"JVÌA8-æ€Ñ-šÏjotÅ§@cÞÇ
+3s9ÇÙgWq8dâó¸28ü9Çi�zãô‚¢kÞñ32YÙv(Ÿw}·1s©N3w†‹õmRÁ„qa|¿»t²eN)M"Íw1?aöA`œ‘*óz,ïÖ³$å*¢‡‰eˆ§¡ýý#Öaš.<Yqn:^Û²ò€uG`SVøò}:(†0€W$�›Ïãƒã�k“iß5gd·À‰ÌmñiŸZågpÚjàjñ¼_ê�füÃìÀ=èò±ÔÍñAþºÆ¨$Òˆ0:^€ïÆ?F#5OB1s˜ÕD«œåÝ†ð†AŠ.yO(á$õÖªA�Æ
+z©ã_[1†à<4‚IÃ$)„•îáwçeú”PfD·OhAû¦r÷¸e08üû?ž>A9Y@2r¼hh6«�ôa³óÇ	À=Ní®>>Ö‰UÐù2LØ¶§S_ºéfÝçZNNÊ	Ã¼†E)·Õ¸Wº^àÐóš™œ"©ØTËNã‚ŠÄbž‘�ìbÚ9{¬+cfÞŸÎ¦Ý|2,¬˜ZX~ÿ¾¤Ë’“Y{á²”d´RQ’!ôq!”8«ž>û¦Ô‚À:£6Ø9ýÿ<¹�"˜FFØÂ+f7cz¹fzý˜'6>#µp	nM‰Í°rÞ&Hlâ"°ˆDœp“0‹’³�›bÎi¬'—ü³zþˆ¥Už¹óöÿ|#ÑY.�›ÞF·X¤@êúw·³ù�{>8ƒ.Á¨-+„®à½.äL	l”YÉ:±Ž^ƒÚ@ç'óK_Æ]xzAšOF Îµ§�§f£”42ÒË®NýP‡‡z
+ZØ¤[â)<k§™ü×ó¡²*ìHÇúDÖ¸ç«d
+M›ì…÷¯¾™®smžšG°(ØŸº~Jë–H‰5^C¨bvV*´‚“¯‡œÏ�§L,ãraÞnÌÇeÙp„'û—¦k†ú°Ê*Ì^7&g’zjvõÓ[H	Qi�I$Ô‘‘òÃÎ¦ ÞÒ}AÂ_Ò;’fŽÇ¦ß@LÌûÔB¢èl	=Ösäo'LV2€	^¾›òAJ�óC�Å¾^”Wˆ Y�ýñ\›A•
+Íð^�
+ 3Íâ\pË‘Âƒ«aLw»æÆkß©>eÓBA†
+T¯t;¼
++IíŠN‚lÐÁXS9]}ú�ë 1›×�tÒùuß/F”*ùÕ‡Éò,«iåýAí™š…ieìœ]3 z&D4£V#\’˜’åkûòºÖŒ Ì*8æ4ôOµ[(?B
+…W– W¹·Š²r±j†Ö€„R0FÊÙ¼;?óTŸ
+ O·EžyA¿MîÅ0sË©þoÓ%.Ê„93<©éþ¥Ap¹µQ3€#|çUÊ-É@Jb[�ž!Öeüœ–]ß=·~9«»W*ðO:mÆ¬'ÞØMŸ«lG‚Ñ¡�í°¸‚“ø°òõã„Vc;Þœ…„#tè¬0;ÏÎaV¨�¡¡Ù¿íH
+©.Qã-„ãÀ	Ù¡Fòmì¬¤®[(v_¶�%ÚR/MÎ¡#B.ñ »=Z“3èÀÑ,eõJ4ý×OÒnhf\�ãÛ1S"ïÍéµž¶F7£U„š[Ü¸YPŽM7"Å$ÂƒæÒ"�fúa­¬¡ÀÂ„Av Tœ:Èòy|È7›âš1ÀRù<ôÇùvt0…«·fN{÷3TÒÌzhê}ëù+iÔ 7ŽJ`°^é°\W-÷9�¼8:Ó>TðÀ\uVrR²:
+m?´[H—’†ÑÚvÏýp„…±ï6‡Õ¨A¤r‹�uw)ñnp§õ~ÏýpÖ£®Œz0#uTv[ï7UâžãSÛAÎ[^¥,‹ÏŒ¿ÍôYÚk™‚ÈŒ²÷ucÃ[¢@�ÜáTŸš�l¥ºªd¨Ç}è–ŒECxa%XC§;èß*ÂTå‡Ü=°`ÉCåjÝøƒ€$ät±},£7š†ëšßÞRÅuv2Éy�
+2åÙŽ[Ÿ�%‡‹hß?MuÛá¿�¡:i»§�åây;™`WÑÅñ�¥|¼#SÇ†ª’`5Þb–ž*n‡?�µÖùGß´we©^(xt°ÐÀ\Äûôãu`h³q_„!¶Ü»^ð¬V‘~š8�UÚ{Þ%¨)o„0üÃQ“lã$6UŸ‰á9Íçé°ßPnÊi©îSÞYsgè¨7©	–U¤0â–OÊ¸/¯1¼9òp©Ëœ�8ÎÛu�ƒ«Œá|áøXö—#KâÒ–œ½& >	ÿg¼Ú–ã6Žèø=„›„c®¤œ‡Ä±UÅe'vUè<€XPDÕÞ²ØE}}ÎÜg€áŠz!%MczºO÷9*üŠ¶Ûb�°\¼0íûË1ÎtíV\‹EŠ…Ê¹%ÆUa³a‹´Ô_fÖÉò®Díua±>,i’�|EÐ˜ú9�||5;­¤ZT6ž ’ª‚B•ÉNÿÏÓ°/è¡jy=K5û*±%�®6ej¥G„À×Ðë*e4Ø±$¤´!1Ê ëœ«“W­±%D-Œvá¶r^&¢E““wÀÖggÃ Ö~gso*0RšÍ�œù« Ö!J?#Ã_»ëÒµP¼­5XÜGãÄÙ(áô(¡z‰×T—:D±y©#Cæ²He—=ý*s‚?å1c–b`ç‰$8ÉÔ8rdEm)ãKiÇ³Ló
+«•*‘½ðx˜¦ña;,{ÝÎ½™þÙj[!�æwˆ›JMQ3å„wBµ±$º@&1å”"±‹uÊ!°Çs‹\"–[�$ðwÉ.ph«˜àÞúqr'šDÇ�¶ûýöþ—ÿF—9:» híîý¶ ø²,k}2žÿÙÛÄé<ö‹E ðP¶ç/~(ûùãa3lãÎ,(XyÓêÚ‚4p±¾ì×Ò‚Ì²#†ŒC€e�}ÿ²ÈŒWL
+¿xç^7û>à+e°~ÝÃá~_cj©Þ|Ñö±Š´Løs–ÞÚiÀ³`šššîˆ>�XìQX’XÃDò—Œ…�ž0 L*·nè.˜•,!‰Õí9�Ks
+¢�Ô“îtéŸ
+¦©�ú„„1áðk²!®Ø]i™”MÕîTD6òYËœîeå.Ó²—	½ïbÐçÙmù
+àìx4¡0êù:Ã�ÉÐM—“«ü¬õ5÷ŽT—HìOG²ò†3]ŒxÝÜ¦‰qÈVN-e×˜�iÃPqÖÈYb‰Fò¢4¢æYÕO‡ÝU(¨Èf›&9J,lÀñµ‚Ô¹l}¢×³TÅ”@Œz6Ô�uX£ýy8é¿p$÷ç%€!³B´—œ³¯C˜úNö‡Ói˜Ž‡ýÆ˜JœMW7ä/IíäOÐ©¯LyP0S™u“:†ñ$âï×�,¸¦¢x¸­·c¦DµÂI.ÀbÓ��ÍZ×n3|]s Ï©WWH6ó¥¨B
+?‹•¢‚g{Ý‰®–‰8ß–©–RLò!…ãˆ÷3›'CºÂë¥vÂCECÝ•ßíŽný}„^@TãŠÉ±…4ÅÀÓÿžvWE^‹NðFeAï_OÑ¾«¹áŠã÷òÓÐŽc`w—#˜K
+¯!é‹NÃ‡(Ü%Ø›yˆøô¤p]'ëy%HÑoŸ%p
+3Bâ®üöÝßsßèý›¤^«ö¦±íï¶ÃD²YzµþJŒ³$,$ÃÐð|<r¿º¡Æ[‹="Ý‹Í/\h�ÇOV…OPÅ#·þˆ}¼!1µk™ÅqŒò+Ò¸L‘ìËCU•«î2UhYá¦8„G+HBÍy«²‡öÅ›<ÌEš&
+!öáYý!×«'H“Uæv6Ð_17�T?RÐ¼"…×ÉÙÓp?åYP÷…2¢LÀD­JÅÁ›m£@íÿŸ¿4­ú'7ÎC¿Â2Ù�ˆÌ,Ï®ÿø´¶ñôf{:ïN–øš(BfÎ*sæûñCµ˜~>É”FwX-sfQTù=(oXË’¨ŸöÃz3îv6G·�/�F,Gç"Äï^–×ªÙ�¤$É��‡¹‚iœaÐ1¼IÏN;¯š0LXÉmzfg•~Æq¯±)XL�yKw@òO©´¡•j¼ŽH
+¬,VÕf�¶)š}µ‹ró‹Zµ5ÛÁ‡ÞCo}7Fkj|É!
+üÄcy�ØÑ—|cu~Ž
+hi¹”ÉYKSµx'²
+TF-ÚÊì¥ÀÏ/Øšð,ÅàxIÑñÆíÀÇÀÛÛ!!îË‘:Æ½zS†|·X4Ñ~(ßS­2` bìq3ýËKºD}¥Hsïõ³™Ü\ZR±+J�erü›¼:™QA™’“ŸóE¼Ì"šCE–„'ùÄx_³�
+ÍªF»7ÏË}oµªR•²’{áR™µ–NXãÌ)EJ…rÿYö1ª¥>úÝ¡ï/A.ÅÕÂÓ+Òþ/Ü$>Ñ
+—â‡qªºá�/»EÃgó§å(Ñïnt‹=ñ»m–Mr°ÔqìÉÿê˜!††¦Ì4”�ÐÐL#¾ypA4‰òÀ¥é5cÊ×`&&6»&TÊbWf‡•ªÝüAØ:†³Z2�ð…"aÑpbvaL§¾V'­^8£YNÕ[W7g*†Ý¯¾ëú'í$!n¤³uð™ ñKÆÃ�7"»»—ÓåÍ*÷%OZ7ÂyÒ`yÈSÐm—&¥¨•tƒò|8mS%£ç£¡µq€Pôm:“éG²‘ì¦é²ËQÅô$èöŠÆY�óÁ�‰»‘Ùñ‡¡ôdJ„ñ0Ú}²&Ú�:Òp�7´D1¿€N¥O¦ÜŠ©Â¹„tÂÓÐU•fú~¿(SÖKCmIž†%?%š£�ÔXkU#/Óœ‹_»S@§‘‡GÈw¶Á×âNVgÙþü·v]€l"SdˆulÌ¥“À5¹›-ë¬áœd§Çó¢Œ€8÷½é»ýìc$Åâþp^ÀËAÚ(ã	%æPŸŽC¶ÊLB”¬ºís÷2EZóZ–Æ¬¼ÔÍ³²mÝ�éÒ÷Ã4=n®êL¿m[Ó9™Teö4ÉÝ›Ö†k“a†úÎƒfÆË�¥žz= ÓÊJmä^€ª\¶Ýò�X(Šùwž†Ç-ªö-ÎŽˆâƒk{stÐ¬QÕâô}0÷O‰H$¨l}'·ã‡§³Þ°dµë^tKÁ=§s5oé.kJõö#T2ó¢û~¸[^E«¶f¾8Ý¬rh^ÓxÈ=v—í¹„º–	�[×ßÙg¨�}AñÖ£‡¾‡¥8´Ãÿ™‡`K __6�‹Æ3�¼`Öu!µjI%à™À(5ßÿçp¾õ¢?J6o)…Y.ß°?¾,·Ú+a6Ft#�Ïå
++;�y"½<žÝÃ¸�áH?Å+¡j>ÕÙNªª�PFì„|Š÷e`†õÇïcï	60^Óí4fkTgõ<n·K6Ã¢ íµ…¶¦9h·ø:ŽGÏÑØ9^Þ¾]¢9.rª5þ±;�G·Lj®N’qŸ”•Eîs<Ö<™Šñq13Š¬/I ®`Ý�ËÓá²-Ì?­S!á§oÜa-[£;æ…ä	±¼"4¢5ñª`Nfk¬jSÇÄSC”�€V…Í’-5ÿÁAÄ+g|�~÷Ö9MWÎf'“†ËáN«ÆÁ:ö²uŽÄˆ¦oˆ÷xtG�§·³–ði.Ã×G€ëâ#,Ð—ÄÍÍû“O9‰�Éîá—@WBTD÷ª+¬E3FˆÃRq'¬Â\³V‚T4Ð›ü«â+ÿëÓ ÙŸk*‘WßI„Ÿð9=^ö†J—ú›g“{*¶>–f3<Žû8ü	s®Ây¹Z€Zqj_³ºérvÃ%§ÓÕdÚ�%—†uŸ0ó˜dh&ªÍ/Ì�<£NxþXòu­[¿�á%wþ/ó;jàµ;Îcùû˜.XA¢˜�’µzÇkæ‘!ì¸NW$¼
+rNAN³$ð·©ûÃ[í§Us&ÀÒË3ìÎ�¿±²ŽŠ*‹ñ6‹ý÷¤ñl!ìÞh�u£€Þ]÷iÜ]v%ÈÚÀ�g"0Qh‰l:uûË±¦—4Èq-×¨€³¶
+%—o"‰K7p
+œÂX�X�®PœT½FÊ×=‘7´¥^Ž´YVP¦Î.]3*WÏƒÕ¨ùKxÂ;÷Ð�ýùpªtÓüû×sao@¦´$íÿŒW;oÛ0þùF&uQ$Ej(Ú"è�)ZEÒÁ±•š@,¶œ K~{�GŠN=K|ÝÝ÷ZuÆëJp9óAí´…Ê�Tß¦§Üjé¸ÈÉF(¨C/‚ÆK¬ò’DuØzŒÿw¬9¸�
+-í»ç©ùY)‰ç¹Î~§U'·àd®'úÍfÃ»››Ë··›·÷Âg-£5íªµÚD¼amãØ.f3ð5º©~ñþaÞ/.Ç5["Ðò|†D¦ª]­·HÞ*ìêµ-2å�ë~¶R/m´Ò¿§CŸ‘l8$Â»de¯ø±‚�KÁ�2rÑØ`/€âìt
+ÇOøš*„ÚC»Ú¸+UÝHÇ.§ýZ”A¤/žÚïÖ‚ûëÀg[Ä6'¤^i|Wµ3$·]LíX„ãàu3su0GêbØy…Ô˜µkuXŸv£’N[É‹èiÆN:5X}A²8wUóÑ%ip˜ËJ\Ù¾®^ÛçWz6ºaÊøà ÁÚí½�K·×crÖÁ!ƒA˜ÈD×})½‹pìT‡úòQpG¹•T215<|zÔ
+ÉÃ¢œ|×‡¢ˆè&m“Ð+¨¨}ØÈ˜­ëë~÷¨º€4 ýù¦ëbVi_EÍ|†b¯=ªêÔcTàRèHeýñ¨ÌX©ö¸˜Þ•cb5,ë/±ÿ‹Î&ØšÃ#Ôá|ÁÑˆ;Ÿ&-�€ôœÌ)›U„Þh‘	!—�km†x8#�ÃáÏŒ›Žc—¦ýðÿ®ß´Ïê
+Y×®5±.HÀ)!Žj­Œ¦�¢ š4ÂáíN
+ƒ“óRÃ%^5 -æGõ§[iåHÁeƒ×­²Ò“ ;àò~þ¨Í·ì„•*÷FyvçŸ æR8ñš0¶O:„ßÝØ»aâ0�H�SLèCýn¢D{©î&DÝÑ<o
+ZÂKGpûÕ°MP_z+­@Nn‚ã„U|ÀLÚÐÂkªTŒâçŸÃæá×&ïŒp"¢gç�AääÀ•Ò\w"¢¯
+I¥ÀQÒb!C/UíÔ
+êyRUD?j˜œV²rP³HŒ'é‘•¦É¢¶xò3?ˆ¬"Ñïýz}Ú+Äõ,<A
+<“÷õï"÷PVJ§·º$¸MÛö‰™É+±{;´ûCåt,¢l¬ÜfRÂ=ª[.¿üòdI“Ð4¢G{ZÛâW}J¼çt”âpÀÃür±\\_»Ui573W„&Ï!Ña6Èa£tÂÃ\6v�áªŒ6hm±ü|©I¶fÖ™[éò^0Í…£”z%Ñq¦ÖÂ„ŽJ[{i²
+ú‹™Ÿ¾}¿ú'À‘¦”endstream
+endobj
+53 0 obj<</Filter/FlateDecode/Length 150>>stream
+xœU‹±
+Â0E÷÷wT�˜”Zi·Š+\K›b$Mb’"úõf•³œÃåöô¢“¤ý¥¨ gà�š³²@É5äB›vMôWM0zT6fY£Ê±è”=¹×®ëp÷ÆÅpvokÜ0åÍY´>hƒj‡‚óC‚¨šòˆ9¸åÿ†›Š)è1ig#ïÍ‡må“:I=ýŽ`3Gendstream
+endobj
+54 0 obj<</BitsPerComponent 1/ColorSpace/DeviceGray/Decode[1 0]/DecodeParms<</Columns 1839/K -1/Rows 2377>>/Filter/CCITTFaxDecode/Height 2377/Intent/RelativeColormetric/Length 46973/Name/X/Subtype/Image/Type/XObject/Width 1839>>stream
+&  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä
+A¶1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü�4W ¶‡ Ôù0Òr˜ä2A]È¹g!¯f€A“r„
+‚¤'“r
+n@ð‘�[§!¥0¡2ü@÷M| Â(6°šara€Ó	êºëº1#—|‚ã¾×ÛÓ‚#¹îŒ|�#£ÝÇc�VxAØN*.@Ãˆ|3gk×\8ø´í%Ž“�×ôâ‹—ý!Zû´•[Ö×ñ\‚ByAÈH#s¹WL…sA„È(·0äœ‹d_!,ƒ‚#òvJ
+‚Ë€…‘\�Îäà“žd.²®ˆ…ÙðŸdr+™È/åÁ>@Ê™ß @è3A+#ƒÁâ°ã�ï˜rÂ]ä½NÊÂ äAË³A|ƒÊÀƒL‡À��¼n+aa„m˜ói¡i©P3q1�0ƒ\Ök0C0†«3A‚!`ƒZ¦…ª{ª»V"äùÍ¡ ÐµvlƒÂ
+5òc“°�D,`ƒ.ÕbÖ‚vŸHZj°ƒM=4chE Ð¹~ŒMí
+Y„ôbá‚šÌ'l$csË�®ŒmÝ¨ÅTmSF.ŒVa™ü;³uœòhÅ{ÆãF7/}Uß1íÍÉ¤c°¹‰µ1°Á#{M£´^Ç/6s†9éÃ?Œ;3G#›I´«vy4¤ìØ"·à¥ÝœI'fëîÓäsß÷÷­›´ï¾Ì›Þî+i÷Ú§›žêün“U¼ÝFþ�æÝ&ê¶)›¿C³lÝWjö›C˜vÌ…Ç»Ó	÷�Þý=¡�ú^öKö0Ýéº×ìIÿ÷­†>½uÃ~»ö÷JþÒ®÷SÅÿ\{ÿúOûéZÿUºU¿ÿˆ^·¾Ãlq]¿Ø÷ÿßÃü|A[æ×õ‡ÿýþ!]zßæéæ{ÿåÄýúÜÀOêóbeÂ|.ß…öx/¯°ÿwÿ_ÛÿÕ¾�ÿ¦ÿÛM&áUï˜ÿÿË„þÿÿëõÿÿw·×ÿ1ÿæ?¸oF?þÿ¯ÿ¿†ßýì?½C~¿íþ‚ÿôÿÿ÷ÿûÿü":ýù!ÿëûGíéz_†ÛT»ßÃÿþ—‚#ßÁþ‚Ãÿ¿üFÿÿÉŸäŸÿ²Cÿ­“ÿû^ïÿ×ý{&þºëûë¾gsŽî—_æw¿t¿ßýïµõÌ;þÖAÿÙÍvÿ]úíe÷ðÒÿíé°—ÿïjÚ¿íðÕ[^ÕÒá¯ÞƒÕ¿NÓ¾õûïþ®ß÷ýþÚ_h_ú.Ž­ý¿÷‡ú}Æ—iGküj°·_«kö›éÇ±_lE§|\]¥«î�5t¢=†•§Û—ª46¶°ÓÒ§ºÓN>ÒÚ[� šéÛWuÐMcM4tñi¦ÇIºh;i=äèaŠj£«tÓh'*qøMŠBöÚBäøôÃøÐØÞ£ˆ²°ðÓA´·4ÓÒÕ0™0ƒ
+'†™¼ Ä[†Œ!ÛI†òA„a2áËÁ\„u›” ­a Â ]ØLÆa28@„D<4Ë¢;(ZjßL"ŽÂ®ƒ#‚¸L Â›£ÈŽˆà¸!€0…‚ x8ä€ÌkEÇ€Ù"#ˆ�¸þšWñ„Â{ðÂÇü�,G x59À»ä
+A¤rƒhä2T‡p¹°'r‚¬ÈiB`šötè.¾Öû�<Ž Ð;î@ðÛwr8»ãzn!××õÿÿ x8øDuÈ†˜æÉa×!¶9äL%y!ÈH!²ÈðŒr
+N¤pDòyêFäsÁ(*Âø»
+º’²a¼y°Ð9s9;'¹~^‚¬!±È–IÏ„!§ž	A~0A…2
+ûû&ƒÓ? Ða¡AƒBC	½&ÓDðh5Á´Ô(P˜BÓA¦¿NâÕSFÓF:1ÓÑ…†Œmœi£	ÂF6¾ŒTôm5æ&õJŒ&ŒIœÅF	¦Ó¯16ÙÌXM6Îvóctôûs èÃï»£I·§§Þbl*pÎ&Í’mðÚ0é7Öé7_16n½fÍ[0õ9æ&{4|.¦÷IþøÒ½~Òt®lÍŸßPM-/ÿ„î¿¤—i_¯ÿ·[ïôÕÇ[ÿØâ+Uý†)>?ñÐñÿ´¸®ÿm¤ÿÿÿñþ¾¿ûÿÿÿn`|?÷~cKÌ	üBà¿¯ëèÚ#�ÝoôlNßÿú\¸OÿþÞŒv
+ÿë¤7ÿá]_úŠoÚ«úþ»ÒÿþÿÿÿÃzX{$:1vï°EÓ_¼à‹¯ð·A¾ÿ¦Hv?ÿý¨ÿÿ×Gúÿþ°D™ÛÕ/ýuîë}÷¯ÿ÷ëî¨-&ûû&úµïýïkÿÿæU÷a…3þg½&×÷µµØanÛMu_K½®îÁ7ôÃAíûßÿÃ[ØgŽíÿÚ�ˆwLRvŸ´ßÃKX¦)‡ÅÄD6"ªlV¬lTžÇ°Ì¡Á²œz¾¬4“M5X®þÓN¦œ5kŽ¸Âq±NÆ¶õ´ášyÅŠM¦®êÃM5wµHCb¢"ì4…øN6"î6™½Pi¶q%¦˜A„5aš&oA@ìÞ©›Ô!"Ü3h Ô¿h0C.9ÁZ6•ç2:0ˆ4Q¦qB,� „0ƒDEÈjŽC%Àˆˆ©ˆä»|�°6 Óô´Â\ºú	6+§ñM¬¡Èi9'ü�ÔŸI†—„ô�/KI´¼>¶�‚þúÿ l§ xvµ ®í��3¸ xÁx
+B¸R
+P\È
+h.?#³À#Cþ*‚ªëÞ’ª_Öîàˆ÷Èk>ÿ†9v¿ i@»»¾@Ã’uwÇôpÃ.¯×ýý} �ôBj“þ¿áWÈ$dŽBºdæ„s¹;Èf9åéûI~@Ì4IËsB‘]2VAü¼"¾D³ápO	~Jy‡!!eá8*+‘¹œ‚þ\à�‚
+2'“ÂNx%äø!a	’Â/—Ì#H^ãÐ¤¾Al²1Íœö\Ëâø&4àƒ4A…	„…ªa<*Â
+&øÐEBBi£	Ò¦µMUØL*„Ñ…F?z¤þ!„-B¦šzp¦7Ìm:fäèÆëFí¦Î0¦7°S{§	£©{AÃSÝËÔa·Þ©æ<½ÙÍ¤Õ?Ý$Luôm=>baéÃ7‹˜á„ŒV’vlÓ£Þ’m›ŸF+é8féêÃ7RwÁõýéÙ»µìÀt1{jîÓït@ð(ßC¯§g8fë6Iâºfío¶ñþú[¾¼Ûñ÷ô¿ÿ�n…×RoÒiRÿøb¤5]^È-�’ÂoûM»ºÛW×üzþ×÷¯õïÿâN¿×°Æ¾üÀ'ÿêÂVƒúaV8x§¿~ïþ)ÿüÀ'mÿù„GÌþŒ¯æíÌíÿáöÔ0é¸[b+I#
+á~ýþÂòàÇ¿	ß¯ÿþ;ÿéÿýþÿÑ¿ÿÆ&ÇzºI·Ñ�ÿýþáýýyèÅÛ‚+þ÷ÿÉ¿¥ßà‹©!ð‹üïÙ7Kÿáµoµp—Þ—ÿú~Ú×y!÷ûT·Šÿßü“ÿÿÛÿ}¯·kæúí´«¿ùp�ßm/ºoKþ·Ñ�÷º_kwìí7ýÿi{
+/û_¿Ø¨áîÚ_nê¼wÝþ�í
+{Hˆö@ðTÃqXh+¶ÒÕ×ïý{ªo×¿�Ž}Õ¦¯Ý]±IŽ>iÄ=bûÚï�»Xki´Ä2ˆ´Ó”cÂ£@Cqr ÝÂ~+â¥j›¦„kØé¨ ›Qw[M:†“UME•…!7BÚi¨¦�iÆÅ'´Ó¡ÿ~¡<† îŒw¦ñö›ÚŠŠM¤øŠ¦¨4Á8a3‰+¸aB‘ðƒ1„Å4i„ÐŒÚ7©ÌŽ‚ Ð‡k…A„"3fð™Ë‡1°`…œüº‡«"éNè&ný?ÍÊ¡`ˆk9Xg-Ä0ˆd�äÅr(ãN¢QSü\tùÁ‡3œ�¿˜
+`
+¡ëÛ]�Í,r Ðuj×yæÚONÿ†ô’â"9€OX!ú1?ø­Ó	y’‚‡ïöBâá¯ý¿´ÃÝ*Èºäc§øˆö¿„Ó-«Ú¢ÿÿ§¬GôË²
+ê�¤·þí×ÚZ43®4›°–@ñcô—ŠmSùq	|Ž‹¢8gVœVžìu°²Þ©DDC	„0´ý…è‹ŠÐŒÀ&_ö5½õøþ–¡´’üƒmÖÚé¶’÷„¶—¸ ’%�>ÒÛKGF*X�§Ó£àÛùyâézI?‘HÅ½WüƒXþŽ#`Oú# ²4� þª’ô•ù¨7´rÈÀ×üÔ¡>•zT©_Kø: —ü$¥ä
+€Ö÷U¤—¨]|� l‚
+ &Þ’^–‡iy°Åfq„üŸÈj‡¾ºÿLW£ i~A�ûxÐ3ºYNétÁxg&ôÂ
+:ˆfºÅZâ?MºôþûT•D/ÝïR£ã’!‡ª/ý5%„à¬òÈžNÐfƒYV<‚a�Ïf³aó	¸ˆ�þøL!}˜áB
+
+@òc¦‹Aï m¥.²ë1þ‚£k1Ã0ìò£
+áQˆ9¡ßFÔ�m/pÍßg“H=>ì'ê:pÌ¸'ý¦æ`x2ô·úêý„õéÿ}kûÿBðÈççí,Awýú¿ÿ0ûu_öOÈƒ5ë¢Wþ×ô°—û~þ�ÿê#½ìVŒ_ûF/üV+õÿ¢ï«þ—®¿t—ÿ¡÷ÿÿ_ý¯úÿ{ÿ]ûK¿ÿý/í?ëJýë3ÿý„økêkÚX¸k
+oˆŽ“»´ØixM6-8¾+O7ˆLTS(IÐŽlRhG7…¾N˜°™qjf0ƒ.ÐŒ¹<4Až1‚ ]æžâ#ãïüÑ-=ŠÓ0Á>8Ž?ÿÿþ@Ð6Ç#�ä9‡rÜr�A�âŽIÈjÆAll�çÂa4Ó
+ ¬ä:dm0¡0¹Â¹Ã¹ÁaÈl‚‚Ë�kr
+ã�<�[ÝUBëë„¯õUÂ¨MK…	�Ö´Á>5}Ü›¸wH6äwh�áÝÅúK	èÞs1ÝÅÇJÇ±OÜ;NùÇh†[»¹Þcðšz_ÝkßÅñ±ü|>ûëÿ¥du#‚'®aÈhµÈk9.ýWuQÇƒÁöäóÁåÀD€j.ÍŒÂ1˜3Ç+27ÈXÁG„ðŽœN	ò
+¤
+óÙ¡„†|#ÇÈ1f°¡r	dœð[�er9Üœá
+¡Ì9("yýH7„‚-�R“§gr> Ã©HÜŠç‚-‘mHfŽBŽ@Œ%„ÜñöU„BË‚ ¼š8°ºÃ6¼A„#N/2Åb„ÛL*aL*z0š1ÿ
+±hÚ„ÂkËÈ†Öç¼öƒC2¶0„4Ó'Äüö|XAª“r|ƒ7pA„
+�Lp¡N-4,Ðôa0ƒ@Ê™¼"|0¡0…“ò|Jºv¶º³oNÒ|Ç½8è EFŒTc£œ¼ÛF(a �'pÓXaN-71ÑŠ»¯´ÔhÇX"¬‚çTc¡hÆÓ÷TaB1QztÖcËöM9~ÕËÔaUJ¦7s—¡�4.^ËÎÕç<¼ÙÍ¥1>bx|;ÓMTÅfËMÍÝ›=½ÿïON®×ýÖ×AúI¾ýœÛ´üÜÒ¶oI==;9´èÅF+¸z
+Ö¯£0‘Š½¥i7«µ7VÒÝÃ
+­›©:Û0óg3•]]›³]Ã6—Ö»NƒO0Ýsÿßo÷õ§þŸ«Ú_O_­¯�^Ýz¬Bô†û[bÛÕŒ;—k½ªãÿùƒªº[þïOµ{îñï§^õõ6iÚk±�÷Vñýã¯ýÅþÒèW±üp½/°Å†;t8…ÑÄõÿÂãÿÃõøÞ:J¬M®Çø¿þÇüV†:Þ¾Øâ|}öþØ~Û÷æÃcþü/ÿ¿já}ëK×Vï×°‡Û´»ômV`/ðÞ¿Ì£|Rnó˜Ì	ÿaà¾”Àf­‡¿0~ù€ÙÿöæjÖë×ªýü#k÷ûi>�¯ÌÑ€Ø¿­¬0ßÞŒÿÿÐ_¯í·iz]
+Xoü(oý}öôcýé;þá½÷ëÿûí‡½ÿä‡ÿýÿÿÅ ¾’÷Û__Kßä‡Òû]>{úøDtÁîž�t]Ûívþôb·ÿú»zWøDtÉá¿òC¿·¥þ’ÿÃä‡ðßþÿwú_ÿÿïézù!ô­¥ûl»¦×þÿzßýÕ××Ý�­òCîHt·÷²oXoü"?íðÞ•{îµ¿÷þŽýwu÷þCŽ÷ùÇvÒÿØi_ÿÁÕkö¿ÚÿuØS»Ûý­Ü;�†§Ôöƒ†°ÂøFÐ;¾½m{Z,|Îô›U³»ÿk~š™ßÿµµ3®aßöÂÃþôþÛJ?ÿïcöGûî;]ýb¥ÝÓ¼C[ˆpÂA8ÒIð—}ÓjÅqÛL[û¦Å1LWi4œÛ­ªJ½wqZûw±¶›„Óø¦):[á¯ëÛQõŠiU´»ïÕ;Ûý4-¨…pÒŠ¦)4Ói®!¦Óµ±Dœã¤Íø¨Ø¦“gi§ªN‚Í÷pšu];I®œPCáªhmEÝE§Qµß8…¦›×Ú¦v!§
+g1i»§qI¦œSHDqIé«TSLß!¦a—ˆàÒZ„ì$/é„ÑHw@ðS~,0š
+RqW9ÃOI†™Ä™½'³ˆE†jÅZ¯a4±O9˜Ci„°×þ×ˆŒÀ(DEH
+obT@Ð69AÄDYva2ðDœ§h0˜!
+0„DC#á4@ðƒ†ˆˆh0CãJÝ)P5Á`h5ä
+?ßI-iXi¥Znƒpœ!ÄhfDòA¹Á¸ä2Iò0Ï†@w2ƒ4nMÈ2Y
+¨Âêšk…	­ù
+¡è�á�Ü�á¢F/ûÖö@‘×Q\\]Ü}ÿßÿ]W xj��7òÀÊ‡†@iIÈd�ä¬‰„° Í3ŽdíÏdœ‰ng2ðŸ�Û›™ÐdÀ��bÈ�Es¹œ¨/	q ®s9É¹7<p dïÈ1„ ¨"Ì†Ž Ã“ì�¡¹	5 �êPdÜ›�l²
+�Lƒl<Áö	ášxRX a Ö2~a½0¤
+Â\Za=a‹Aª„!¨P…„PAøL!
+B:×
+&šé¦¡U}~chÆÑ‰°œ Óa#æíM�°‘y¸BÐj›
+]°Á#
+�¦¨ÇF-£
+ª1×˜òó—ßÌ}ª¨Å×}Ú
+î@¸ä}ßÝÝ'IýÞ]¶n´•ð´bi7VÍ×Ý˜(ÃaÃ7Z[ÒmØfÌÙ¦÷fí[9ÒpìÜÒa+«¶ÍÚtlÐÃ¹§wqÑ'!–îªïˆïíí5ú½~ûÿµzÍ¿ÿïíoÒ�:í6—×øÃ{ëÝz—mòa¶þµ]ºÿ¾©xˆ/ÿz¼t+ýujþÞ¾�ýtÃïoÿÿãñß­ðÇ÷_í_rƒHä|ý}}­æÃ>`'æoÿ¯ýo¹€¡ÿþÿ·ª0Á;áëÛÈˆä#‘¹Ü.¦�ÉÚÊ²CœrÎEîJ,«#Ì¬'z›‹´U’ä
+7;‘,†,�¼‚ðAC“âˆø3ØAžÏnKæAŽ'@¯~‹ßÛïÿë÷þŸÿÿ½ÿõëý¥ØŠèÇÿü7�[
+ŽNÇ4™¸ `ƒCA—Ä§ÁñhCC, âÂqkšÐõ‹Maè0˜A§éžªi£iî……MSL#ü�ëÿ_½wöAÿä‡ßþ½ÿŽ©]dc·ÿûþÅ6uô·÷÷o ¶ A‚©£5
+¦­µL-5Tcw1íõé…s0MF�¦�ôbøbÕèÄæ'	ß
+Ú1´bÌvnïý¯û¯ÿµä‡um¿Zþÿö÷ëm#»®ÿÝþŒÊVLwëû]TõF7z/w˜¡›œ1Q‡›WÞns°Í¤“ÍÚnmßvmë˜´ßHæá7WWó‰§ÛK]ùÍµN“Óu¤ûi1¦ƒ‡ßö>
+4Øk
+bµ†Ç¶­ÿvPö—kq·¶·^Úÿ
+ŠmWO]»ÒÓðÍ¥M•††lÛ~…×÷ôzê·fß½þ¯ß÷Ý×Úxé¨ý¡ìR|qÞ¡û¯ú·Ó¦ÚV¬l4˜´Ø¦)îö“Um%Ö60ƒb›J÷CŠcTâîîN±^Ä;N-ˆ[Œm^‡ãKÞÿxÞêŸlAwëÞ—Ä/_¨¥ÿý~ÿâ×MŠi›í,h]1S¶šBÚi8¨¤Ð¶ƒ¦)4ÚjibÐ»
+:a:C&“Šéwy±ÀO×û¥üº0—ßø_ïÛ_Âÿ£¾`/öÿOÿ˜„cïâÁDD0§°„0„E„Â!aˆˆh0„DQ°PlÆG¢çÂvƒ#†Y•w0ôòâ¿»±ß¿Ñ¿ÿ½ïèÅïûþðÝþ¿ßéäÁ¶EÄE äÁ¨×ÿï‚#ÿ_ö+ÿÿø^¿¨b¿¯ÿ#Ž™!ýwü"ê�?ëºÿïýÿ`ˆÿ[&àˆóml":¿ù'Ò¯ëúÿ××ÿmuuõÌá·í+]}¿õþõX¯uÒÛUxikß\¶—Ûtêšõ÷vÄ87øaX4¢¼Äû¦6*/IX¨jhˆv›§_%üUÓ§qL5µª´ãþÖÒcŠþi¦ÓP×ŠctÂt÷˜ªÞ×¦"Ø´Ý<0½Ž*ÚŽ�»v.)ÚC
+E&ÅEN$Wa=éfõLE†škÚi8Ú
+ÞRm3JÍåý3Ätê•¦ƒZa3h a$#P°Â†°é;	!dxº#°EÂ"†,0„DaaG	 rs\aL ˆî3xmÈd‚ÔøŽ+¥×‚YÃ[•/UI1Â
+ ƒ¦ô†Ž@èàƒXä3ŽA¥ÈcáB„Ó ¢“²oº«J’·�9†kî‚�íVÃ÷õƒ¾»~»y˜h2NE·"~º‘Á;.	¹<R
+#�]È™÷�4¨ Nä‡ x5¹€m h0ƒXSVòæÂiØPšÐK‰Â j—äÃF‰…A„ä0<
+Ì+IèÅ‹
+TaÓK1ÐÓBÑµF?·©€n>¹!÷ ª=;
+]Ù¹¥ÌzFH:Nô°Ì:19ËMÓÿ´@ðS\97 n;JCXw xf»0UWû¯zm‚Ý.=w÷Iß®ÇüW±µuß†8„½wZJÿoÄ'ÿX…‡ÿëª¯ø«õˆ_¯—KÚ_Þá[ÿ fÇ#s¹8RP<«!­d¬”‚­HlrVƒ/ÎäK c�Æ³q!Ó!•y‚+�Ñ!Í³À®ðŒ_ðGÿVýþþŒvþò`±æâà Â%ÄðœˆÅ’àƒÐaˆ²æƒ=•4Âjh=iúi•‰„òc„¯¦êþô÷îF<WWýzXoë ¶,*aÑ�ªa‘…`�5ØSøØTŒl0¦'Q£k/0ÓRí„:F'¬Â
+C0í4ŒL†Øï¯ï×ßö¯¯úúY‡ðžŒWj›F:16y6æ&ŒY‰í%†`Í·16mÃºO¤íMî›Wévsm%Æ�vl]ÒÞýWá¯ïß/Úýúwßþ¹³f­›œ{ÖÂ~ÿzºþ?ßwÒ‹ÿ§Ž6Ö6�Òõ¿ý&þ"îØ»>-ˆlU'·WÄ;Û\ÑÖñ×IãýŽ¼b¿ï�ì>«¿ÿæÛÿæŸÝ:ø¦o8©¦Ó
+ÚiÕ›í&Æ…µ§^—Ánó
+/áï¨/£a>Xà¿¥0�Ñ€Ì0•õïÿzýˆˆdp†ÑŽÍá3A„"#[
+r(NCºÿòá:x°æ|7õ0¦×ëôq~ÿÚÿïÿ_ýÇy°oC¯ÿá¿öþôí’ø_±Y'§_Û$>Hx«ÿK½ö:÷^—²oý·’Áß^É½¯éÞ÷ÿ­«¶[ïëõ]oL:ÿ¿Kl·(woþûŽ»éýÃ]ý†°ˆë_Ã
+ÇQZýÏªvPîö­¥éq_ÃJÞ+áüzÅD>Ø¥´ÛAÃV£��‡ñTïÜ6)B#«ØýŠ—¤›Å&ÇuI¦ñ´…½'´šÞÕ5m5´ƒOiâØ¤êšhv)Z¬5i¨E¦sXi„"ŽÖ!/Ðh0„}„"á„""<!)€i0„D0ˆÁ Ö#ˆ�þï KGüò€Î97!�9ô x4¹8 x0äáhÓ	�°N‚¦C/aSÿ…í6“úF?´ÿ’§c¸qÃd	ÇqqQªwñ]ßµ× hú�Ê|†Õäœ‰@ð rnxwL›‘Ùž2`¬9
+ƒ™Èð”d9Ç=‘ñ/®Êr+©7Aš	ð@ÈhÂ„ «"y
+˜a ¿ û Þ
+²>?ÇÀL!yxKÏCX@Ðjay°Ï„^ø|!¦²\~L´Õt!…Â¡¦¡4Â	ÌOTÓè!a:v´Ø$hÚ´¨Åðši»1¼-U£{˜¨ÅvÕön£—ta´c|»£+19‹.ÿÌPõNºèÄçT{Ó°›Ûfï1´cÌW›éa˜¨Üßg=?ïÌPêîþž¾á˜ƒ]&÷ý'Tý›m+ßëÒv`“WWÒWúMÓ¥û0ïï[ÓOMØÃŸýãlk¯uu×ÚñŠ÷ãnëÿúiÅÚu~±Þ7ö¼6ý¿þ¡¥ˆ/ÕW^ ¼À_õëÿ·ë‚þéúÿOØU­Òÿm½}ÿ—ýô¯×ÿæ×ÿ_ýÿõÿ®½#þýü6ÿ_Õ½$cÿ¯øFÿÿ÷V¿þ—ßÿÿµé±ëxsŽÞÿþÙ!ÁêéÞ¿×`‹¦MÿòO×ý~µõi_þtÉ�¯úù!ë®Œ?oÝoý­¾’_ÞÕ7Zö“iyqíûWý¯»§ÝþŸö–·wß¦Ú×¶¶÷êº]ñû­ë¶¶“kÚ
+Ž5µ^)¯»M¿ÓX¸{¿n˜ã‹Òˆ}Æö•¥Rm¥wv­G¢œ\TRlm4šwj×¡œRh4Ó(í&Å!{ÐkŠgC®(1UXb“M:M…A¦�ÃMq&šxN…´ÓLØf$þ™‰4Á‡i¦6‚„"!¦¡ˆ†#†¸D(â2Z"","0i5†ƒDeÁO@Ì1ˆþ—d³­UGN�~Â`±ÿÿ M(È†Ç!�äáÃx!�
+˜™ÁDaSOM*Èz�<3ÙÇÑ…Ñ…§g6ûé� Pã‡] pûµ¨ô8÷^-j·ä/�<4C8åŽA¨rngA“Â?*Ê³b’‰W=�P9Ë#ƒÙ.²+‘\îg=šÈeðAù</�fàAÖAl
+ð”ds ³²àÎ
+K�0™C•˜BÓA„"2\…„Chá„4Âa‹Mú~š0¤
+¢>Al6Q0…©¹„5§Júl19©M=Úu1;F'£iÅ£+‘‰´Ò1:C �á´r‚Y€\r
+12‚pCZ=œ÷F*0¬ò±º0ìU8fë¤ìÙ…	ÑŠƒÓa›²òJÃ0þ*
+³y7»|Wº[þß`ƒÓý/kIÒxMÁ>•Áo_ý?þ¯XÒ¿Ç¥ÐîëöýñÃmÈ4;ó
+ï¿.Ó]~•}
+/_ÿí/ÿ¥ÿû}óÄ+Ô5ò:µ«�Ó­üR_ôº¤–’I%ýñá_ùpjýÿþáu—ß2®‰âã1—�³é›ý+6eYæ™nŽåÁ4eÏÒÝuë_ûïïß„muïÒÿÿÿÿ´b·Û~¶zZq¦ºwúÛè0±a4Ó¿Y�Õê•~½ú_è/~½"$Ù7ÿÿÿKŠÉŽüshÞÞsµ£0“Ì'6¿Á1Ù…Ó˜Z‚*´c EC0¾‚Km¿õIiÒ¥õÛúÿÿô‹tÿïîŸÿÿWµ¿÷æÓk¨(ŽõzÿJ¦í¼Â«ÁDW×¿©cž^ý~�z¯ÿýúþý
+2;ÇëþÚ^—˜ÿ‚8ÿ×±ÔÍkí¿ÿÐëÓþþô‚öƒÕ‹ÓÒý.ÖîØiZh4í
+[I;JG©¶’vÕ·­¦›48Þ£üuý÷æý}ýúÂþl†÷ÿ¡[ñQ]1]!b—Cb»b¢è{b¢Ú6!&šM šÚ¯ÿëØ^¿ô÷×NÂ¿Ø_ÿîÍåôÌa3Š‚„Â†§"è�!¢
+PÍðÓA„#NB-4"�dú_ëü2‡A}_m¬ú3ÅÇá×vÎ:½_XäH!’ƒ¸ˆ�hzUµlsýŠ‹ØªkÓ�‹Xç«]ý-É
+NÈ
+ã�ÏþÂ¶aÂ
+4ËŒÚZ{aCØL¾ê�I,F`ˆØŽ"#B"#ˆˆþ¨W�L˜×£ôˆk"Eñ�È>B›˜­:ÂJÐaCÁv˜Ž‚‡¤#Ç
+,:ð°ì,|‹Fìî°ÐGEã¼"8ÌD|Â;›;&Ž!ùeÀÉ
+\†È³0DpU#H 
+È´h!5ˆZ/ò8ÈàÐV2à OËÒa¼Ï™€Ùÿ‡…N‚ü:…øn°Ú
+üaXqüq¯ï ¶
+ �áì�@Ä…ƒ"Âkÿêí�[y€°qú××ñï× ²åHqkW îEÂ8*
+ÅÁVlü‡²,�eðBÓ æ†!¨B/Eþ‰×ÂhÚûª1´oz16Cúú1pÓRïMû9ºzvlÕ³
+}>’§´?O•ñõéz··Ç×wKý}ÿæ@”B¤
+ ¡RÎPÑ!Ïf!ª9Ç,r”ˆkŽDƒ•Ì	ù€Ÿâ¥ém¢ËÁ’ŸÿKÿø­¿
+È<»#‘‘žv“#çaÅÿÂ#§¶Ù7ÿ­®*É¹NóØ`5ÌaŒŽŽ†s™Ã°ÀiFÁ°À6Û^»þò4`-ì%¹¢«ÄDEñkûø¦Õb¿×ƒéŠ¿ÿ_þö•Ò
+þO7x¥ÿ~ÿb-„¥
+u¿k°©¢ÐÕÿÿeòà¸A„"#�.q‡¯_ˆˆúAïýûÿÓX#½ÿúÅmÿ¯_ÏƒÚÛÿü>ÛÿßüDvïõ]ü�Ì'·ÿÿë·þþ¾�¹ÆÛ¯¿ÒÒoýýåÃiÙÌ‚ñ�{W!aÈ1›úBíéá<+�ÚƒdÚrq„ð¿þÞŒ}*Þš§zT*7òrFDÇü28é5¥ZUß~‚§¯	ÞŸÿãÐøôÕW��~Œo^ºÒÄCC©é¤×Ùo¥©ù<Žñé?ÚcÒð]SðE×úòßÈ(�"Cœ}-Ÿýž Š�Šöwö)ÿñ	²8ÙÇ#r‡+D¶ìP¿_±šþ‹¾³?úÄDZXÖÁ%†	}„©a‚U¸¢zÿ!ªéwcâßŒŽ‘¿Ä4ûEçüS„Ÿ¤·ö«´º×Åi{Kÿ_h ëð“ú�#;O¤ûªÿKõë®·ôÃ_ô£C�b6>¿î—ý~Ð�ä
+ Ð9Ã(r9ƒÿÿÈCxL‚ÌÛ®ÿÿÒÛKzúÿIÛKlÿþ•ëúÿÿ^×oÿÿë!,ƒ�tD¼‹=bdÝdœ«>(CmÊÂÊò
+NqÁqjCŽt™`2YV¤ttdnLêŸÛ,¸!©Bô´cß·£ë�€‡eÙŽÂeÌíDv,–ÍÞoZN�èÂ\ÝÒ~G–"2ìŽ²GÃTŽ`µ­(*ÒÕºk¯KÆ±ñKÖ¬Rÿ×Kë×KIÒëÒð®C 4Ü¼'¥¤Et¶Òô½z0æU6þ›	pžºZEŽxÕ/­B§ “o×C½´•´5ô¶ÒÐýeÝ²À( g¹�ûá-d±U¤õìV–©V÷ªÚºXB>¨+k±ïÒvá8î"õãúUú[Âm-~ý-mzí+KÂI7éj÷®Dë°ÚúI·è,'®Al¬«È½¦C@änŽ:Ú±T7Þ…ë¤šY6\ãˆŽönÒ1>cIÌjè…¡Á‹<å9ÄÂ“�<Ç;–œ�$	Žt›ÿê—�Að©ÈØ)MÕO¯KÒVÅxßÿÿÖ­,Œ2É”çÂrC�lÔ§(s@ñ8· xhòœ“�<Ës�×}%zZF'I,�¨l‚PºëOúJhVÒ0çŒ]
+Kõð–†�hmwÅlV–­¯¸Òá¨$„4‚
+‚‚Ø,¡$¹€F>#ä2CqÈ�á�ÈÃ xº’´¿½z nä9Ç!šëƒ$.AµÂ¦AC¶”O«zXH%vÛJÅ†Œ�·	Óo¾’Û­Ò¦Ò¦ÄoÄSLj›	v–émøÐ®Úí�ã×uë�5VPõd8äƒÏ¢2»R8)ò`{#sÂ‘/"c~„5#ž4ÖÉYV¡=? çâ¦™›„/	º§°EGºkN…èQi]7¥£KoF÷Ì%ßW¤³¹ya›ú©y|ßYyRVœÆ¹»¥§
+›eó<.Ÿ—––‹ñKAzOŠNNtõIZ\ÞÖ•xÖ!¡ë¡­-[Kÿ^¹"ñªô±A?ét—þ¡'Ö­/ÿ×!'¥¯¥¶«I~éuªZKÒºZK¥á-‘ÃÒºÒÒ×oIRïÕ´ˆŽúTÚ˜sÇ×¥ÑœïWÓ¤g4v’M¤Fþ—úLt¿KÏ5õÐÿKm]
+Uè.…&Ö»hÍ?Kl%i…¿B°…nÅSjüSÄ-[ô!k#ýˆU¤üWï_8'ØT#Ô+
+cÕWCØ`…ëIØa4?ð›DuF"ºŒÀv:ˆ�PN+¥ôûõ†ÛÒ§Iõ¦ï¦µm/U¿IXizJÃõOA°Òô•ºé6Ð?Iï¥ôèZ
+Ãøâµ�ð«H\DGSÃB"#ã]ÿõßíu�ÿù .ä&R²üñ÷L‡z}××ßy8/
+²¬öS›ð©µ.Ë‚ •—Ÿ§Çš«jšqa5íTÕ˜üÂÌy�«Iß|ºÕL-vÁF·ÿSk6¨Ú¯Çq¿Òÿõ±îãûèÙ>¹³ÿ·»üØ-�½ÿýõ_ýüÃ„];û�¾ü"éÚý„GL§ÈƒŽ@ðnä@ðmrã�i‚ÁÃx ^ÏØâ¢îqÞ±±Y°Ô‚9	�WrnFá2îV©�<�W€L/ÚI´›[¨wõ§xÚk ¶#°º„ð–ö¿û¹P»YÁ“ÝÐJÛ¤8mÝÝ¦…±ÙÈ1”¼ÛëmÅÜF¶�þ·Òßÿï!˜:BÕ¹‡^ÁIYÍH/ÁVCmÈ;š‚Q“âìƒC‘`ŽœöG…ÏÜ›Ÿ	Á ——²¬×ˆgóZ�—�³ ¡ì(L(LøT2°—Ì(BÈ1Á5„,&MG0Â!a
+5öÂÚ„Ð´X´ÚmQ…fƒÂ¦AÎèÂ£FüÆâ4-0�¯¦Œu‹íí¡0Ÿh¼ÿÕ¦_£¦sÓzû¼t¿ÕÖ“íÓ¤áÝ�8vn£wg3•úÚg3�'ÞÙº»6 ¿øt�Úú Ÿ6î“9½&ùv�"ž´�ëj`³
+úOíþïMo¿0&�úzãûKÿoûÝ»éúñJ®GkþãûÆ¾û¬1ÿèBÿŠÿÿûúOþø7kºÕké$â•¯0¯üá}h=ÿøOü/ü¸_ÿ_ýZïýÖ½.’º_á¿þ
+¿Ô7ÿèÄ¿Â7ÿ»þ¶×ÿ¶+}ö4¿­*´¿r1ÛrCÿÝûÚ1Ûÿô¿ø_õ’õãí®«ªÒ×Ò"â¶•?jS‡µÿÂ#¯úNŽßÿÿúÿö¿¥µÿèÀlþ¯^ë©oijXçŽøkñ¯Õ«~¿ÛïëvƒÿÓÿcýníVÉ–½*^–…#V‡ì\T=®õc‹O[;­Vþ5û‹Mné>ÂVÒqwè{ö•Åj.®¯ÛQM*ÅS¡hDE¦Î$šh4""Ói<!	=CH�°ú Ââ�…ÂÅºÒÚ0� ÐnÚ Ð³z©ÈØ+5ç3yxŽ)6<
+„DeÝÃ¢³Ž)ù¸iÄEAìi$†þë÷HWÒÒçûjªÃÒ0ú[ÃJ•½	`ÓÐ¶ô—XˆƒDBD	€¬>@ê
+S$ä2à†Ž ¨ä`†˜á@ðR²û¡!©~OOf+ËÔa¿_Oøq[IÜ]GüzÛ »äærwäQÈƒ…üˆäîþH0Â–9nT	Y¼žËÀ…§�–Lƒñðöƒü�	Á7*	áx_¡V_'?P6)+L(&‹B×O‚*4C¦©OMµMbÓF]º1ß›FÖ_£ÙµEók/Ý›1kÑŽÍ{}¤�‚—èÂeN^ËÍÙŒß˜�:0­óêþ›�-é˜šÄíÿ{ßfsJÚO·Û¡ÌNõnwK]+þŸ×¯Fy'ÿ…ðúoÂáëÿlkáÿ×Å<WãôŒm¿ÿ_ù�é¿¯F_V+ý‡.'oþþùq?±[ÿà‹Šÿÿ°ß¥è½ôcÿXNü7ïûÌ/ù@n9Ã`ä4ìƒPä5ãX-í.˜ÿluÁïªúê¿í+/òßÁïKýö¶[ù°W„È)D·MS
+� ÉF“%iÕúüWß±V±|EÜ[Üw»½í­ê›Å±^
+�ÞC�éóNÆÅ!a¦""ÕÐˆ¤ÚBÊ²¡;	úl%�Ðˆ¦)P�¦µßA+ž÷ Â‹?›Í¥DDEª¾\#„B"a2t˜B"!…î!pâê.2ç!’
+N@Ô5ô·úà—�<
+ÝUóÀL…²/ñ®Al‚(æ‚/�žn%Åœ¡ÎåÙž¶G²°#@]vBY?!z-2ð”aAªm5„!jM4"Ó,!¡£
+¨¿ÕP"®ØA0¡
+0�¬¼Ñ�†tm5ßåæŒVf¨Æôb9ÙÎ“Z]¶Œ:	æöèÞöy4bp�}Úœ3vœ3nÿ6i,3§i÷×wýºwiÃ°ŸÕÿÿ´ºŒ~	úo¿ëê¯¿ÿÇâ!wÿz¿ÿý/ì?õ_æà¼+×ó~¿×í®„?oÿ_èWF;z1ßÿEï„oûküWûøF/ÿ¥‡Ò×þÉŽ¯ð¯âð­ü"=ÿ×ÿù‡oK~ÿ]}—ùp¦Hxïvý-/ûE÷¯ngïí»¶8†·kèèÑÿï´¯a•h?ØâØ‡i'Ä5Xµ¨µˆ´åM8wé\lTVÇh4éê?b-¥
+3y…¶>#mßÖƒA„S‰!A›I˜kf"æG/""!ÙvG\w±ÄDE„@¤F²…
++Téö«uÅE ›]¦…°‚Ú=b"?ä`Ìäã’r†�É@ð`|�Ì4
+	„Ó!œräBd2‚\AYÈi¡ª®˜P·„d2�y¼Üc¸iý]¢ßFÛ¤’áo½¸´Ç!¦8¤Ø®A]ÿñõM&áÃñÇ0þN?\ƒ(äG§, @ë¾dX#âXCgî‚d6Y()Éáþ\Œ9pR;"ù,ÐV ÉÀEìÜx3Ã%dnNÉAà—-„Ì9ÈgƒsæãPã�GEØd†õŒ Ô&	ú1°˜BÂaB»7Â„Â¨C Aë¦…„N¨0……â!„Â¨Š$ðÓþnhÇF:19‹.ÿNŒO—š1C½F:/4b¸fæ›A³z
+4ŒM“¼Æ4b½ôùy¢ìÚ9‹+
+ÊúÒº§ï¸³gtŸz“«¤ï^�zmý¶aÂiMÔ¦ó
+ïÍæ'.Û«ýL3hçiëþ8cŠÃ(wøÿÖÒãÿú¿ÒIô=ýþþè}Ò}>ÿÿis{ˆ…j¿n«úýýý?ù�?ÿÿvÍäsï_ü¸Pæ¿è6F¿õþ\Gúÿ·×ÿZþßüÀ°èwûÝ/õ
+ÿí£oø¯ÿ÷ÿÑt;ýµ÷ðÛ×øoÓ÷ïÿl�ïd‡°EÔ“ùœ6—ä‡ýÿ°ˆÿõÿcì˜ìVëïkùûØ"ëú[ÿç·[ØiwÿÚß×}¯ÿ·ÝSÖØT]ÿÎ;½}®qÝ´¶¿ÿî[j)Š�ïÐ|m§½÷;^áée½ªÅ(÷ý¹á°’ìW|vŸ}”;Z
+¬UîÓI§
+¨Ðu±m1¦ƒN›¦7¦)6¤óm$Ð�b“¼!i[J? fƒ�[
+!è4F;QM4Â¦GH;8­mºm4×°MGUµ5Å![LY_Ó6ÐB)¯ f1ì�ãr¡Èf¹Ó�htÈe"!„
+Ðäh0á„	Â xf9+"DC†c�+˜Öl/a*†@–pÐˆŒØgé8a¥¶–ßë¥º[~Ý‚ä¿ºÛJÞ!]izÿÛJÖAl¢ònÝqò"Áá"'xˆäÀ�êR$Èl‚	Lƒm•ŠEž ŽAé„/NˆJ7ÞŒë‹×F?g—F.—³wI½$åå³w—‚Òµ˜×	ô¾c_^–òò‚)Å+¯¿@Š�A^«ø×ÿø¤“i:úé{«×¥éY@g†@ÕkZ[i-%¥é ›K¯ý* f¹Ä‚âa2Y+!®äŽ@ð®@»�U�~•$’Ö¿¯ÖÒIkÒÒÈd‚«‘-Ó!—�<�àIŠª˜RÝBä3lÑëêÚ‘][HÃ™þ´‹×éS¤Fþ¯Ö‘cž5NÚM=í ÝwI+Z´ý'zP‘�V†ºK¤?I[SÂú^º¯ ”6;�ÍqÄSrÃ�UpíR´Òí'CUuKTºìu¡Oá.+Cé%l;éK¿ëŒ;¡VÅu#Úþ¢ŸØTÚô„'
+i>½Ö¹Á»Óëÿô¼†
+B:Â±ñfÛ#…®®AV
+ƒa,'eñvaÕ"	ÚÎ_"Di—ÁR9œ%Y×0ä$Æ•d|_Ñ~JÈ˜K�†²"¸$BÁP^âP©p¬qÆé¥õOCÒKhE„4Ðº¤Âhj®‰Ìœ)ÌÀa§È¤&°¨< Â
+±i„Ân Âi½š
+À˜ Âa	¡“òpVUi>–½¯j­ú\¿Ñsa”qcÌl3¡˜”Â¶Œ}BXTbz0üZ1´bl)ÄÑ‰žjŒqosFöîµFÓF5HÄÑ¼çL!b>ÃÒ¤•ºô•‡zª]†a§I˜f*N—‡­Û§fþÐc	KÉ)8'ÅðÂœ©i;Âzæ$ôôé=?M¼'IÃôÓÌMœøMõ´•´Ò†íik¿ý>Ý‹ÿw®�*G �A;^Ú_^ÿ�·I½ªfTÒº�ô�§ñÅ]aK¤"°ºþN¾Ÿì1ì>×«¾�I4Zqÿü{kèùxcô;¾ü{]ÿ�?D\Dq¤¿FÄ×ÿa}½ë½ÿI´’Âÿÿ.v¾`'oÕù�?.ÿŠˆèCý†¿øm¾ßÿL4ˆõª1ÿÿý}ý‡í·§ÿÿ¯ù0^
+f¡Ô„ã•g‚‚(s
+ßîHx¯ü6—áö?¦) a¤)z_ßý’Ûû&þü’_ßŽ·Ù!ÚÞ¿ ¶
+’Âk˜ÚûÑp·ü†qØÿ;·×ð¶DÇK×ÿÿî¿µóßÚÚÚúÚßÚ¢áý#"¼ŽË‰Èxö4ûKíÓ°ˆëöúÚƒ
+
+I¾—ûÿ†\uâ¾Ýê8§^�´›ø¤|{ÿ fÉÈ†Ë¢<`Ëåâ8†WI:”mŠO´aˆ¸iô5Dàˆ6’¤Ä4ÓbáÝ±°ê)4ÚAö”5iâõXâÓyFÛ«¼r§›La­Î$ÄwQÔ>”Tæ�Úˆ¶QµIÆÅ4Ó7¨ÓiÓi½�ÅüA„‹ŒÀA¢
+#ŽAø¡Ì� Âf3éƒDG Â aÂaf0„0‘qbÂ‘Ñ†cC¸ˆâ(¸²`«"#â";ªi<5sôÒÛJ5°–Ç�%ãª
+	
+T@Ìdn@ñG xf9B
+£�jú[a Âa4,�›sé¦@±õ†rP„G}µÙ:	´‡lDt‡m,E´¶ô¶ÒÞ·ÿû^ô·Kò`²>DÌ‚Èçò|‡Ë#³ÂDNÛÈ-‚™ÒO"P†ˆ ”Èk",ð™9¦…éäJ£®»×F*uaœ]½|çÒN^VÍÞ^ZºËË„Þ“óú}+äyA—^(.­;Òë^¸¥dÂ¹ð@ðhr!¬9h5�Urp@ú¹/Ö($�'J¿J»ÒézN˜LƒÀRdpÃ”à˜UP¡0¡zô—]µÿ	z¤ëÿúîŒoA„ï}/­Ò]-/_Ótµ^ºI3!ÇoLƒdÔ‹wíÍpáÝýoKHŠêÚEŽw¥­"Ç5úKi9Þ•~º#}j†]°�Tc³¿�Û¿¥ë¤XéÕ¡§ë Õ?I'
+?KÒÂEŽž¸Ö*
+¯úÿú»u¡¦®“^–‡.»kV…?¤ìW]�AÎ8Lã‹„AÓzñÈr$™ò£þ„-ŠÖG´ÚßÚBû©ÿŠ¶µè‚Ø2y¸ Ï†…”9(-ËsÙAÍƒg,Z!�{"öU„AùX4Â,Ÿb
+‚ð–Qâ¼ Í„W;ä§Á8ô8ˆô‚ÇÄE—’0`JªqËö!
+!h‘C(P‚ E5rn4âÓ_ GCîC	 íé¤Bõá^>³í,zïÑ‹10Ì:‡aS1ôb¥„�O×ë¬ÜÑ‹hÅ—oÐ"£žL0¦ê6¼¼Ñ‹´©v£I½--Òõ¦ý-ëßÝéÙ»µ.ÒHä`=ˆ"žééf¨\ÃÓ¯è-Úé¶l×ýú»7­'öô´•†¾’múPÄWá�·ãDM8Ni0Ù¥Z~µkÔcô«¯¯^6º{¯¡ÿ6õ8úIºé&Òl/°÷K¯×I,0è0Å"&©%lÁÄ.?ÌéÿÐ^„ýWÿèE
+EG|hG¦F×Ã}ûI
+^tÃK¯Ü/ÿÿþø¼¸iï~¾4#.Ô„6‚ü7½u±¤‚¬0ÔjAxI/cÿÿÿÿèÇÙä+üDAí~aß�^’UPÃ é4––ìöº’Òÿû$?d‡Kª{¯WO½{k¾\Eº`ˆÿBZ„G\†A-×ÛØkù
+ïÿëê½¿¯ÿ|C†­ëþ�¡H[iQ˜t‹tÑ<Ò]>
+/ŠŠ»²ã^àí6ñè>©¿îö)¦­
+Aºvœ t¬$AôRè‡K`–sÅ&›NšlUZ
+:BØ¥i�Ýû¶/Ù‰0šdt†¢>¡ÈiÛ½N¬Br{¼[L!•ÚžI¤LÞ“zbiµ�:q—ÁÉ"!‘Ç¡ˆˆ†„C."õhD\DGK_ tE}4¼ Áx�cÿÿþ@æAÁRÈk¹
+·!l†H1d9‹ xeñ/õ
+šáH15THŠ�«í+O/°Û öœ‡päÜ9Á@âì"nê›m›aÌ\]uÕõñt¯ l
+7 f£ÿëÿý>ù°Ô�à@ä3¹Á©È°¤à�à�@úfaçL�[’Â	d|^'ôy�Àär+®x"Ù.²à»!ðƒd,¸.	¹ì”¿$:yà‹„�ÿ…	¨]ØTÂê&¨2¬Øk*Í„¹UžÂaPza‡Âp{5—e`Bð™?!ø Âi¦°¨2SÂebqa2&Ëðƒÿ÷�[
+ŽŸ�luiäGèƒ@ú1ö‚£š1Ñ‹zša¬$bqi£	¬(´bÚaM
+žI©�„ÓM7{ÑŠº\ÆþaSFÐlÚÿ¾øqÝDU÷q¿ï»‡ŸGº1:ÞžÑwIÃ‡›õlÝEæÏg;l'Òn‘†æ,Åwg8z´bìæÃSu'é:1:ñQ_§N+¤>øþïÛÝ>Âa~¯­Í¿}ý<x«°ªæßt·iiOÅï´ýq½i_ºûÿTÈ£õðÄBØ°Çÿ�ýëŽ?þ¢úz¾ôºIñÇÚý/ÿzøcüÀS{cÓÉÁÈ(ÂPUä3ŽMÌä[2øƒXùc‘Ùäàð l#²<\dqN0ËrXJÊ²ŽMÏdý2+�žAì dâdpR
+ðk*öVÿó¯ÿI	þ\.¿t¿ÿþôaÿÿN`í£Èþ
+¹çí@ÓC4™øÖZ'™òÏ„
+Ba¢xH@A„ÐÐhY(z¦5	¦A–p¤¢¡xm¡°ÿú_þÜÀ.¿û˜	ýûïÿÿÿö¿nÚpÈÿåÓNaQ´æ7„/­Uì$bi®Ó\öÃ Ð¹Ž‡F'=þÑŠ)z¡èÄÃ0$ÕþÎ}´·
+ÿïïÿþF?ÿû÷ø"?úß_þòOí÷ý¶5ZNéA7Xfï»N¹Ó	éÑ†Ã7=ºz—mŸÎG->ôá­'fîúÜÄéÒmÑ�2õœšONÓ{ùœ6qÛÿì":ýÒtä�²oÿkäŸþºüt×õì":¿ÿWøm²oÿÒ�ß~ïÓ†a÷Iª×Õ¿¯ÿõv
+«ÓõöåÚzìxëWüh[k®GküÎê¾ŸÿØVý½Öûÿá¯úÛÝoMÓi}üÚwûvÃ	y�ïëõ­}†=ˆ_Ûî¿ÿÕÿt¿ûÿ¿·â—»˜(¯÷©êâ—÷{í+õûb˜‡ÂKQQ\>Ø¥b»ï†Ó
+{ãŽ/I66óGÜ¬v�ñMª¦ª—Þá{ýûöÿÿöÿõzÿé~ÃÔAR÷ÒCÿKôâ™Ä¢˜Ø»4é¦ƒaZi8‹i:M4âšØ¤ØÚiãV¢ôH[	‹´�ŠA„Â	~ôbÿí¯ìWûûÝ~ÿ£úô¿º6¿ý"ïþ—ì�¦˜"CÍéji˜Ð†bAªeÃ@Bˆá5°I°ši˜Ô!h5¡µ= ÔâQ°šhZ-'†þ¿þ+úï×Õ�ÿÿëÿ]/Û¼�è.ý,$Gÿ¤D�È-‚¸ã0ÃJ2<Ã0v0„DX]>aÞÒ[ÿÿÑ€"ÿýÿÛ×ö½íï¤[ú™ßa„=ûí"ÝîÔÎŸãù@f5­öïš,'iu¿ðáÚ·þ×ÚÚ¯öƒ‡Úª®BGw|9¢ðÖõBž×ÛT4¨½rg÷ÚÃÓcŠµ¶“»“…±	´®ý4Û[M4"šMŠCB¬&šqM4Ä6!±IîÅ§qiV„Z¨O	¦ƒŠbÍê¢“Ð‹¶šb�´éyÏ“D9¯iœA¯´Ó
+y&W[6±mcÎ4WõMœF`"‚Æ\¢-â"!¢�\ˆ†3G
+ƒ#Á
+°„q~`6%qÅÄDGt¿Ô�â:®–·�c�¤)-.wMT-Ç	Ð0š× J
+�C#†B�àË™˜h²$` ™ˆL�à§Ä=�gŒ&ºxTcªú15!¬8r†°îû£i¿í‡R†«êïCA§_õÆú¼ƒC©Âg"?D`‚:‚#©
+�7Èà�íÈ°EÎˆ59
+ä}þA�Ïäøœ�4Â ì«#àƒ7&qÎ9 �ø ÉàC<Ön=—Æã`GÁpÂœä ÖO�aMá3m�#�j)n[šóß¤Õ0†…Ëáñi§Ui§a0�ª1½|-R0¬$b¡k¦šhÇ[é4-áB@d‹ÕÜ0¥æŒVslçVØVŒTb‡¦Ñ�£0Ró„ûîÓSv’pÕ6²ñŽèÅ—yvéæ;9^Ñ‹.Ìfí?£ßé_Úv›§y·«ø©ÏO^®¯û¿î»ZÛ7¥­{Búv¾·[®ÝÙ»L/ÿÅ¯ýo«Ž7iÐµk�Åªî¡Šû��¨ã'AŒ7ÿ†1ü1ûÿÿ¡ÿ¿n³�uu�Ö·j ¯·ï°ÿÑˆm�ûsvúÿÿÔ/ÿÿ0Âþ`O.'F××[¦·°ÿ\Xmÿ°ýØ{nß�3à‚ðB=ýöŒ_ûÿûßû½ðúF>¡½ü?ï‡‡÷¿áÞªÒÈ-†w"Á£
+ƒt·Ü�é/ÿý9ù'EÓë]|":ÿ³ØÒØ§ô¶ý°EÔ">É¹C¶ýa·]sëìVïwýÿ÷÷[[I'µ¾É¿ïÿþä‡~ü†qßþÖû{ò;ÚéÛ÷hÂ¥
+‹¿¦Jû†½ÿÝkÃ
+Æ·í¤ÚW-­ ïi}>ÛûÛ¸¦8®¶öï¾*ÿ×H…�-ý´¯N�¦›kIŠ¥¿Ž8lSãÚØ‡W§ßôñô±wjÒiÇzÉçªß±Iûµ<„Z±´×Å4ÓNÓ7¤÷§b¬4œtÓL.4œSQ„D?I\†PäXÉL4.0šaƒM0„i¦ša3B;BÌK
+drÓ1Â
+ˆƒ†¶c
+� Â#9—ïëd^6Âz—Âä2@¼ÈÈ-“‘\?£ÚTa=ª—úZÒáª“}:1W!�xšA.’vïÿ_Ä*Ç^¾õÇý�´Â××Fþd
+<zöëõÛÿ�l�ÿ†ý‘Ì-ýwßÅÖ¸a.ó»{}>Ç±íÒm&Ä5 m
+!ÈÃ�ÉäÇ Ùd†wþ¸A„!‘ãÂa2†m�fš`ƒ –™H Å¦ xFØ®""*ª×FMu÷¤œº1Èf�HÇi'ÝÃ^Ú‚º»ÓØáÇqÈw x,¿i%ÿ‡ZýW
+¥ä2œŠä�r†ÇÈkq×È4¾¤ äŸõ x09uÄG+	p Â
+aÊŸÀƒÏ`ƒœðE²>+
+y|\ÂNÉa Ÿ9
+˜˜.]›FØ3ø&F9Ü�‘g—§4™Ð\ñ¸ØüîIÉb‹MMÛ¡jâÂhÆ"A¦Uúi„Â
+¦Â ÓMBh\DP°ƒKTa;†´×¤Ú	…}¢íÂuÝÑ‹/0Â›²ï²êŒtb»èÅh3}L0Z/9vÃ	æÝF&-œá˜3hºM¬ÇF?¤Ôç
+E£i©zí,¼c˜?®ÕïÚ¿ZÞìæéºÿ{f�BwÕ×Ý.´›iëè}›Ò
+Òo}ë„Í³wß]º¯ÿ"¿cüpÆÆ£øý^<ÿ÷ßÄ+Œ{ÿÓï[]¥ÝË‰øuï0
+}/ðKÐÿÿ¿îë¿éÿýˆ+ó‹l×˜þÜ¸ë†ý—ú1þ`/˜êû…}?ôcòâÒÿõºþû„GTá»÷ÈÇÿÐ_ïÿº_ÿþ“ÿ^Çßú1Xôðßý­‚þÉ?ö¤Ûü":‚.¾¿äcþº’ïÔ:[ÿëØDtÿ…ÿéu’Þÿ½´ÿ;½þ­®ÿkuÿ~Úý¥kÿ÷ûÿþ¯.ÿú¼5[ËþÒŠš!ûÜU¥ñLm§Ä;¸a$ö68}Õßêª·5í:ßöƒØÒôøgŽ)¦šb!Õ1
+6£†“ÔZqa8ûªÓh[
+ šv„\5i‹M8h[
+4øÝ«nï{ÃM4ÌI›FÐÚöƒQM™´¬«3Ÿƒ	 ƒM ÓJÂfò87zÏ#øLÄ!´Òìt„\òTÂaZqUY ® Â„D …A„B""D8a_E€aŠˆˆ†„q—0jÐÐýàºqK„GV«l0¡t#�þ@ÌG K@Ägr°@òr*9
+ä2Æ@ÌWL†�ÈÜ†ÁÈ7ƒ[�w h“4Ó
+�Úa4Â�Å—é„“°”6šFöºýoAS
+-†‚ÓI;“pÐ‹xiúÖÃuº¶þ:Ž\8éz÷Wÿ×ýSu¶¯äpJä\R7%Æd\ã�\rÈb9pRYDŽAð•’rˆä/úù7Rv�Hw½Â
+a2X@Ž@Â�ù‰ñ¬«f³œ#A%ñ„¸�•aì(L·*â?!,Ö
+aöxÌÆmŽaKì¸&ç²SÈ-�½žò²‹!µ�<4È%Ùt?Tck10šz1ÝðÂPš0ªš1Õ0š
+˜UF:10…„ÕP¹}£5MP‹´c§¨BÐ|Z…²%‹T„„oÜia˜©róFø`¶ßôbË»9ÒwÝI§—³˜›9Ò'¨åÛF&ìçPôá˜èÅF'³ÈåFW˜ßóÙ»£
+×³w›KÝÙ»¤ßÇ·ºôß_ÿ®Õîõþ®–“´ßÿ'Í»¤Ó×u†úÛfÂ„Ö•Ó¤ÞìÝZÿ_——_]}ZÖóÿŒn¿ö1{Ãýìv¿Øc¤ýDUûpÇû�ß÷øþ½úê»ªÒñ­.úuÿ—ü>þ/aÿûþòá2[í£;ÒÿÒÿßúõñJÿ	¯Òûßòà\ÇÑ�þÜÀNßí¥°ý¿
+ÿóoðßíýÿÿ0û®½×¤ú_®õ¯ÿ’ûKÒÿÃ‡ýŠÃý{}ö�ÿ×
+¶�öÿþöÿýŠôŸKIRð‚ýz~¿×ìu$éz_øo$þßº	[Â¯‚#¾÷¯„ë|ˆ;ëá»ÿÿÜŒî´¿Ý*Òzé}}}a…ö;KûÛ^»˜wõ‚Ì;Ü�¿ÿ¾>/ï]>+ÎïÖ¾õ}¯ú0`ÑÒõT‹\ ÎÿUIzJ@Ì‡]ŠM:Œ÷aq!ßñK§÷hœ&ö>¾þ-­Ž®·º}í¯÷
+X†ÇÝª43`¶ô¶ÂCô‡ØKT®Ò¢`¬äþA„¡l&¸ ›T›ÃI«E!ißLh4#A»IÓqMZqLi¡Å4ÒjšpÅk¡MÖÅqNÅi+nÁ28:kfõLÄƒ/„#HT�ð@“.˜Å4×<‚ Ìam5´Âdv6L&c
+®ãwà›.SB¾Õ œ28"KlDDC	È0„DE"+†ƒA‚ xw�@ð°B""Â`qÐ,\|\qY€ÃJbâ+�3
+�û}$Þ–é*0•„¯ÒoK¾•´»ub¢´ÛÔ&Â«
+$�w
+«Mé+my°£†Ðˆ�dp4
+�Ûˆä
+ÐG!îü†@½¿�[U‚(äƒ!šTVÄ«ô"âíý›D„meÑs.eâàÒJQš:Rü†@i>@Ð]‚�úû¥øäíVˆ�ñ^»l*=©�×rƒHärP\Úr�@ðx!¯d
+�]™È.þ9Ê„3aT ¡2ö	¦
+[X0»¤Â´¢=õÿ_ÚõÈ‡�È
+Ü�á¢¦ÒjÒ—A+�kÝÝÈw@Ã�Ã‡pâß f1™
+¤69r
+0ƒºÈzÖ«¾/�Ìñýô^´¸h&Hl6Ô<vþú¯¯ÿ¤8a¥�0ê-¶9¿ç5ž ¬9‡%©þ«�x xl|ð@ðŽHô·®é±tA¤KÈ‡†G!bÈí•d|CÙX°¹à�2¬�òáàÐy �
+•�A<žsÁƒØF�ÆEÂXJf²	…|0ŸÙVGßÚí®¨ÇébÄT Ö,&…ªïœX\.ÒÅ ï‹UL!aSBÓ´ÐhZ{T»Å§®ém¤Þ“l!—vy9¹£0§—wO
+áÌnïpÌ5L+F(`˜S}œÇF7sæ%8š1¹ŽŽ©»M?Ú1ò`Xé·ÙØ4d^òÏ	Ÿ®Âwz¾®Ì7B­ÍÔ¹†ß~÷œ¿½?ÓÓ³v�Ùº•B
+Ó¥a›‚wm_æêMäÀ‘Aä%0…¬CöZ§þÃ½ãþ/éÞ÷¯Þ¸[_üvè]pÇÿô-úÿ×Zxöytbý†q	íážóáÿóá�ïâßû_qÿ0Ãøo»â—ö´ûýl&ô›ë§Ñv´mí›µ]®;j—Ë†Ì­ø_ÿ‡…ÿÛ˜	Ûëþæ¿Þ×ÿ˜‘+ÿÈíuâ—W×¥¾pÝÿþÿ£ÿâ¸Z1òCÃü7WÅ~�ÿô]
+ÿþ½%±IÒô’º_þ¹!÷ëì›ÿ’î½/ÿßô¯ÿP‹ÿÞý®°D}Wñ¿ÿ’KúKý/¯]J\‚Þ¥Æ¿û
+ÿÿ¾ÿÿÿ†»m“0íþŒwÚ¥µ¯ýýZúZZÿW_`¬wmRMZPÂØ"?â­-µû]%ø6¸wiÁÁöÅo%öÒé£@z¶µÿý}ŠÖ¿´´·_UKõÂPáª1	Š�4ÚŒ ØuiEÃJÓNª±ôƒO´£Ná­Úpâ£‹´Ói«Ma„ŸÖõÒ,KH˜ÿ^“é,¡&GD i¤-¨[ìj»^…³ŠÓQ†Qq¡aÚt#ÿmŠ¯Iô¼/¥¡î¾—ib"@Â—‹Df( ÂeØA‚ÚeÁÂƒA„2åÂeØB""ÐaŠâÖ)µð•ElUøâ""¤2‘Ü�˜ešÒp×T‚Ù/.!i6ÂÕ,M.`‹�0ˆŽU0—´£ÿ®ñKn“°žÖ­¤’·ªN—NÂMÚíõ°ÂCB#„ÃzA6ð�A½nÒXð¨G  Íÿù°k¹Ã1ÈŽ@ñ ƒ�ï�:F<4 &@¢²4Èf@&	�<6ð�àÓF·…]<'ª]®@æ
+¹îÓ¿ËÖ‰î9Ã@ïWï�?qwqQiý\ZÓÕûýWÈ`rÈlôÿÿÈÃ? Íäà¬.Ê‚%‘8‚`A‚‡€ƒ%QÎsA,5šòøœÈx"?�î2…|ÎD²vkÉO=“² ær1Í[$ç€ƒ/³BAì‰„||>äpª˜BÐ†
+ž˜C0„a>ôÂ„Aø\+‚}ë†°˜BôâA„
+?
+\^]Ã
+ba¶Ñ´Ñ�£a#}žY„ÑÒÌmß˜®ŒmOðÁ;1íÛ¾ŒYÅF6©£°ÂF´æ6Œtc‡vÂÚ1ÿ¤žn³i?½6Ðm'ÆGî“ÿVÍ‡ZMîûûÍ½?é=>ìâaœN›fïß.é7N“îÍÐÚ14›á�ôôÝë×ºµ¿‹¿OúÖ×ëÿ¿Õ½XôÇ^¯0Ú§º¾×ÓÖ½pþþÞ:Ä.q_\½{ÿ°Æ�_ÿÜZ÷ÿ¯x¥ñÇþãIöí_ýáuð¿¥øFÖÖ\/ÿ»ÿ¿ý¿F_¿æuÿþŒ	¼6×ÿþŒ}¾¿ýï ¿ÿý‡þ¿þ„G_ÿÿþÿÿþ¶íÒÿÂ#§¥éýÉýovH}Â#ß¿¯ïÇëÜ¯ÿþºdßÿÂ#­ä`Ã‡[ÿÛ__¿×þÖ×]\ûþÞßûýÿ¿ý¯ïþIþþ¿öÖÿáý¥¥
+mxpxAÚëüzöƒímøvý½]÷zv·éC^àî¾JöIŽÓºío4pÒpÅGÅ1qÔTTCNÔZlEÅ1V¶š}ÿklZiÄ=+Ø«ö*Òcm(éŽ>)‹OŽš…Ó³É;9¨Qzm3i'8¯I¦š
+j)b°­FñÅRÂxªbšk«wò`bnC$ ‚ˆ!šäà†œ1 !°†$A˜ÂˆŒÀSyv¡ÃC	¦ˆ†ƒT!™äƒ2ð!¼ƒ#ê0aa4
+i—‚›A+	„ù°mð ™ÁâðšØP£XˆˆäÁ–& 2Ðˆˆ~�5¯Z|ƒH÷ßÚíÕw˜ö@ð$�AC‹¸¸uÓÿKI¦•}ýBi„Õ4ázøë¯þÑ;	4Ô|„tx!­X"á<Èa'49|%Åñd¡I¹.A–ä»Èx!²sÁdQÈ(‚1ÌäO'„àðb#´:–u‹%Á0ƒ
+ƒ _4f²c•é„ÓA„šÆ™}åzaB¥ùpVBÕ…â;«
+ÓMY~ŒPƒ©�èZ1ùy®�¬%F;7ÑŽ›íWhÅL!j˜F*7í…á›ÛÍÔb£§W«˜˜`ˆýÙ»7H(žÛ6}¡‚¦ÚzzNŒ_v�›©<ÄÊ!›7w«fëý?]^õv1¤ú×¶—uñÛþïcê?î—_û7Òã¯ÿýV×ú_§HBÖØâ«Ãý¯ý÷ô:xöý/ÿÿ¬Àeï—ÒÿË´Ñ€Ìì?Ävé{ù´GFÄÿ0ùÁœr,ÿ0Tc†ýñ �ÿñ	oÖÂ1ßoôa~Õÿèx®¿ß	ÿÿî–²nþ”/ý*îÉÞ—áþÉºNûþüÆÁýý‚#ëÐUÿý“|,Ã»ýj½w —ÛPDw×óßÞ•ýwß`ˆÿÿ½×ò†ÁëÿýÖÖÿŠµÒ0ç{»ßH±ÏÇwký½‚#ö+ýÖ–î×á…ÿŠ´àÊ&»Èì†¥�=AöC@ä‡ Ù\ƒL<rNMÈX xmÇüZÅ1Ä^ÿhiÅÚvš±[QàÖLiÔZõpö-Š´˜­X†ö�A®UB©šj*`¡0©áBç·¦OŠ¦)4�¤0Æ²?¶£g“Š¤ÃZiºm5…´Ò[´Œ-aÝÿÈuÿþ§9
+Wa™‰Pa4žìÀT8dpnBfð˜BÐˆi›×â50™¸Ž!„a¶ýVƒKîôírNø";¸h;‡ Úí.øˆˆhDDCGÈðB‘€$q˜Ã:Õ-ñqýWÇþüEDuß­u_õ_ÿý¥õ°‘k#sÁø�Ï\<ðC]Îäã=‘ÞUêžg#ÀƒG\‚ãçr%‘á(*Í{ç‚-�{RÃ��Dò?A­á°¤6[¬úQiñŸ°W, qa]åÂ:FÆZ|CÏ€�Ä4aL‰…yìÑñaa_‚°³„ÂH0ƒ!8�>©1˜öŒPBèFÑ�°§0†²öæ=øZª´bl'‹[FÜ{X]ncÌ}´Ñ„Ñ�£M<E­m›©>otïO/6Ã7¥nnÓÍÍ÷Ã¸aMßxSŠŒNs¤ÞìÜnní>ó{JÕØSmÒm&½…1¹ïˆµ×ìÛuAÐiõ«³v….ŸºK¯÷ ûÓz×»»Óý�½Òvn³ª»ïN×Šÿøü~ñÓû}ˆ_ÿñõÅï…ÿ×ÿáÿO\uˆ_Z|.ÿI|À1úÿ÷ÿö—¸_ùäÌÿk_üÀ1Öÿ´l]…Ä/z1õÿÿùpcÿèÇÿ÷ÿF?üý#½íý¿ÿzôcáoÒÿÒÿ$ÿß÷ú_ÿßé¤ÿÿÙ!Òïô]ÿÉ÷þ°ˆê©>ŒZô¾ÿKïÿ$;ÿÝ%ÿûï¯ß’Ö·ö6¿ý2+¿¥þÚÛþ—Wù1ý°½Ý¯úZß×ÿõßÓÚZV©ëõÿðÒÛÛÿ[]Uþ¼C»bÒIm(¨=XÓöý(‡küPvœ\;µcö*!ê»ÿi1PÒÿJø¦-Žíý!}¤ñM4…ÔR
+Šcj)4Ó§‹Oá÷LS´„[Òh4â¸á±QÅ;÷iìÜ¦ä´¢”0˜L&GL%h0™‰kmlÆ)˜“	¤,;L&bLŽ‹ƒë]CA…»UL&7…²t<�Ðp¢"!…0ƒjÃlrƒ°ƒSh)„ˆˆ†G�oKÄDF‡È-†Øä69ÃŽAw!¶9{ ´ä69Ç ²9
+Ž@ðð@±É¹
+XëG_Óí0š§v¹˜
+'…ÓVº·ô
+ƒ%·¯§§A4ô°ÛNéo[d4�Ã¸ºíZzö#¯k¶¯Ðâ":[z[iøÿ�îJÈg‚
+ãçrx]÷ûk˜rp]“îÈ¸-É¹à‹™°0æ„ˆ\ÈJ6&dp~>Æ°ƒˆiÙ
+ƒ™Ò —D,ò9ðhH…Ì„>ƒÂ
+;RgD¼üWXL!iáÂ~C<zjŒyŒòÓ¦‡m4CÁ=m0…á>®£òô'Únô¶Œ@ùï£K\>éxv‘ŠÎNs‡¯F÷ÓØg>ŒO­©½úóôaÚjƒ³w}«Ò¾]¤æ ¿}„Z¶ºoI›º	ù­kTŸ‘Úw§øcývÝý}uëâ’T
+WÁ�÷H»}>½Š\Þ½|RÿöÚ^Òÿý*Z­*t½¶ýù€�ûZ^·KJëét¿ý†!~÷´»ÿÿô»_
+ßÚ_üRþªººïö¿ýÂÿÚý[a/­WI'ªÃlVÇ‚#ÿßKëK«×Z¤þîŒ_ùä+·Šé_ô‹r¡[H‹~gÑ�ukþ×ÿ¤Xç�[ë¯RÇ.?í3ÿÿOú0 ÅWëMt¬$[§û ý´¿KI/KCô�$»KC	ä,`ˆÿuO_ÛßõŸ�_[„´)éÐ×NWµÜ4Ÿ_KWJ›ÖÜ%kj±œ\qûIë»²™eÙg xjŽ@»�ð\ ƒ$Èƒ¹
+Xâ®·L�i8Ù<ö�¶*¢q]Ä'bž™ÕÅ´ÓI¦ªtÐàÔ)Á˜O[<�àoa
+Ceé6Ö=5C«#Š‘‰«†§4Ò¥†±é'…°’Ž‡LÞ �Zab#.r†XîÿûD‡R
+ƒº«¯0± x;Ì"úˆ£†-¥AÈdˆ
+«º7›Œpî.71Ô^cNþßé+®Úõ¿­t¾ÂwÿT‡u}&ý*ŸpI+}%‡¤�YŸÿßë]zÿoÒ	1K°ü%¾•BŠ ¯ ð\‚°&C^È·ãŽaÈH#âV@¼y‡!³Áäá²r+�È˜�™ÈiYöFåAy‘G²9œ‰d_ôÛÓGäÓ ÛÓ ˜oÎBBÓ\éá„øA„„BÉÁPnˆ`ƒ‹…GHàh!ÀÂÂj–²¬ Â™AžÂÂiÍ#ùÀÉ
+éµZ´AMÇÇ¦†cqn„´c£küZ1´c£Âæ7kxfíLÕÕ¡‚ÐhZ6³$caSÕQ´Ñ�tøˆ‹0‚…'Ün³sÁën{óu'Ié°Ì;Ë¾—1CÓôÐ`ŸÄûÜ#sžôéa‚IÑ‡—pÁ;9¸M¤öõˆŒ5ªéþ’jÂë×è{³n`ÛûÓÿïM};^ïÔ}­îÓÆ¼Ýzãÿ÷ñ�ÿØc÷ÿŠïïv—þ£ÿWb)ú¼ë];üÀOÿihÀ[ÿ0ÌoÖü/ÿ¿ÿÿÞì0K˜µSãÿ0'îÒÿÿü‚ãÿ·ÿþ¿ÿ÷_ýþïL4oÿÌÿïù!ÿþ<":‘�¨ÿ†òOÿ_ÿ÷_ÿGÿÞKòOß_ØDtÚ¾?ÿý«V×ÿÉ9C·ïúÿÿÿ¯ô•½}­ù'ÿuÓ­®_¾¯oµòßøi[°×^ÿý.ÕÊ®ÿa¥`ˆûmo;¿|WÚÿÃVþ½ŠNûµz±ÚQV—úQ[øûbÕccÿ[âí¦±V«±Qv­zqMí4šxM›QµlTWšiÓA8ˆmRqWqQ¼]î!ÓÅxa3Ž‹Är@ûA¦˜M'Õ§´­4Íè0¡GÙ´mÂ
+0…¤=›Ìv†¯I Ìa5XˆˆÌtC àD0ˆ¹Ã6qËÁÃdzI$!Al
+ãµðK frƒK�ÈQÈl‚†ã�< ‚°êA~L�á§ë…
+A²j	�<6ªRN“j½uï­²#‡Èã¹
+¡ÈjŽóºôä
+ÇOí^·ÄoªÕ×ÇpTÈ£ç‚,drÈŽw3žðR›�ôò	d¿ž2¹ã™È� ¶
+üN
+À¨0@âÐdÁp{0ƒDY>#óp@Ëð¡A2ø ò¬ ÂeYpK‰Ó‹$äø†‹B@áäÃEhÆÈl¢HÂvŒa…CMÃTTõÚ­á:‹FÖ,&˜O°š¥ª7·ÒF+9´�C	 ós¯žMšN´_74a½¡‚—š	Ã³nÂ˜˜aMøM†.c·ÍÝº1Y»O†HH.9�;´ÿ0‚û§@Ê°ì'ªî†Ÿvlþ¾ûßOÓqÍæÞ�˜~·Ü7»·Má~IúN!­_ãÿûv¾?ÿ[¿Z]ÿìxcëÑ€' ¸ø „ý/û˜¿¯ýþ º7_ÿëæ/áÿ÷a¤ÃÿðâºHÇÿ_ÿúÿßF?�þêÿÿ£ÿza¶ÿµïT«ïKþ¯ûŽŸõúðˆëþ¯ÿ‘�úUÿØm&ÿò˜äH"Á÷OR
+c�¯¤—þ—ÿ“Ýûõ÷ÿÿÿµþ¿ÿG¹�þú «a¬a�ž²nT„àök32É¹>A›	AV È${¢Üïß¶©æËo½†·÷·ÿÿwa[ÿ{Jý†û[òÇû÷Ý×m+E Ñ´ÑŽž°š˜M6”*¨L!s	¦k„)8‹¸´5‡iXJ+»Š´“†m-0œÓMa·ÃU�~Âv’wj©öŸ¬l9üçF-=8vÖ^s¢rîºÐF.ŒPÁLN{¤òîŒmú¼[I#
+ìSé¡m1IÅ1I±ÖÒ|S
+¤ÓB8ðšî4â�¶°Õ_ýþ·m›‚uºúw¯ö´µ÷§ëfóä] Ìa(»4 kžPÐhaM›Ó0ƒ6‚!§�™|äh�z�fxY^khCU¼b°þª:~?×áŽ×·Œ_Ûâä
+",!˜@ðdr†ÔƒDGù€öÿ¯æûÄù€Ù†:¤8Ž=xF;ÿ0ÿÿ°ð�­~
+ß÷÷éa‡ÿÿßøoAmþF:1ÃÒNÿÁþaßü“þäŸ¯ðý`‹¦©oêS¨OøaW¶ÿ¿økýùží?ÛI´—0íúþ¬lCµm=Š¿Š»‡þñ Õc�íûQA¡pª*"é0ƒM¤/bpÒb-6šˆv–"†f%Øj"ÚžH0šN9ˆæ_M5""!—ˆà@B""|!�ågzÈs_ÿþ@Ìc�îC �à¬ù°g€P™· xmØP¾ºj¿»¾ä
+woqwò
+ŽC$7ýk_ÉYÁ �ä09	AáH-F9À¸ù�òa‡=‘ñ.'Æ¹¡Bd¹px ^€�˜äX#r ÙÍA‘Á;5“â<;*Â
+3‘³8
+Ãá.>óqg2nS‘¹‡L¾!²
+³Y?7>´j·£&…¦šah>ÓL ÖÔ'Åª§„A§~4-ai¨B.éí²õ¡æçíóÉÌAK¶{4#Ñ‹Î'.èÝF8w—²ó)».Û9CNŒV{9ÓF6ŒpáôblæsË¢:jÂ—³ÙÍ£=lÛíÛVþú§^:ÒpÁ	Ðºt›õu÷ÐÚw­¶:1wIü3é§MÃ77Wj�ý¯µxbÃÛæÏ½¾–ñtÖûÖ.¿cÕýí$Ÿî6•†?Æÿ_]ñ[]ß¶
+¿è}þ`'˜ˆåOù�"Øa¿Ì¿ÿñô`'æöøW¯÷
+†ÿÛýŠÁ÷xá¿}„mw
+×øú×þŒ·þÿ�íþŽÝ~ê`ˆïÿdÇþ˜kù'ÒûjÁRn‚ß
+†É?þÎc¿~ÑŠý²Cÿ†ßÒãþé7¶ý+�ô`#	kuÿ«
+&¥êaÞÒ¾Ù8gÿþàˆÿGoûU÷&ÿ‚#ßýûI‡¿“�{^NÇvÇqÒ�Š´íoc‡­A»M¥j°Â¯oiñýÚ_¦ëöƒ®)ŠŠ�C	CHE¶ÒIÒlPa5ã¦�°ÓÖÆ„lSá¤Ä[HE±ÝÃ�0š¿A‚q|�‘Á ¸Ø‹Xf$Ñ†³šfð¨0„C[†ÇjsQLÚ1CCH]5"3UÍ†@–ˆc�<2œ‚Øf^ö¢Ž¡>ØÐ©}á6<ŸA„…,r†w x.=yéZXDt‰Ž©.í¥„0ƒMU´°Œh#
+Â!ªõÚ�ôºIB­ÑÐÈN	F’¡T¾Ã½$
+¼‚Ø09Á@ä20r
+®@ðRrä2wê’Ì>)bmé¦C 4h�…	èP">þ»t©ÛòŒ|?ÞÄ^¾½j»ùî¼ÙÚ ÒäîC O1¦_I-¥·xøî?ö"#Ñÿúû¯Ó7Hjéî«a­­ùÁÈqÓ x ä$d®¤QÈ äK#µÎäH%A
+qÈAÌ9|²g"Ùàð\áºµíŽ�®¿È-ƒMÏ2ø¿ Ðd8äÜðAø–‚° Âd.
+eá¼×–á*W.d½2ì&šdñ8˜A¡dp�¡d14è—-„˜O6xä]›0—±øP…ªiªt
+µA¡žž×Ñ�¡„Ð×MÚhÆÓÅ¦³@FTozi£j…Ìv�/»¯kûa#æŒV²õ³ÊŒO
+51Új4›Ú0ì$b³ž›¦Ñ�†
+sÌPÖŒNºôbsÞšÜnÓm×¹Þ•%ý—þìÝzlö\»9µÒ¶7uÛz÷§fï¿´ÝR®Ø~´®`[a˜ÉûIÚþ«÷­"Ú(½tß�{×ÇMt>×o¿MÆî•7~`1®í~£ÓÇ�PôýP­w_þ!~µïÿÒ­K«û°Çý$¿®»­ßðñüÃ¯ßZKâ�[ûo¯Â¶ª“>‹ƒô—ýþ`$/þßÿ0ÚtëûÛÂÿŒÀ_\ÀJ_¤µ÷zÿÑ�×B+ô¶EÐ]š
+�A/úú1ÿö×ÿ}QŽÿ×ÖTcÿÿß¯é ºÿcý.8Óÿl ÓCì¯ÿÒì›ÿ·ÿäcèº\Wÿ¸}/ìuÈÇû¬“é~‘÷ýzûKj~¡8´aZIÒÿü�úÿþB;ÿö¬m%¿õêgmÿú²okÿu¤E{õ,tõ»ÞåÃ?ÿFðÖ×A ð[_
+¿û_V_û¿û_ÑíÕÿº¯ìlM¥ý±éá^´5Mé.¿ØA¿�ø«î?ü65‹Ž«}¥÷ý¦éö«÷Ó
+V£4GÁëI¡½ª¬¿cÛõ“…h>*»ß×«]4Ö©7kNø¦)¶ª£ðƒb•PiÇ8„[´›§n�;ƒ¡voJÅ!v„YXUé:þ�{u¡íszi„„]4“vq*ª
+ƒ¡S7—Ž$O°•˜ì ÂÚ¦G´6ÔòS
+"4½/žØKdpiDDY¸Ãa´!„Ò�È‹a<q¡¢7Ðmÿ:mCu�5
+w:®Clp“Z¡“Ž©uª·³ŒŽÈùp!
+ÒŠ¦èDDWKÑð+Tã[C¤Ðˆì$èqÿÿÿ ¶C*r†w!\�@­È(r²à‚Ä=9x xkŽ@®4Õ0©…
+UPƒ
+L/««ë¾èÂ©aÃD¡ÂûNCMÜC‡qr>á²lƒ(öäÝñÕÿÖ†—Õ_­ÿÿ_^ý[È-†hä'“rVKÜC@ù‡#‚Wž39ÜðJ¸Rn��i�ƒ/4ÉYÈ˜!‡#Îžx#ÃvAlƒXA„�Bié‚5£AÇ*dæn‹	Å…Â¢p¡'Îg•0ž~/�e`L&Fáç°L! âÂy¯
+†ŒoF'/6¼Ó�Q½lXP�§sO]*ÞØAøvš)‹TC$bhÄ¥æ�¡‚æ6×»9´šZî¼Å›áé©‡¶¡çKf(|8f¤›j›œÞíU]Â—vsuWµ¼$srõ‚)ùŠ–ínÓï«Mk]?ý³Ìá{VÿÝwÒéÿÝt—iõBøZ»Cï—úWâ º6Ð¯þþþ!]÷û¥½z¿ñ£ÿ¿Ÿ.ñÿsoÿõ×¡ÿ¯ÿü*ÿïÿ^ÿá^`'ÕÞ¦~`'úÿúôcöŒØkÿ¯èÄŸ×í/õ¿¿AwÿÔßÿn—ý¯dÝ-§$:_ìWþÿ¥ÿû_]uõ·þêÂÉõ’ÿ$<ûoÿv©£?ÿýëÿOúT»öŸ0¶L{Ñp�…þÿûV¿ív)48«ÿ_þÒûO¯íïõ!ÞöÓƒb!«
+°¾˜Du¤hcþ<�Áû@ðmr$<Gª±kLtñiªry§i[kiG
+$í8}¤ƒˆIéEÔâÅZllpÚƒ´ÚNéiÂ¯„"Ôæ¶¡EÆb˜ªb•
+¦�ŠL5lSÕ3ˆ¾íÐºjØM!m'´¬*A;üösA˜Èà¸B"3zf‚æp2Â¦ƒ2í�má¦^‚°îÂ›aaKŽ-K�A¡qZÈGÈTÌáµä2D8ˆ‹Ò­/¥Õi$A_‚—™Á¿â²†·%TÐZEúµÐDtÒVVŒ}*Eý57#rÉÆ‹¡
+ÕV¾’¨PƒoaéR¡
+�J�ÖñI……z¶ÿ[×;§Oþ@æOQØŽ=u¶ò07FÌ#	™Èh²ÞcL&ÿ¶¢"ŒMX±ë½›´A£D¢Ÿ÷úÁ-&ˆAÑ¶ÿß m‘È
+N@ðG!�Åt+§ëÿ�3i�ÈØ
+@®L�¼\i.·ÿÂ…
+Uô½¤’ûþaHdwßiì�á»½d5´I!ÿ×Ò`·r�ã´®©zõïþ+õ¿þ>qé¯È�¾º�Öw\Ã‘Ò°‡ivÞ¹°Ø9'"Ù|k!•ÄQÂdÇ&çƒ¹ìÖ! ŠærnEÂ
+<‚Y';ç‚øÚ‘]<îEÂ\NâvFç‚,È˜A‘xÐ\Ù ðƒ@â™ý&“jÅVAlé„ûLÓ'd0šša0˜N²¬&¸‡Ø@Ðq
+4Â¦-U0M4Â
+>4Ð&š„–›^…£iµHÅ´8J…Ì*hs
+ŒL0¢Ó]¦_£i´èÄååËÙ�èÅÑ‰£zw˜Ú16ßF7#Bâ)lästûUÌN{a ìÞGÍÆîpÎfêMíèç˜¡©ºû0ð›aMúµpêéa›Ú[6k§wK­éöõ¿j¿t”RvøÖ÷íÂÛ�'ÚmS‚®ÒÛ_¦ã±á‹ôû¼{ý5Úz[¥ôâ·ÿÿïâ—ÿÿÇ[¿ûë«aŠú_0*ýE„0¶—ø+ÿïøaÿZ6
+?ù±�þ·¿0=°¿ú_üÀ5ì6—ú1í+ßÿ¿oûëÿ®÷K÷ÿo
+„m~ÿïïØ!m¯ô¶<uÿúðDyÿöHÿGÿõþF8}á?ÿaÖ½Â#¦Hì�â#ÿí_¥ÿëßî·ÿkû_¯í©Ç|ÃºþþÚ·ý®¿¶¾ßûÿÿoá·ÿ†­¥úûú¿kØJþÜÑ§ö¼UßÞÅCý}U»íuNZ_±QþÅz¼T5†üw§jœ_±i»Å>šlVƒB) Ðm$Ó0„4#��˜Oi¤Ói4.¡1LEµ±\CAêÓ½U!†¹›øaEDEM²8k&£Ã0B…µ�1„ÔÚµBÍæ5A˜ÂÂ„Ìh4k„0„E¢¶ø†DDrPÊ5â>5�[~ ¶ý„´©:Ú¤Çÿ ¶
+c�Q+�<$[ï„Õ3Tá2\o7È(ª¼i§~=Ü^‘ŽÓ4C!>ŽÖï�ãâïXrÝéwÕuÿÎäW´òcíÑÈ�äëªäÇ;�Ñd6Ç&äA��[k'Ay43Æ!…rcÉ°ÎxÁ‚Úá2.ãÙ¸ÖU›žx#ÄAÙVd6a,'Y.'á
+J
+ƒù|Naha�HBÂƒ´íp˜]H7½;
+�èZwziüZ6˜L&µL,à!h\ÂkzÒ1>bx}C7&‘‡$bw¤ŒMœÆåë‡ŸG•¬(Ñ�°ƒ
+nÂy{1¶s£baªoF'$Tœ0EŒOÜÃ0Iæç\Ãz‡§ÿI¿ëô�iö	Ò·›ÞÿêšµNÓ{¤ðHa˜3d�›vŸ¡¿§ÖéÅwß»Ko]Ñtô1nÆßÿ�iÚÿã±Cû¯uÝ†"¼_þþÿw×ë½Ò¢
+Ã†?üÚþ!_§˜þÃï˜Û¨ay„ˆ3¹Ã^N@ðAÈ9ŒrßïûÂ6¿úßÿ±Ç0c†ß¿Ðþÿ‡0°Õõý°�ÿž˜& ƒ	�È�ÿ­ýûº_ýyèß
+†ÿý}ÿù'ø~·õðÚÿ}´Õ~»îÿÿØÿÕÞÕ‡
+ÿöMßÒÿï
+äŸÛu¼�þú`ˆ÷û&;�S˜´äƒCŒÇGÿú_ÿöÿK¦ÖóÙÇý´¿_ïl$@�ÞëÎï}0ÿº{}}].ºB»÷ÛitÄ8i´®Ò »ÓÅkooiýÇÿ¸íØþöÖãûUø‡m…Ã1ýø¥b˜ö);½ØÐli¾ìE¥jÄZ
+6 í8ê¢Úµ¤ÐŠŠMÓMŠN8¶+ �Fû�ÚrX@ø}2(ä$&[�<rõÈ;�cÈÜÃý[A‚f ƒP¶¨0’fÃ? Âf˜¨©ÄqÚE”zuaEC
+a¤Ó
+tÍæ Ñ
+¾+�™VaNå÷ªd;žË‚X_…ÀDñ¼än7˜2àDŸ Á42<#ƒÁ™¸�4rà@Ð9¡•’sÙ.'Ä¦0„0R ·æÐD
+W„D2<¤t�„D2SD""!„C@â#UµŒn-4´ÑŽ°šh*íÅ„TÕQ´ÙÍ¦Z£	…F6Œm­¦�¨A„-4¦ ¡5ñ¢ÐQ
+TÞéÝºµOŒPôìön¾ÆŒTb†
+]¸NÐt]»éÃ7´˜IZ1C&qeÞ�]²íó3sFøFñ[…ß§U›Õ^´é›�¿ºNÂ¯æãsIêõ×õl‡fÎôÿ7ð­oxM³wi]›]tè'Ôî¾:â¶×µ±_¾õOññxÿþÒÿëú¼pÆ»v?Šÿþ�>¿0¨ÂU{âÿzÿ\Â\ÀŸïñÿ˜?óf˜qÖÃ^‚úZµÛN�ÌÃ­þ¿úé
+ÿ¯îµöÒÅ_ß¡m
+ûïûÒXŒòä‡ô¼7k¢÷ÿû®¿÷þŸØÿõðýa½­¿é}?ßäŸ¼±ß}t¨þºÿ¶É¿‚.™1ýÒõKôHwKÿ$ä í¹÷A½uýý/¯a…Û÷ïýt¯û»ýÿá¥k¯ûëòá…¿ý†•½ªÙÝßÿï×k^+Š^ï×´MýñÚqPllT>ëÖ!ú'cþãº†×î®!÷w©Ç÷BÚMÓa§ÚejšhEÐNÕ�¦š}XjM=ƒ¶˜¤XM¨ØþÆ›l^‡µBD#°¼ªÂB6o0¿9Ãà�ˆ¶š¦D0ìR³zà¦6&“f1µT„E4¬Ä_	Ùýd�®tÜ†@j""!„@ðÞàXB""!²"#6‚i®aûB=4ƒ]{ö¹°Trƒ äÁ©ÈeÁ
+g z�åŸ E=ÅdÁw
+AiÁC H.²
+0·qT0´Ô&˜Uü-£iÄV;ODG—»�<Ý¡æ9�êœGuQqÄv“~ÿÒò
+NEÎë� rrÇ x.92‚9Îå��Ò‚ðªEŒ‚Ø0åÁà‹ä°º!d^%„à«@ÂBÉŽA{#ƒÁ¾0™‰9px"adà‚øCÁìŸš!C¹7< dðœÏ|4Ë‚XJ
+²æ�„c”åF
+µ	„ÓL*aX´a˜A„˜M4ÂaB� A¦°†ƒP¡PƒB"ÑµŒ&…­&„_èÇ—™DK»9ÑŽŒo Ì4�vr1µF&Ò.óUæý“F?£Ìú¦Rï4G³ž›füÆ×$a°øvni:»7UZéºvnÖÌ¶¦êM³mûÝZ	ÝœÚL)ys
+«a›˜fË¶Á8pÍÖ–Ã0AUÖáÒl3
+ËÁ{Í�È'wIâ÷�m]
+Ûý_«ÝøéWwiþ«Wk§¯ëë÷úq_ßê¿¯ÿŸ=Ìÿÿÿúþ·6ˆâRÿñKñþ¿ÿ¯þ
+ºþ+­ÿÿ0_¯0ÿÿÿÌcÿíéuaÿÿÿýïÿ¥ÿÿú_×ÿ¿ÿÿþ—ÿÚIwHÇïÿÿÿý/ô¾¿ûðEÓì›öþIÿûÿÿl�ý‚#¥ßøb”ˆÿ¥õÿÿÿÿúÿ¥¿ÿý¥í¥ÿuúï_ÿë¶¿ÿ„l¢Ç;}öÿÿïÿÒ-ÏùAÈ®@ˆ ¶
+®AiÈdïþÚloÆ«{ÁÝÚþßñ\T[êqÐøwë}ö•¯éÃÿX‡÷ö‡ö–�…!­„2âB�VÀ½¦œ]!MFÅÒié¦Å/´“MÓ{ˆi¦œ�	EûM¥í%	±¦�§i±I¡PöIªNlPOôÈG®¸B- Õ0‘íî†ÒLòÅE´¬&n	ˆ‹n…éŠgŠOaU'm'³Ób¢ÿ
+Ú ä+£   Ìîä8pødpn^Y€Õ1„B""½°„DYœr0Ë‘Ž8´ÓP„CF�‘Á@B"0…„#ˆ†„
+.B¹ÁÇßüDrn®�ˆÁÉî:ã§ªú÷êµYÀÝû×[\‚>¿ði-äà¿2 Üh'd Ÿe`A„ÉÙeñ9ª†Ì'ƒyð›“ƒÁ7#ÄU„Èr »Ïd¹™Èì�ˆ7âp{ÊãAöJMŠHîºª1´aci	¦šË¦šh[NÃP…„‹A†qh>, Õ…îÃ0…ûHiªËÔ¶š¤bèÃS‰°ƒ1¹yž‰ûm#·¦•
+ì)½ ¯—žŒ;
+æ:1åÞ}z©�xŠCaÕûwª°ýB}ÒÕýÙ°j[vaú„áœ�Úmé÷ÁÞn}¼ßK§[a{uN»ˆì1kþ?ÿßëI¿~¿ê­
+~/¦é÷éß†û»tÿuü1nëÿú¡ÿ[Äí+ý÷ù‹¯ºÿŠÃ×»HBÿ¶ŒkÕoþÁWþ=}ÿþ`4¿�þmwÚ|/øm+´ÿ´¿Ñ¿éèÇøÿ÷ÿÿÿÑŽßî)ÿàˆí¥³ÈSd‡Ø¯ø[‚#ûù‚é~×ÿ‘�ý’þ_×º[n—« ¿ÿÖŸ]ï^×ëI½/þÿµýµþÖÿÒÎï¾¿ýµiõ.ŸÃôím5ÉÇÙCÚö×ÿ)âÚí×üþ¯ë«Wþœqµ±IÊ6›KÅO!IØ[Ž"þv¬Rzh6)mm&*•8‹ØiZwÄ;¾é›ÖílEÒ
+Úh5Õ¦ÓºÖÔm ÃÅ4Ô¨B˜¤#¦"ò0Íq¨0…€×ÌA†
+§é—¤Ôäm‘Ã˜&�„BÎ#ÈÜš!Ùˆ¸d†"";�Én"".C$5 GUT�,� hrƒK�<ÇŠ!’ðUÈƒ,±d\ƒU¦@ðiÔ†´5L*×Ó^5a4,/éÈeµ6ŽfÕÄGqWM>@»�[_�[ÁÈ8ä1d[#z ª9	�S�Ç î¹°^†°@Ë: ÂeY¢Ê²vh*ÉAŽ80]˜Ì*ÉÙ|B)žÈ¶J}•`ƒ2	ö…ª£	Ìn-¡
+¨Ç
+µ‹U	 Âax´Û
+žÎnbm¤é;³›vr¤Â\0½¡åÝ4b9æ,.^íSüÛíUÍÆÞnaÚwjü8fæè}æß°ÎzÙ°1¯Úu~¼V´…]§ºÿÿýöÕˆZxÿÅwa�5
+Ž@ðVƒF<$e§&äà�ˆ ÉdãýanÿUûÿÿÿï‡áj×éÁ~�<6D4Â¡„Âè4·„cÕ_Ý}ûiþß„oüÀOz1ý½&ÑŽáÿ_×Kü/Wÿÿ±_ÿ†þÿö—á²¡]¢Î“tï»Œ½kÿmO¿ÿÿAþŽý/ö�þ»ðD{Š¤Ú�»¨�ú­ðÒm/ÿÿÐD$ÿ}ö½6¿ßm�4qÈƒ¯E»ÿÿz±IŽÒþÒ[íy<ÿƒõý(ïŠÉ]ëûF²`¯Ä|OÊÃar-‘¹à��ÆÀA„Ô‡ÐMÉ`A›ˆgsÂ�„¼#ò„róÙøK¼†g’²NTÆ²ã C‘îNh‚ †³�ô"*) Å'a8¤"4.ša:BÓB¢˜vtðƒBêÓ†ªši•ns„Âžè4V‰°šz`…ä&z(A„ âÂiú„B?0�ø0„4ÂË™ì¿|‡›Œ5A„D%A©#9Ì)Žê†þÕ2;QMoLÙ„p•ŠtbhÅ—wÓ˜ÚhÄÊºF·BÑ½°‘‰³Ê¡;17FF:7ù�£ðŒTcá¦¦0âÑ´Ú
+q°<	Ã�<±´a<Çtžµúg:Xf¦ë\;0á˜fí}l&é›ûlÀh	ºn®ni?ú];6^’Ã0fÒ ìän³sšy‡U	t"?xã»Nÿ¤ÓñÃÿ­­¨×ÒIû_¦«Æ?Þ.¶Ö¨èRmªºÙ²Õ³’üR]¥ºúuŠþ:S1ÿÄ-ÕV¿ÿ…Qß˜	ý/ø¿ÿ÷zWûh~—ÿ»	þß†ÿðº0
++ÒÿèÀ'õK×˜	ÛJ`2¿ÿýÿ„ØA4ÅÿG½8F%÷ÿÑŽ½ýþŒÝ¿ÿÿÿÿÿüE—«]o¯¯òCµ’r‡¿ý-Û$:ÿ[õ¶Ht`ˆÿÁù!ÿÜñW÷ÿëßâ>ß
+.í%ý×´­ÿÿítºË_õ]µøkkïÚûÙoÿÿÿ^ÚÅ1QþŸÅ4ÇoÿwV•é/m¯-¬SìSå½ÜWí…öëûßÿŠiîÒˆ´ßjÖªqèSÚN©±A6*!¸A§éªl[ ÓiŠM;
+šw»
+SÃM0™ˆ X¦qaS
+=ˆâM.)*M®šj0Â'Oi¯ÚBÃ„zi±Iä‡â!…�Õr‚ðá„�ˆaaŒ!pËÁDA¢
+ÖÂ†Èè Â`£V:ˆ‹�È
+x•ê—õV©'„é6ì ¡'Û	ÝhXXˆ�ãÿÿù˜)99
+±ò0Ï6qx!�Ê›�<8TÓ ÞdrýT�óÆ˜*ïdô	§�3È49÷ }ƒqôcow¹Èwqi…úì4»¢*ÓYÜ�á‚°íÚÃZm.¸¾¾ºã¥¶–ïÿ_ý~» hc™Â•‘Â‘ŽEr æ… Ô9Ü�‘ÙÈ98&ç²,jDr.óÁ�lr,:dÇ&æ‚à�ë“sÂä4?î»d
+®ÂÐa¥Aàök%Á!x!h4“‚à«#äaeð `˜[‹
+_„BÓ	¡i£ð3s„! ò¬�„KµõPÁKÍ‹M8Ñ¼=OFF:1B„-wTb§I£jÂ¿	Ì.¨]é®œZ®Al‘Ó –CAé�TƒÝi�Ã¶ìçi\2
+4b†`ðœ3­‚(tí¥óêŒWpÍÏæ80‘‰Ó¼ÝtbËºAÃ	ÙÌåFøa#Ù¹†ywÕ|&¾…þ=ÚoÛ˜#pOþ·¾ÛCakÝØWµôé=7ÿõþ·û´Ö×UÿÍÍÓðÍï­šulçëâúýxÿ¿¥ñˆZÝßÿÿ^8cÿc1ÿÇãw}±éù­+¹®¯EÚÐOÿþÿãåÃ×ÿÿüBðEÃÿaÍ¢è&þXá=/÷øz]
+ZòüRëQKJÿÿ÷Âÿú~Œ~ÿÒ÷ü/0ÿÝ·ÿ¡\À6××Ã~¶—T•¤ýiÿÿú1þ`ý’.ëö?ÿF/†ÿÃxoÿ˜¿¿¿·õKúºézý?ÿÿ¥ýÿMÿ[ßõëý~IÊÿÃm“pD{ÿ¯¶HÿÁÛÒí-%«Iztº×ûn¿ÿúòÝ'íSïþ\û÷¯ÚVý·™Þýÿú¾×ûþÿKH±ÍŸ«¤Xæ×¢Ç5úúëj¿ÚÚú}ìq?ÖÂv“vœðzÿ|÷v�„GC4*¯þÿê}$›ISép’§õ§ƒb–×�MŠB0�4ÚªÉÃ,q±oQT…§
+^:°„Dq´¨E°ÓM8¯IÐ©t÷®ÐúZÐ¯Òã ÑÐ‹g{iÔ;Ã	˜�f:h]Íê0�%Mm3z N)ªkd4r´Ó¬D_¡^/Å$ôüUò=Øè�˜fÁqG€X	‚xŽ˜Œ¸g	—
+ˆˆâ""Ðaƒˆˆ²òÂhY3ApM�m4ì%¨OCì*I+ù`4šà¿uFö	R(}'¤ÚZ¥ÚXÕPnÊöëëoÕRxŠ	é¶ãîVÒ8ö’IXið®‡­Ãa
+¤ºq¡ûq„³1^@ä~@ÕiÌ=äÃ;•eŽ@ðb™ÁÈ‡öü‚Ø*È2›ÿêýòðC `�áÜ‚ˆ!Üœà†@eqÁˆ.Íd��3‘r�“¢è¸ûØP˜TÂØTðª	ä
+V‚"7zÖ»»D‡Ñ�»ÿºY�È8pââ¤5‡rß
+Õqw|^ýW¯Õ×¿ØªþýÖÿÃYx"ŽMÎäðøCHu%W3‘p�È%�Pç‚7*+0äAònˆqÀ!æ‰	�o„G bxL†‹6È;í�L!a<Ö\eØGðÂ!i¦yVaa/&„xÄ0žšÐAáh4ÈhÂ¼ö3q¬ æ¶xÍ£pi§a~NAî¨ÆÕ$b‡Â­L&š1´^|\ÂÚ„í;]C7&ª-N‘‰íhÂnêÍðšM5_Ú f+�hr!à�èr
+.E‹ªvƒÞóèòrîÂIÃ7RupÁN&“lÝÙnæ7o½>œZpÂ÷iªv©›‡˜žNÕ?èÅÂZm…ä`ƒKIk¡¦¼0˜O¿õíGÂ§¥¹·§˜;Ûö•Bë{Im¿]˜$ìÝîýöa¿ÒðÚV‘°Ø\}Gÿ†.+øÿÇþýëý{ÿŠâ}¯J?]ÛßíuxúÆê…·„·þ¿
+A˜¿£a•½}Ä/ÿßø\.¸„¾`3?ö•{ómk¶–Ø�_íxaº1ÿÿ§¯ü#kÿî—á]íÚA6úýÿmþézû’û&ÿ~IÿGä‡ý×ÿÐ_ÿÇúÒâ4béY!ýç�¯×¼‚Ø-�ñþÝß·ýy‡oÿµµþÉ»ÿÖ—ÿíÿÏi-Š×ß_§·ÿ$>Al	0R3ä>aÈb��lÂ­"-2„¾)¾þÞÕ?cŽþß¿i÷ÙCÿ¯¬6¿í~ÒÿµØ¾´iq„±Zo÷uwtÑ®qVNëâ¤ºÆÔ±ÅñI«ê°}kºQìÝæ5„nóilçêÁÛ´…µ¸æñÓ[µ›ÔRi¦ÖuÓµ´ÒšuNšiÅ5×P«­8]Ö²;UO†„0ˆ$Eƒ.Èá°!¶^†!i…7 ÓB#Â¦bL ÈàÐ¶q,4CLpÔm>@Ã´×Å-y}�uâ–•ä
+€¯#ˆˆ¤C$�zõëIÂ]z_WX‚#¨�Õ¥®·ZúßÒªë¤E¿Zt½'„DŽ»I?¥t‹VÒ-Ê¿ð¦tëZákZ~•ZT–†·Ö#ØKYºJé>©:Ëït¾!7CñUkÔUÐïº6	ÃB#¬'PÕtßcÒ0~?ÚU®é:Z†Ò½%†’¥¦Ú>'KmJwKV•îL:‘PRrbÈ7 ~ä6YÁDðA‡ W‹.‚!a
+„ÖÁU>\DGÿ÷ò0iw!¨î@ðÝÈ+Ü\‚˜îChu}=ñ]=}W÷¿ÈÃd:d¬�Ïyd ˆäQÌùw²nMÏÝ|ð^y‡"¹pw#s¹×Za³Yì—Ì òP`ƒCšà<`Â(BÂd±/‰N-<ƒ~%Äì«6E…CA—Y„C	¢B?›gƒ%åëHÞî-4aQ�°�4æ[A¦ŒxJ…„ðš0¶ÕÂhFƒ]B�Ó¦¯ õv©Ã7ÝšO»£{—t�œÛ0š1Ñ‰Ó†ƒ†n7f6ÁKÔƒÍíêcÌMœÎm›áÙ¹¾ŒH57¹vÃ7ZioºÒnžn~“×¤«ûO‡¦þÿª½õuéßIÒz§§ÝÝ›»UOý«§�Ä.“XŠþCŽÇýéxº÷ºÇÚoýÛÿÿuWÛÿþy$°½×ÑáCÿQS˜/÷_µÿÿÿ¿F3iýá¿í¯—„o®¡ÿó–	¿÷p‡þý_ÿÿ_ÿ÷Òü7ß¯áÓán®HtŸßí¿úF/ÿ±_ßÿûìWîF?õ�9†qßê¿½õú¿ÿòNäÜÿîºÁÿý„]R¯ëÿë^×g?éðeZßö·Ú“sÃk§ý6°ÖÞÁÿé÷
+nôš´¯¿×_ùpÍüMýõ¤ÅD8­Â\TZiÚÅ1V±Úi¡àØØ»KcoÖí+´ÕthÃú‡OiqM¡FÓLâÓÓÄ[×H¤I„Ó±[LRÅ!vœ8‹
+;Ó�9ƒw˜A˜Â
+A—TÐa˜C9ªa3h Â¦šž Â Ñ[l¹—
+©ÚÅ$`ÄAlœ�àÎäpAlÍ~äþW×I+KL'�ÈzŠûµa5ˆ=ƒˆ�þAlœƒ%�Y†¤<7�á¬äƒLÕrä5œŠäœ‚˜ù°Ù5	‚„‚í4ÈkØ\(U³ÁÈ/ì'�[.ªª¿¯ª	[JÛ]æ8"=˜ëä‘ÚÜ‡v°é$Ú	&ß—fŠºBÅE„ø¾¶ÚÓ~»ÿã¯Ò·Ráþ8ê¿ëþ¾«dÌä\'A¸ Ëâ:3‘p eÇ�Qà·&ç‚.Î9
+’‚- Í°”dA#= ËÂP\9C‘ +
+ÆÍ[¨<‚yvƒø´ÐÓu'0ƒN,' ü–È5
+°Š‘ÍL&†ƒY´ âÓL(B! ÂÅú®êž¨Yg!�@ðh†³�<0äG ]Èx.>Ñ�¬½aLmSjæ‚F0ü ê�S˜á0®é³�úª1<0‘�»¦Œ.ÓT—í·19ï�<3\¸!`œ2Ž0¤+�Ö´Âa<)qó‹NÁ-ºMÒ16â¤ÛÓ17zvr«SiÞb´é6‰èÅ¦ç­Ý˜š14ƒÍíë¯È[ý­ªØ&º¯·ôê›Qû°Uðž«ú[½;]RMÿþûîû¯Aúýëú~—xo®žŸý¦¼‡ÝØN ÿïýÔÇ÷ûö¿üuûKýû°Çn¯¿¡¥öéþ!{]ÜC�Guw ÔîAœ¢Oïs(ØT¾¿£aŸþ¶ßÿ~¯âÿûÿÂÿ[ýúï…¿ÅõÿñÿþýæÇëß÷×ýù�?¯«_°×ýÿÌ	ý×‡¯£ÿý}ÿ_òC×¯îßÿ÷üRÿ£õü7ýiÿÔVûú_ùW!‰Å÷’I9+#ânçtÉaõÌä[#r~@¸æŒ|ðG™VJ5!ßÿ$û­ûÙ7õÉ¿~úLçý§]IýÿÝýõÿÂ#¯þCâÿþù
+³„
+S-ò¬•á0ƒ
+ƒRÂ¼ön'bÐi®VÍhZ&‹`!`ƒ‹N-løˆp~ý¥ÃUo·ÿ¿×Wúýï¿×ûÿ0íÚëÿí­þÕ×®¿ú£F<¼‚Å®ºª1ÿMQ�Ý#F,muiøCT£{¿úïV=Ší%Š4A÷°ëïÿ´fÒµµÐp}¥ý¿WQîø¦Ó´�ú4d­-ˆz·¶“Ó«}þNŒN�ÃM#Ò¦oa„–—nÐaNywvoVèÃs‰ÖÍ÷Ã³rkTí¤ƒcÝ8µpƒ~öÒiÓM8668ƒ)›Õ4˜iG9‹Nø¸ëû´)*BâÛ÷oÓÌ6ûï÷¿Tïµ_û³¯Z¯ˆfüáÞý?^þƒCiC
+&Ó³h[VÅ&›:¶ÖÕ:†©6)Ši¦o0±m4Öívì.sLâA¯IáŒ1÷÷øáŽëý?öõ×U7þâ»}ý¥ˆ†ˆŒƒXi…Ð£h3˜ÁG4"!|4Ü Ìh.Æ�Ç›AUû
+‡ÿõÓwý}üÀ½^ÿx+ÿ_Âÿÿâ"†@<8ŽC$4¡ÒjÒÛ
+ÿÿ£Ãtê`'¯ëßzþ`&÷ÿ×ÿÞµ´­+ÕêûÝ¿ÿ÷_a¯÷ÿkÿ×ÿèÅÿû](Ô´’mkðDvÁíÿ÷Ù!ÁÛg1ä‡Ø¯ðˆÿ]�ü“ïÿú_]{MtJ¡¥týº¿ÿý­¹‡ëô\/ío~¿´´ô¿ÿ×¿¬XIÓ¨‡¯ºöÿKü¡øúA×.¿Çj©=öÇÿ·éZï÷#|qB6“T}þ¬iµîÅ\ži½1wÔ;N­;öÒ†±Å&š°ÚOŠatœRi§JÕ}4œEÓM±NÄa¥â“b˜©äšûÿ˜A
+àÂÃ	¨!
+aŽôí0™|økÌ ÂÙ6#
+˜A„!EØ[]ÈN""‘ÄC	!€<6�öZõì)Ï²†·|&)%K ¶‰e8A�R
+­BÃ JAÅ…Ö’Ò&ô©ýoI/æb¿†úÌ?ë[þÿßÿÿÝf�Û
+’û¾ØaS^*;u¶¾-á%‚Ë�w!�Èd‹Š«a?w0úUªª‘^�9ƒ,ò‡'t,r†qÁT�Àä¸S_É†Áaz†Ab!¤z>—¦¤2@�r(ä8ä£
+„•êÓi6‹ô’ÛiÕÛæêSªÛH6³N�·¥é*·íô•zºWI-:ZªXvÿK‹[îž ¨ƒ·ÿAÿúX×µ²£Á}+ã×ÛýHX4T¾ªrvxÈLÈlÀƒŽ|ƒ{ÈNr0ð³	W¿éa!©Z¦ÜbpoBôô.„E~ûU{#Õ¼#wfèáœ\#vÛ«_ˆ[7=¦né_ßOÓó�û¾Ì×Š]W‘ÅUÖ©'’ýu§¯_ZÈ4h—ô÷_ÿõäQúë¶—ÿ]zKÿÕC¥ô¨tˆj¾—^ÒÿúúTÒÕþ—¥¾¦.ÿúRß}KÒ&þ–é_å¿_Û­~—¤¾—õÚ]R]ÚøOŠ)â…(¡âž(i
+4ÒÙÂ#t’Ú'";êÃ”,"8u¿F¾	Ç¤`:`/RàœF·Þ¡[¯íëí®@ØN@ðP=ô’M­.“}-7Y1`†‡ xw xnùÑÈi=�Ó†³”�´µÛ –»j÷	ip×L/iCm¨$Ûè'„ô|4´°Úa¥°Ò!²6ŽñL=Õxâª­.×t¶ÒqF„Z…ÄzÝ-¸[­ˆˆŽ»ûkÞú�¯Ú^–éAï ¶çÁÈ~!¡Èb™
+X=ä'd%"Ùï!{ ô²%žò'ßt�®¾Â©þ†¡?ÐÕOÙÍé>’u†qp�Þa-žOFçÍ¥³›¤¿OÓ|Ä Šy§§êøM[OÓðUtúÿKªð’JÅ.½|RÒõ\Rëëþº¬RÛK¯¯K¯¯Iÿ_ yGÿê®ºÿZý}izõã¥ÿÒV—¥¯¥ë¯¥Õ^¿¥ªá*t‹ÙûÒé9ÇÒÞ—RÇ5ê¿_­ºZE¹V¶«ªIv–‡ÒÝ-
+?§×ÓKŠÐê›COÒÝ-[­.ÒÒ—éiv’�É~!;¦ÕèŽ*)¸®½
+x¯Ð­Š ¥œïÁcÖÐ�T,0±ª…a…�Âm‚¤–ôxãª0ØúÌ#uSž*•úoÒ¯î¸z¥WTŒý¿ÒVúI&éªÚ­má[ôŽ8KoÕ[ÒI[	cOÛúÃ}¤ƒôC¤›ÂK½‚QÄVÆ8Ž¾#ˆ¹Á qûÈ6‚+O�3œ©˜‚¡ÉA´È3ù-SŸe' ²9à¡ÿÈ-‚¬ƒ!”¸.¿¯ù0Í0S’�á±Ëƒ1‚ ã�f ±Îýy@fÔ� Bä2¥È/ÃC�Ö‚
+C�Ø9ý~@óò¼(L�C  †ˆ x°2Â‚v@õxõÓ—ÊëÞºiúí®íPwö·Ú$ïúNá¯!ÝÈd¸äœEñpã¾ãúþê¿ZÞ@Ì6]ÓÝdo®@óÈ@ŒÈùßÔŒs�Y1S‘Ž@ðG ÌåjFäœú¹ÍÈaÛ[ò,ÃžË‚>"Ì zyVG„Ëâì¬øËˆ]lSÀ‡™¤m‘Ñx0ƒ-É¹ì��›’²+žó@ÊãädQÈó=åY(@Á öGdLÏz/«a¯�Ì„— Ó
+´ŸPƒZi£
+´ƒ‹MPhhÂ‚!„TÐ¸â,!h #F8*iõµa0œ\ZÔÂ‚h0œ^�í ˆƒí¤;h ÛiwHÂqhÃiF'°•Ü½—¬òtÌyzŒYìçyÈåÑ½LowF6ŒOvªsk1¾ðÂIíèÇõÛQÃim®)Zé;7}ºþÚf'M««°žôaÞ›W«j›ÚiÙ¹ÓTû½3Ýýß¦Ý.ssuýæ'W·7=-Òívé±ytøéú×‹ýãaŒ_Ø¥lÀ?†ètýë»û¬1×®½½.Ÿjºþ¯ºµ_ö–Úî­Ý:_ëüÀOë{áïˆVÂ×÷×÷aÿâ÷÷¤;ÿ°ã´;äÀ²„¿ò}ãä/Ú[ráŸÿÿüÀgpCá¿Â·0ÿ´ÿ£½¿××ÿ¯ý¹°¿\‚Ø"‚!(C<zY»+2'ä%,ŽÊ° �éä[+2'ýßÿþü7øFøoGïúß±IaûKÑ�±Vwÿ†éÿíáúß¡j¾è]'Ö…éÝ=’ÿß$ÿîIÁîIüÃ½ýnÚÿ[þÒY
+íì~—×þ�ÿ¼¶—`ˆÿÙ»Óô¨Äœ3Fåå³›Ñ‡Ñv›ÝTmÝû_ß´Øa/ø}»i}¿éfïþïý¾‚ÿö¿uÿ|›¥ºï×¥òò‚*ºz_¨WO¥â—_V»QßÝ0ÓŠïâ·�»Þ»NÞ*×û_GÁÄ8uÁ~žkkþÿñ{kk
+oÿüi'KKëÅzÿÒÿI^¶“M6)�Ó†šmFÒ5MŽ7B#aÞšr€ª0š(ÚqpïÐÕŠM4Ðk9Ž*!±Vž—¯¤­¥þ¾—®¾º_û‹Qxi›A´†Õ59‚h1IÎ-0™³.ÓI¡¶ÌJ�¸¹Í+ÓLÂ#âÚBÐöªšiÒét»	z]zZU××úÖ!„C ,†Cr8—8ˆ‹ˆˆ²æ˜B""eÃ¡ÿëI'¢-ëÞ–—þ–"�é?â+¤ fæºK×H·*)´‹{é/ô‹s=iÑn�¤½/tš¥¯zZÚkï¥¡®’W¥„+úí%Ž).)Ø­&Òt¤{Z[a-'í öùÖ¶*˜MkZ_ˆOÿ±]
+ª�…ƒ5£ˆãb#T•†=Blˆ>5Ì ±¡¿If<}eÃD~±m}¿Ò[î•¾’¦ÒÕ¿I*oÒÛÕW­6ý’møI[ÂI&a-CúM&è&@ÒMè‚ØkŽC;�<2Ü�àÒ9€e‚†qÈÇÄ]hhEE¡âËèD aHY­2P	�Ðäì‚Õ„²
+ †e¦27�9†§Ú¯ê¡VõÕtc‘÷k ²;ïÌr#¾ùÇF7øû¶@±× ¤î‡¡qO
+7wëÞ¿_×úô×õ_õNõ#=ò0oayrAüŸH!˜:¾!ÜöK‚*fÏ\!Ž#Ã…#‚PTL;‘,““r ƒùp_ Á$9œ‰d[A›ÍÄ ¬3®w"^ƒ¾hA„OÔ)ÎMBŸAàº'A„, ÐÂ¨°˜P…ªjª°ƒ	¡¦ˆh8†z10Á¦�¦ŒoÑ‹Ú´Œtæ8aZa6®chÃ¦Œta5Fè`ƒ
+Ñ´ÕB7ùŠSMQ´Ã7Ñ†ÙäûF×Jß›²î‚tŸü8gv8fê^Ì>ÎV¦êOí$é;7é¿f÷	Ã†m*v¾½œó„ÛA›=°™¾Â›ôß½}ªöü.»éßûwúãÛfêãÿZ¯B—Ûí-7MGûôßOßµÇ�ðÇßá�ˆ]w¯ý/®=§‹ÿá�ˆ_Q[×ïÿÕý7›Èà™€½¿ý‡á?ÿþ`ÿË…÷÷Í‰ÿn—ù€ÙÿÿÑ°Éï®‡ü7ýíú1wÿ÷ïÿÿþ¿ðÛ„o¿ÿý?õëíùî�É?·ÿ‡ô¿ÿÿ$?ÿd‡úþ¿ü=×öHÇÿÿû$>ÝzúÝßÙÜ?þXíÿ_ûÿi¿ß®ûýäŸ÷ÌíªþêÚÿþþëúØDuá­¤ØKÿÿ·~ÓƒõÕýŠ¿î÷§ì4»†¿±kö°Â®ßÞ¿/uw{ÅGðéWàî¡¥¦¿pí:b¶ljÚIÐ^?bÃJqj±Q^Å&šÃö+Rn©¾ÒiÆ…¦›Q¡NÒh4ôÓi„œm Ø«jÂm!nœtÎ!ÓH[QÄC­¢žÂ
+0…‚h†ÄUS	—aÏhFÂ¡h4¡„Â¦ˆ}…9Ù´†‹.­™3„CG3	²`Pä	@Ü×ëÞßü�žä
+aÈC�<5 xjŽ@ñŽIÈ
+NC'“�[
+' x4ÆAl6½0™2‚µ„ÈW&å¹ˆ†A¢Âam0™‚vC àƒ{	ŸâÏÄ3!�¨.šª…MÃ	ªÿk¯ä}k®ÑnÓ‚/÷w×IÑ´ÝÈCÑ€+§¬ƒ�hÜ: œ4MÚúÅÕÈ7qiÜC�®¯M;¦*;D�Õ1ì¬†A;ÿþ?é7�ëŽÿ¿¥ëû©
+AŽ«©gó¯ä3_È/�IE‚†”>F;®ª@ð0>C5ÿKÔ�á¨9ëø@È¶2<&sYnx.Éð! óE´„ÏeÌ«21ÎærÏdü¼šæ!’."6Œ9	–CÀ@È~?	‘p�
+fÃAX4( Ì9N{ ­åñvU„2VEs¹,ÖN
+°�…È; È<ÉðA—Ä¸ Ïä1dcš1„^ð‡ÎDrXEòàƒÿôd°ƒ¹Ü¼'Y//4ÉYþ—†šv´ÓZÂ&šaŠA‚„,&v�„ô;]ðƒÓOÑ�¦Ÿ„-:Nâ-SBÑŽƒ]ØBè.MSÓMÔ&´i¹¬!0©„ÿHïú„Â˜BL&¡3Qá„èÅF&Œtc1ØŽ^hÅj-M„ŒoF49‰Ú7çtqÓ	ôom£1Q‹é6ŒmÛ»s èÃº1eæÎotcjîÎpÂì$b£0‘‰£aKÙ�¦ŒMš17ÓTchÅF,»ÿý„èÚª1¾¥ç1f(N‘´Ñ½þþþôû1›�ÕÒ~sÓµ»6ÌfÏÙXTœÍçyºÓÂm÷üÛzO¤ßºßïN“¾Íßõ¹»ºí>é6½;Ó}îÒOWþ×n–»O¾û³œ'Iëïû÷zpÍšpÍÌ3ÿ³áà0¡7OÿGÅ1úî#ø_ôµÖ®ÐðžÓŠ{ûî•}~úC¥jÖÖôâ¿OÜ1�áŽøÿõÿ¡ñÐûýkt4>Ó|~¢‡üÁÿíªBéøáŒuèiV¾Ã!Ýa°ÿßÿ¸¯_}ýö	{ÿZö¿ÍäqÿÇü«÷aÌì5ê¿ÿþ7„´ÃûëûÿóÿðÇ¯é´`zÿ÷öÐÛaÿ¬À¿ð¸[ÿÿõ}Óÿ÷­zþþ‡ÿëôm~¿oðß}ï÷ú\ÀL!í†ýþ\'ÿûÿo˜	ùpáãoÌ	ÿÝ¬6ÿ¦5ÿF>‹_ÿ_ý¤ŒKÿÛT¿_ûÈÇûõ¿Ð_ÿ†ÿ}¯ÿÿ¿ûGí£ý°ˆé‚#ÿûûŽ¤cÿ¿øoÿ°þ¿¿ø";~úômWý/û¯¿¾·J´¯ÿãÒú®¼t×ßÂ.¤ŸÿÞïðD{’;·ÿ¯ÿ¾Ù7ì"?\¤ÿ~®¿þºú¶¿Ý·äŸü“”;m“züuõû8í‚#¿ûV‹§ÿúÿïýÿÿõÿ_z[û{i}÷Ý÷í¯«ÃK÷uýûÿ¿û[ûoÿJø{~—i^ÚÃû¯ùœ?ðÒ·†ý¾Óø>û‹{ôý8í8~½ëýÚÿÃ¾êÂ¿ÙCºIz÷ñQöÚLS…´¢á÷_{ðûòQa5áÿek8¦º ý¾**û4â¢¿¿4'ÿb­-Žé�»Ž…0ÓÐt„TZWÄ]í1oÄC‡í$lB¿Ka¥¡
+[N6¢ž!+
+$Ý¤Ócª‹ŠôØ¥N6¢#m+¶8¶“	ñ±
+öš­&4Óbšj!ÚWL[M{ééÃÐuAµ/¶£Ói&8¦"Úa1ME*´šqA6(4Îh4„mu†©ŠA´×MƒLÞ©›Ó
+ƒ	�¦æGDv�Î$´ÂtÚa0šaš�¤- Ði˜X ˜i„!okö�…¡¨[
+ƒH[¸k fpd|ÂU7—f28.eÃa
+•2ì(B"©P†`„FyŠ0ÇhC""ÓB3�HZ xiŽ"" Ó#š"†T""ÈéaL¹p. j#6†’IÒÅÄDFÄG×¿_ÿÁ%l ­.ôõM´“�¨OL&Ò‡inšö"",ŽÁ"#ÿ�9†‡Âë‡ÿó9GÏá}¦²`¤ä2A­Èd«�Xr¨ xHœÛù°^�È	H6Á
+~?�ð™ˆ=a?]¨'û–…´÷íþˆÑ´ß#¦§‚«½#�;ˆïibŸO�»´þ8k÷ÿÇ[ëüW¨õÈ;�`uŽª÷ºy¼‚‡"¹7"Ú· xW'ÞÖAl‚ù•a3w&9‚ ØEÂ> ü™Ânx#â<%à†Gnx#âpÒ8?ÏxJ
+°›•�2rœ›ž_0&L)’²¬�
+‡Í_
+«6Ða´Ñ>Ó†˜Biª‚!i…Zô¢ÐaãFÓ‹^Bæaa…¦³'kZ£0žchßÝ:FöŒyy£
+†‘Ž¨ÅF7/4b¦œÇPfäÓ¦º1gÔ0¦ü&ÞÃ.Û4G3›IÚtb}§˜›áÿFê[M½K¸`�*Õ„¿p’vs~“®¯0ìåIÃî·ó~­…zMØ]›º»6j�þÒvnròïöö;¼X…uBè_øÒ~Å í{Q×¦×u÷NŒ'Óqïú_õMbë¿àëøsh ½V!_¯Ø~!qþ?†>üTW¯ïÌx_ýÒÛUðÃþ…o˜	èØ/ø~Q°_£a;ïÿ˜	ÿþµôo_¿¥¶¤
+;ÛÑŠéz1ÛIÿ
+ú1]ýü7ìSµÿÿd‡ÿÿôÿúXp�ÿÂ#Õû&éqäŸIâ²Cß‡ô¼’{ÿ¿_Ø"=ÿuö÷Kÿÿý".fvë¯Wm+ÚºôåÄ
+_ÈqÛþím.òOåŽÞ­;û¯ÿ%éwÿÚv�í'Ô·¿iqûàþ8‡±÷hù]µöccbØa.Ó­‡’¾¾+àý�{ín×‹»oUB‘…NÖÐm4ôœptÅía¥S±§wû]i¦é§AiPi Ø¤Ð‹gub“MEÓŠcÓæÕ¦b[¦Î%a Ó*)œH4fÐURuÓ´…´…´Î4Âb4Ã
+.ˆàØÚŽ	DžKaˆ‹A„"2å¡ÃPˆÛ#†Ž""D2A¡ÄGq‚‡ÿ xò\W„Žý'Qá„¬$±ÿÿòÀ0úù¡Èhr†‡&ä¨ Ðä
+ ÐB>@ÐÜ· ~9§!¢2cÙrX˜RPk
+A½ª…	�4 †/
+šjÝàŠ„Õ4×P¯¾ºº	ÛT”[FÃ[¾âíï¸®ßNÞ·ww÷Ko]µÿ×!’|ézI}=wò
+c™ÈžC�ä3!8äÝÏ×�[ ‹„œðGÄð”È(„r'“rÜðEï½r	2ðœÈNíG~_ü†>BÁX0†3Ü]“·H¹ú˜BÂ Ô‰0A‚j!
+!�ÍjE¦CóÑ	gº"Ÿ7´Tý*Ð~©ª6©øBÂi£j·„0µä
+Ü˜ú1Ñ„Ó˜èÄéBi„mWF(C¥Â~…õ£{ÃŒCFÿ¤Ú1¿F*1YÍÓÌæ&ŒZw›ô�¯Øä!¡Ö:t�›tŸv	©‰£œ;7zg?Z7ug—­Ý$ÌfÃ«ýÒÿý§Ié¿ÜÒ{kÞ›¸M×zŸì1Jö
+ö“þ½_.×W{	ÖGk[ÿÚ¯ê7ìEÇ~¾ÊÁ†>ükËªlÚ#¢>GŽDTBñ„a�ð÷ô1_öß¯´¾¿º÷[Äõv_òp¿¿ÛýZ Jc[`'oþ`:ÿ®¿K÷Òôµ­wÑ�¾Œì0�¯úñ¸l7ÿ0 Hoðßþ‹ÿ±UXKZUýßô½}ðÚ_ú7ÿößö½òOïØ">¿û¥ôº^´´ºJ¯­/ÛL�þ�iÿÒÿ˜UGr�¿Ól�ä2]d2.e¹G ƒäÃÝ¥æwÒ÷Uïý
+\=+¢Ç.þ©RIÒ,swúN¾¿i¯ï§÷ÿé]_¿¥Ú�ÈÂd‚	Z ý¦>÷oøa+AÚúÍUÂaSÛKÿC½´²îþ#Ù¢éñ›ÛA÷{u}ÒpÒâ¿
+;ðÖ�iÆÅ&›lCB.é:ºñ]ZV¨Çâ´Ób“‹iÂhEE´ÄZÅ1ÅF››³À½ó»<‘‡ã
+!ÓM¦qXK¼BêŸi-
+zØIZa¬33SQA—dxŽˆà…àƒ/˜C„TÂa´Û�Ê²C¥KN‘Ç/5Á„@ðÐâ"2ã´‚q`±ñ§!’ ‚Ø~Ó9×)ËÍHW ÓA¡â×RÈ4Æ"ºÌ¥Á6–­mõ‹UöüŠ@IQ…¯oµKm.©&ëIvÄ4ÄéQU·í¥0’UÖßA[K	.Ø]$“m*”Â]~ßÍº_Z^ÞÂÛRŸ¬&ØRŸ„Òm ûZÒúß§nª#¿o hnA¼Cq«1˜°Ï]¯ˆÕ>ÿÕb—ñHq¡l�‡<V©/µ�KÿÔ„Â¬dx¾G.CÞ"6XþBaVAÂÅˆˆä/¾Ûz\XèÄïí-œÞ�ïÛfŠÙÍé_ñU^•û®‚Zô·ø]z]ï\ØMÿ0×_×O­}/ú_þ×zõWþõÖ¾’SGôMú×úªé}.µõ_H�ÿíR&þ‘Vº]ô—¶—_oi{u_HV›i¥\Pþ|UqCZP Ã#ƒâ öëéà“Ú"BäÀâ
+œ†Ó—\†@H ön h
+Ç!¡Èl„¦¡n`;Å¥ñ´
+±ýU0˜R,*k“ò¼.ÚDt’t�_^ÿéjþö¿º[kõkZ¥í¥ô–âÓ»NïÑ(AmÒ­†ÒúKØi®©n?��þ–»¥ àŠ‡´ý/tÿ¯¯ÿÑ€ÿ´‚T¸†íññdpÇÇ ¶ã©c“ÎE²ã‘òxGë�qÈ8äH$ç‚<$9
+QÈG'y0W-´1i¡—Ð¯ˆ�dÁ7Ža0„0‰ãÀæãÁC¦¨g€A„~!aBKÈèa	ý„ã"Ó!ÿQµ\&šaUQ´5L ÓôÑŽ…¦¨Z1Ñ„L!i£ß†ö-WFÓôˆ0{	r˜óg=3hßåå1Ñ‹òõ'fê1åì»0Ž]Ò
+ìè¡m'§ûÙÄúÐO­ClÙâ›K_îÒé?úÅo7i»u²¯ßÙÀ†àŸöÐü„½õ.Ö—lÌ�†@j<wB§]þýêìvšþ?ÝÆ:áŽíW«¥_¿ø¥ˆˆýUýú†.Ã¡_˜õumößÿ0%o¯K_ù€Š—zöÖÓ__î¦wC»ÿÿ»ýiUèß·ýŠo
+èÇýö=XßÿÿýWK×!­ð‚¿û ˆûÛÁÒýÓþòNµ]\ëÿ˜OÁï]v¿^†@jŽCÇÚïý#C¸";¶‡ý¢ëý]GbÒÖÙ„×ßíW-ÿKH±ýk»ý†T×TçÍÚý¬?b›þÛl¾>ï¿×´›N?ÒÍ
+“¡Þ—µ¹°nä3¹'Öh„D]ÜÑW§³<EßÇkPÐŠ¾ÃYS¾=tµØ®ÇRv6ƒi“â"ã´"šžCi¸¶£i1A„mš]­è%í0«7d2Jô•ßA¦]„Œ¸7.vžy&ƒC2<0�$Âaã†ªyÂŽVª„Ø¦*‚OhÓ†’íäÁ 8¹°°8âýPùúAåÝÿýo\Ÿø ÿ§¾)(=[Ò»Õ8I8ÿIdÐmºV>0ÿo�OŠ0«ªÿ�:†4azþ#õä`P8dp<HæxåÑð<SqN'êò0RA1Ëƒ¥�Í6ZüDké>@æCeÐ±È5hÊHŽŽˆá´ALÀml¸šÑ|¾\)25ô¸ˆä
+C^0—�¤Iÿã¬�Hàƒé¥øM´×ÿKI*Ad€ƒ�Øä9(8ð}®#¨¨‹öÒÐ^Û ‹žÚZâÜ¿ü8õº®9e,Í{ª‚*0„y˜,º_ëòVŽ|&xÈ“È~¿iªØµ\ EF""90Ñ5G ŽAC�Èî@‡gÒÐM¾Aláç
+A¼Ë´Ó b�ïˆ;…OËµ×�Éà�ÃÂá|!¸Aª¥â–½�k&@ðhtD�HÀr8•vq7ÝÚ »´­ œ=t—Kä‹³h
+ôm îâãŒÁúí-kgƒ`¿_½õÞ×´’×Ö›;³��$wÒ}ÈÇ#8þ¤× ª9ÿÝ×»�1Ä=R�®A¥üƒHùN^y
+9±ü|þC#¼ðJ2à¾AžÐmäxN
+²\dçjE²$Éÿ¥©oÚ[})èç\‹¥ùáb×NÈ�§¥¡iÚ-p©ê°Ä&°¡œÂ¨Aª}¥¡[iwÈêÃKEÕZÕ¿†‚T_Õi°ÿ›Jbs{F=¯ËÖ£¹„ùŠŒ7_0¨ÄÑŠŒN�­v)&Äi›ÚJ—^íôÎ&”ÂIR×OÜPf
+=}Íì>é¾ûM¤ìÝÿÀ&×VÕþæ4Û-´œ=L%U®-öÐu¯_Å¾¡·OOûcéa¡÷b¯ï]uÇãŽ)6ƒíkUýÿoXˆ×oæÂ{ÜBïï
+ü7»Ãÿ´½ýt›éµßâ5^ÿÒÑBßýj×…ÿÛý¹€½¿ö+õæÂöõràñKJ—µ�xÿòÊ¶ˆQÃÖAâöÿOÑ�ÿ†þÉD?á¿ÿ_ë6ô¬!bëD&b"8'ª¡b"8&þB?½z_þ�[{$?·þÖÿ¶F?¿	¶y5K‹Ñ‰ÿu³ŸFÓöÿ¿ÒÿûuÛ_uó»ÿý«ö¸ˆ‹m;³›Ò·øª«Ò
+ý¤[ÿZWézîÃâ¾)}ÛKÿ¨|{¥ÒÓëýBéô»Øa$ÓMŽˆw¯qéµ
+'´â˜Ó6“a¤Ä6“zæézþæõé}ŠÐi†ƒÓš4¡¨ªB)¤ñA±Ó]õõÿ¥_^L!ÁqÙ‰0B Â
+Ù‚—“| Á
+ZK¥ëÿÿ¯ä Ë	f‡ü±ú_ÿH±ý}tŸô“Ý"7ÿ´»êˆâºÒïªþ´¾ß	{k^”R„ÛL/Åéñ
+¸¡ô’ƒø…´E¿Óé=„D„´¦Åáxµ^-Ë‡á…ÿÂn\8^“îµ�ZDt–Ö½}¿ét¿oõIvþ–’„á†ÂßI{„×Tº[—Hm*<|_øZ4Q¦šñüZ
+¼WP ˆûL%ð¢ ëQnÇ
+€Dr°Î9€7|‚Ø9€fr
+ †ÁÉ¹x xiÀL‚@ðÔp¹°m¨&
+CÀM0¡B¦š�É˜!‡!�
+oÅz¯¸!¬;�GÓ!�Žƒæóq�¸v¶‰8rîûM+ûïÂÞ«üGÖÿýuõï5”>C 4ãÇÃ��@ð^ÜÎErÙà�?!›yà‹ŠC@‹"ç�o1d «$ç²~_drCš‚\�›‰L)RçŸú ÈbÈ¸G‡ÃáŽ0…„|l"YVNa‹	ÍÃ—°¡Å Ï‡ÄA Â~CÀA„BBÂh6XZiªk Ò˜/âÔ&š{§§U­,*æ=… µ£Ñ‹úhÇF÷á4¦×ºF+º¡s0HÅF(`ŠO.ùÅF&ŒmÚ1³Ão1ÙÊ•••m#8µskÞ‡k¹¹¤ØwaLT®¿tbÂÙÍ³œ0[o	ÙÌçKê÷Åß^Ÿôñ¤Ý:OóoMµîøfë0[ ÿA°øJž¿ßúj?{iá=$ìS´Ó½èi~ðE@ê?×î­mbÒiêŸIêÅwÿ|Bïÿ´ª+ýˆ„÷ïúÿ½~½~¿èÛ	oÂïckÿîÿí ¾·îüÀ_L0—ÿÿø^`OøˆˆÿãúþèÇ×zïÿF?ï£ßýí´oÿßú7ÿþÿòCõïú_÷ÿþ—ÿñ¥ÿþŒ[Ž¤cþ…ÿ_§þ‚û]?ëïu
+Ht’ÿ$;_ô—×ûKý×þêÚþ�Wûû×ÿöÿ¿ÿ†¿ré¯¯þÃZþêÖÿÿÿKÿ^Çõo®—í¥1¿îÓ¸¦{öÅ^Ã	GjüC»tžûmt¢ÿÁµíXkk!ÅUö¼]­¤ƒcIµ[ã†ñl;KM4Úm(¦¢â˜‹c«	&Å1M6’zu´Å1
+!îÐi4ÕŠx¨­„œZe¦˜TÅiÅ4Å4Ó6•MÅóÉ4ñJÓ	˜�b�µ}˜�a8“LÞƒL!Ù‰B„!„4ÍÅÑ)pÐD5ˆ‹A ÐŒÀ6%›Aˆˆa�ˆ°¡<â�ÐÄG¡Gýr†» ¿PJÐÓOAªtšõJÔâ"#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@äDá	�÷¨UÚä@Ëj¾ë¤DÉ…Ò×ý/K¯ôï^>¿ÿ\…Ïþ¿Ãµˆ�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@endstream
+endobj
+55 0 obj<</A 91 0 R/Border[0 0 0]/C[0 1 0]/Rect[90.2395 669.23987 103.55933 678.00037]/Subtype/Link/Type/Annot>>
+endobj
+56 0 obj<</BitsPerComponent 8/ColorSpace 82 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 99/Length 538/Width 76>>stream
+8;Z\7$+>I/%%J8]s4dNRZ_8p9(@D";^:";X,FO4%>I8(kU76h^Z[[BEn2pK%oX=MC
+@?qgU=>SGP-hEsRX.-hpa!T@=_2no[;e^<qI$[H9I?Oi)8%nP.ioAaObFcig4Q0D!
+(uK)sasn.o:A,B$`<]!=T?cf.8t!2=DTbNs@jrQlp9`VV&qeZ:P96,[0Pn"j5gl'n
+q6DiHD1eB[b'kb1Be,8T0omU#gO84\ePXLlBqA,3O!,f%,Up:*,K+9C46#'aG$HRt
+1E`a[/4+MN.N5fJ()R2ffp,i-LIc>SlO-foY3!TPV_$&kB?kuLM*5lZOZ9CR`S7mN
+EfDWSH3$n]I$Oht#$c3oWbo'le`tBDAC__Cak$&U<eX+^-GkAh85BEQomEPbJs,I4
+]rn/:ft"T6J_E,:#3ZfLT\QOWf8D:"#=9>rN+8^>8\"QMY$8d"[\AR]5/7R26>gJ`
+ijPMJ:?/@8^!sBaYcnaQpe["e=W2)u(bP:0809X>L$bm3]AcsB9ob/cYcqfgU45X^
+!ruTXTJ?~>endstream
+endobj
+57 0 obj<</Filter/FlateDecode/Length 10>>stream
+xœ+äî|endstream
+endobj
+58 0 obj<</Filter/FlateDecode/Length 3966>>stream
+H‰¬WkoÜºýûÔOQK!)ñ¡ý�‡]¤½iÜ{Ý÷ƒvM{UhW[­Ö^ß_ßŠ©‡·@8¶³3äpæÌ™34¢ð·}ZÑ¨ŠV~ÖuÙUÏúsS7mµÓ][m¢¶Z‘ˆD‚òTE²iµzõ¸úOÿ_¤È#üÜ|’‰<JHJH.ÍwªX´Ù­>|ÝQ}iV]}º3§¼ôÃ
+-àú»G´e„øyÝ½DYt×F+Já24† PÎáW!ešGw»UüõïiôþîßxŽ!Ô³*¬o‘òˆŠð®×ÿ¼½þùë·ë¿ÜýbŽ@ÇÌ;Rë˜GR¤2¯G¿�é`¾x�’#óëýsÕ6û�ÞwÆ�xüÁw>¬âÇ¦í?‚¤EaàÕ‚kp}>h¬Å¾;.Ý­ìÝ*R"¹2÷Þmµ±¥€pLAoñ#n›uA%IÊãÓQ?Dïÿu÷§!D¸C]Q(¨mo '!.<³Zž¦Œq{É�¸„`X‘¥*~Ùj]Ûh‚+á#*Ý•ÝëAw±N¢ö³£®“ùu	ciÆ˜ˆšheí¦ÙweµÇçóTÄ»f]Õz~¹H.íù&uWzÊ#o�J‹yØ0"“©0¥ùó÷o3j¡¥Tàû²­6ÛY)X*²<·±½”‹‰VÌóA?ëº9à{­36y˜ÁõëBÁTÜeßâk–_EÇüR&2[ÖS·mÚã;¨.'4~j›Óá>¾…6)½Ÿö©ò8Ît_	É+w£|1
+4âíÄkÌF’ÓjÖ•í«ù…@™õ~Ó<è?Í [ó¸kæ5O($¥ ™yá™Í_§7Ýüõ,-èP„À³:
+?L<]Õìô/�ËýÓ©.Û>ŠÑÉ2e™pl€ÅÛTÝkjûÛ3!KpŸšn;£ÆÌÏ`dâ<ÎÍÒŒP…²}«Ô)L…6‰iapì^t­Åž•{À Ì*‘£NðËçËtK�¼D`¿TµÇ9£gÈÂÆÐ<^f¢˜‘¸ìæö&­¨0uÃMß÷Ú!‘
+]L‰²G1€�,eàyû©HÀjã0c£Šå
+;À9C;í¡qÉ�³ë®-�ÍFô4	Uý	Èˆq\àr �BC½Ûòu	Þ±Y¦ôà¸Qoš§}õëhò”(áðo$É´ž‡d¢RÙc.�Æe×•›­›MÜð¡:L*ø�Ü»Ù_•Ð+
+äí»…y)‘u¹Ê-÷>Bˆ¾íÅ€bë¨-¼ýÌÆãxdï2ô¯›‡×tiþç.�fÄSiæWÛÔµ†ºR•A>ñæ§¾9›Áß|ÌÿËlbYè¹iv‡æ¨ç\’CSH>o=f‹Á@:eÁ‰ÝKs9�YžË¼ÏÞ¡l»ãï!�”ñ>•Óôü$Ï\úv0óß…¹KD¯sÎ˜åÞaìÿˆ÷åsõdXû
+/Ê(òMÏá”èH{ÞB;âÐñzÉ4ñhú"¡‚:ÍG£2ZáùÕþiNiyÊ	ÏHMàL„äsUWfRÂÒ1‚¦I|¨b*U'·Zõx:š¶Î—¤*“8¨¹é9ê¿‰Ð¦�è½–o†5L"ucÉ
+�Ñë&‚‡dl�§„AÒJb
+àµ>/ÌJAuIÞ”õæTÛÁÎD>tãèhžr¯Ê]srûÁèd
+ý|qh‘Ü}þPveêŽ(¼€�žâya†€Ê™1}äZ
+1/\›îÊÃ¤O^ëRá$æ‡›Ìs„ðüâh¶œ`OçÌV
+jqìÚÓ¦³êóÃ�]ÿˆuíç­BWÅ�×Ý/MI‘Eaƒ`�_óø˜ÔÕ0¬ýºI
+±ÃFgþZP‰7/®Š,ÏG!ŸŽ®FH†}€V‡V?WÍéX¿Nrž¥€®§Í™èEV³vËJ“c£ôáA	¦„g–R¼Qr)�¾Eá\&1‘ƒ/ìµž�t4Ñ8	ìW„ÑÖh7Ð™áÐ—¶™Œ@äÍ³IsÒ¿—
+u¯ÑÔÙò€gÉÂV«�Â.�wŽ§’«I­Fd¼Ä%´'&'þuYc�”Ç/M[?¤ž"d	ŸY	˜„ˆz±òu`>ºX¤*0£2£lÆLYÏx$�®–Š‘IáXH—n=ušÑ3ÔF×õRJºbo^	%µôk�×{ÒhØQújÖåfZ÷ºn>Oì?lð~.ëÓ×,Üvò-‚�î:yÎhE{"(�«yú‡¨a7ˆ(4ÿ7ÅG Ùh¡èá€Lé¼ z¿sÕ§NØ¼eCÞ!H>.qV_\&¸Pò‘Áw.åyµ<Ï�Ã4?Ú¨	ýÀ]2ŠTy�0ú`0>êE�>XƒÖ,ò ^ÛÌHgQ^ ÚÞÇç›«×›û÷¸�3Ø^ÈUb¾Ý¿O'ò.ôÐ¾+×µ^B·rñ	^¿0ä^k]/àiV²wì÷LïTÕõé¸-»¥ùÅÍ"
+½]ßÄ°Â ò_ÐâåNwºu/¦®r²ÚNzÕïY¹âÖùtÔ]ÊH´Ùß¼k¨O(ãjJêÎÊVÀ`üa_¿ÝN*:â�Œc…ëõ©ªuzŽ}>è¶ÂM÷˜ÚGªiU\¿bZhnº–S+n·M×¤ã¬‹Ÿþ)Ø� Â|èÛYœöP8}kÖnÜ�²/-L¥%ø 
+w“ÀxÂÍ™p½dÓhœ
+CdQiôTrÞœ|÷ñÓO×ãgL^m–Ùß=8ým!zŸX,³ZåvX2š7˜&ªPWy‡9Ò|ÕÐ	,°Öç/®êd¿)¥r$F0Œ�Þ-(!è¾`úN^‘PžÂ‡%Ëp€Íg=pIP�Â³�›2	Š]Ma!~¬~ý�TK§wãç_6»�§RõÑ™ÐþX~êIÏ±T)ê�p/	D‘bY‚�\RÉÉÿ™­ƒ�î´�–K
+oS ;1`ŠUÓ95NëÅûÓn=àêÍ½§©$ñ“MÅí îlu,B©™qz†¯µ®~Ð	Û“Ê^^¼8ä \À�G´ý©Ù,"çTL
+A\2Î§MÂ µ‚|?ÃT^Ì0@‚dÌ,<tçÿ/Ã¡\	ñr¤ž\K¨²¬{
+ül¶A÷î7²0C¯Áž2z†¯¥¡	qEt¥`&s“ÅYß´7ÕSjcCy)Ám“f¸îâ]Åü�cÑ‹¼èÍ�Ûæež3®å~Âq4Å~”•rpÐûçªmöh6»Œ§€c
+CF
+*”çÄíÏpÝcµ)Q±N†'éj#ÚÉ3fIèãq-¦Iáò~[}.·ú¡µO£ÏS	Ç5p÷zØ'n�ˆµYÛ‚Îä ôûúØ•°	Ë¡=zéŸ@³Æ%~/$rÁÑH!Xl¡/â
+¬8{T¶	Ê¿èÖ.·	L®¨iÜá¹³BŠØhV¸â•ój�´Ò1í¡©\ÁlŠœxFÈ™Üžò ·—'™·v;ÎxÉ”~!òæŸ®.Ÿ[‚Ì[}<èMW=ëúõ¿|WËnÛJý‚þƒ—^$‚æ-­‹,î¦‹¢»¬[MÈR Ù-z¿¾¤43ähÆÙ0BŠ>Î9,«¦Rµq¼/9U$M]:˜9l}è{¶lUÕ$µ;(‰SnýâÖ’}PÉ5h©/ìn*÷ãìû’ÔTÈWoóõ)ÁfŸ÷ÿéç¹{¿§yø[åyjT“~üÊP¼r­	yœúßÊÿ�!‡ÛDr*ºhKu[CÏaì|û˜@´äjÉUxhÖ#kè<¹Boæ’¼RÙÌ(�ºÌZëÕÙ©PP(›hTZÐ21ìºN¿»ˆ¥‚°´�•·G~c
+Þxv›ð F7¡#Ìõ}.Hò¶"Î×ð6ÃÞ6OÓõ)ËŒWC+Ô˜¬Å­hjòøy=
+Ã_6bÉ;çîv¿æµ€!WR¥µ k°õJ_àûóùZ%0¤Èpúdøß˜�J£CÛ
+ ´?pûÅ“*›
+àGÁŒˆäžJG—«šÍõ ±ûú^+?‚0eøJô|=žtÞ‘T­Ž€gˆ8qšme¥
+÷Ë–ö‹Ñ&\eÓ­„JŒéÿœJR@¸¨Þ¦{D&õšÜ¤š´çàNëÎ—¥;¸žáç6ì,¡Ût+P®$ÁöêeÒa¥×"<7&€ÙãÒ�ï ¡-6UQ�Ð
+k¯eÓ@›ÞàíÞ—õ“˜2ŒgÛ´*yx(K¶pƒUŸ¢óCŠè¦´‚_ºVþî‹Ê/b¸{·ÁÃT–|Ú<–£XÖÇRe‘;Éïe›õóxûŸ]KØkb–¤gÃ<¯¿û+I<y:-…¤Ó2€7¸jdyú@$èvX/È±NÚ¨$ç¹câ“UTEžÐýÉãÏ44}ÆÛ‡ö€›¾íôñšÏ–y'[”@1®`½l)ðk²ôÒ$ö/{1�â„UÎ2ûïÝrnû©K#hœ'ë< ÅIÚ-]«mX:ˆ’#‰ñ²‹ÃHð^Ii,QkmZä$Êd^sÏyÎD^«…M|
+ —�˜të@»€¡kÏPdw¼ô30g >²
+hÛüìäñ¾!ˆÇÜš‘qþ4¨pX™ÚèBAB?CYš•jà‰€ûÛ Â~x�å4‡[ª¸Ùç•P¥:™¿u‰å·oŸ—ðT’ùëñ<ÍXXÜÜg][¼HúÛ¯•'²Rh42î0Ü2C¿Üúœ(àö©”Öë5S·Ú—s·,acÉuAuîæ[IiÃ5x IÁ>Ñ/'Äú¥Ú5€A­�ÐÊ°ž=¹zÐºe$�5&Róº	ù…÷>ú=¼÷n<wy1�­L+Ò‘¼Ü£¡ =·Úù–#†õ%œ�Ë§k¾+Ð€ÿÁnžCÝ3§k¹ê.Ù|ï�Ó2…+S¢ýƒ¦î$.sðÞA§ª¤²aP¼0É
+
+î°¹ô­±¤¬’ÐÍ¶êo…ËNx1é9–¤-P¨€¦åØ(Ëzs m ™÷ ÕzC¿Èðû2s$–‰Á@:ðr`Ía’ÂDzVp­�õ#r&²U-Â<y¤ä+J•ÑB'OÝ±sYwxáëÉ³{ë@uti#X(¤5ð—ürøÚ=/4N”g•¹^»ó¸P¾-E5É¬áI¦j¯ƒ«=:QÒ�¤ÊðÀÁË):˜ÕþåÇ—¡)§endstream
+endobj
+59 0 obj<</Filter/FlateDecode/Length 150>>stream
+xœU‹±
+Â0E÷|Å$¦¥ÄÚ­bÇJ×Ò¦Iój’"úõf•³œÃåvìÅNší/¥€„žX‘)p¼*QsYCÏlÓ®éAÁ~Ígãc–5š³MÙ5¸*¥p_Ãq¦·wÔ�y#�v	ÖAîP
+qDŸPÈ¦:`
+4ÿßp31;$K>¢_÷á[ýdJ³Žý�ö3Jendstream
+endobj
+60 0 obj<</BitsPerComponent 1/ColorSpace/DeviceGray/Decode[1 0]/DecodeParms<</Columns 1839/K -1/Rows 2378>>/Filter/CCITTFaxDecode/Height 2378/Intent/RelativeColormetric/Length 139106/Name/X/Subtype/Image/Type/XObject/Width 1839>>stream
+&  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@æ
+®@órðC]ÈNC4r
+NCn)¹C>d
+@ÇáðËâr|EãèOá0ž 6LƒMApƒ%Šy‚ŸøB>@Ô×!�2ø£Ü�3 r"zh}kªÇ§Á#›«³�4ÎpÕ0a˜›˜fÝ®S¾�×r‚Ó£gh?.ÌFø£5H ÝÂ²®C,}§¦ˆÝØLÝÝÃutÍ•¾°ôù
+§ý'ëã¥O®«ÿ»i;xíúÓß^“ûª¤ÿõúI]ëþÚXëÿ÷ãxÐÞAl2Ç0äo©ÈN!�Ôƒc“sÂöA¯ËÂ,yì�Ž9¬#rc–9!×Amëdð™8"ŽaÂd‡ûöëo$?úÜºöÞC$	ø®4¸°Aäø‹„°&ƒ
+‰²<
+´MbÍXL#¬qÉñ8*4×Ê²>L(L Âƒò¤¼ºê…„B!„|2CSºä‡bºý._}oì~Â*1½0˜NÂ0š1Ñ´ð… ôëY�£i¾!ÓMqi£P‹OëûEü¿˜ÌA#i¤ŒëZÇ‚þŒ-¯}0ÃMT½@Š'Ñ†åç16N“Ó†hÄÜ3u¯š#fºfëÔÄÞÞ¹ÄÑ‰ÓaÙÌåF]{úV¯Ó†o#áSý¬o­Ä/ë�oïzI¶‡N»W÷H&—û7wëö™³Å«ýû0I¿A=zôÖ—Wý¥þ4×C¯ï]ÅL½µïoÃ
+»ãx«Þ…­b¼W§I¿ëÿÿ¦—ô·ã ¿ý÷~ú«°ñì1ûæÏ	jcuÌoÛúù€a%âÎ‚ÿÿýõ0—â»ÿ§ÿß¿íx¶áûèºpXïï^ëUØ_þŒ/Ñ�ÿÿõõ}x^�F9{þ¿1>·­Cz1ü7þ)?÷ñø»äW
+·VþûKðE×Kÿÿï®ÉÇú1~+_KÿÛ×ŠåÆßKöþ² é_‘ÃþÿÅwäžÿ$:_ÿÿé¹?~°_¥û]yëõö«¶Ý~¹
+ïi~�}õVýwö¼ˆ:¿u¾Hu†úµKð”=íõíµû�µï_#uöÖ×¿ëÛuÚé»ôõ÷ÖˆHÕ&õUmz[]ïÚ¨a]�mcµÂ#¡LCˆpôµOXv5ô­"séöéö±Qk¯}ðØa/×‡ÄCâÿ{Lü¶¨RpwoxPž+Ø¤ÚV)¨¶7ß�†”E´Åi§uN#ºÂ
+4Þy$",1I¦Pé± Ü ÓAÅ3x¹Ä=M0šûb-Âa
+q‡TÓH&ÓLâÓ´1Ô Å"8(A«BÑ;6•³‰ ¶¸ØLŽEÑL+LCL!ï!Ü4Ì2?i­‚G4@ðb
+Â
+¶"Â
+ˆ0„D4""3á‹ˆŠ09‡ l5�:�x¿ð’j@“>˜¥ÂcMvC"qÄòfù˜?r@RW²œƒEšÈds�ÎåF……P¡U	ÅèÃîèÂ»£ek r‡ ä
+7!š8w!šïA‚w Êä�'¯ß_]GõKõK_ÿõ]ýW!�Ìä‡%è2vÌ9ù,#À‰ÁÈá¢89öpC‚—
+3Æc0%2C�ÏÞ~.Èw8ä¡HL4Ê²¬— ÉÂ^Nù�múˆBì—æ²ùSA ðƒ%úa8gÀŒáaB
+<l60„5A„ÍDÿPBÂ
+êj¡Ž‡Ì'Uƒj‚hÅa#j-=œÆÙÎê˜š14.cÚ1XJš1}¦´clÛNÎŠ‹¸a#h?ôœ0¶n9åÛz—»µM°¦ú1utž�Ùµ˜›6iÕÙÈæé°Ì:NÓ³uÿz`’ßæÍ?Ô þÍÏÿªµwÕ»_§þ/§ü_º¶©õÿÿ{ªÿúáŽ·îø¯îÿÔS_ø3�Ö?ñ_ÿ¿ÿX+î¼~µ·ÿü/Ýk¶°MýÿS�0/úœKÝ_ð¾—û¯Þòáv÷íÞÿøF×ëÿåÁÿ¤?­/þ´bÿÿ£wKÿ®ƒu÷þ‚û!GÓßŠ²C†þ¿É?„Gàˆÿ$þºþ—÷ÿ¥ü}’®ýûÜ„}}^¿}Nï¿ûkÚÚ÷ö½÷ÿþþÿ¯µëÚú˜vþ­/ò`Hä
+¨ý†‘¯ûê×ðˆé÷ö—~½ÖÝ=z–= þý~Ð¬5Ý{»{Õµ4�Ég ßK	�<b!Ãb»µéâ¢¡¶”5â“i¦^Å&Ú¶«xN"ÓböœzoÇi§
+µb•uÖôa2z«[Z˜b©¯b©kiªˆm[Å!h[8…Ò…¦Íé5¤Ú©Ämb6˜ Âtá›)ÁaéÃ´@Üvo´Èè�Ù:µ´ Âi¦s´!„ÓLÚ1'Âamg”D3U<†"#ˆa4ÁÔ�aCXsÞžúŒØâ¢""ä2CTq"")4£_Šîú�/y×"¾@ðÖRP]hŒrNx/�aM3q(<sÙpGdcšÐa/à¨ÈgƒYXK‰¹Ph-ÌäÜ„{*ÂÓ„‚K—Ý¨BûÕ…„-4CkA„<�æåCL!BaÑŽ"Ö¼va":³z—yäÙä-ÝÐ`‘‰¾<&ÑwâÑ�£”0©Ç§Ù»ã¸«l'„Ì:NÍßIÙ€q½3ìÀìÜméÚõþæÞ¶ÒëýþÂÖÿûZõýï°ÇCÃÿö¿ÿ®·£e§¹Äÿü>ñþµÿ_—ÿzÅþëÖŒW·¢ãþÚÿÿ÷ÿé½õÿÖ~ø"?â¿þ¿$?×¥Ò’k¯×r aÈpC$¬†@jÆ•“’÷éÿÿþ÷éHŽŒ&½ÿû’ËÈ†ÔG°¤2G2ö];_¥»KõØa}‡Ýv’^“Ÿð×¸w…_Tcjú
+a
+W�ŠM;Ö)n‚l5OT˜q´ž¶±VŸöˆŽA¤wö�È6>×UÝZˆˆ¶£jØ¤Â|*M´ÚO¨„@Ì5�ÚWz�‡×ÂœÈá¤†Xææ¤r0ƒCíAP:¸ëëÿ�5˜ j$jžC�7r7;“‚ÎaÈH!GÐ=Hl²„†]ç‚%‘Ž¾Îär ƒ|/e¹œ‰QÎ9¬ÖVÈðœh<«ün.aÈæKˆÀ„0ƒ”ÈÄÈCvVà�Ù^{ a8†a|Aýè2v†ƒ¼! Áza4-6XM7°š:&Œa„ÂvŒmÚ0¨0Á*0›š
+R6š1Ñ�Ú7·A°¢ôa)ÑŠÕZ1¸ÙÌ÷F'<˜`š›Ü½˜ÛÒ1C6‹¤éT»hÄÊ³ZON“£ Í¤�nm9vÃMíSÓ«ÍÚwvU7Ý!êÛ¦nÓ³y´Â½ØOôê�?Iè{Ú^˜UÆ4�'èjÒ
+«Öë]»KN“ãÓö1±Tè]üÿ¯Åb¿?~?ÿWß¿\BÃ/ÿÿûe�‡ÿëó?üÀfô§‚üÚ#�€ÇåÂ÷ÿÿ·ia�ßÿÿÅÖüÀOýþ�«|-[Zþÿ_ÿ×ô4c¶{÷ÿÿ†Ý?ÿûÿ_$:ŠÉ �ŠÃ‚#ÿßïÿç’K¿_õëïdßü�ÿþHÿ»K}=xVMßûÁ_¯ÿþž³Ú_ÿß¿‚#½è¾×»÷ê×îý°—ö	z£Z�Ð;zQPÂW¶¿Ö“uœwÓíõ×K_°Duõâ•»Ø­W¶5á•põŽ!ÔRÅ¢sojáŠa§éÛkýC¦¢ñpÒañpö;TáÓKqZqua:ÚBÚ§i7a¼4¢šx¶)b˜¦?Þ*yX¦+®�‹Šké„š#£Ž‹¤�«a2>_Ó8•4Ó1+aG	„Â&„28@˜M;TÌAT!&6‚khDY„a<ÈN"(Àâ)€<aÈ
+±ÄDG„ZGÕkÛÃä	AGLjòc…‚�@ðË‚�á©	�<=�Ó‚ƒk�–˜0‘,‚Ú.('ê&DGßF}ýyva˜îC)Þœ†@e.†ÁÝÂëÝE}^‡}ÿÿ0ä(äÁP^fru bÉñ+"~C<Ërng#„2
+K7†­ç‚-‘cRæsÁ}H�¬rü Éúƒ‹
+A{´Â(@ËÀ†C?Š²à«#ÂOaB	‚»*Âþ¡A!Ÿ
+î,&xGHE„@Ëü dÁR-Y¾ V9l x‚&BZ¤ŒNÑ´ýåì¿F>ƒÑ„ÚÂƒzŒ&…ºèÄæ7õhÚhÆú˜M¨ÇMl�Àä.!pºlrƒØP©¦˜[UþohÄÃO7:
+°ŸV’m'16l6ïM£pÍÇ'M³�‚—¯émªnÂz|3á›ëi<»¸f¡„i'®òÿF7îÿÓ×_O[»ØÚïÓ½ÛtÌZv†ê�vŸWöŸoë‹‹÷ªn?_Â£˜è+�x!�Ãº†Ÿh;Nãÿ­úßì8ÒõoŽ+mªþ>öÇ†#{uúþ¿°Æ=Éøj®¥.Z}¡Çûù´GKþ÷_n\Oÿ.	ÿ½ùía‚ëú0!€½¿ypÊ`'[\t«õ_×þ¾�ý{ûkÿëï0ëË…û
+£
+Ý¯ÿé~év›éER%„¬‰3�¦O�äì¸*ËŒîBAsŽC@á üJÉ9‡! ÀåY�‘\îAÇ-Íd¸œyà˜ù)—Áà‹}ÿÿúømÂ#§ÿ½ÿÖýþm'Ð¯pˆêF?·ý’¿ÇÒZ¢\N
+²ãP˜A‚�•dsM4 –U›0„4C0Bü Ð†øÃ‰ÂÂ!` …¦¸†�Ÿ
+xFÕB@d†§û$ý×Þ÷˜w¿ÿì�èºþ�ý|�ÿ·™Ã¥SËö­¯Åk¨";ä�ôâ’F�é„,'¢ýØFÕ*µ1°ÂFÓÐ½ã´a5L0STÑŽ¨ò£0HÄÒGM£÷ué÷˜×ý¥¿ú^¿jßßÚ¤Þ•¯ÚþXïþ›OðÂØ_~¡…ûI>š8iKÎ}I^›¦é¹åF/Aº§ç”>Îg'9´�œIoÞ³u-ØO×¸`ŠpÍËönÍÍÜ>“»1Rký�;[I¾\=Š´öéb–ýŠûö)x½aöŸI«Ã¨¦)=�Ýùƒêì)·éÐéªÚtŸ_¥Úi®žö‡~Þ.½ÿWÒn†·kw§ÿKûü ÐiÕ†)Šb¾*˜´ì*m-ÇÚ…¼\SN*:Ðºh'ôÔSI ûÿ¡§ø1ÔD-?ýâÿÿxô¾®Ü1ýëÿñïÿÿßðÁ<XaA¦šf ƒA¦qƒP†»„ÐM˜g+
+qXT-3zwÂ'k˜Â&˜]áL?j¿¥`H]ýõÿ˜	ü0ævÿ×ÿð�¯ÿÿ_þ@Ô�˜@�„@ð`rªù„øoúÿÛð�ÿý}ýþ«þü0ÿcÿëAÿ÷¶–8ˆú¤Ý[×ÁðˆêF=ÿZ_¿ÿ»’¿|Óÿ¿ïþ¾¿ÿâ¼‚Ø\_êÒòoúMÚÚ¥ÿíú_úÿKßÖAÝí|£³ÿZÿ÷ûÿË µTÿ!ß«ÿÉ°ÂL4µûì":ÔZ÷ëýÔ0—ªÛ°ÂZ«ÿºKÚÚÖºÃ]u:îòâ)´•Š¿[Ž”qÄ?m;a¬ZéÄZkiF­Òv±ÝßpÓ“‚8uö™GB¬,ZÛž³@É
+~ÂØ4•(ª¤ÓTFÓTƒAÅ»ÍôÓNyB-�¤qM!qI¯h64CÙ¿LSÚºpñŠä|aa¨Žaf%X&.ÓQ°¡`ƒ
+šh0ƒ6“Ä!F!„&f
+ ƒ	˜ÔŽ¢#/<�Ð6Am9Á¥Ãˆ�<à�ñûýŠì/IÅdÂŽAiÉ¹�d‚�C�SrÃ	XY°Óp™XP™[ «Ä4Y�ÈQÈkÁ
+@ð°
+!¯#¦¡}lÞ2X
+šz¯ë´ø¾C(v˜A›i+ò:îïäÁw‡V�H&ßñýÈ5»ëïúTÝ¯ýä2AQò
+£ùÓé_Ó¬ÃäQð]r Éñ(=„vE�æp@ÉL‡sÙnE¼î“âçrw�ÈQÐzUÚäÃñ£<¹ð™Åq �‘ð"ê3q¬Ýd¬Š9 ‹r°ÜkAç„Œm‡„&&¨Â„,&ƒˆ~˜BÂ!‚á.å×E÷ûqoá5hÂmiÐA‚hÇ‹­8´_d
++'„'tòîÎ&Â˜ú/4ž-Ý¾‹¾Œ7hÆØ(¥ýÖáÚ«Ñ�Íí ÖŒM¨ÇI·j^|»m£A<â»A‚´œ “O][§t°ìÝ]'fº“s_fÏÌZo÷ÛÓï~b½=?×úOúKëlÅ¦×„Û¥ÍØj‚N¼~ºkë�úozoÐº¦öÕûÿKK½*õ¯nö»t¸ß�§Ý—ïýhiKÔ`	€§Ö÷Qï0/ú_˜%¯¿÷®ßÆ÷íøÿ¤ ¶?.×¯W×uï0†¢¯ýp¿õúûãýk|Æý¤éë]ë…aÿ¬ÀOß.Þëë�<4:ÿ„GZý¿÷ûÿÿþ½{úúË�Æ¿ûpEdÇ
+þÅW}=ÿÇþHr
+˜~=’„¤¿ÿKÿ�ÿKÿW$ÿÛÿ°î�ŠÒ¶s¿ÿ¥¿Ù7ì�ÿëÿµÿ„/Ñ E}«ÿü5¿Û¯µï÷ý·Uýú_²cþõ™Û¾þ×û¬_½„�¦‘´Õì'{uí„Óõb¡§ëu¯ÅmÖ•ðe^Ý¥µ­Ó÷¶¾Õ'kâšcÝ/a…bõkø§~ž¹¹Ù7cM9Ä-n±§{kÒÚN×I´šÓ¶ÒøÓ~×ŠL'ìpÕ‹~­‡¦”wÃµJ¸1§pûL+ºgB)„ÔE±QU´˜b¢˜ªÓA†)ÐNê�ˆoÔòQí4ÒlSÐfÐA„Ö„6ø…¾Ã~Al3G Åˆ‹0„DXA„Ð‡*à=„Ðˆˆ²:A›HDE…	„"*D-‹§AoÝò¡ªäÃiÇÕB7Ã#§¿á,‚ÎOc¬^Òþ“W –a÷éqZ®ÿè·Rá"o¦Â¦¢…cB¢“Ä_
+E0˜Uâ,»SP±òbAX xe¹ ‚Àä‡ xn9ÅrÍz¦(€¡8d|ÞD™> œDp«úA¼+o„ÃÂU|‚ÛÞ™‰‡!”8vÚ`‚8nÒÃ�<(ù‡×
+%¾´ô”'ûÕýu_÷½%m°«úä2Ck³Zyœ„"nA–ýó¶ýU¯ä>á˜tÈ.AvA½‘ŽC2³'„œî\:‘cO´X dæ‰ó<û7fKâ.»½%àŠ…E÷ža0…›Âeâz#B>L*aZ ôbná‚¹„ÕQˆs>Â®�m ëÒúæâæ<½Tm7M*F6š6š7¹v‘�ÉF7ÿóuy{Ì3zH;»9?	Mî°¥Þø¯»Ai]Ójá‚)áØHÄçIlÝ§Ak¤ìÛá„“í{]0wIèRÝ§~*�[Õ¿ºéÿy‡u±¡_­ß�Ý/m'‹«kKÄ/û­»bßíý|À^¿ÿß­ø…aÿºÕ¥­â—õØûx]ûƒÿûÿ®½z¹�ßº\~¿¼Bÿ.ÿó,5ü#ýwÛÒýûïÿ®úâ»ôb·«á]Šÿÿðßÿÿþ¡¶?Ý/ÿÿÿ
+ë¾‹�éa½ëA{Ø"?ÿ¿Gá¿KÿÿKGyt¿~¿ÿÿíêëßüÃ¿¯]úý‚.�widÝÿôÛ¿ï¯	¥~ºûûåºyo†íiô¯í4þý?jûijÚ±÷½üqpîÛîù¡Ûðž®«ÚPwIú|6Ò‡V�üw«|D?bµ�°“Iß
+ŠÙ¾Ó¡lRq±
+Š‹ˆVƒBØªc¤ÒÂapBÓL&Î,R
+ŠœÅÓI¦ÓÓWµˆ²;D§atŒf‰0™´¦ÐN"i¨Cµ¦„"Ždt0Qb!¦GI¦§ŒŽ	ah4Á\pÐ´ÂeÀä’`ÈôEqhDCD2’BšÇ÷D}h4¶ÒCØ­´«h Û…XÐˆã�;Œ%dXÈCh4È?¢ë§}‹ôm|†H2Ž@Ð3\�àaÈ
+ßÇ¯ÁHVCN8 xk¹Î
+A^ÚZÿjDP«„ª¿rùQÿrC³ˆ2;‡ôµö”†k¸{ Ãˆpãmûûtº_þ¿®Úÿºôßªú®F9!¢£¯‘]|‚Yò÷�£º
+”�æþC$6ü–xG‰�Ï‡ãÞx#Â,d4YP_ Íˆ2ÜŽƒ�ÍâNx"Y1Èß? Gï#pƒ
+ˆlØe\h<¬!£
+ã^x0�åùøFåD:©ßáøF8OM4Þ�‹L ô-=¡B*ÓXB
+=Ø_< hÆÓýfâ÷âÑµFFÕ0C½Â�R„�úºéåæH¼Ñ�´ïHâhÄÑ�ìâH»l$b°´b!Ì[F#�½]ÃTŒ]Ý;LÁª°’A¶ßvªé´›á:1?¼�-(?]_Þ�­êÕÓíÿ»Ó³ž­›½?ÖÌWÐoûê*¾ŸêaãþÞ°Ìõ„“Òxô-_½~8¿[v¿í§Ö½¯õÛJ=u›«[vÿãá‹ÿ… \OÈfÇüÂ.—XîŸ½%ÿˆ_Wñ¿¯‡_¯ë»Y‚~—ê—Ëˆ`-±æ$4*�°?ˆóKÑ�ûáü#kú¿ËýºFû¿}ÿnÿ_a…ëÿÿg1êÿô�Fïÿ ½[Ö´·×Ö²CüWzÿ¢èWØD~F>¾F<éàn\Œ"œ=ù'ðEÔ�ÿ_`‹òOÿuÿ®—o¿KX§$û÷ôÿuî¶¹‡n¾ÌqBî›iv•¯_ßÚê¿iÖŒ ¿OÞÿí{¯ÿÚ†^Ý?ŽƒÁ?
+�†¶Pîÿ«{ƒ‡ÿÃO\]>!üW|U°Ü”iC¨×±LUÝZkXxK¿ÔUÕ Ðnê›8‡¦ÃKM�4äìZÅ´êÚA¤ë°…1Mmi¦ÓKma¸^ÍáA¦½ãa4›Âi›ÓVÅ!Íê.ôÙ¸¿ØI±M4Õx4ÓOºL&NvG@·…â""!ÂÃ2È;ˆŒ¹Ã/dq„"!„,!È£ˆä2¢1H9€¯÷§D2ï x3>[�7c¯JƒáW… ^	¹Ü˜ì<4ÂÜ ˆ¶Uš‡ÈdWA„"ØxŠ¨ [~©®~@û¶J ¾q7a*1ÙŒâa‡ºi&Ÿoµû[[[ê©¨ðÃ_üTuÂ[Ëô«ðÃÿÿðAd	€Ú>:Køaúÿ„!’
+ÖA �½�g�àµ„`�åC6È*ù‘È!2ŒZ_ÿä#¿ð¿RdS¦Cá	d°&„0ƒ”2@ È1d+…TÖ¡ÿŒëŸÂýØa
+Tv“AM¶ Âz“zµýãXwÄc¸»0m&AHz¨ÆÚv�@Û0Û0tb£}'{uToõìÂÅµLŽ‚—ÿ
+¤ëŒ»i7ºI7ûtÚVÝGKõòÀT5þÝV´þÿÞÞëÓù:_Y
+Wü†HmùpS–ä‡Ïð¸õl†ðMÈAÓ Høõ{ôÿýë�Ùdc–8":á2Ü¨.È°PäqÁRGÒõõXSñ¬¾.q
+SÛ¬!a0@ÂÜJgð�„WnÒ\¸*ÉwZî®á0˜A„2	f¾"Â!eñ(*ÉBj¨}kôblXpðâaÃ¶Ûcæ0Ãpwsa¶Ûm¶Ûm†…ÃnÛÛm¶Û`�hÚm°Ûßf6Ëî¬B£
+…Ãm»†
+¶ýÙ²¾‹¼÷››×á›�Úv
+]ùz“l}ýlæåçkkê–¹ �ßpÌZuAÙäýÈd(ê¤ŽDb¢ˆ49Ç8è�.9‡8çÃœsŽA�È+qÎ9‡$9Ç8ä‡ Hå9Ç;œsŽDãém}vÂéúþ«Võm›wß_ÓIxZñ÷ëÿütý[a;¤Ñ€lîSçrœîS”çr�0™Üãœs¹ÇR¹Jâœ§G’GÑOEw8çîqÎ9ÜÓŒ§)Îå9Ç;”àˆü¡Î9Üã�Êp@­{^Êƒ¹NSÙNS�ÊrœîSœs¹NS�Áîóº­”êw)Ês¹NS�ÊrœîS”çrœþ¹Ü§ì§)Îå9Nw)Ês¹NSœs�ÿ¶±ÿ¶¿ûý6?×¼�÷¯Žl)ƒ?Å}_úÅ&ÿø°‚	 ‚a6Â#æ@ä&Á6l~ÿðÂ	$‚@‚	‚$"Ö´?Õ ‚A‚&�A �A¤¡`±ª	A$$H ’ARHq¡ë¯èÚPÿÿÖº¯­ð×ÒûX«ÿ¬67þõ]w…†—ÿµÕÁ¸ _u{v‚)Ó$H �A"Ÿûÿ_‘òèOA ‚EÐH$‚	„~¿Vº/¤]	„]ÐA ’\xÿë	%#áÎèº&�Aí¥B?Ûuûÿíþ—¿û¼À7ù÷ôbÿ¥„o†ÿýL$A �A($I¤]D„L³ˆ¾…‚$@›h0„0¬0‚A‚ ˜A4$H ‚	„A	A„!„C#¢>‚	‚	 ’	 A„‚$0’A „4)Â	—A ‚A‚&�I‚	H$0Šÿÿê=oß¯|0ÿKâ�Õ?þ¿Òþë½øXnÿ¼�ö(,qÇ¼œd|�ò>GÑqÌ9Ç&çrœ§)ÃY§ýáç| Š|0‚PH �‡Ò}ÿ°“	BBB?þwés¸">�H �A ‚PO�uý/�öûþ)É?ûõ�£ú¿énþ“]Rä‡ýGÿþÿõËÿ­[Â	—ÂeÒ8á"œ"?D~qÂR&Ç8çsŽqÎ9‡8çã˜sŽqÎ:AÂeð‚Ú0YÇŽ¶qÎá	/„A‚	Á~¹NTqÂAM	„Ò š&	�×8ç|ã�ÂAÐA‚H �I ‚kéîÔL&] ‚i‚	�A"‚&þ÷ÿÖ­¯÷ïä‡{õ$>“¹=¯Úú¤éj¾ëu¦�ôÕÛ¯ãA¤‚&h0‡ÈqÊã„H ‚h$L!˜B""�ˆ¾M	 ‚a ƒEß§ÁàÂAÂ$Aa �I"/ßè$‚AÐIM …‚ �î)‚ôÐH ˜A4A$$‚&ˆäÇÿbõö“á+Kþ î®ûIPß­6Òî4í$¯Ø�‹tö#ˆ¿ÿkþðD}œuG™Ü ™t_#é+KßÎê”çã�Ô§8çp‚h§GG*��óŽaÁøA0š&‚AÄâ>q×RŸ	çrœ š$A4!„¤?ý¯áÙt �":F„h^ÊsŽ)Ô$Aö-=Ó¶*‚Å!¦ÚaªÞ¤°ÒéX¤´˜B�&)ñiÃdèSšiÓAÐA ‚IŠAø„G¡¤ „4E8IBH ‚a4‚A�H �I‚I$ˆa2ùI/´I	J) ‚PDAÎ8H$qÎá#ŽM ‚A‚!A ‚	La‹gua4qÂ	 ‚A �A($A �AAŽqÎá#ŽqÂG š$H �A($@œC	­›F5»
+,0¸A¦\Ëé¦AŠ¸¦ºŠwpÂ‹hfàH&’f›í3i"à\»	 ÕÞË¤‚qÄGzûÐH$A ‚DPA"1Ò�®MÁÃ	„ˆøB4Á·Ö>¥9Ý6 …�AÍþû)Âè$I!A ‚
+A"?ïe9Ç8é�H ‚�AÒ&C×ÿ`�u�3
+â"ãˆhDCDDC†@jŽAl#‚#ás¹NLº/‘òüîqÂéAqÂ	ÿ[)Ê~Êrœ"é�G$H ‘N‚	�ºóŽaÔVqÁÂA ˆü¡Â	¤A�ÿÕ•îSœsŽw&‚ š ‚a ‚A/­{)ð‚eò>_ šA&M$#ÿ~öIAÐI	 ŽúD	`Ðè ’	B‚A†Gá„@¸ãAÒ	A4‚	„‚A	´A ‚	¡m„&’	Gá„A „0‡§Å	A��H ‚�A$CDhZ8áÐA ‚A‚	�A( ‚iÑãœp�H š$A4‚AŠ ˜H ‚`œoÈ—%ÒãÝ‚ùÜ§8çÃœp‚eô’$)ðÁW½p—wE9Ç;‚ØaŠ	‘×¯;‚©Üã�ÂAÑN!¡¡‡_®w;œsŽ8àˆè ‚A,uÿø YNw)Î9Ý ‚Â	 ÂA}”ÿ­Û#à›é ‚i)Â	„&”$H �H š	 ‚)Ð#ŽA0VH �H �A‚&H$‚Ac´Sœ|+*	 ‚i	Gè ‚ …‚8çz8á#Ž L š ‚h �A$A4‚	 ‚^Ê|ã„Špˆú	$	AL š �A ‚KÝ�Ô š$H$‚A š#�ÐiLa0B#N/ÓôþÂ`ƒ	$B‚A‚H!¤,¿lA „ ˜B‚QA
+DGÿA4‚	B‚AŽ?õ~L šA ‚H$@›A
+	"ûÿ¤L& šA ‚PH ‚Â±ÇûÁgã„�öM�ÐH š	ê?¿”ýÖ§$‹à‚a ‚&‚"8²®õ¼î§îqÎ:„�ÐH š)þ¿ïÎ9Üã„Šp‚h ‚	¤H$‚H_ÿû|î¹Ü§&�ÐA ‚	 ‚tïý|ï°ŠsŽH ’	aM ‚PH ‚�A$‚	„‚H0°ØBŽ8A4AÐAÂ	„I �A$AÒ	2Ý( ˜L ‚.�A
+	A‚Aø¸†VÒAÂA š	 ‚C …‚	†p‚h ‚	 ‚&‚ š$I‚	AM³¸A0‚a0‚h$‚	�A ‚A	‚A/lPCâ#þþSáËà‚´M �A$’A
+'I1Ö¯X">]"� ‚�I1ˆãïáËà¶�$A ‚��ÁÿÁ²Ÿ8çt‚A�I‚!ãôõ‚{Š ˜H$Aaø�oëwÛÎá ‚eÑ|� ‚�†L&L$AIzÞ•YOá$�ÐH �AÒ ˜A4µixD~aÂE8H ‚	¥&A4AÁ.w\îS™ÊsŽw		„ÐA4AÂA	„—Ö¹Ü§
+ÊpD}à‚h$MA0�AÈöëì,îAÑNqÂA	°š$‚A	L$‚A ‚Âßý$ ‚a0‚`ƒ šA ’!!ÂcÂ	„‚&A2úa ‚Lˆ¾ïqA ‚A�I �A($	$A±†Žú	$I‚	 …‚A �AÂq|D$A0‚iL!A ‚PA0‚Ltž¿ÇÞªü,îSœp‚a	¤A4"48ÿþS‚e8 VS„GÐH§Âi £‚#ÞðAYÇ;œp�H ˜L$GBÿëÙNï�ÂA �ŠB4CÓúú÷„/„ÂeÑvˆˆëëëœp’A ’ãä	€Híp‚h š	 ‚A ‚a
+		A ‚E#¹NqÔ¡ÂE8A4‚&‚	‚	 ˜ Â&	w)ÓêŠp‚hMA0�A( ‚ š!Ç8á"œ$S A �A0šA	B’ …‚ ™Ç;ÑÇ;„°�HM‚$A�H ‚aH$ YÇ;œsŽw	 ‚A$A$$‚A	°‚|�¨e¹
+¨ xà†@3XRöAÂ¤‚i¾Ç÷Îëe: ‚a �6‚A0‚	¦( ¸aÇº\0�A0‚aÂA ÐAc¡ÞqÎ9á ‚A „Dq]ýéá„A�I´	'_{ý ‚�AÒ	 ‚`„0¿ÿ»úÂ…×_¼ã¥‚.�@›"œ ˜H �I‚$	'­ü/ÁK`�XA ‘Ç&MLý©Þ¬§aÒ#è �AÒOþx8ç$qÐA ‚h$‚	‚	 �A0@¿Ö'µ ‘N�ÁÂ!H ˜A0�I-ë°@¶ šA	‚	ÇÚ!ª;ä@ôäÝÜƒ î ‚iL$A
+	‚AaI8„‚A ‚h$‚A�H$I‚!A ‚	„""!—A$$A) ‚& …B‚ \qH šAA&�A ’ „0…‚Ú$A0‚	„Â	„&L$A
+A"â>’ š ‚a
+H ‚iL!A
+ƒù0$w·ßWIÿýWÎý”ëJ§$S†C·ûþõìãœs¹ÇE±Pî÷ÿ©Ç;”çîqÂ	‚ë[)óºçrœã„L„B•(ÓûßÚçp‚d|º š!ûõís¹NqÎå8A5â–ª»é$M ‚	¤I$A4‚&MH$H �G;”êØ' ˜L$A4AÂ	 ‚	„( ‚Nw8éð�6‚	MH ’	B‚& Ž9Ü§8çtA4‚&�I …‚	$‚AŠ~Õ$Št‚A$A0�AÂA ˜B‚A¥�Î9Ü§	&‚H$‚A�H ’	"ŸUÈdu q
+¹® »®Aì0…B"($/ˆ�=ÿýH$ �H ‚�W �GÿÖMB’A„H ‚†Bý/{	B‚A0ˆz_
+ ˜H ‚ÂD¿½$A0‚a„Â&DF¿_ï!’
+¾O	Áà�‰Y9ÅÌ©Ÿ‹ãXLŠ9y|K‰a	dng"¹Ž_ yà‹dr8=›‹³ApT‰AÜ�ÍÀA—eZ…ÂNw/
+fâ_•dxeÙVƒ²¡;\îqÎ:íŽ9Ç0é&M �A)b¾ÿ~A5&Ü ‚	 �A4HŽUë)ï]ó¸A4A‚ šA÷çs�œsqÎå9Ü$S„‚G$H �A#÷ÿ°@”ã�Î8H§8çp’$AÒ ŸOp@¯)îÊs¹N	‚	$FÔ&°¡2sFC‡öM4ÐaâÂéñaž6µZhCF˜Bð˜BÓF>šqi£ÚœZ/°‚A�AÐaa
+l"
+#¤qÐA)	 ‚& �H ‚LCDp‚i ‚a ‚H ’	AÁ‡úA�AÒ …$‚	„($	‚,CAA$IM�A($A0„i	ˆý	M �I	H$A·ý<¼ÙÍËÔb
+iÝ­4F6´‘wF*0Ú1YÒ16Ëôc³svº˜�È{—pÍÖ
+cèÆöÙƒ
+csF0Òt›g8`­]±@½�Î9Ç8æã�Î8A4Chq‚8à�g�áÁÊûÎå<#¹N	$(!ñÿ×ÎøA2ø+$ÂÆ¾Ÿ×óŽqÂ[e8H$‘ã×ÿà�gp�8Iwý]§W§Æ—fÁý*Iè{§ï›�×Öº˜t›§¯§Á«fë7'ïúm›4õý:O0Ý:^í7ÍÔ�[)Â	£Ž	p‚eö‚!Aãœs¹Ç8çsŽqÎ9‡8ç Œ9Ç"CˆˆˆeÑ|�—Èù/„ËáH ’ …‚!A ƒ …N9Ü§	Ž8A4�A4AÒ …$A0A„B‚
+ÊtÜ$M�ÐH ‚	¤A4‚!!]Èù|�‘ôAH ‚‚ ˜B‚& ‚	®Åûb­ãKí+þßŠN­{ŠQÿ¯¶¿½uèuúÒ…èW£Ýéã$IL ÐAëe9Nw)Ôãœp@‘RGîS”å9Ü§GÈÛ¿¿;ø ‚H Áa·â?ëìk �A( Âa �@´ãÿ®w8àˆúA�AÂÄo~þ×­¹€žâÄ-úú0'ß§Ò—?Ä/ÿ¯ö¹€Ÿ¾°µékÿüØd§ÿGöqÂ#£$ša M ‚&�AÒà�X Yà NÑÇ8á$A4‚	‚	 ‚Aÿ‚´LºH ‚i�H ˜L ‚a
+^½”çã„Ž9Ü �6H ‚h �A$ÇÛý‡ô‹ßÚº_ÿ~·õÿ.Øizÿ¯þ˜
+ÿkÌ	ûÿè4AÒ$‚Aa„ �A¤‹®û š ‚i& ‚	„"ÂŸØB�A4‚AH ‚ ˜BZCëŽ’	$A4‚&M""/ëíþûKôßÿõ¶—ëÿÿÿíÿèÅúý—W„G_¯ÿ$8Ž8�ÿöqÕN9ÜL �A0˜&ú~¾þÊp@¬ãœp‘Ç	‚	 � ^¢¿®«ÙOiá ” ‘NN;¿ýþw)Î9Ü§	‚	ÁÛÉ?¿Zÿñ_öº`‹§ÅUé
+ÉþF=’Šÿý-É?õ^—ª^�ºûÿû!�®qÂG ™|�„ÒAÒ		„B‚A ‚a""&ÂAÒAÒ šA ‚H ‚a
+ „0‚A‚†Mè ‚i‚	 �A$ �H ‚A0…R(p� ˜M�A ‚A$’	A ‚	4íí/0ïkëëÿïMþŒúKký®—¾¯ÿ|4¾Öû&?ÛéÚý¤é¿ÿÁ„¡�j‘�÷¿÷³ŽqÎà�aˆˆý÷çuý‚ „_ük¿¿8é$($ ‡éWûöGðŠ~é�{ßÐ‡­ Ú¶þ8¦ë×ø«Gü0°õëî¿Ö?‡k¶!Ã‹M�Øâî—ƒíŒ�à¤¬®'Llãœ{&�Â&‚AÐAH ‚d|e9Ç;”áÐH š ‚a
+ šA ‚	L#ŽqÕl§&‚H ‘N�H ‚aÂA	#¿�Ôã„Šp‚a4I�AÂAPHB¸êÓO†’±i±]¶�M¦›	"vôÐ§cM6)Š†›¦›kqm&ƒx‹�§œC­=Øí8µ¤""„hPB,�_ü0’	A …‚!!þ¿þ	H ‚ „4B,bÿø ]A‚!A ‚	 Â±þïºè0�Ø Å'7»7¦šbƒ´Ó
+K*Ci¨é
+¤R$ÔtÎ&Ó1&LâM!m3h Â�›BØL…$Hpˆùñ
+°l#£h�`ÝóŽw
+Î8H$‚	A4 Qÿ²£ì,î&’&�AÒ"=ïõì§¬îE8A4A‚ š	{úþÁsŽA&L$ÇÄD0ƒXB""¢ÂÁHå!GhDE„Ðˆ††‹ x	ÜC†HjÁ
+9¬ˆ9Üã’ãœp‚Qa„‚PA( ‚a ‚Dqv_	„Â&L ˜B‚! …"8Ž-$ ‚a ‚	¤A0ƒDD_Ý$A4AH ‚APACcøˆâ*�·‚ãõßöSœp‘NL/ŸµÎ:ö§îS„/‘ôS”î=Sÿÿ”ùÜã�Êp‚h ‚	¢
+ó¿ß�ÊsŽqÎáoItÈsŽw8çîqÎ8Hã„GôA0‚aAB‚A �A!ÂA#Ž	H$I$A
+	A ‚H ‚ÂA	‘ôH šAAM ’	 ‚	„‚!A …#Žw8çîS„A$A4‚&�H!I �O f½%† ˜BB®"¶#Žþ½¯e8 �A!„	°^#ÿ_ùßÅ„‚+x�?þ¹ÝEM �AÁ«Ž>w_`Žý1Kj‚¤L�—öw	p� š	 ‚A‚&ã¯e=‚áÑNqÂA ‚a4MA4‚!Hã‚çrœ-µ‚	”ç$&H ‚iL$ÇÿûÎé	—H§&	&Â	…ÓVH ’ šAH.@ƒDD÷á„	&Ð@’	A „DU÷õ†‚&L šA ‚A‚	 �J>þ>L&A4Aƒ	 ‚A „DG¿ k�__áýŠœsqÎç …‚	$M @»ûÿþw8çï š&H ˆå|]"œ š&G$�ˆˆ¿G×;œsŽw)ÐA8ø¨h$L!H šAKh �A0…M	„L!h ˜MA&�AÂA4AÒ ˜B‚&_AÑNM ‚	„ÂA�H ‚A4‚!#SœsŽw&‚H ‚a ’	 ‚	¤ ˜H ºa$Aˆ¶"ýoþÿöSœpA¤‚!¡è{^¿îÔã�Á$H …‚8ÿßþwÒH$’ „0‚DGûû¯®Êrœî�Â	‘×	
+Ú&‚	„Ò$H ‚`�m|$qÁ ‘Ç	$A‚ ˜H$‚H ˆÿ«\î¡Ë¤qÂAM ‚	¤A4‚&«û)û)Î9Ç"œ$A	$@›)ôÃ	„‚H �A(&øa �A"8ûþÂAH ‚	BB!„"ÿ‹øa0…‚!A ‚H$† ‚D}õt‚ ˜L$A0�A ’0NL!wýú~ð@¿ïÎç$qÂ	„M�@ˆôwí|ï�Êp@¬§&‚ ™|&‚@�4#ýyÜ§Îë�Êp‚h šH šcHëÁ»»)ÐGrœ šÈd‚­�<¬‚î@ôä2¥ÈnC&toa A0š&�AÒAÕBH M¤A
+ šA
+	Ç&GÐA0˜H H$‚	 …‚	 �A$AaœsºAÒAÐA ‚H$I‚!A0… ˆúÎ8H$‚&�A �A ‚	�H �A-é¨R¶ƒO°@ðÕ{ §€�’Â‚pLflC}Å·þüã¨A2é4‚!HD[éÇ_[)ü0‚H ‚'ñõÿÁµH ‚	„!„B!„"/ˆ×ö'ÕO^,&2s?„Û
+©âçp@¬ã„E8A2=¶]	´&L šA �@�~§îS„	°�A2ép�A ‚A‚ ˜A4þw)ú)Î8A0Ž8H �A$‚A$A0�Jþ�Á²œ§	ŠsŽA ‚	„MhÅIÈƒîéz1Ã	¤lÛ ®^‘ÂAB‚& �A)m6‚$‚D×¤A4AÂA	„‚& ˜H ‚ÛÝþL š$H �A) ‚PH!AÒB4´M‚	„Ò ˜H$AÃAB"ãù
+§Å]ù†a—ä´'á$Ýê¢»Ž½ý¨Duÿ«)Îá ‚&�A ��>?ûÿØ NÐ ˜M ‚#†x¿¯®w\$‘Ç;¤�HCF¼pD~ùÜã„.‚8ý*¯õ½­øºTúßì� ‚	A0˜I´ÐA ‚	 �H ’ ˆwH š8áÂAAÂiL$A
+	B‚"Cœs¹NqÂE8A4A‚I �A ‚H$AÂAp@³¹N�A4S„H ‚h ‚	„( ‚a0�A:kÿŽ-uúJÝù±ÈÁCêC5ð“a„(0P×B‚	Óãÿ�Î8": šAH A ‡û\îƒA ‚PH!AÐ±þõÿ¤L& …$PW‹ÿw÷ eAVl#ƒºd0ðažû<ƒ�¾~6jg"Yò|Fç€™nw'O‰Ì‡°ƒëõR 2pV	ÁVG„^%a‚p@Â!ç#ü Nw@‚²éGW)ÕÂAÑN	 ‚	¤H%ÿý”ùÜ$M‚	 �A4‚A�H�ÿü+	pEÒ&�AÐA ‚H ‚hGõó¾&Î8A4�A0‚h �A~#A¡Á‹N,4_Õvƒ	¦ƒ\F~˜Pƒ½/—N]eÓ4ÂaA…	£Oû	á„ÐA0˜H ‚ ‡´IL$`¸±ÖÒ š ‚`�A($A0�A($Aˆ�†A ‚h§!a ‚PH ‚Aˆaˆ¹C”è �H ‚	 ‚&‚ ˜B‚&†A±á˜tb|$m8 Â´bÚ1´�ÚãF7/eÞÙ½£{ôbo.Ø`¢ª÷KKF—mœÏ{F'/Q�Ó¤fi¤a¼ ±÷ÿúþü'a2ùA$":X!~¿ïí{)Î9Ü§&�($A
+Oýý­”å8 VSœs¸A4‚!Aˆ¾/v·e=ÙN_0WfxM‡æ®oi:ïós§WVÙºá˜”&ÿÙ€}ëýþÚN®ÓÃ¤êé=¿~Û¥_e8H$M‚	¤‚#®L ‚aÂ	„M ‚C šÎà‚°‚i H$L& ˜H ‚a ‚PH ’	¿´‚	¢� ‚i‚ š ˜H ’$íN8A2ù	£ŽL š ‚h ‚	 ‚H#�úMý+ÿÇAöë´ºÓ¼~¿þ?~ÿt´½ÿúý±Ž¤ÿÞ¾A„BA"#â‚'q÷[)ÿa �A( ‚`�B(!ñü„Â …‚ÂÅ"/ïýi …$A0…B( Â!°z_ÿÿÿëýwýã¯ý{ùˆ-/{®þ:ÿþáì?ýk¿;ùß²œãœ~û„Lº$L ‚	„H D÷þw)ó¹NqÂ	£Žw	AM?ß�Ê}µ8çrœ š	‚AM ’¯_µÎ:‚˜sŽw)Î8A4‚	uÿêßü¸×ûKù€a¯ôûýüÂ÷Kµÿûö¸#ÿn×|$AÒ …‚!H":ÐH �A$H&@žþ‚&‚ šA	„& šA†ˆü0�A4AÂa ‚	„‚	$H �tŠA ’ šA ‚I ‚R& �A"Bßÿÿ_ÿ×ì_ÿÿÿ~“ëÇ£¿ÿk§¶ïýCZéþ8ãõÿ¨ VSí‚	 ’B‚GwßþÁÎå9Ç	 ‚#°‚PH!ÿ§ÿ¼X@›ÂAŽ"—g,'þÿõÿ²Cû×¯„Gÿÿ_d‡ÿ¶Þ¶ºmÂ#ÿýo
+ä‡;¿üm:ã„‚$8á"œ ™u´H ‚	„‚!A ‚A„A£¾qÂE9Ü ‚	„ÐA0š ‚aPH ’ šµÎ9Ü ˜M ‚A ‚a0�A( ‚iL!As¾w)ÔîS”áË¢ú	A4AÂiïëÿÿ×ÿßöÉ½­ÿ~¿k¿í¶¿¤úÝþaÞýúö¿ÂH$A ‚SzB‚|ÁÐAÒ	@‚ACGõ½‚A’A‚H ‚a …'ì}{ôA
+	‚$C ˜!^ÿõÛ×¶û‡ñZWÅÑ.Ý¤Åuÿ±­×°í+Õn¶¿Ú¿|wM¯}Z^¿ÜÇ;”áÖŽ:µa)Â	 ‚	�AÒõç²�nÊ|îS„Šp‚	 ‚h�¯¯ÿóº„AqÂ	„‚	 ‚	¡ÿÎà�wg$S„&‚	O Ób­6uzi½«i6ýÚÆÓ
+$Ó†­Õ§I±Iö ›PÓØ¦(!
+8¨¨Ú�Š;§b°Â	 ‚	„L& ‡A ‚PH ‚A †ñÐH š	‚A	A ‚	!„"ø„	 ‚h �AÒ ˜H ’	M ‚C‡sŽ	 ‚	¤A0…‚!A ‚PH ‚~6�éŠ
+Ôm1LS8‚¬&…´Ðb£¤Ø¤Ò-Ða8l,B
+¦™ŒŽ½4“A„VÓì/ü~»ÿ¼ã„§&]Èè$I$AcãÿÖw)ó¹NMi °Â!ÿ×þÊ|îqÁÐA($A0„c].×µGÖ""Â„""Â`…DD0„DEª‚D0B"-ˆŒ¸`"�àÝð‘NqÎáÐIwH":¸H ‚	¤A0‚	 ‚A �A/Òì§G$AI	$IˆÿÂE?e9Ç	‚$H ’H ‚a ‚H ‚k×ì§�¢œã¤H$H �AÂ	„Sâ"90kq0’A	!„#á„""=?þ�I‚!A ‚	BA"8ß_®L& …‚!A$‚ÂÄo~¿H$‚	�H ‚ „0„DjŸ hñuÿÎå>qûÎçîSœp�H š	H$†ÿÎë�Êp‚eðA0’$H ‘Oî?ëYÜ-—Èø&Â	 �A4I�}þwÎå9Ç8á$‚	 ‚k[Ò	¤I‚!H":ÐIL ˜A
+	B-ˆåŽ&ÂAË �) ’	$‚	L „?M´LºAÂiMA4‚&�AÂA8çt‚	 ‚&¤‚	 šAH …tÛÕ×ïU²œ NaÂ	‚HCPB#Ò¿õ½”ð‚A �
+ ˜ Â!Ç}ÿüã�Ôã�ÄPAÂqéÿÿ‘ôwÅüîSœs¹N	s�Û ˜HM�A ‚A ‚i‘Ç8êqÎçp‚iMA4‚& „0‚	‚îû)Î8A2è ‚h ˜M ‚	¤IB‚8ýÙNL¾GÈøMA$H$‚&�At‚	A$‚A\&¶(!¯§ÿH ˜B’ ˜A ’	!…ÿ�þØH �A ‚	¤DqúÅAµÊ ˜H$IM
+ ¡Ž5ÿOý%Þl+yÇ	 ‚A ‚h ‚	¤½{z×;”øEÐA �I	 @¯ÿzçrœã„Šp‚h$Lº$H —�ëå?e9Ç	á �IL"Ÿ hˆA4‚&’& ‡qAb‚!Â�B#Ð„‚A ‚a �A ‚A†aacâL&L ˜H$I‚	 �A($†a°Œ8A4‚A‚	L$A0�H ‚!þG±ÇQ8ç{INå9Ç	�ÐH$ƒ_÷ì§ÎêqÎê)ÐA" E‚ÄSýo²œ+)ó¹N	¤‚&¤"/�ÞSçu¯è§8á"œ ‚g ™|�Ú8á A4A	H ‚)ó¸A0š ‚a0�A ‚H$‚A „0GïØHã�ÐE9Ç	 ‚	 ‚	L ˜H �A ž×í#ŽqÎáÂeð‚	„‚A‚	E>Al†@6IÈd\<@ðV‚´m„ �A!A=ˆ†_óŽ�H �A( ‚`…‚„DküPAÂA �H ‚a	„@¸ôø A„&‚	B’ šACûÇù÷Â�Öâˆúa5ß^óŽw_S„E8H$M‚	 ’Tãý®wÎ9Ü§8á$Ç	 ‚	£ŽLŽ#÷÷œs¹Nw)Î8H$	"8�ÿïï8á �A.‚K
+žº~¾	 ‚AM �A$GZ&�A"",aCAi.�A0˜AAPH ‚A4"(,Xa"œ$Sœp‚i‚	 …‚ ˜A
+&ADr‡8á ‚&‚AÐAÂA‚!$		þîM¢‚Àí<w}±ÇÄ|DrC˜sŽáþMËq__8çï„/‘Æ±Š�Oÿúýœp�ˆaˆÖôþw\.Âe>Al;�ÒÈdþ�h�àÚ:Žÿ�Êp‚hã„Gã©Áh!Ü§	á!ÂAH ‚’;”å9Ç;œs¸Hã„ŠtA4†Âi �gpˆéé„‚AÒAÒ	A ‚	B‚8çp@¬§)Î9Ç	 ‚	 A0šA ‚PH �Z¯þ)Ú¯¤H ’ ˜B‚!EWßÚè$$‚	AQéþqÏ
+ ‚	´ÃDlFëÿXaÂA ‚I ‚	 Âñ¼~×ëÕ× ¤\/�ýùÜ":¦Â	„Aÿõçrœãœs¹ÇTÒ �A
+
+þ·�ÊsŽE9Ç ˜A4‚	�Aé}VòŸl§ ™NMASä2A²
+ÂXJ
+¡|Lp¹ì�.ç‚nE‚+“‚Ž#²+�ÂÖO	9Ü&CV
+²^n5–ä „tË‚~N
+²
+ðLráž	ñ;*È1„vFé£TxrÂpx¶ ‚iMâøøa
+H ‚iH$A4‚`S^8Â	„Ò#‰Š	A ‚PH!!	�AÂA$H$I‚a ‚PH!
+a	„-S@âÂa	„P‰Ã Âá•Cw ÂÞNaOÁB'Ã5L!`…„ hi¡a0ƒ] E^Z0ºBøþùC„‚G š)Ò
+"8¯~qía„‚.¡!ÕWÒ÷ç+)Ês¹NŽ‚A
+B"ãÿkÚçrŸÞbp‘�µ8²óBÑŽªŒYvö§º1pÁ#VsË¸i­³iæg“‹Fö‡Fy�£Ã0Ô'æ>‚)Â	¢œ š ‚h":âM ’XGîqÂ	—Â	$0ˆé ƒ	[;‚#õP‚h$‚&A4&	H ‚;©Ç;”áÈú �H �A ‚A‚	E>Ì7ìÙªzaBupÌ3v·g=:·6Û†oHÃVÍƒm›I¦÷ðý%°ºØN†nÓïÜÝI÷fß˜;}8fæ¾ØI‚R;àˆÿª!A4‚ „D_þ! ‚	˜MÚéïÿØBA ‚Aˆ†EÄ_ÿýÚéíÇøú÷v¨ûéPÓwÇZ½Š¶—´ÿ¯ýu¾“×µ¶ÿÿ­kï^q×;ÑÇPÃ&�AÐK;þºœsŽw8àˆùtÛÊ ™KC�Î9Ç;„A A0‚aÒ$
+Ê~¿;œp@¬§&]Âh ‚aÂWâá�¿ø…Õ­/ýuÒõÿÿñ_ïÿV×ý¼Rû¯µúð‚h š	 ‚AM":�È‘Ê²�4#éA4‚A‚ šAˆ¼,q‚&H$oh �¤B‚Kñ÷†‚	�AÒ ˜L$PÒø»_‚Ú°ÿ—
+Ÿÿÿþ×0÷øW¥Ô/ïÿÿÿ_¯z»‚ü1ÇñsºGr�‚WÄq÷óUBÃ„GLx¿òžµ¤Šp�6S„`†¿þþÞ‘t‚	£ŽMÿ£výoðŒ_îÿÿ÷ýÿFµkÑÿÿÿßýï_ÖŒ_ýÎå8A2øAËá¸ˆa†E9Ç	á
+A ‚drºB,$“¤A0�AÒ „0‚A„‘A‚H ‚h �A) ‚A‚!!ÿ­Ô?ù!ÿ¯ü":ÿ÷ß‚#ÿ¯ÒþØ —ú_ýÿúá×®½t«ÿA0‚DD0‡u,sºœs¸ I ˜B/ˆãùÇ8à™C„µt#ïà�x Zœs¹NH ‚aÂD0„~Ÿ²Ÿ8áKÒ]rÇoÞÿ×ÿ_ÿõí_ýŠåÄÿÿÿ¥wkéÝï¯ýß�Î9Ü§ÂA×$‚'~Üã�Ê†ŠsŽ)Ïm+AÂGFpDx�¨¢C„AÂh š ‚iLaþöS‚e9NM‚	 ‚AH$OýõvÑ1ýXÿïí†n¿úø¯oÿOT—½ÿ4~éAíõLoZÃ[ý~Â{a) ‚H$A
+ Ÿýz&�AÒ	$ �HS¤#Ø¤MGåM ‚RA†�þ	 ‚	„‚&ML$Aa �1´¢°ï	ÝÝºlmª«¶ª®šÝi§×4„8iÅ&šj½ô›iÔ5î-†—»úõÿùC„A‚	…C¾>q×HPæ":AôSˆ´0±®ÿ;çrœ šH$GAÿ{­ý‚œsº¹Ü%Å3ˆ]GÚÐB#M­1H\Cb­6“A±H4,®*ôîšÃHYV„[ûH[LRjÌ+›8…„ç’Ò	 ‚A ‚h$M":í �A$�@�.	—Â&�A(�‘ð…ð„F†Î9Ç�£Žˆú&_AÂ&H ‚a ‚	„BA%
+ÂH ‚aÂ	 ‚A‚ š	 �A) EG0‚jšj\�w!lðñA‚ Àì¼špÖ,ŽÈä_a—­`…ÈgÂ¹¡´äpÊXL�ÐN0‚mˆa�ÿ¥¤‚!A ‚D5‡"qÉD ˆ)Ž¿�ú! ‚A „0†¾Ÿî·ò`Qn""äÃJ&çrŸh§8éh ‚h �A×¯”çÃ˜sŽr
+p‘NS„‚G�áÊÂ	 ’$AÐ YßÎþw;„�A �A4AH-·nÛÒ¤’¥ªH0Û`ƒL!/¥ª]!Ge‚vØ ÂzIRIRTª’…„.Ë‚Ø5Õ4’Ã^þ?á @œ$S„Cë×‚E9Ç	�A A28¡ãô?�ðD~qÂE8H Š}64�A4MÇ	Ž:á„!„)p�A ‚A @˜LÎ#ä|�—Ë¢ù.‹ä|º/‘òæGÈñ#ä|¾GÈùt_#åò>]‚& ˜H ‚0ç8è#ŽH ‘NM�AÒ …AOØC ‚H ‚Öø YÜ§Îê($I‚„@Àõ]EDÇ¿¿¸h ‚i$A
+	0ÂÇ]'ÿaÚí”ôŽ»	„‚	 ’(uésŽXáqÎ9Üãœs¹Çi ‚Ž8ŽHr çã�Î9Ç;œsŽw8áÂA‚	 ˆ÷ÇõÜ§P‚eð�A$‚A$ïŽÂ&0‚	„‚!AøºÐÖ‚	�A)‚	„!„"L�""Ëá2è¾A$H$‚& ‚RA
+	‹ì&Ž8A4’$H$H ‚aa0A„ëé_ïþ°Â	 ‘Ç	ˆl˜à�grŸµ;”çîSœpA†Cõ÷ê§uÂE8A4ˆˆþ>«Ø ]àˆúA}A �A4&¢:D6L†cÂ!A ‚H$‡)Î9Üãœtã�ÂA �A ‚A‚$A0�A/e>	p�A$MA4‚A ˜H!A.‹ä|¾GÂh Ž8H$‚H$‚&�AÒ	"‡öA0‚a!„);	q×]$A
+ …¡¡ýÿð@ƒ	L!ÂÇ¿¿;®A ‚&‚	Bï^?Kß÷öSçuGïáÐA ‚	¯ðAsqÂE9Ç;„A ‚h$‚&�@ˆ÷¼§8çud|º/‘ôS„‚&L$I‚	ÓÿØ ˜L� �H$qÂ	 ’ ‚y°fr†Xä!É9€Ö‚‚°ä`ƒ8ú ‚h ‚A	Bù¡H-A
+91û¼] �A0…$‚	„ÂA ’°^—Òð‚h �H ’	($A
+C	,F>¡¤M �AÂAH$0˜B"-”ù°w!á2›„Ó
+\<`¸4Â§é>?á0ƒF¼Ó8)´a›0Í®&Î8Hã„B"áû~Ö‚
+ÂjA
+T	ˆ‹‘Gÿ8ç~‚E9Ü"øA �DvŠ|}ýJ~ÊsŽw	ÛïÂ®¸P¨ÂàˆÿÚ8á"œ š)Â	£Žºr!tâÂwx ‚PA"¥qÏBœ&‚ ˜L$A
+	ABE/‘òè¾#åôM‚	„( ‚i‚$†A YÝN8H$qÂ	 ‚a4‚H$H �A ‚G­¬‡pî¢†ÈwÃ�<5GiCú ˜H!A „GæÕF3rÞajæoÿçt„PB($â#ÿŽwP@¡„	B!„ÂÂØV#þqÁî	B‚A4‚!A
+ÿe>AlŽ"þ8îô*>?~w\îqÎ8DÄS÷Í±pHÞÕù¿„’&�H#Ž�î ™Nw)Â	 ‚&Ž8H �A(¿�Áì§Â@�;e8A4‚	‚	¤Dq:àˆýl§ð‘N‚	 �AÂAõ×××ý„�I�IM$º�_ÿÿã�~Pè#ŽB‚@‚	„‚A �B‚Aˆ‹ã™ÁÂiM$‚AƒDh#$’ …$A!CG-uõü�ã±ÈlPyÜ„r/H*KÇ±þlŸüØUÿü0‚eÒ&¤„!ßÕN:öS�ÊpA4S„Ø�tý/”ùÇ0ç$S„ ™t
+ƒûçÎ8 YÜ$S„’Èdƒe•d|K‹„nFäAÉŽNÍ‚<!Œ$ç}•dxAì›’±È£”9£.	á'*†²ƒ”äàöƒ<ç’²NTÞN
+‚Š³Y1Ïd¸!x5•[OA„eY¬–¹1áÞ ‚ap‚aáË®tþßÿ×øA!„B�çÃ„@�H$’	 ’ …‚$ „CÙNS„	 ‚i$H �A$‚	¤$‚!A Grœã�ÊsŽ ˜A4&‚AÐa ‚&SèZj0¡µZ'„!’Ÿƒ4ÐsÉ®©„;L´8Œ'áéB…Ø!!hÂhhCœPQa4-4P‡La4‚!I‚úX"é‚#ý|Ãÿÿø _œt„ˆ`ˆ¿8çî($$‚&ƒ†ÁúýmpÂ	 ˜ ÂJÅ±ßÊööÑvÑwpÁhÆ¸fú1f>ŒpÂ›è½˜ííoèÄé„�¦� EC76rË·èÇPÂ—m¤b/ÞÑõH6ÌÑ‡yzóv]¶s9´bèú÷ëªçrŸ^8pãXý(¨ŽA0š!`³¹O˜s¹Ç8çsŽ	p‚h šAH#Ž½ëå>w)Î9Ü§&‚AÒ	 ‚AŠ{¯»Z"œ M„A4H ‚i�AlÃ«Þû¤ìÜÞ›ê›fIúot�ÝëßÙ³ðžõ»0vþ›<}[f÷pÍöusgyº­=Tþì'ÐA ‚A�H ’	¡°�«ÞØ ÕÂEaÎ8H �A) ‚	¤Aa ¬uA	‚	 �A$ …‚!A “!¦ML$$‚A �A!„B#ÿ·cþÛ¿û_é¡n¾Å~×ZK­ÿ×ñãÿc];º»__ÿ>>ý�7ŽŸãâ!¾�„®#œp‘Ç8à¢#x�þw)ð‚)Â	£ŽMˆâ=úè"œã�ÒÂAØD�ëÙOçsŽAwûÖéu×ø…ÿþ„/×â·ã¿ê¿¯¯Ãúÿ÷ÿÑ€cà¿á �6S„�A0‚hã©€Ú˜ „BGîS A2œã„‚H ‚h ˜L$H �A$A ‰¹Ç8á"œã„‚AÐH ˜M ‚A‚&H ‚îS”çîS„A$H �AÒ ˜B‚AÜ7ÿßþ ¿ÿÌßð�¯¥ÿïÿ0ï†ïÿÿõzÿý~éA ‚H!üã‚# EÂA‚	BB"6ÿÿ�ÔM �A$ …‚
+!ÅýôóØA �A$ …‚»ïëÛ¯þ¿n‘‹ûÿ£ÿô·ë_Õÿÿíÿýëÿkÿú1ô«Õ{ó¹Ç8á\ „B
+!$�®¿<)Ü§)Îá	´H �AA‚	%ë×Ú­àˆú)Â	¤‚	—Â@‚h�§ý{\ã�Â	„Ð ˜MAÂãõôÿßÿÅU~¿ä�/Óþ¾?_ïÿGû®ÿKÿö+öÉ¾º_~ÂA š ‚a|P¡†M ‚	¤	H$‚H$ „GÄBA‚	‚	¤	$ …‚!A0„Ga4A ‚H$H$‚!I‚ÐH ZÝuíNá»ÿÿÑ€_ÿÚ_èÂ§íXDúÓþÚÿä;·®¾éè¸û_×é;KIõGùc¤qÂA´‡~‡×²œã„Šs¸H§GA …¾»¯µíA²œã„Šs¸ ‚")ˆÝ?¯a%°‚a]Ó]í×iÿk÷Ãö==Rô¶·û‚#­×Ã	iÝ}ý÷úqñ_º¾’	(A4‚8á$‚	‘ýP@ˆÿÂTw�Âhã„‚A$H �A‚A¼î„‚AÂ	‚	 ‚A‚	$A0’$‘ò>GÂ)Î8AÂ	 �A‚	‚ š …SìqQ­­ª¦šiÉÄªÅÅ§QqiA¦šlEÔSi ÐqØïcTØ¤á¬\4¢˜¤é4rp¢H4Âq§§a„‚!A …Â[ˆ#Žw]L$H �!*ÆŸÿh �A$$!„A¼B	„Ò	A ‚C&A?wõøA­6¬1I¬klânÌ*†�‹¯ç6îÄ(Ý„štƒÃIÆÔpšÚˆ¶È(ãµ³zˆuö¹ÝA²ŸˆA$%ÿ^aÎçã�ÁÂH#¸H š ‚iŽ¯ÿœp@¯‚;„Ž9Ç; ‚E:$‚&qú_;ïáÐ ˜M�Is”ˆµLŽEÊ"Í¤"!„,Æ]…B""“	¡Â"(â". )€+.l†H*8A‚	$I�DGÒ	A4‚&�AÐAH ‚a …‚Ð@˜Œ ‚h ‚	„Â&‚	�A ‚RA	 ­ˆ¶)Â	 ’$ �H �A ‚Aa7ÐˆŠNC \†@,¾¡ðÁ}xõðGÃœp�A$‚A
+ „A„8¿_çp’¹Ý„($H$‚ÂÆ×½*	Îá …‚!º¯ß8à�=„§û×úì M„�A"œ š	,!&�H ‚;ùÜ§ÂG š	H ‚i$I¯öS”ùÜ$‚8á&	 ‚A‚ ˜/ÿ;„&A‚ š	 ‚AKN(†@*òñXA	B‚A �]^½´AÒ		 ‚	¤$AÒ§¿ÐH ’	 ÂA‚	B’	B1U×ÐA4�A0…$A0�H!!¡ZïÓªA„[ïëß„GùÇ š$@ˆúq¯¯¥ÿð‚h ˜A0‚hDGþ¿U»8áI �I	
+DuõÎå>w	t‚A‚	”þ&´lÖÐ š	 ‚	„L&”( �B/ ™t‚	 ‚&’A�H ’ šA ƒˆå9Ç	‚	 ’$A ‚&L$A0�A!„§îS‚	 ’	A ‚A„La$!b±!QÔDGçsŽLA0�A($†ˆ÷þ¶ �YNŽ‚!Aˆ�
+ô÷Žý”ø ’A �A‚!± @»¾¬"?ÇHî‚)ÂIs¹NqÂ#ð¡Ò š @—ísÁOe9NL ˜H$‚H �A$$ �j”çã„Šp�6&Lî�A0˜H ’q×ÿ²œ§"œ$L& š ‚aþH$A ‚	„‚!÷Ç÷Š �A ‚H �H ’	Lqª&�A ‚A‚H$I‚E„5¾( ‚a4‚&	H$A
+H ‚Gü�Ì×ßßÎø ­—Âh ‚	‚�a…ëëë�ð@®Ç;„	¤’ÿ;ùÜ§
+Ò		„Âý}|$Sœp�A%‚3 ‚	 ‚h$L&�Aú
+�A!„B‚J§
+Â		$‚H$AÒ „PAÐaqÎå9Ç8á"�AAL!A$A&LÇ;”çã„�AÐA ‚A$A4‚A†\�,3!†ƒPH!PA}”ý¬4I‚"oþà�ZA!„B($ ‚F„G¯½ý„‚&�A"At?_e?§È-�;�jr†È Yd �w ±aCÜ?\îSœsŽwÐVÂA‚&õöS˜s¹NqÎå9Ç; ‚	£ŽMA•”þwó¿�ÂGîS„H ‚a ‚	¤"?ÿÎå?a2œ š	A‚& ¶
+¶0ªPj²æð‚	�AÂA…B
+�oa �A4H I‚& ˜AÒ†4ú&M ‚	¤A4H ‚a ‚H&†ÄuA‚H ‚a
+	BI�H!A
+�z«Ný£/Z @ðÁ½ê¼z ¬ã�ÂH �A#‡x�¿¨A0E9Ü$L&„Dwú~ßðD~S„	³ŽHCïþµÎêqÒ)ÐASäÁwâûµAÈŽ¢Ú°`ûIG š&Š|[	B‚A2ù.�p‘Nw	$M$‚A$BADîqÎ8H ˜M‚	 ‚& šA ‚H ‚Â8çu&‚ š	p‚h �A$PH ‚×ï»�aÅE>¶ið‚& ‚	¤H B:û\„ÂA	H&DFüã�üîH ‚h0šA „Dqé}sºè$I‚	 _óŽ½”éþ¿¦¬ÿýœpˆüZ ˜H ‚h-ÿíA¼ã�ÊsŽ@›A ‚&‚ ŸòŸ×;”çî8á ’$I�H —ºÿ¶S‚a ‚&‚H �A ’)ò!·„°Š9œ)!üžr …„†¼†‚NxÈàƒS“ì•“rcäc©âP{!ŒL‚9ƒY³Y7;¦��³/�eØk
+$M ‚	„‚!APˆûÃ&‚H �@�A$$‚A†i!„ÐA4H ’	$A0�AÂAb8í	„L$H ‚a ‚A „GwÂh0š
+Íž.˜BÂg9âXÐaxAœ‚ÓÂ
+4öƒZh0ƒ'	øBd'ª0©¦`Ö�Øabøà‚ÊîS„‚@‚`�60†‡¯×°@³Ž–wi! Qÿü{|î';œp‚eð�ÅB=oþw)Î8A0­‘ð‚z1eæ†Âa>‘‰ë£	 Ùäy}L3zYŽ³v´czË»<š1¶	Ú>ŽyvÝö1°Á �¡‚˜ã¤qÂ§Ùt	—Èù„ �A„’ MÞw	pH$L& ˜AÒH ’ šA‡eÐAÐA ‚A#Ž ‚h ‚	„Â&�AÂ0çJsŽM ‚	„‚&‚		 �A($Qú¸f&Ðfü»}ÖÌY†Òta¶	Ù¹ééµº_ôì«l é;«µV­û0Ý$ú×ôä2CZ0Â …‚	 ‚EB_�ýa ‚	„‚!@�AÂ®5øßì& �A!„L ÂŸ¿×¶	B( ‚é¾µïß§¦÷ñWô/kéëþŸÂ±T5~×ýõÿ·µp©ÿþöõv¿O.ÖÿýoA[PAÂ	„GëºÚ÷xI ‚eÒ&�G �AÐ ]¯e?à�YNqÂA ‚h �A$ …¿�üîSœp�H NÐA ‚AM µÿÿªÿQVÿþ6”Bô>¢ëô½Âþ·ÿÿX…Ä%„„A4�A4‚H Špˆê(B"
+‚	 ‚APH ‚PH!Aˆÿ¤H �A ‚	¤I‚& ˜H!ÐAÐIM �A($A
+H ®"Ýëÿû¯ÜÀMÿÿÿ.ÂëîÓ¿¿]ÿõÿ„ûÛñqªÂY‡8çrž‚@��>#ëœ;­”å8A4AÐa¿ýÝùÜ§8çp�A4ŸCÿßë°™|�‚l&‘Oßþ»ÿ¥ÿÿÿz1.ÿF?õÿ£öºÿªÿF.Œ]žÚ—A2>‚Gãá„A�AÂ#è§;„‚	¢œî	 ‚A ‚h �AAƒR
+Î8A4A‚AÐIA4H ‚b‚A
+68á �AAL&�A �a0…‚kpEÓÿÿIÉ?ÿÿÙ!ÓÉ:^àˆÿÒ÷ÿAzÿ÷÷¥õ±N¡‚!A ‚H$Hp‚ÇÿÃ �A!„BØˆ­7Óø YßA0…‚Âw8ë�Ô‚&LD0¯²ŸþÒïÿ÷]ïÿ°EÓ¯ÿô_ßþ¯ézõïëOÿÿ÷úÓ_ö½~qÂ#¨Ah$AÐA @¿Îþw�Î:A �6& ‚	¤Iq\ã�óŽ&ã„‚ š	 ‚A‚!ÿsŽw)ð‚	œp�I�H$L&EÅ6—ýýÅ¶“ÿëÃ
+¶á+Aði_ß}ÿuëëuköÝl5°ƒ‹LÐpÂa ‚IH M„8Ab"6ðÐAÐA( ‚a
+ ˜H ‚ „G�ÐA"�	 ‚	¤A ‚C�qÅ �A	„‚	 …‚!~ö­UaíÖ­'§qÚ¦špÒV)&â£V8†±
+‡la0›jœ^ƒM�ˆj›TØ¸âì|*¯¥(grœã„A2<ØCB#ØÿëÙNqÂE8A4§óŽ¶Sçrœãœs¹N)ÁÐH&Ä_ß×Îá ‚h$L žáˆH[¦Å&›I¡Ó„\Rm*m3zM­6©6lRlCí©Ä�è1H6™Ä§=}a �A4’$�Du(H$A
+RØHã�Î8 ˜G šAH ‚a ‚PH ‚!ÊsŽqÂAË¤‚&‚H ‚	„	M ‚a„Cálã„AM�AÂ …�A0�E†0…„Ó\ˆ†šŒ†	¦„D0™ˆ i—i¬BÂb/ÄC5ƒŽÕˆ‹.Âh†H58aa ‚á_ÞqÕH �Aª …!¼{ûýN:H �IBAÒ	±ÇýÎý¤B’ ˜B‚ñûZõeÁlä
+®A~ì/]—Èù/Â
+Ú ‚h ‘¿ú	u8á8á ‚	„‚ š	 ‚IÙOÞ¡lãœp‘NMH$‚	N×íN9Ç;„	¢œ š$H$‚A²@HA	¤IL!AGP”&Á}ðÂh �A( ‚	 ‚	„‚&!ëH �A ‚A	‚	 ‚	¤a
+	!~·A ‚	 ‚A‚H ‚i‚Â!®ï÷ÃDzÿð‚ÂíA4Sˆˆ�×ÿÈú³ŽqÎç$&ÂC »ÿÁ¾ŽáÐIMˆø÷ùÜ§»	 ‚&‚;é°û)Î8H$M‚	­p‚i‚!Èù|�—Eð˜I‚AM ‚	¤A4‚!A ‚P"Ÿ;®Â)Â	 ‚&‚ š ‚iL ˜A4‘Ü§)Î8A0Ž8H ‚aÂ NA($Aé·„ …‚& „r†“„:öqÁI‚	 �,Xˆÿÿö´A ’A ’A$X�Oÿ÷ª	‚	$‚&Cˆøú®wÅ˜ÿëßÙN¨AZ	 ‚h§éÁ@Ž9Ü§8á$A4‚	‚	¤	'õ]z²œã„’&�AÐA ‚	‚Kÿú8á"œã„‚G š$‚AqöàŠ|4A	$A
+¨APˆ¸Œ0’$AÂ$H �A$A
+A„""?„A$A ‚&‚	B‚aa†'�áÐA	¤A4‚A	B"ãOìc„�@˜ãÐÿaîS„.‹à‚a">=?ú‚�Ês¹N&‚L¶8¿ÿ‚e=”å>ÙN	„0‡?ïì§)Â	—H šß­ÂÃ„‚G š�Ð„‚A ‚PH ÁvSœp�AÂA ‚iM ‚	¤ �H Â
+Ál Šp‚h �A �A4‚A	´I‚$Ã”ùÜ$qÂ	„&‚	L$ ˜H&ðm±It’¥ Û	„Á[#à£ªZ¤ˆˆ°BÂ`�„Á6Âd|&T’T54"Âaa0MÛÝ°]*T#TÁ;°˜&ØL&A2>GÂ)ñÖ»uÁÎ>@£�8PØM ‚A$Gëÿ–9Ç;”ç$S„A �H ‚A$A
+^/�øE8 Nw)Â	¢œ š$I‚	½óŽwð�I ‚h ‚	 ‚&H$²ÐnäÜ„�àÜr
+N@ðoI š ‚a
+AÕ#P…þAÂ&‚AÂ …‚!
+Ò1ã´qÂ	¤A0‚h �A ‚PH ‚`„E-‚ô‚ ˜M ‚	¤$) …Çûòpeq�'²@ Â&h	§�Ô¼0„Eiÿ¸ XH �A" E>—×¿ÁðA</„L¾# ‚Duiý{³ŽwH ˜V‚I"þ?GzÎáÈú	 ‚&SñJ¨ZûëÙNS ‚AÐH ™éì!A ‚PH"œ§AÂP� ’A ‚&AÒ šAˆaùÜ§&ŠtA ‚a4‚	$H ‚G8çp‚a4S„A$H$AÂ`ƒ	yŒÝ!’c»ËÇ+Ö"$$‚&G‹AÿkA„‚	 ‚	‚A0ƒŠ×üîwi‚!A ˜A„Ðøÿ��Êv�A ’	B‚Aý®ÝõÂv]HdÓ«Š‡ÿÿó¹NnAÐA ‚E?_ýàˆú)ð�A ‚H ‚iM �ÿÚà�`�^S„ã„‚	)Â	 ‚A#þ¿µì"éA‚	 ˜E?ï¯ÿøa4AÒ ˜H ‚EGÄG¶�AÒ&A0…‚!A ‚	„B.8ú š$H �AÂA$Aˆaã_ ‚	¤A4H �AÐB‚A×¿Ž9
+1Èl�á»”>Dƒ®@àÈe>@ÄrXXä ¨6É��·„„D{ÔrÇ; Žå:
+‚!
+õû^üî&GÑNMˆûö=~w
+Î:ã„�A �Š ‡Ç|ïçpA4	_eA&VÁ\„1‡ã9;,‚þO‰ÁÜŒ3º=œ�„øJdrÜÎCDÂy ÐwÈ/eY¬Ÿ|¼M0¡3ÐŸ�bqš4g£™Èÿ>~Sœs¹Ç	Ç&‚#¬ÍÈèÂ#å×IA ‚	®Êu	 šH š$A
+	A ‚PH!As¹NqÂAMÇ&‚ šA‚h$‚&Ã”þ)Â	¢�MA4‚A	BßÅ¦„ZT/Ó	ËôÓCFèRhÂ„ÂÓð¡M´TÃº1ˆ´!a&UºU»£ël …L$A
+H ‚ƒ@ùþÿKÝ°�H ÂPH!A „G¯üî°ÐAÂA‚	M6’]oýê’ š$ˆa0˜O×ÿ‚ý¢óG£v�Ý¦‘�«ÌTa¾^0�£>óŒ$]´ž4`á˜0[Ú1Y¸æåÛF*1¿¦_7›¨Þ™­­åú	·zú­ÿý¼Ã’ãœpˆêƒa4‚&	ø‚Ã\î¹Ü§8á �A4&‚	 _~¾ð�6©‚A ˜H �I¼|ã�Áï	‚AÐI	_7Rv««fwéö’ëfê»†Òþ)Ù¼Ý¦ÿpÌZNšu}é¿·zé¦n7ãé÷ýöü$&�A ’ šŽ«¤qÂ	 �A<!A`± ‘NM	 ˜H ‚a …"Øí‚	 ’$A0�AÐAA6>�Hã ‚I ‚	¤AA �AÛ×ÓÆþ+¿×°ÇnžÅÇCÚ­ýÐ®¿K�á�¿ÓûkÿÃÒÃ „0„Dw<ljÿ	hVw*E‚$Gÿó¾qÎál§ Dt …±ÁkýA@Šs¸A ’Aˆö#ÿÿpG$)ÿÿp¾Ý¨…‡ëÛ
+ÿù„c_ÿçÿùàÏã�¯o÷ÿ—¯¿‡þ¶SÙNqÎ8H ™ö&ÂHM×a	$¡Îç+á”ç šAH ‚aPAÁ6‚'[	Îå8@›	 Ž8I‚	 ‚h$$ì§)Â	„S”á ‚	 ‚A ‚a
+	La Šþ\uÇýh(oÝ½ºéïÿïû‚ÿÑ€oØßþëÿ†öÒÒ$&M ‚	„/tÂA‚/õÒÓ šA	„Š …$A�¿a ‚A�A0‚a ‚	„Â	°œCëû&‚	 �H ÂA¿k÷ãÿþ•{‹ÐÞ¿A»íÿ_ÿö¿¬“ÿÿ‡õb¿²CÅ}{|}V/Þ¿ö�ð�H šA�ÇÃÙOê¹Üã„‚ š	A�§ë{Öï„	áËä}�AÂA#—¥ì§ó¹NM š ‚h§ÿ²Cûüæ5Î?kU·ÿ`‹¯÷øÿÿ|ÂîIüã·ï_Úÿûï´8áÂ	„‚Aqùu´H �AË®B‚¬îG$‚‚	M �A$A0A„B#¤ðÂ	„ÐA0˜A4AÐA$A
+ „0„PNPáÒH �AÂ	 ‚A �A"".ÿ®¾·¯Ijúzy‡ÖÒíÞ¿ëÂ_0½ö¶¶ëª.
+?÷êqß­L!A8ié[B…øø YÝNé �A( ‚dq?wýùÜã„’& „PA1A/ÿw�Ôã�Ô§¡ˆ‹ôÿùÜã�ÊpA5¯Çñ}5Ü^Í6¿øXˆçT¯Úëê›
++^é´â˜‹¯Ñ˜¥j¶êÐ¿û)ûP‚eõa ˆë‚#¢ø ˜Hã®ÐA ‚&� OÚÝ• �AL&M ‚A$A0�A ‚;ðG|î)ÂA �A0…&ÐH ’	’ã�óŽw)Î8A4&‚AÂiL š Š}4í¤!¬VñÓ„!ÔlŸSšbõ†Å!¦…¬a	•8Š�hAÃm:llF›Xa	A&N©°‚AÅñ~ž­„ÂA0� ‚A ƒ	"#ûõÃAH ‚	H,E*ñïôA0…‚	
+	(!ôâÚEÆG"èôª©œF4ÓHG
+˜Âi¦�‚
+hE°ƒ7öƒ4¬Æc	˜ó‰Å"á i‚›Ìkð¿ëÿË·_»`‹¬0‚h$M @¶øÿçu²œ§;”è ‚h ˜M ‚ô¾¹ßÂE9ÇP�A4S„&Mkå:ÙN§î8áÒ š$±Âq€dB!‚ ÞŽ""Â ²äq1‚ x ’$H ’	DuVð�A ‚	„XB‚A·°‚	¢œ$A‚A�AÐA ‚aŠˆì&’A‚	 �A	„‚	 …,$'ÐH �AÂA ‚&‚	 �A"‚±ÇÈd â#¾+¶B‚Aˆˆa¾!„,�œuì&ÁLaN=
+SßöqÎés¸A’A"‚ê‡ßßµ;‚#û	„�ÐB"â.ÿöSál§e?Ši`»ÚöqÎå8 ZÚ`‚°A0™#ý$A
+	A0[¼î®A3ŽH ˜IH ‚a ‚H$A=YN¡ÐHã„‚AÂa	„‚$�AmçîS„.‹á0š ‚h �AÒ	B‚KãÒÂH$IBA"â4&ÂaÐ®=§û	B‚H$‚A
+ ¡ˆãÿKØh ‚h ’	A ‚F„_×¿4‚A†A0ˆlþúÂl šô=œpˆë‹¿”þ$&Iÿø\ãöS”ç$S„‚H �IL D}oÿý”éÊp‚h ’	$@ˆú^Ê~ìãœs¹NqÂ	 ‚&�AÑOàÂ¶Ëá4Má �H žÂ	 ’	 ˆÿ(cM‚	„	„‚AÁ6‚!A ›Âá ‚A ‚&‚ š$A
+0…Šl(é>’$A0‚aÂ	¤ „DEýüDGA ‚Dq}èRqÅa¨@ŠsŽ}
+	!Œ_ßü,ã�óŽ&¡ìCÝÿ[RžÁH.ÂTM;ûõ®w8çîL&‚	¬†@Áý”ç Šp‚h":å:AË Š~ �A ‚&	s¹O#è¨&‚AÐH ˜L$‚	„B’ …°�6Sí‚	„ÐA �A‚H �I
+‚ ¡„Ç
+ÐA ’ š	A$H$‚& ‚	‚Ž`×öÂ	„‚&PAøa†ÿõöB‚A�H …qþ­õð@¡„ „4MB">ø¾þ’ ˜H ‚h0�;¥éÿû\ýóºÿç|ã„Gö( �I-ë®gSŽ’§	�A ‚&�AÂ#éüïWG,§;”ç$@›E8A4H ‚~õð@¶Âp‚A ‚a4�A4‚AzA$A4M …×	‚$IhhqA4‚H$$H ‚D0„G±ñ&‚H ’	L$ ’!APˆØ¿a ‚A$A‚H$H �AÃ¼{È-�@äôC¿Cˆøiý|ã„Ž8H§8à‚|?¾qÎùÇ0ç$S�Âã„‚E8 ‡×ýzÕ#Žw8áS„‚A�<ÿû‚8á)ÂASä2@’ÈeÅ�o™	‚pAfdx xo%�i�‚°�A48á"œã­á ‚AÂ.¸ …B�sŽG ‚e;AM�A)Š	 Â!A ƒ§$H �IH ‚	 ‚&�A($@›A@œ$S ‚	„&‚	B‚A	‚%×
+º…P¾« ‚	L Â^ˆˆ‡óº”ö­$B‚A4ˆ·ŒGßk‚#°‚PH ‚ „6
+4‚ÿ_|ã´‚AŠ	%L¶ÿÎë_®îëù1ßî¿ó¸DuÈƒœsŽ�ð�A ’$"?­v¸Grœ M”áðÐAÂ	„Aÿµó¼V_[H �I �H š	#õì§é$&ØM�AÐA$E>ä+‹¹Ð¹ÑÃ‡!”8�¹ä×Û&�A �A0˜AöaÄD|\iõAA @˜L$A
+	,ÜÄDqa
+AÂa ‚	¤A4AÒ „F)î½‚	$’	H$Aa‹�/¾úúý¯þ‚-â;í]”å9\ÁË¤M$"/_ýª�Â#¦çsŽqÉŽ?ÿ÷­”å8EÒ&Maê?ÿe?e8A2>©/]ÿý}uîÔ$Gî&�Xˆˆé@›	S”á ’A I$AMGLS ¼ÐA ’ š$‚	‚$ A„L$H"žÊtE8A4 ‚h �A ‚A’A	ÛÈd‚¤gu$ù!IÀR
+–§‚Q’…ÈjŽx&ú�_†²vEÂøO�e¹pw!ƒCžËpžxO!©A;$ærnBŽ¤HÛA0‚PH LC	?Îû|�´A ‚ØŠ(õÿh2‡<ìPIª	º«ö	Ut …‚lVŸ¯ïÂ! Á\
+²XGèa�•Ä1Åsk„@ò¬�Â@Ô¬%è=;0™YV\ ü*œâán-<¬%ÈXL!
+4§ýÿ¶Sõâ‚& ˜ [ûÎ9�l š ‚eÓ&›­i(@›	N	�Â	 ‚H$Kís¹N&ÊtÇH$M‚	„Ò	-�´�¦!h0¨ÇF6R
+Šåæº1ê-UÛ»†ªcËéN^m4©Ìoi­…ujŒn4Ž.�H ‚	 ‚a0�A ‹¯‹Ã$H �AÂL$‚A$5µÍéI	 ’	 �A‚AB"ÿ´H �A ‚	„&�H ‚Â!þ®o°©ÝœèÄåêO»1+æ&A6S‰£fêOË¶ÂÚkÕÙÌòi;áÙÎ•;ÓÔÝ
+N&ŒL3f›fã�vñO¿¿�çpEÑ}LbƒD< Wüã¨DÝ'B"ýwzýÊsŽ�„M �ÐH ‚Òý>Ê~Êrœ ˜GW„ýnÓuõ×Óým}ü'­ÇnaµnžÖ›Ý¦÷im7´î»×Â¤:¦é½Wh$	 A4G_m ‚	 ƒ#ä}�Á`›A A0…ÓXÝÊã�Â	 ’ M„ÐA$A0�A ’ …L!û)Î9Ü%I‚	$H �H ’%ú·b¿Ç®+Š·j—ñÿûÿø…†?«¿ÿÿ¯ÿï®ñZ �H ’	 ‚Úúû)Ò	 ‚	„( ‚i‚±¯ºQIB‚API�B“x¿�m �A($A0�H �6�Þïý ¿¯à¸_Þþ`ý×ÿÛXAXÿ_^Ý×üÂ#¥Ì¯üðdÿþ³ŽqÜ�áCÐA ‚A	*ûýl Gã�Î:„GCGõ]~Öµ8ê&Êp‚h$qÂAŽ__½‘ô&&‚	 Švü#küÀ¿ÑµÂë]üÀïû~š£oÿmÒÕzÿèGÿþaAM ‚	£Ž£Š8Æ�A4‚	�$‚&M ‚[g;S†‚	 ‚	 ‚A‚	 ‚a …‚rÇ&‚H �Hã„PH �A ‚	„‚!+(}Ö´ÐOþ¿ ½­ÁÿþIý®{‚PÿüW[…ÿø"?ûÒÉ>‚1ckíAôS„GÒA$&,^;â8Dt8Ó¬PB!„[`·¿çsŽw&	„($Ac!>ÿ;íÿ×Kûÿ×¥ÅZÿ’ßÿõÚÕÁçý¥éÜ&s÷ÿÙ!ö×þ¯^Êrœ">Šp’I.´‚	 ’	 ’ÕÁ@‚eB š8ç$Q4ˆøÈ¯œs¸ [vL$AH ‚i ’+ü#èã‚�Ñ| �A ‚A ‚	OÞšéÿÚ÷¯þþ½¥ý¥·õÿé«×û[èÀe/Áÿý­Ã	~ëØKmA ‚XBëôA ‚H ‚a"‚ H: šA‚H$I‚aCÃëÐAÐH ˜L ‚h$‚Aƒ „DCûu¥ù¢ØhDE¦ý§ìv�øj½k}”>ñw§ì4µU™†ËJÆ·â•�ûá±U_ùN‚#û	A	$K­üãšÎ9‡8çîqÎçãœp@„DV�ï»*( E8AÂ	¡¥×ÞÙNqÎå<$¶)ŠbÓV˜Ù/Ž´"-«M8¤Øâ˜i1µO˜M9
+t"àßN¢â-Ói¶)¦­ �AA�IL�éA �
+C¤�A$A4qÂ	 ˜„	¤A0ˆ7ã�Î:A A0‚AM ‚	„‚AÐI	 ‚8çu‘ôSÐA4AÂ	„&‚	 �AÂ)öƒL¼bnÂfÑˆÄ¦#Ü‡…¶ž0Ð†h1U».ÓQ°ˆfJîˆj;/ZÁ.;	Ø[	 ‚i/ëe:.’	 ’ „P!××çîSœs¹PÐA‚	�H4˜ŠB#ÿ«è$H ‚aÂ …‚AÛøˆˆ°A—ÑÂ@ð.â!‚!�NFäÁ#òŸÎ8D~½°�AA$¿ç0à�p‚h$M ‚	„‚	O_YO ŠsŽ¥9Ü§ �AÂAM} ‚½ßÚÙNÂAMA5�%œz$H �A‚H$DB)¬PAÁ6’&‡!PZMÞ"�A4‚	�H ‚	 ‚A‚a ƒ	 –ÐA ‚A$ ‚h �A ‚PA
+	ýxcÐâ>qÎèÇH"úA ’!cœ;áávÊsŽxh ‚PB"#‹ÿ�ÖÊz;„":	B‚Aˆa^/×ÞÕA~+sŽt_A#ŽLº/í„‚!A ‚~ŽùÜ§4Î8I �Ih ‚i‚	 @¿©NqÎçã„Šp�H$M �A!A ‚	ý|î„Êp�H$‚	A0šA¶©$AÂ	„ÂA=?|i‚H ‚a �!&�q}ø �A$$‚&�H �6‚(�‚ÿa„Ò$A&‚b�B‚~ÿÈ€¡î#½ÿÁþM&Ë¤�aâ#G/)Î8D~Lº$A0CŽ?ÿùÝY/‚
+ÐA4‚	!ûG–wPA4H �AøÓ.‚ ˜&ÐI	.!„�ÞÑNqÎáA$M$’Š	H!Èú)ÂE8AAM�AÂA$Aœs¹NL&‚	 ‚	„PH$�H&	|$�A ‚a„!„
+ô[ôwAÒ	bŠï©Ü§PH$&ÂAwßwÖqÁð@ƒH$A0…•„ûüõí~ÙO�Ê}‘þ‚	$‚ ˜OóŽãœt‚ ˜A0‚eöÒ	 ‚Aë¸ ]„‚qÂA‚$$A ‚A‚§×íp�p’ã„]	�A ‚)õa ‚H$A0�A)/ˆÿ �AÒM �A$iCÐü0’$A$A4H �B‚!Ðãº		 ’ ˜A0…MÖ¬¡öÓÿÿøl¾GÐAÐIÌïþ ˆý`ŠƒŽMá ’#´PÒé.ÿ8ë�Ôî)Â	—Â	0„G¡oÿöÁm ’'�4× Y,?²®C8ä/d‡ ÉàƒHL ‚	 ’A$‚	‘ü$A4‚CHã�Ò&‚ š$H �A6ÐaA
+[¤M$�AÐA ’$H ‚	 ‚H ‚ae9Ç&Šp�6&‚	A ‚& ™O�[h.È*XP¡H7õM<(U
+¶ …‚aKýré( �B
+ˆŽ#þw\	 �A$ N!
+ˆ¿¿÷è$I$ …�AxØûáW_¿÷[~˜íVÔã‚øA4‚!AÒ(x‚8çï§)Î8H§8á)GÐAA‚	_ÿKÝÖw„S”áÐAA$Kõî×°@›	ál ’ šIdÁ�ÞšÃƒXáÃNHqpí;áÐA ’$A0�Oˆˆ¸áB’A4A0�AÐA0…1�Û&’A‚		 ‚&‚	 �A$Â	/h �AÂ	¤H$‚	‚& BAoWq÷¥ÄV¿öÄtŸü¡û8çr‡GÑN’G¤ýûûÎç ™| � �Ø�:Œtþ«Áô Dt …$Q¡ëûû)ÖL§ÿþ×ïý6Êp‚h š	 ‚J´L$‚AEw)ÂA&&‚	L ˆýL!A	
+à�9Ü$H§EÒ	A‚H ‚A$I‚'ïV]"œ šAH$A0�I	,†H*A:ù‘Ž@ðÝÉÙ2
+pT`´žw!aIÁ<¢Ç3�,²,�˜r8�?;‘!í ‚A ‚	„‚&"?¿ìãœp‚	 ’$ LR	„B¯ãß~($I‚ š ‚".)7×á„Â&A ’	 ‚EC
+¾ž<`�—e`@Ïåç„ÁÃÆ`3—ØA„CWžËÈð¹8< ô&A‹5•dà j�‚k'Äàöƒ0�á˜OôÁŸû_ïþ�AØA
+„kúÁÁÒ&”$A ‚AŠ¯õª8çrœ ™t‚ÙN&‚	 � B#¿_�×N&ÂAË Š~c£C�?F7¨BÂ1Q�µè0¸F>°Â�MPÖ4c|ZhZ0š6š0œZ14b0¨ÇÃA�H ‚A‚	—ÅN9Ç	 ‚	„‚&$A ‚#ì0„0… ÐH$M	 ’$H ’	B‚A)t,¾GË¤&H ‚i‚	 �AÁ&"ÙCéZNÎpÌ:1?¦Ù½6Ï'WMîM#œ*Olòu18Nó›pÌzfãžbv“Ó¤ózþnÓ¤öH$)C†¸gqA_õÿw�Ê}"œ0�A ’¤±K�n×u ™Ç0˜H$ �1û½Îà�7ÓUm>Ìoã¡ØNÔýéS‡÷¦ûØMÚëê›önÇ^ôøÇîßx×¢ú°‘Ç	ôð’Ž‚ö�ôS�ÊuMM ‚	 ‚aÊp’	A ŽÿÕ- Gt‚"è$AÐA$ ‚a( @¿²Ÿl§#è �6		 ’#�¨«÷ÿéuíF!wº[¯ÿýÿÄß§Ä-×ëŠÏ†@XiB‚Aƒ …Hd_cZA‚$ H!ˆah!±ÿí„($@ƒ	A ’¸ˆˆþö°ÐA ‚AH �a …"=?ÿÿßÌÿË‡þ¿z_úó_ÿ¯¥…î\=}9p¿ÂMêºùOÙC÷”;AÓßœs¾qÎà�ZœtÂ	 ‚&� [ýzþÂ	—Eò>]ÂiL ˜D{Ö¿ùOÙO�ÊsŽM	¯ÿõÿÿUF?iûýÿïÿþ¿þµëF?ÿýo» �A$H �AÂH"?\P!‚	„H �@�IM ‚	„‚!hPB#°‚	 ’$&�H ‚L ˜H ’ †ÛÚ	 ’	‚	¤ ˜H ‚a ‚R%O°ˆéÿû_ÿîF:Þ]
+ÿÿÿÈÇÿúþôöHt¶Áþàˆû$?ü+
+¨aa
+CÃ[Áöw)Ã��÷ÿÂ#ò�Nå9Ç	B\ýS MÂ@‚!Â_¿µé)÷_ÿuöÉ¿ÿj¿ô»ÿþÚ¯þ—õÖýªúý­¯úÐ~Ê{H§	§;”ÿ³œ0�Î9Ü§8çs¸H$L&�AÐA6‚l ˜ Â
+Êz;”ç$H ‚eðš	 ‚PH$MB‚�ÁÎå>Ëä|�¢œ š$A0�H ‚A%ÃIÒÿÿ†É?üU®ïk÷–ÿØ"?ì%ÿöƒûÓüÑÃ_Ž?ÿ3øA ‚	‚a ‚#¿ô‚	¤$AÛP^?‚#Ûö$H ‚a ‚	ÃPO�ïv¶M �A$A0„0˜!+·×ýŽ«·]±è?÷búKûbÓOãUcÿƒMŽÿˆj’m1
+Šöš´ûˆv»õ÷ÝœpˆÿÓj?ßG �^	p’#í ‚a$LûöÿE>¡ÑÇ&‚ ˜A4A¿ÿe>+
+ÂaÒH �Aý1H]&ÆžÒMšl)ÅOv)4ßA¦›H]!Ó®“BÂÕ4„6šMP·ŠÚ	‚H �A ‚A%½—EÑ…tGAH ‚a$M ‚	„‚&#¤Æ>L&A0˜AÂi�IL ‚ „G‚	„ÐAH$H ‚aÂA†Aa> Âdq ÖÂÒ»;
+
+M5.Ëá5Åˆ†8�%m"86ò=žÌJpÂ¸UBB,âÍé‚Âqô†#ø">…©}AÇ‡õÿà�xD}á ‘NÐŽ‚×éûð@»²œã„Ž8 A„"WKûßÙOÙO„²a�Èã�Éˆ8ôAlbã„]	Hú)ÊpˆýñHãˆaˆ">Šp‚`ŠpH$�A4‚	�A •Š	H @²œã„°’A		„ÂA‚&H$IB‚;‚„H �A$$A0�AÂ	„zCŠá ‚H ‚b‚A­þqÁÊ‚œPH ’	!A
+UùÇûA$‚!A$‚ ˜ˆˆ½ã
+B’ ˜B‚†„Gÿòb–—ÿœuP@¯á´&�H#Ž¾¹ß8çtì$qÂ	 �D~M$L!@­{êÊ}ÎçîSœp‚h š ‚hã„Gýªö �w”9Üã„‚A�Iõéma‚ š$‚A�AûÂú¿A‚	ARA A4A ›ÿ$A0‚	„Â	„AL$A ‚EÄ|0˜A4H �A$�Al0˜A4CÞ"c°Åññõó&ÂHL$4ýzýyßvqÂ	„ÐA0�1±ßÿ[)û)Â	—Eðš*ÐH LEÿü/{H§&§ò`H>XîS„G$)ÂA.ö††‡	I	M$M ‚	¤D}4AvÂ§;„‚	 �A$A$A0�A ‚A„L$GþÙNMA4AH ‚a �A(xÄXA ‚H L[	ˆþ”ùÜ§Ó&A4‚aa^"¿ßÙNS°�I ˜H(»Ýéü§»ðÂi‚!A …÷ÿîG×_Jà�nw8áûâ‚A	-þ§{
+Âe9Ý$A4’	A0˜ __ê‹ E8@›Ú	A‚ š$ÿk�ÕÂ	 A4 ‚h ‚ASá±IiRÆ’a¶,!&	°OJ•*ZI*HE$„b.Ø@ž•iV©$©jª’ÄE†@›I$µI%I
+$’T!¡‹é_W¯;ü0‘NMM$'‹ßþçp@»8ç3Ž �HDu]U´ŠsŽwAÂaØMÿùÝ_ó¸ NwEÒÚH šAG šAGï	‚	�Q»/„Â	„AL!AH ‚iÒ0‰¹NA	¨I$AÒ	 ‚A$A	´H§Á@‚´AH$H �A ‚A‚	žAl(äÜ�àÊä2är�C 7rñ† �A$A‚Å||§«C„�A($¦6;ÿe>$A ‚	„( ‚a&
+(.¾¿×†H ‚ …„BÂ	‚�:ýÁø)
+B¹p™‹2Èì‚AâÂdß q„1zµõÂJL¿¸a ‚	„ ‚k®¹á8çp‚8á @›	A6$A0@¿ö©è+¡ÐA‚A	 ’$Gÿ¯‚à�nË¤M ‚a=S°®©„È'ÿéá0«¸A ‚	„‚!A ‚GxC¯H$‚I‚�H �A ‚A ƒ$ˆêïÛ¤A‚H$	‚H �A$&‚	 ´‡ �I	 ’	
+‚Å‚!&÷éÈQÝ¨Ä×òc‹´3Ü�à r¡qÿ;¢>‚I‚WqŒcþ¥?í°š ‚lhGLuíû‚)î” š8á"¬ „C‘õî½”øAû¸º~+ÓˆùwIÈƒ»�PêžC,p‘Ç#qÂPGã÷ ˜H!$L§º§aqÂA‚	 �B‚&…‚ö8ç$�p’	@›	„AL&A†GùÇ8çup‘NM‚	 ’ ˜H �A+ÿ~›EÀž¿ŠûA$ˆŠBÖÿçr�RA �H$‚	„iÃ®qÎíA4‚H$H ƒA
+A„,Gùß �I‚	 �@˜ “Âô˜ãòcª�Ð?þ¤}I¿æ‹�Ã“ÂuH„BÊrœ§;©ÇŽ±$‚		 �Š¯‡‚)÷JŠrœ ‚e<4H$@�zÿ½ÁùÇHV¾] ‚&�A"Ÿ¯ÿu‚;”ûjAÐAù�l²°Ó>ea<Îäcá4H�ˆz79P[„à�ø":�~.
+²? î[�ÈÝ@è‚AXOøÎ ¥ùpVÇ.aCÌÝ•„±0¡0�—È¾ x)ïPÂ!�l¹‘ÂŽ�™a…=¸A$A0H �AÂAM ÂØ- ’H ‚A&L&M ‚Ø`ƒ&""	H$‚&‚H �A ‚A‚	 �Am¡-8†Ö¿O¸a4¸ÃL!j!!£iáA…B4Â|8´m4.0šÑŽŒp…&ƒñˆˆˆ8{G$8àˆè$ÂUÿµ8áôqÎðAZaÐA4Aa°QïÁ½Îçã�Áæ‚	„ˆalGÿ­þÏ#ˆ¡»F'k»1Z
+4Œo}eÛv�ös¢î©Íæí>èÄåê8�yvÊÃÜÄØ&Ý„ì�ÝÌL0Ÿzyvc	‚F2Eòèº/—EÒ	á6I	‹a×‚.Œ$¤ŠtAÐA ‚A’LPAÒ¿ÙO&S ‚ÚA ‚&‚$A�{‚Û)ì²œîH ‚aA	û	æswæëï¸KZtb«þ
+´í6¸pÍ×w¯fç¾îÂÕÚt›v¾í˜5Ì7MÕm^¾õˆa �B"!„Þþ.ñI�Â`ˆóA �A"â?ÿ ˜L M ‚AL&I†Ç_PÂ	M M ’$HDh]ÿôž�­Ýÿöëÿÿ¯+Ò__â½E7cÿÿé×·ºÿlcõ½sŽHsŽl6’&‚	qï÷‡ö½”áË¢øL¿&�A �7}ÿÿ"Ÿ;„] �Iè�¿_œrœã„Šp� ¢½ÿñ
+“ÿ¶×ˆ_àûý°^ÿÿÂûðßëÿÿF?~;ö9�>á ‚	Šp�HMéÂ C
+Œ6ÂH �@�A ‚A‚	$I[pË¤	H$H$‚ š ˜H �I ’$A0™#è ‚	„ÂAH �AA Â$L§ÿÿßþ­à¿Ë�ýÑ�ÿÿá_öÿ¿×ÿÿÿÃa¿×lDC½yßh§‚8á(t°�@�
+cOÿ^';„# �M ƒF„EÜ_®µí„($A
+H!Æ(iÿl§ÿ¿Ñ�ÿàˆóô‘Š¿¿½R_ÿÿ ¿½ºõÿ÷üŒþ½°ßúNw8çržA4qÁ÷ ˜A0‚h ’SŽÃ@Ž9Ü$M$&Gƒh ‚	¯Î>Sœp‘NqÎáÑNM‚	¤A$¿üã�Ð#¸EÒ8á ‚d} ‚	„‚ÿÿKëüb˜ªßì�ú_é}ÿ×þ¿ÿKÝæðDzBŽø"ë¾A	B’$(Ž!#ˆG]Dx�‘òè¾GÈù|�‘ò<GEò>GËä|Žeò>Gì+°[ßA	L ˜H ‚a ‚Cb5¿°˜H �H$‚I‚	 ‚	„‚&	‚
+Ÿl ˜MA$ �H ’Ä0†*ý/øý·×_ÖýÿM{ÿý?ú8î¿·÷ðÂ]×ßêöÅ¥÷Çþ½ó�à�d‡Gòú!´?þ�ý‘þHL �AÐˆûÿÿ‚#àŽå8Dt�AÐA""4#õúß‚
+Á`‚a0„GIûÿWdx„] ‚)ÿÛKÖõÖv¿Ã
+Þ�¤[�Ò.";»ÿŽ ïF6·ú·_×„G^=µÐ_ißËãƒµH0‚H ‚h ‚A$H$qÂ�áÑÇAã�ÊsŽqÎå9Ç8çsŽL!IL&�A"-á„Â	„¤Hrœã„AÁ
+H ‚�AÐA0„0‚a�\sŽw8ç$qÎ8A4�A4‚A �AÂA	B�s¹Ç8á$‚	„Â	„A‚	$Lh&ø¤Ø¨hÆ#KÓk¨�‹b˜¤Ø¤â“°™D&�¬G
+X«ø¶)›lx&ÐMŠ�Š¸Š�ª³Ì$AH ˜ACAcìgïœs¸$H ‚a
+&A8„ñó¹ÇGîþ¥:H ‚A$³¹Ç8çr#§×ÞÂ& �A"‚	„ƒÇÁú¶˜¦mÅ#®š§gØM[UNˆa¤".o9˜Œx„ÔRÎ^AÅ†´Ði¢Ç*é„Ó°¾ÊzàŠ{)ð‘NqÂA EôA‚A_Ú·”:ÝèV_#ä}�AÒ#¥°’H$‚H%ç;”åYNS”çrœãœs¹Ç8æ">�A"‚8åAUå9\Sœs¹NqÎ8J&&‚ ˜'ï\ï¾Sá#ŽqÂE:$H#¿0
+`„C‡±DYx Ðˆ´9ÃˆˆŒÀ  hCDC@ðÕ�àÔí„L …$A‚&A ‚A(CQCŠ$$‚&’AA$A0˜ ÂI%ÆÄkh$Líl@‚b.-´AÐIL!A ‚	„B!„M1ˆŽ""r Ž/Ž?o_ÑÜAHî*A
+AvÝûwø ®ì¡Îô•ÃNS�ÂAŽÂC‚¹Ü§&]ÂGïÎå?ÐD| Ÿ�<2±/)Â	£Ž)ÐA ‚&	IM �AA{í”ál&‚a0˜A0‚a0�6‚&¤Â$A ’!8ø �AÂA�A0@¶Gˆè¾/‘ô$H �A ’ ˜H#�ª�È× ‚A0MˆaH ‚¡Þïè0‚&‚A
+	L!A “w^äuÁÿí¤¬õsÃA!ÒH ‚ÐC�Oî· ëA×^Üã�ÿð‹èîØM)ø×;�wðŠrœ ˜L¾’	A<6A ˜"=Â#¦	I‚	 @µ}~�Âã„‚@‚a4MÐ¸é�A ‚&�AÒ š&M’	±bEð�A$Ç	L ˜B‚	 ‚B‚�ŽÂÖøA0š„O_JÒ š&	„‚&L „0ƒB?ˆ‹�ÓAéõÂØ"ù£‹ôwÚ;œtîžwP‚iMŽwÂ	 ‚i$ D3÷Îø"?)Î8AÎ?gsŽqÎçã�Î9Ç	p‚i ‚Aˆ†!Î9‡8çã�Î8A2ú8áÂ�AÒDZÃPD3Ž…#²¤G1±!Èù/‘ò>GËä|!IM ‚E‚Ò ‚"cˆ�‚¤½,S!±ÄsŽaÎ8"?üã˜sŽ#�W‚”&9‡8à�g"ƒŽaÎ9Ç;ÿ•¼�ƒy!ÂD ˜Dè¼a �AD`¥Ä2Ÿ ’E”D|íHÁ¢<F÷�9� Uûß�6Ä®@öäÜ¸ x{ÿÈqÈC…2°IÓ
+(d|úÿä2A–
+†¨äà„€ƒ øAE‘ …rÝ�Ò«Âoù°PíWè+
+a�„Â&Pè6ðî¶…Ã�ËräaÓïÒkŠ£ÉjÚJ¨ÄÑy¦¨hÇn]˜}úü�qýr†¨åAqÌ9ð®�‡ä
+Pç‚«*:n¥ç/¿Våì¼Ñ‰¤ÝÖÿþª¾™°AÇ]*zt›úz}ÿþ²ú®A�Ô†]ãõj4-zãC_Ûy
+>Veñ>ðŸ•†²ô;�Íi’Ä{%„sAÔ»*Ë‚Xƒ/	wTïR;4U}iýmü/M}}ô"-Œ&°ƒ†šBÓ,#ÿjCSu¯«I/Ýôa}š1o}eóh‡¶l)ÄåçhÚa›IÙÌòhÄc	„S§øbŸr=(*ÿ„ÂtÿzO0ßÿ[þþÐfÒÚF/N®¿OAú„õÒ³½>ÿï~˜Mµúÿ÷â-ïþ» þ¸ºn¼z~/Žƒ`�
+~¯î8m·ü„8o]|Wù:k_¾ŠðuÿŠà¿¥üZßïêü6Ãû×…øRá¿ûiaypoù€op¸F×®`L¸MÙ€ÔÿK{ÿ«{éoÂ6¿á¿_ðÃ|#ÈÇ¿ü#A?ÿá¹vaÇõéIi´úû[ûuè/û$;~ïû®‚ýÉ?¥ÿÞà‹­‚#ðqÇþÖŸ]ºoJÿÿøz”áýWóŽÿ¯ký¯úz÷ö¹1ú÷D}”9ÇŠÇ×Ë}"ßÞ‹†ÒH‡�aé,Wÿö¶öûJ=ŠÑ„ã‹þ*Ðû÷ð[N´Ë„‹„˜¤ÛI2Dá'K�î8«xi'¡ÄCV.!Á•6Ó«V.!¦›SÉ'i]ïNLr~ˆº‘Ö*)¦˜ÛŠB£ØU„Ú
+(j4!¼ÞcÓL+°ÔBš˜‹øÚa4œWö"�æöôDäÕEØM‹°˜A¡jGvo†»ˆˆƒ!‘Â¦„C
+dp<‚ÂýÙ~�pE;Õ¢þ
+± ¶°"?ß¶©Ké-´›×ß
+¥ö‘7Kô­[I%ïo@ŠtÞ¨Tb’ŒS‹HS�¸ÿ ™x!¡áÁ~ª@°r>þ¤‡ñ¼[o swü /ôüÂÑ.ïƒòˆ ¯~Á‡Â'“c~É×]ßz6ðÖ“´·�[ã�Ã�Ò‚…²Ü›�ã–ä
+€É¹v]�Î91Ä¼%†§„Â
+U0˜'d¸D'!*a?Õwò£zæš,ÇFÓ›Mü:1He»�qÜ]Úh‚“Áú¼â
+qTºë‚ÿÇÜGƒ$?÷�üoOôŸô²Fÿßÿuü†H6ApK	Ø[	ÙPE²�žÍ¹ø"? c<³BŽBC*‚>&ç„ËÆ+ý?_¾ì(L gâs¸°™ÂeÙ|]•qiÃ	á¸4sACM{0A—2 ÐƒL&´Ó‘ß°EÖ—Ýy¿þîŒY�„oÒ
+XVŒm´¨BZEøP…„bHÆÚ¤-L!„tN]‹a"ôAöÒuþ8ïÿëA\,0RíÓÍÚvr7i·˜opøIÝœÚUNôÅI²°¯g ›ÙŒÝur€Ýö8­nÚŠWþÃÕõv`>´6«­˜oïwiþ-Š„ß´Jô:û§ØMv¬A«ÿ¸ÿþ¿üV¿ÿ¯ÿ_xÿëßl|�˜fÇ»\_÷úÌ+…ÿþ—þê`?ž	ÿ—^@Gõ
+ÿ¯ûÿ„cëÿÿûk¯ÿ÷ømÿ¾¾íwù!÷ÒÔ5ÿÿûäcßSÿÞ�ý´£ÿ;†í_ûÿKP¿þßüŽµF[Gÿÿø"=»WÛ_†�ëûú‡}-{ïôÊxa$›ê×ÿcý7;ÌMßâ!Óo\Zt¼D;¨iE¯¾„WjÅ/§ÒwxcïœFÐÚtqm&…FÅ:ÄXN
+î*“B-6¢æñ^ÿ†L&c
+GI…bBò<GÌJ²ì!Æ^.pÂ˜@ƒO(EA·ü�£qH8ä
+ANÿô·ß fCª•=ÿî!¿	°“ü\28Sâ?ÿß¿ÿÿï÷ÿÿäÀáÿÈà}¼‚ØA9NqÏ„Ê‚NAœs¹Ç \r
+Ç!˜ä2‡8äAÎ9Û(rCHr;”ç¸<r¬Ã˜rnJ
+¨°ÉŽHr+“îqÎ9Ü�2¼¨&9!ÿˆˆ†V# ‚erE9\S”çîS”çrœ§8çrœã•8'ÙNS•9NTŠsŽw)Îå8Hãœs¹Ç8és¹NqÎ9Ü§&ŠsŽ	sŽHrœ“”9!Éºe9Nx)Â	—EÑ|º.‹ä|�—ÈèNqÎå?Å„§ ’T(Hã�Êr¸§)Ês¹Sh‹¤S Â Êp„DE‚.��a"œ ÿíB“DSq¡÷ñè ˜A"�¤	­Ýý”çL$AoñÿÙN†wI2�A‹ �L0B¢£ˆÐô �uò� ‚	�Â„DFÅì|è˜LûêD|º&r
+Qü” ‚º9‚
+Ë¢èºAv_.’.‚AL&t	ùt¥Ò[)Â	 ’ M ‚&‚&$"œ'ìt$| ‚a ‚	„D} �H$ @»á
+]$GÐEÑ|$]$.‚	¡AA$ïÔ�—Eò>]&	²è ˜M	„Êâ²—Fˆ¾GÈùt]Eòèº.ŽeÑ|EÐ·.‹ä9—Eò>]/à�.MI š	IÅˆØ.=‚	�A&A(!G÷A0„0�A$DGÖ#úAL&& …‚AƒC%þL& ˜H �A ‚PAl!¦âÈú`�‚
+ÂDt-¤lZRB&S„	´‚Aˆú$H!~[öH(±¿ë‚.‘Nw)ÊtL Šp�H�^qûÎ9Ç;œp‘NqÂE8A4AÈåÿó¹NqÎ8H$&_#á4‚Iýøoÿå>Èùt]A0‚H š÷ïéîÖî+H M—H$L@­E‘ý�—Eð@œO„_8‚@�±½ø÷ØÑC‚.�aÚ	A ‚A$H$Åa�G šA] �IM
+CC	‚Ë$‘Ç&�AÂ	„( ‚a
+&B‚ñ&‚@‚h AÂ&H$H$I$H&5H$M š&M‹ ‚aÐA ’	 „l§„wIòéŽ8A
+	L …„_H ˆû§8áaÑ&	_.‹áqðŠî“	˜B*#­ÿóŽ"œ¡ý„Ò „0‚zôqÎùÇ
+Î8H§ `ïí_P‚hãœs½ˆaˆÿôïX ^�¨HX �A"‚ÚßOú‚²œã‚# ‚B‚
+"1¯ï;•aˆaC$†n� ¡÷S„]Â	A0˜A0‚a
+H ˜Lã„�@��÷ ˜H$&’AAÂA†78çrœã”á$‚	„Ëá¤H!IL!‚e9Nx)Î8H$‚&‚AÂiM$’$tN·e>ÝsŽAÂAÐA ¨ �A ‚	­­N8 ¬ã•9NqÎå8EðE: M„.�A!°E:e9NqÎçãœsµø@�
+a �AA‚Š	¾t°Â šAPH$�J#b1‚ç|aM�.?÷œs¾		‚$A"‚Aˆ¤cúáÐA	„‚	ÒB!„	ŽÝ*W´A �AÂXH �A„�HF£è"è š&‚	 ‚	„)È]>ØA0]%¨ [åòéø@›V] ˜AGî#úétSœp�6qÂ#è ˜M ‚	®‡Ä'8æãœs¹Ç&‡&�H ’ ˜ _ìzóºìº.•è�„M�I?Nÿ‚ÑÇ;‚¶AøJAGÅzâðE?¦�ü§8éGÂ	„]4/¯Bí2‡8æÚñvÒH$‚	L0�H ‚h �A$	1á¢œ§	’A ‚	„‚!I"�¨ââ‘Ç&‡A’&‚H"
+ûŠAB‚)Áhã„Š	L š A„BØaáÐH š$A0�A �A	„‚!A&Ø‹.�A4AË šH!H š M„Â	 ’!A�òè šA ‚EÐA0„ ˜H ™pÈ
+dýáÂ‹Ö÷õóº#á�ÐB*ÄµÎ9ÞŽ:G$S„DEzúÔ˜çsŽqÎçã„‚	 A0L!Åcß¿GÂ)û	0A„Qq»Ný¿|,"œã‚#°‚H$!
+"Äz_¾�Â&�A
+	ADS¿a*w
+Ë E9Ü§	’ ˜A4H �†H ‚rœ+8ç$Sœt�AÂA‚AL!A†A
+qÎ9‡8è ’AÂi‚;¤‚!I""‚A0YÜã�Ê±Â	—Eð‚.’ šAA$L … @¯²œ§ºAÁX ˜M ‚	 ‚&H$H$þÁöSœpˆùt]P‚PEÐH �A)0^êÖÊzÎáEÖ¾Ð"‡$]$BÛ�AGÇ\§®éB‚&�A4ˆ‹ì/QAÕ8æãœ± ÂØ°†âC‹Çíh �A$‚`›H ˜ ‡•Ž(pÂ	Â&	ˆ �HZHRâé°‚@‚a�@›ØB‚D[¿A$Jõ«S‚e’Ú$S ’ ˜A4�H ’Çõu8çîqÎ9Ü šºA ‚&‚H#ŽaÎ9Ç8ùÇ;“îSœsŽw)Â	„ÐA0š&�DÇÚ·8à�9ÇNMp@°‘Ç&GÐH š	qý»~ç|ã„�ô¡S„#åÒV„`�1åß—Õ”áÁÂAÅ$.é«<ˆùi¯-¤L$’		„	($H$¤=.‘N	 �A$A ‚EL!Â
+“âL&¤L!Ap‚a ‚E‚!xð@’&‚ šAA‚	A4A0„PH ƒ	¤}ML ˜A0…	A0M„ÐA �¶�H§8è ‚8çtŠp‚a0Ž: �AÂR …‚ ™Ç;¥„NM ’º„Âwì ™t	Çñ¯ô—'8áÔ ‚h0„qïÎþçã�øI	¢œDGÄGó�öSœsŽw&]L!�A0Cq|{ª@³¿ÁºH&ÒM»~÷8á)ÓAŠ A„{`ŸO„ºý°�A($A0A¶,*I×Ð†Ýd}è �H§H š8áÐI ‚i	ˆ‚#òœã„Šp‚ap‚iMA$H$�A2nqÎ8I#ŽqÎè ‚H ˜B‚AH ‚ ‰ªí	‘âùA#Ž‚ šG … ‚&‚	B8"?£Žw‚8é$"œ ˜&Â	 ‚	„	„‚�ï;¢úµs¹N&'m ‚hPH$L …ÿì+„	Át©¸kÊ.ÂH$A
+	�LPC¤5ýgãœp@’A$($H0„PV")bŽ]\!ABB#ˆÿÚ§`�h$‚H$‚@‚!&AÇŠ~ÁH$‚&�AÐA0‚h � ‚J¯ßÃ&‚A�Iƒ	 ‚	 �A0ÒÄp�A �A4&AÂaA"éPöMõ½xE=”8JŽ8I$A4AÒAÐK(£¾qÔ MœsŽ�Ap‚eð˜A0‚ijÿ8à�gsŽqÂE9Ç	�AÂA ‚a×C×ø W}”å9ÇH"éAMâ?‚#÷òŸ´’@‚iA Dvõ¾->ž×GË¥	EÐHVÅÃB#Åÿê‚ š A ‚&‚aPÂ	„"‚V_ÐA$M�A$�A$A†ˆˆ|CAM ‚DPAÂ „0„PCˆ‹G šA A#ŽB!„L$�A&ÃC †Ç	ç$I‚ šA ‚A	
+ „CeðA4‚—@Š„L& šAÂA	0‚PEöSÈùt]$Šp‚a0“¢£�Y ¦ ã�(NC 6VQŽPü �H!A{Ð‡Ä^Á\+)ö‚@�m’ ‚Çôó��Î9Ç;‚#è$S‚# ’�ßùÇ8áS�ÊpDvˆa�‚ý{‚
+Áð��I
+	ÒA>?þS­”å>Øa0M„(PHXL&	áñX¾/#Ì"< ›@�0¢�HZrk­�<vgØb¬!§ ‘NqÂA¶‚		 ‚	„"ó¹NL&_	„Â@‚it�AÒ ˜ ÂAô§ã˜sŽM ‚	„ÑÇh ˜MA„ �gp@³¹‡&Šp‚h$‚	 Ž8A0�AÂA#—)ð‚iB	£ŽM �I	A4A0�ïhã¬º¶)è ŠxAA ‚&‚'Õb×)Áô(4ÃeÑt-! –„0¬6Â
+Û	„Ëä|ªÕ.""!¦XLbÂa	„#¤¡%HX!	°�8 ™ZI*	%T#B"“E„Âdx&#¢>ƒI%T4’B*’B"L&0�-t�I%¥XÒZC.©k#õ‘Õ*ÖŽ9€Ø1‡| ‚	„,,¾qn3Ž+—HtAÐAÒa
+U_çîSœs¸@œ$qÂ	 ‚8á$IÞùOésŽw8ç$AÒ ˜I8ìþqÁ²‡;‚a"œ§	‚AÂhEþì§û)Áÿœs¹NM�ÁÁW�\§Ø ^¬§H§ š}#C×ˆXhý†‘AIA)HPI- ‚A0ÂG†&�AÂ …Ò š²9Ü ‚h ‚aÂ	£ŽB"‚'A$| ™AÂÓI¶‚&	‚a$"ÙÜã„A �6&�H �A$‚!B‚A„"ÙNS¤‘N‹¢è š ‚aÁB‚	„‚A —ÅNqÎép�H ‚#áÚØM&Â4‘P5ï‚#àŠ|î�D} ‚Dt¿ÁÿyÇ8çrœ MœsŽã¿Cœp@¾—Î8H$L"o�ôqÁqA ‚PH-8éz.¹Oœs¹NÅ„BÂØM!IbK_X B‚G šA		°‚±ä2eÉ?õ(l)ä_§J¡ÂA$A4($ ‚E.ÊsŽP‚a4MA0‚aÐa�B!MÎ9Ç8æ šhã„‚AÂi‚$AÎå9Ç8çs¹ÜãœsŽwAŠp�A0šH šHã ‚Gã�×µÂJS„Ž:	 ’H$L&M �L ^ú;¥°Š~‚I²èPAÁ/½ßd|ºdpÉé+‚A"è$ ÒAÃöÆ(sŽ†wT‚	A ‚EA „[Çó�”á„ÒAÐAqÂab8®HsŽaÁÐH ’H ‚!ƒA„"ÂÆ„oh �A$$H ‚&&Qûwa„‚	’A ’	Am3ÂÛ°‚	„¤]$A4‚&B!²è¾GÈùt_#ç
+äGÈäGÈù/‘ò>]Èùt]¼Ž!.‹åÑ|�—Èùt]DS#‘Éòèº/œE ÈäGÈù/‘ò>]Èùž¹
+ÒA ‚kïÿ�ÙQt§ºGã„‚H� ‚A%õÿùÜ§gã„ ‚	¢œ šÇÿ8çp@°AYÇ;„Ž:$qÂA A0Ÿ¡ó¾wPD~Sçrœ N)ÂGîA0DrÝÞýþË G$a2¢"„kZ~½ê.�p� „4…ˆ ‡|‚ØfD‡&¤‚"
+C„!ÄD0ˆ:B Ú9ä‡Ð ˆý„]„	 ‚aÒH ’&…	°‚hDDqH$&’8á( ‚a
+	( LZ aÎ8 šAÂ	„( ‚ „0‚	 ÂÂb	p‚aA0�AÂA0„PH$A1d‡&Lã„‚ã„L š$A$$A0�a A2œ§;”éNS ‚@‚h$A$A0A„B‚	„Î8"é"êwÎ8Hä]TÉ±Î9!Î9Ç0çã˜sŽqÎçã�Î9Ç;ˆŽ8äÜãœs¹Ç8çîqÎ9Ç0ç ˜!Ì91ò ä‡8æãœsqÎ9‡8ç�ûœsDãœsqÉ �n9Ç$9Ç$9Ç8æãœsqÂ]p�ý„#¡A„¼PÐß¿Î9Ç;”ç$S¶‚oÜ,ã�Î9Ç;”àˆè ‚ðDçuð@³¾ÑNŽ‚AŠ_Qú×[—Ás»	„�H ‚`ƒb»é�~òŸÃÐAÂb‚PA0B/¤tÿ�AÂhºH ‚iˆøAC!AÑÇ&’&’&¤‚")ÊsŽ)ÁÈú)ÐA) ‚	¡A¤!CL+	p‚eò>/„ÓƒXçîSä
+Ç&:ˆA29Â‚DYt_#åÑ|� ‘Ç&Ž8A0„B	„"B#²t’DtÅ$AC‚)Ê}„)ÑHº ™tM �AA�Aaàˆø ¬º/‘òè¾Ã„	„‚&A �A>qÌ9Ç&‚AÒH ‚i�I	´‚!'Î9Üã¨A0š8á �Hã„/„M „P@�}{¸D}‚qÂ	 ˆúH �HMM#þðˆþ×eÐ"œ$T]a‘O
+^—õ¾ì§±ñÿì§8çîS¤‚A
+	‚!A �GòŸÔ§Îçã‚$A0�ˆŽ÷‚gã�ÊsŽw)Î9Ý ‚ÂÈ6ŒGç~û)ÊsŽw)ÁØB!„""/ùßÁSŽw)ø‹ˆE—º&†&ÐA( šD8hGzÁéM ‚PH �aÁÿ´š&Š0…L!�Õs¾� ‚iB‚;ˆ†ˆ‹H"
+¤‚!A ‚AM ‚a!!AÒ%Ô2°$A0‚a �I �IB’ … ‚H$‚H A”è �J‚	¤�A¤‚	4Nw	H$S„A ‚h �A ’	ó¿Ý®ÑNS„A‚	�H �A‚Aöí2œ§;„�Â	„a0�A$ …•‚…0�H ‚A	°‚h ‚%�Êp@¬§8çî&A$A4L �A ¹F+iH$gï[_;”àˆú)Ò8çtA4&XÐÚø ]œsŽx(sŽqÌ8A4qÂ	„($œGû)Î9Ç8è�„A($AÒPÇÔã˜p@³¹Ç8à�yÜ§8çã�ÊsŽJø ‚ýóŽ­Ð"?ð�H"8Â
+q¿¿­RÂA ‚	&ÒC@ºØA$AÐB‚A�QûH ‚a
+	$A0‚i�H ‚Á1ÜC»	A4	 ÂA‹î#úè ‚a2ÿ!z~Æè$A
+	B(!Âñï‹è „PB7§;„M$‚	$’ …›A‚	„!„"ì¾Žá&A0˜A�i ‚Dr‡&GËä|&’&		$ÂÂA…(Ç;„‚	„�A0šAH$A
+	BÐA …qÎ:„	Ù}XAAM	A0‚	L0™|”ôqÁ@‚²é	°‚	„L&&Â	L$’ÿ¾¶§Â	 ˆúíÎë�ÊsŽ	">‚H D}}ªìþ¾á A2>]L Q¡ïÎùÜ§	‚	—Eðš	 ‚Kã§œs¸ š	AqÂ&�þwÎ9Ü§ÂA"œ ˜A4GÂ)ÿGçî ‡A
+‹lü+8çp‚dtA
+	"B88ô¸ X VqÎ8I&ˆeÜb”ùO�Ò! ‚Ò}‚ü-óºÃAˆaa‹ˆaýëp@®ØH ‚a
+	 ‚A ‚B‚!¡§÷á´‚&L š$IM6�A$B‚A‚	( ÂÂ	â�H$H$L ˜L$	B’	A ‚PIl§)ÂA#ŽAH ‚0ˆ¨ š8áÖ‚	„($‚A!…ˆˆd}‚	 ’ ˜L Âa �A".úaË¤A$¢.‹¯¢>§GÁÊsŽM$‚	 ‚	„, ‚¼sŽw
+ÊtÇ#ŽB’$‚A�AÂÐ"?8çÃœsŽqÎáôtÇ	$M �A ‚aÔ.Ês¹Ü$‘Ç	 ‚	 ‚¶H$A4‚A7æ,ïçp‚eð]‚		 ‚	¤}|-‚#òœ$M�Â	ˆˆ¶;Þ	ß÷ú‚�ü§8áÁ0A°‚¥ÿëv½.‚I'H¿;çrœã�ÊsŽ	$�ˆÿkÚÙO„ŠsŽw*$ÿûÁõìã�ÁA¶"=:—M$M„‚ÚA¤‚qp�=íp‚iL$A4CT{IM0… ’ „0’ÄhlŠ&‚& ÂA�H ‚A‹ˆˆŽH ˜M ‚RA0‚D0�BAˆa]Š&H ˜H ‚h �AA�A4A0�IÜ§8çrœ M ‚#è ‚	„D|' ˜A0‚h ‘N‚	�A ‚AH @®Up‚`Šu	‚A ’	A4AÂk]²>]#Ž ‚aAL$A
+	B‚Açã�ûa ‚&‚$A0�A($î”L ‚aÐAÂA$$‚&Mß‚	 �"‡E.ñø Zà�YN(p�A4AÈåÇQú0çsŽqÎå9Ç8æãŠ šJ7µÖÁòœ,î8áS„H$§ÒwD~£êqÎáÈùt_#ä}àˆè!Aø OœqÎ9ßÙ|Ù^q{»ÿCï¼§»	 �B‚	�B"÷¤H ‚z	"ý¬0‚a
+H$‚I �H$ T@¿ý;ÛALaˆa°BãÿëéH •‹ÿýøaa ˆeŽ?ö¡w.‹ª&LºA	�A"‚Ãif$*IáÒA( ‚a
+	B‘S„.‚	¤�APH$B"BãI
+0„D0…¤�A,$A …Î9Ü,îS„AL&ŠsŽ	 ‚A$A
+à‚°‚`œ$‚	„Âa ‚H$‚H ‚h ‚	‚œu­N9Üã„&S¯ÚÁ×;”á �IM EzõKw¯e:°šA ‚	 ‚h @¿ß�Áe8 VL¾A4M�A ’_îqÎç šA¤‚!AGÉqÎ9Üãœp‚0áÒ	&Ð\�ä| ™NS ’A ¶¢¬+þqÜ-%"� ‚A A0š<{Î9Ü§8çrœ§A$Á°QÄr†Pâ�âÊu8à�PH ‚	 ‚	„"�¶/�[á„B‚M„)a �B1ÿâí„‚I ‚A‚	 ‚	„!„Ã$‚A	 ˜AÐA) ›ÜB&�A4 ‚	‚m�A4…¶„F4‚	AH �6‚	 ‚	¬P@Ÿ¿¾’ ™}²R�‚¸çsŽB!@Ì5ÐH!H …/è D}(@�m¤Šp‚h§&AÐA ’ÿð‘Ç8çtGÂ	p�A	„‚&	µpŽ8A
+�á®8H§	 ‚.‚	¤ ‡éûrèºHº">L ‘tÒ „PH§þóŽq×Îç"èº ˜A4‚E8A2=�q~¾Ê}®‡ß­ÿµÂØA2<Ü[lwZ½Á|§)ÎáÒ`˜�°C�ý´Lì ‚a0‚	¤±‚¸ã§*
+sŽqÎçîSœsŽaÁ‘D]Èù/‘òè¾GÈùp[¬p@—† š	&Â	 ±ÄE*ýM �IA „[qßÿ!�ÇØMPAÂ�Dbt‡ÐA0šAA$H$ƒ$$BÚC„.‚PH§&¤	 �A("œ$8áÐA4A	L$A0…B!pAX [@‹ �A0‚A‚H$H ’H �AöS„	»	è ’ ˜AÒ šAîS”á!™‚Ø4a6�@ˆáÕÁo¤SœsŽqÐ#Žw8çBH �Kñð@³ŽaÂÙNË¤L!€Ø8 ®GÐAÒ@�ˆ�ŽyEÑ|â<‚	£�„*RHc¸®GýþS‚¤wI„‚AˆACë†Š ±ÇþüîÐA ’H ‚i	©þ»ùÝ„	&LØ÷]þaÎ9Ü§)ÐH$DyßMÃ8çp’&S �6�H �I$H ˜B‚	„±²ùA#Ž‚		¢´8L$A	„Îå9Ü¡Îá4]‚	„Òº!a0†,E°KG"è ˜L§A	A0‚A$‚A$‚&GöS¯°XAÎ8H$’Jw)û)ÁÐIqÂA	A4@ˆÿëÿô’8ç$‚IÚ	 VO
+ý„	°‚ ˜A0�AÐA4H$÷ß&Ê$¢"�öúîà�Z¾¾": „0‚†H.=üO&A40�¨º°¬�‚á<ÂT ‚b’0ƒ	„"4/ÿ_ ‚a0‚H0˜I
+;�A ‚C	 ‚A¥H Âxh �I’A‚& �A"‚&EÅ°®’ ‚aÂ	 ‚!A ˆ¡ô‚	 ‚ò*�A1ªAË¢é"é V&’		 ‚	„Š š[(uÎçã�Î9Ç0ç†@2LL&’A@�z8ùÇGÂ	 AXB‚A �I ‚hÇW;®+
+Áe9Ç	áÐAA A4 ^ÁiA¾Ž:A D|N?‚ÿj–wÎ8H§H A"Ø¡Ú­”ëvS„#à¶’'lwúçrœîqÎ9Ü š	áÐHEäuøí‘ô‚A$¤B($!‚Ä]_×è ‚h ’ ˜D2Hqw÷z!°r¡Â	„&	Š!v)($A
+!A"ÇT($I �A ‚A ‚a$‚PA@‚h ‚aÂAPAÒ	ãe8@�Eô	I	A4H ˜I0Št+`› �I�A ‚AA4‚&	ÄXe8A5UÂPACÑ¢\ºYÇ
+ÊÃ‚#éM’	 ’�×²œã�Î9Ç;œsŽHsŽD†@ „D0„E2‡ ªà�X�‹J½”ëv¯e8D}’;ŠÂÇý/vÅþ‡ÿ\L�‘ÐH ‚�H A„,i/ÿ«ûVA0�@ƒ ‚ß_Â	—ÈùH!Aaúj!¢è¾A$A	°˜BB( ÂÆ�¢>‚A‚	$‚& ‚†@iŽAµÊsŽw)Ð†qÎå9Ü§)Îåw8çî,"œ§H$qÂ	 ’ M �A‚AL&B‚	ˆd})NtÇ&L$�A4G Šp‚h ’8á ‚a4�A4‚A�AÒú­‚Áç$�AA‚	�IM �þ×�Î8AÂ	 ‚h �A$A4‚&‡;¨Rƒ%”çs ¤ ‚eÐ H0…Øˆë8ø V¥9Çº!`†’
+ñõÎäŽ@ðkãœsqÌ9!ÁSŽw)Î9Ç;œsŽw8ç"˜�ˆŒ˜çîŽÂA&"‚AÃ~ë{\ã�Ò$ �AÒ	xÛ	0‚A$A†ãØþM$‚ ˜M$ …"B"õ´‚	�A$A
+	BB¯ê?å:A‚�ÄDG ’!`�YN‹ìtyH$qÂIPH$‚Laà‚´–H#Ž	 ‚PG�àÒ9!Î9!Îëv„YOe9\�B($0�D<�t‚.’.…´‚!óŽ®w]‘øA0š	‚mL$’	 ’óŽ¿öSÁÂD|/¿û)ÁÛ)Â	„S„A	n,ßíN9Ü,îS”áÒ!±¿õ»)íM �G ‚A ‚A$8¿ x‹+	„Â$!8Ž#XDt_ã†A<09œsÙë)Ó)Ð²�9Û¬ò.‹¡!±éç†’A�A0�IB( „1A¯$A‚H ‚a šA!ÐA‚& ˜H ‚a
+	B‚A
+rœî‚	•0’ šI�A
+ ˜L$ …	ˆd|hL ‚	 ‚$ �A( ‚hC!…å8áxe9P½ä|º/åÔîGî‘Ç8á ‚&ˆqÁ²œ§;”å9PªœÑB!")åÑä]Ft_.‹¢è¾]Eóˆ …"è ˜L#Í[gti�4Pè$&'ïß;«S‚�Êt@›)Â.’�u}ø _�ÔC
+áÿxýùÝN8@’$H …µÅ�÷{e;A	‚ BUÿ¼ã‚`�a � ‚_zaQA( ‚aI	 ‚	„"D3G$9Ç$9Ç8æÏáH ‚’&’"HòË¤‚EÐH$	H M¡A‚l„Y� ‚#è"è š.‚ØAlFœ ˜L ˜A4AÐI‚ ˜A0……‹i„ÎéA
+ÂA‚	 ‚i‘�Ê{	”áÐA	²œ š �H �AÂ)ëºè§°EÒ�—AÊs¸H ‚	„	L½A½‚.‚8é	„ÐA0‚aÒ šA Ž?‚#ÞÎè$�ÅŠ#z_;‚�Î9ãˆ¯yÇ8çsŽw)Î9Ü§&‚/‚Ã	Úéùt_.‹¢èÂ.‹¤‹¦D|hD\Gq«@Ž#â/—I„Dq÷ÍH Nì·H$Sˆˆa~›ÇïÑ|"œ&Ð ®‚i‚	6*Ýoá„‚A$‚Aˆ „hoØh ‚	„	 ‚R …‚I&)»ôú šI ‚AL ˜A0‚±~—ÿ&At$"è#Žº.ƒº.Œ$IMA4‚"ñN9Ü§A‚ ˜M$$A0�A$Alã‚„‚A	 ša4.‚	„""‘t]A¨)ÂaAÂiL¡²œã�Â.‚A ‚aEÑtL&… ‚D2>_#à¬§„Mì¾ ‚aÐAÐA‚	°D|w„	Ð@ƒ	„‚	 ‚)ÿ^ÊsŽqÎêqÎá#ŽA0‚ßTÇ§÷mXH ˜L ˜A5t‚n?ÞÎ8AáÐI ‚h%ãú/—Eô‚	ŠH ™N‚DRC�çs�a ‚AŽ#_Ûú÷¤H ‚Z	 Ât8"£Uö]Ft^h$MA0š±a­Ù#¢èÂ.ˆùt]A �H!„Dd|N9Ü!&&B�a‹	„X»õÖÒ#á šA ‚h ‚ÂAH$‚	L š$A
+	B‚H0N”á	$A$VL&$&Ò	&]	¨ M”è ’$A!„B‚Al$C¤8áïA0’¹Ý-²�ft’;„Št’	 ‚	¤A2á5çîqÂE9Ç&$AÐA ‚	‚_àŠ{Ê~‘}�A4�A0…		¤�ñy»ÂØ [AXHL&‚A ŠüîSœtŽ9Ç;œsŽA$Pá ‚&\û`º‚ÙÇà�YNL&‚AÐA#ÑÒÿÎýá„"â;ÿv´´‚ÐA,!ðï^Þ¿‚# ’ … �h ‚Äs�Úíú”è$�A)·L ˜I´“BB�A)–¼h$‚!H0…B(-‚ÅÇúA�A4	‚	 A„B"Ðâ5 ‚BD ‚�@á¤‚	„,4A2øA!AŠ …±.Š$a$H$‚&	B˜A �A$ˆA2éQÜ$A ‚	„‚H ‚aéêqÎáÈùtA4&	°˜H$‚�<î�ñ‚ç ‚`ˆú	’&MA$ÿY®Ëä}$$H �A ‚A¥Ú„G^Â!X�
+,+^�"?H$L#qâ.ð@¼,ï„—	áËáI‹ˆ÷�à�gÃœp‚0á"œ „EqÈƒœrCœs¹Ç8çîSœs¹N�"8Âï)û)ôÁÁa$ƒqº¯E~õ	éL ˜¶)
+q¸ÛA‚ šA Â&	±K~Â	„("éA4H �A ‚a�0CAq°‚hºAA ‚H ‚`ƒ	„‚T‚	OØa•)Î8IA]+’&M)ˆEÑäLh$M�A($I‚!sŽ)Î8A0‚g š!H ˆ59Ç	ç$Sœp‚hã„Š ˜L!A ‚	„Me9ÇAL§&$A0‚`‚h"œC	AÎè"œ M„‚	¢œ ™#ä}Ž8A0‚a0‚	¤/Ë G}K¤L�„—ÿò?Ý¹|º' ‚`’	ˆ�ÿŠ÷Ú‚
+ÖºœX/¯�ÁÈú ‚h$‚H0‡û—@�A0“
+0‡HD¿�×8àˆì¸#¾Ÿ¡ì§8ç8çD0„RÔ˜ë�Î9Ç;œsŽHpDtAaaxâ>#â”â‚A°ÐH Q
+ˆ¾>æ.ØL M„A …BÂ°‚íØÅò‡&�I‚ ˜A0‚amA ‚AM$H ‚	 ‚	„‚Uº.‹ ‚	¤"é‚	 ’ šA!H"N&ÊpL �S”á
+	 ‚AL$A
+&A ‚@¬$½B �v‚ AZ	Hùt] ‚aÁÐI‚!Hãˆ"?(sÙN	B	¤‚C … ‚"ÑÇºPŽ8IB‚&ƒ�íx YÇÂ	£ŽL¾GÈú	sŽ	p‚i‚û‚)ÖÊpD|"œã„G$M0š@�EÛÿ;à�ap‚	”ö@›.‘NMýîÁòèNÂaX†�H _¿îþ	A0šA ‚!�Æ5N#ã;¶‚A ‚h š	Á1§ß½õö	 ‚AG¼p@’!lºa($A
+&†‚±ña‚dr	MØ�ŽS²øM9‡&	B")×í	£ŽB�´MAˆa{øA4G4‚	L ÂiÁ
+b"Ëá0‚aMA4&�A
+A0M„(D,$S‚a ‚& ˜H …`�YNØH � ˜A ‚&&O¤Çïœt¤tNt	8çp‚EÒA#ã�¿ì°�A4MA4H �I“ÿØ+H ]ô/X‚(uÇ;œpD}$L¾GÈûüAûrCœp�H š8àˆà¿Îç%8çp‘Ç	áËá# ’üDF�ó¹Ç‚	„ÑN""î<WX V�‚;“ã‚#ŠabèqŽèA¿)Î8":	A
+HA¤ˆÅ ‚H$@›&	°˜Aa1a¤A‚&‚H ‚aÐI
+&Cq¢>EÐ@›i	 ‚A „0…±§ð‚a4ˆ‹ �Ið‚a„CA$ ‚h �1‹„‚G „ ˜L�qÐH ‚aaq!Êã˜sŽÑÇAH&G‚a0�A""‚Õ$H¨8äÜãœs¸H š	 ‚Z&‚D2è¾GÈæ™AÑÇ	‚	„ÂÚ	„�ç|+)ÁôHã„‚#áÂg$I ‚a/T ˆýN9!Â#àŠv
+—ÆîÁl§îà‚e9ÇŽÐH!q¡yOÝ„§º.‚I �a÷ßûÎ9ß8à�9Ü$M…!ÉZ.‹é ˆö
+"ƒŒ^wSŽqÒ!„DFì§ð@­!‚DG;œ|ã�ØAÂÂ!(n#B8"?û)ÁæB’a-„	„‚-Æ¤uîÂ&	L!‚ã·WOI Ë¤‚	tH ’	áÒ	+A‚G ‚hV ˜H ‚a ‚	 D}T¾&S¢ù&AML šI&
+‚K
+Êt ¬ ˜H ‚aH �IBAÁœs�ì šKÚgtÑÄŠ{º!A ’	 ‚A¤�ÁÁùÇ8çsŽHsŽÚ …&A2<GÈù#ë8æã„/‘ðš8áÒH ‚†G/Y‡Ü ™#èãœp‚‚ ˜A4A0Uå?¿}”à›E8I*(t�@ˆû~Î9N¯‚.�êA0‚i"œ$+±§ò ¤:¿ÿ ÒA�H$ ‚h ‚ÂþÁPÿ}L ˜H ’
+‚!þ«Îÿx": šŽºˆé„Ò ˜&TÂhaÄ?ûmsŽA†‚†¨áÂ�ÐA
+AÐIbD5&Ž8A4B(!ƒDD4‚$&š	p�I‚ …„Q!±@Žép�H ‚	¤&Ò!H ‚A$BIÑÇ8çrœ Šrœ¨!&‚AL"œ†Hã�Î9Ü§8á$_$&¤‚	�HŽCÎ:¿‚¶&‹ �AÒ$·ÇÕ.w8á ‚&’&�AÒ šþ>‚'bðE<O.‚GÂGÂ	‚	„(+×ÈqÌ9Ç8ä‡8â"!‚¡öÁÎå9Ç8æã’ã�Ä[„q
+ÊsŽqÁúœpAYNH!OKì~ÁÂ#ònS°‚	 ‚	 °Âb-ñe?çH$‚A	$L …�±´‚	 …‚a ‚DEß„]"œ ˜M�@ƒ	$M �H$`„5U ‚	„Îá0‚a$B‚!A ‚H'oÞý ’"?Úb‘ ‹¤S„#é ‹¡A‚&Ž8A4A0�ÚSœsH#¹NqÂã²è¾\P‰D;œpAYÇ8áÂ	„/„MA
+A"D;„SŽaÎç—ÈùA‚&…‚	 �Iþw)ð‚h ‚AS¢>A($	&‚A#þ·ÂE=”å9Ç	ç ™t$‚A�×ã×ê�p‚Úñ\­”çî¡vŠ†ÛÄ^Á.úõÐ ¬OI “ VÁE:`½] @›	&‚HD_Aé&ˆøˆa
+A\zþôwÄR&‡z
+ü�â-�ÍzüîqÁÐAÒ „PAA þ›i‚	0�A$ •ˆÿÐAÒ šA ‚	‚!AØL!a"( �H§&	 ˜I
+"�)Â	 ’$A$A
+&L šAÊ‡ ™NqÁÂ	„@›		¤A( ˜@ƒ	+	Ù}‚	„ÐA ˜H$A ‚PH" çîš":‚pE>Œ,º.�áH ’	 �AÒ"<ó�¢œãœs¹Ç&Ž8A
+§	Ž8A2ág›œsŽw8ç$Ž9Ü§&ŠsŽÂ&øäãÉqÎçã�ÊtŽ;H ‚h$!·ö¸"ép@›#è">‚	 �ˆâ7ÿkÛœp@³¸AsŽ”X¦#»ò:Â-ñ­m~àÂaÐAÂA ‚a$cxþö’�Ò!A ‚H ˆðH&oÿúçîÒ"?ïÑ0’	EÑ¢H „PL0›cY# ˜M	„‚!A „DC3œtH§Aˆa4‚!ÂZ)Â	‘àAÑÇ&�AÂÂEB®B&Á6ØM$‚H …$"‚GË¢øL¾GÁ6AÐAÐGtA4‚AL šH"èÇ; Ž9Ç ‚iLº'‚#è§aÂH$‚&�H ‚	„E?OÞ»ø@› ™Ç ˜H ˜J’	mSýT-B@‚h ‚	¤H$‚	�@ˆÿÿB’TÃ!R²:Áàˆü O#è§&_�ˆˆä;öSç�çXL¾#‰ÿ8à�gîqÎå9Ç	àˆè"Ãˆ O�ÊHVqÎâ(!Å°\\+tŠ}“ ˜B‚¡±Ezú;è$A0�A$’±h �A ‚	„‚& „PA"ÝØ ÂAÂaÐA ’ „PH$ ‚lEÅ-„ÐA0‚i’	 ÂH\]GëôA4¼GHÇ;¬ ™N‚	 �H �A´‚8çîqÎ8HãœtA0�B")ˆqÎ8H˜ç�ç$‚&AÂA†ˆiN9ÜãœsÁNw)Î9Ç!AŠ&L!$…qÎùÇh NÑÇ&	´ÚA¶ÂKÂö§î8è"œã„/‘ôIM Ÿ_×)Î8@›GÈú)Çu·ïì§[)Âá
+!„ñê÷�×²ŸpEÑ|L§A;ŠÞ·ùNL¾E8AH �JÇúDtA š#¢;&	‹`°ÇÊ‡Î9‡8àˆóa0‚	„( ‚,[üãœs»AqÒH „[ñüîS‚#ðÐa4� ‚&"”qßå>Â&“!H �$B#ïaA ‚PI‚&L …$A1M0C‚A$�A$ ‚`›H ‚h ’ ‚h ‚	„ÂA‚	‚$A0˜H ‘Ç
+è"ú	 ‚	„A ‚	„& ’&`ƒ@‹ ‚	—AMA0‚a ‚PAÂ	 ‚	„M
+§ ˆÿa.¼.ÁnØ [S”è ’h$&A÷Ås¸ X„	Ù|�‘È�‘Í„A�ýp@³¸ Nw8áv]ÐHã„&B‚G _þqÎêqÂ#èã„GÐA$qÂ	„&	ñípD}/.‹¢ùtŽ:#è0˜!Øö©{ß_—H§Áa$B#Xˆ½/é ‚
+)
+"=û~ƒ$m††A
+é:ÿ~ÝÚ …0�„]ú~û¢�&ÂO§H$L!$AÐA ’$$A
+Òi ‚hã ˜A)†ˆˆôðÐA$A0š!a†XïŒ0‚a
+ ˜!A$A ‚RA°A„B"CAÑNqÑ&ÐA ‚A‚	�a¦!‘ð™t$’$A
+	�AÂ	 ÂAH Œ9Ç8á ‚eÑ|� ’$H$Š~Ê}—Èè¾‚H ‚i	A"?ø@ž”ëa ’A ‚aÐA ‚	„®à�mJrœ$’$&’&�H ‚A „ O„G^ÄCØßÿ‚´‹ G$�">ÄDEÇ
+Êrc�Î:I A""4ÿ’›œs¹N�A
+G D2‡¡ÿÁ¿8æ+)ÒÂý�óŽqÐ"œã‚Âmˆˆ½°»ü§ÿÒiLa0�B#ŽÂA†	‚	�LÞ/{a ‚	¤$ ‚h!m	°‚ò:&L&A0‚E‹ý÷�ÚAì2œ.‹ Â§@‚°�AÒ ˜BH ’	0ŠîSœrnL¾#ˆ	qÅB""VqÎ9Ç;¤L¾GÐH$qÂ	—Â&L ˆgÃœs¹NaÂIp’AÐI$H „B	„ÂA/‚Îáö‚	GÂ	è �Ap‚a ’	
+ª.� YÇ;�ÂÙN+ ‚a0‚aÒ ‚i}Þ�ÊsŽ)Ð_`�zõ¨ V ™N&	°AH T7ï|ã‚û|òqÒ „]°�µÎáðŽ8 ¬ ‚	„ š¿¢X‹â‚	„ˆI ‚†Á×î¼î˜† „EqÈƒ�Î:H"
+ƒˆûùÎ8 BL!A ˜B"#H+ÇÛa0‚hDX!
+�C8à‚AL&�H ‚&‚ÂA4�ˆôåŽA($A0�A( šLPA2á’Â	A4A‚A‚		
+&S”ö‹ �6‚&M�AÐA �H �@ƒ	Ð#Ž@›´‚	$AÂ&	A „E—Âi×¤‚.·°E=vSœsŽw8áÒGp�AÂ	¤D~qð@³¹Ç8éá"c„Ž8A4qÎ8 ‚	¬ãœsLsŽaÎ9Ç;œp‘NqÂ	 ‚i#ŽqÃ	„ �wç8çˆá%iç$‚8íòcœpAX">N8à�XA4‹ ‚	‚*0Ø!þqÎë‚¤qÎå8A4L�¡‚
+ê+ØA0O´÷{ðD~Sá„‚ š!ALUââ“þû(p‚A ‚!AíÛõÿ�Î9ÇEþ< … ‚.‚	„‚A„M ‚E.C�ÐA2ú&ƒ	„($ÝqÅ²Çv¤L�$šI($B)xâÒ š	 ‚E‚!Aˆˆá…–8A0™}„H$A
+	‚	
+m„,D6�„)Ê€‚a ‚	 ‚A�H$‚A„’ …"n„‚G$A�AÐA+vÂqÐA0‚a4‚&&Â	$S§ðŠxAË ‚gtL¨&$Ik[Úœsº M‚m‚	¤A4‚&�Gî ˆÿ´–.)i{üî§V§$S„A:¿²œ NqÌ9Ç8æ$&�‡ÿGÑ‡8é	—Èú)ÁÅˆù‡8çÎ9Üãœp‘NSÙCˆŠ	.¿ûÁð@œ ¬"œã‚# �a0˜qq¾¿Áµ[PDtA4!A$Ø°…cA‚	BA"‚aaâÅñ&H"é ’aA‚FBÿ} ‚	 ‚	„‚&A	"#ïÿ �A%ôB‘)è$‚8á ‚	„‚H$Aa ‚I ¡¹1ÂA#Ž	#Á!„"‘¡ÎäÇ8á �A4�ˆ ‚‚�Î:�à�4L&�A$‚	¤�A,$¶qÎà�hº„AÐH šAÂ	„Â@‚a²œÜ+.‹¡&& �@›	�@ƒ ‡èZÐAà�Z&w)ïüî¶S¨ VSípˆøA4G­‚Ot+þwd|�áÂA	´˜Åþø Oe9Ç;”áÐ ˜M ‚	¬iøA’¤¦"-Ä~õ„§C°“!°qò ä8çqèˆ8 ^aÊsŽw8â") šqKSŽ( ‚amwý‘Ð" §l&M$ š#âÄDq±µÚ	A$A
+	B‚A$¦ÐAÐA$H$H �A$A4‚A‚
+Û)ÂAÂ	œt‚A	L ˜L$B‚	!„S”áð‚a � š ‚aÂPI$‚A
+~Ë¤�ù­T–�" §)Êp�6|�„		¤A4H ‚|Ç0çîLp‘Ç8á#ŽL¸¤r#˜G�äÜãœsŽ"œã„‚Gã„‚	„ÐA0‚H ‘Ç!Ç;¨nð‚eÒ8áË¢ù	¤M$Çÿòœã‚.‚)è§	‚	„LB	‚#¡ùo[òèÇ;”çî‘Ç"œ ’	è%×¯ÿ.–"-ãïõúúH$H �A
+‚]ÞíìÎ= ‚	„r
+Ç¾¿iBØA	,©ŽŒeÈ�€­Ãt’AˆAŠ	( „C	¡LPñ³Ž‚	$ÂÈà¸B""ùC„.‚ÚI‚! ‚!°}.²1ÂPH AÐBL!!q§¼ šHã¤B‚A ‚h �1H!o‘ð‚H"�!A°’&L „0„D0ƒ„w)Ô …$ ÂAÒ!gtÜ§)Â&qÂ	 A0‚R&‚	 ‚a"?ÿýÖè �6&	°‚a0‚hã„G×{`‚³ŽaÎ9Ç;„hL&¤‚		ó¸Dt""ûAýÙš.µ/¬îSàˆüã Šy$S E8ˆú’›©Ç;œsŽw8äÜã„ãê½‚Ù1Î9Üã„‚TM#‚DG8ùsŽw)ÁÂÃ¤L ˜¦#�ßìŽ–w)Î8"?	 Â‹la…BÝÓ)óŽw8àˆü§Ò&M	„l!BÂØI ‚	M${}‚&�H ‚i‚$	L$ÐñO ˜H �6‚H ˜B’ …!„	ãûà�‚ ŸŒPA0‚eÑt)ÐA ’	B’ ˜ Â(†‚ …�Êp‚eÒ8ép‚eð�A$A0…B#‘¹Ç8á$	B‚& Ž8°„CD0ˆŽS„#åâ>¤qÂE9Ç&‚&L!‚ÒqÎ8DtÂ	„( M � ˜A ‚AQˆúÙsŽ ™N‹ ‚	„ÂPH$‚&‚	 ’^þºSÈú)Â&‚ë×ßóŽE9Ç„J"ããÞ=ß§EÐH#º	”éaF÷}ýçï¶S„A	"8›í$A
+	‹¤‚cQÆý‚)þƒ …C,z|�ç Œ8 ‚†Xâ#’,ã‚˜pDtˆ „XB|AL‚#°„B	 ‚„8Œ1ý$H ‚aÐ`›	„Á�†"ñ°N½$A4‚H$‚H$M„. \ ‚i�IM$A¤ „C#åÐPÂA#ŽL ™Ç	MA0š	$	$AržÊpA0‚ì ‚h ‚	¤I‚&0‚l¾GÒôí~”">�E9Ü§)Î8A2øAÐA$B‚P@»SŽqÌ9Ç;œsŽB‘Ç	p‚ap‚a4BÞA¸á#ŽqÎ9Üã¤L&AÐAç%8å�e:Gã˜sŽMp‚aáÂ	ç«ÊpD|"œã„§;”é&] ‚{ˆ»ÿ²�N8"è¾&S„´AÇ}Pø X@»ØB÷·îý`ˆýVÊp@…’	‹l&!¾#Õn—IH$ƒb‚÷ÿû|ï¸ A„!‘ÿZA ‚mB‚AÂ&!Â…± šA ‚D ˜L&„ …$ãàˆíœr+œsŽAˆaˆ‹â,#M„#á ’&ŠB!…„‚AË¤AÐI‚	ˆ±‹a‚l¨)Âa3ŽA �A0˜H ‚aÂA!H ‚ap‹¤�h$qÂ&MA°‚aÂØH ˜L&�A ‚A$A0‚`ºÁÁÊp�pŠržL"ùt‚A‚ šA$¿ÁðŠu	A4‚&A4AÂA4‚;õÐA$´, ^õzvìã‚©Çe8H ŠºÁÒÉŽaÎ9Üã„I#èSÎ8 YÇ0çîqÂ	£ŽqÎà�Ë£Žwó½s¹Oœp‹¢ø@ˆà¸ QÈƒÑÇ�ÁH0‚a4Aú!ôï�#õíCR!A¸Óe: ˜A0‚aÂPh ‚ÁDl
+�H �A ‚	¤A0›˜ˆ¨ªA ‚aÒ$Aa0„||zXh �gt^)a$S„	°�Am’&	°‚hCA ‚A0‚G ™s	¤ÇA´B!",!‰Ž˜A
+ ˜Fã„ŠA"‚&DY|�—Èù#Åð˜M$‚!IL!A ‚†qÎå9Ç ™NqÐH ‚$8A8í´ˆéŽ�ãìã„JÒA ‚h$S´‚PH ’(|ã¨ Yß
+Â	‘ô”ÿ¿ú#ûÁv]ÁÂE8a_CÿOà‹ E<"œãœtN’Lo»ýç{³Ž#Ž	p�I"‡èƒ‘8ä‡;”çã�Î9Ç;•9Nô›&�H,0„X.ú§ý‘ö"!‘ÃgóŽw0äÝ‘ÂÈlÎ:÷œs¹NŽÂ`„DCEÄqÔ0äÇ8à�0�AÁ1")ˆãoÂ(v‚	Ò	 ‚	 ‚P@›A ƒm�¡„I´AÒ$A$›H ‚i‚	�AmA ‚	„‚IBØHîMH">‚	¤‚	‚ ˜A ’$‚#ám	„Â	„MA0‚a �1A ‚	‚ LCA ‘Ç8çsFãŠG …‚!¨?²)¤">§étŠ|ã�Â	„&ÊsŽMA �A4,�çrœã„/„Fã„H ‚h ™Šç">É¹Ç8ç$S„I ‚A‚	Aìãœs¸ VPáÈùtŽ8A4S„I.‚i‘Ãã Ž9Ç;œsŽ)Î:.‚&`ˆõ¸�ëkîÔ§„S„	Ò)ÂHºPÂ#¬^ýkPE:L!Ç÷ÿ½pH$‚A6M¤\oçu¯I‚$Aa'ÝnîÊrŸ ‚ H9!Î9Ç0çã�§.–($‚H$A0�AÂAˆh$"Õ‚ïDÇ&Ž8 �AÒD ˆeŽJA ‚a0˜B‚A0‡ \_†‚	�@�b($A
+H!¢9Ç0ç( ‚h0„PH!Âm±&	²œ§	‚I‚H ‚	„Òm ‚PA ‚hOe8EðA0A0šA ‚A‚;Ã²œã„Št‚A ‚h ‚	 ‚B‚!ë‚#òŸì"è M‘ôH �A ‚ALw­„	è ™t_	¤H$‚ š ‚h ‚`»)Î9à§8çrœã�ÊrœîSœp‘Ç&¤L!Hã…á,$SŒSZë~qÁõ”ç$ V
+ ŠŒDG¿"w8çî8áËI`�}ø YÇ&h§&Ž8DvÐâçÅHW8ç#ŽqÄD_;ùÇ
+ál"� ‚a!7:‹Ð@œRºH ‚	„($‚H …¸b-4‚A�IB�AÞ?°H$A4‚	„�I	‹I ’&
+Ò: ˜B‚ šA¶AŽ!„
+¿á ‚A‚& „0’AŽ¢>,¿äY �Ü"é„’&�AÐHã„H$A’A$e8A2ù#åò8�„�â‚&ƒD šPˆú8áÐI"‚A „CA„(<$qÂ	— …"œ$)ÐGrc „XD3ŽqÁâéç ™|�„ÂA48áÂA ‚sÈN�‚	”ç$‚)ÂA ‚a.’A$I,]õ«	²œ§;‚.—úô×pG ™| ˆøA0‚*EV=x"ž¿lt¶Šp‚A!Â‹OþùÝw)í ‚A‚@ˆé?¿�úSŽw)Â	¢œã„‚G—]§h ‚A$‚a„"‚Gþ½X BÅDG8ãÐ YÇ0à�aaË$8"?Ð"œC†°ä‡8åB)	Ä0„C	…b"#ˆü¾h�„AAB!„Å°™p¢…ôŽ8A0‚i�IMH$ŠtA4H ‚	„A‚	�A"’9Ü§„’.‚&M$‚H ˜A0‚h ’	�¿$&�@›H$AH ‚ A„‚Å	„ÐA4H �IM ‚PH ‚†qÂ#¯H$&SúuÐ VS©Ç	ç š( �AÐQÉqÎçã�Î9Üã„¤MDD/"C8âL&ÇÂÈmŽw8çã�ÊsŽ)-”þ �grŸ²œã�ÊsŽ)Î8A4AÁ?¦Pà�gp@°ˆè NóŽw]#Ž&B"áî1ývƒ,ûþÊt,§@�H ‚aÒ	 ‚.6#ßùNH$L!A	°›±×ÿÎêqÂ‚A0ºÿõQ\îSœsŽwH ‡ñN"‚H$L �A!„‚	 �L!›ì š8á"‚&�AÂdp\ RqÄD,Z&‚PH NÊ ‚	„‚G$$‚A$‚A�H ‚`�ˆ�ÒAË �6¶‚H �HL ˜M	ˆi “c”å9N(tAÊsŽ ’'”û/‚
+ÐA ‚&‚		AÒ)ÿúÕ„&ÁË Šr�A0‚h �A —»[Ø M”ç ‚h �A4&‚	L @¬§ì§Â	¤A4‚	�Iè ‚$A%§AÊ€CB£_\+8çî�@›	t]GÅüAÈƒ�öGˆùDE¯µ°˜L$„DzWü¶S”å@AÕ$	 ÈøNì`œ~Ø">< M„›	„MA!IêÊ‚!AAZ	bLwí �A$AÂ	¤ ‚a0˜ ÄcoaL!A	‚A	B6/Óÿ& ˜$ ‚iLa†ˆ�>( ¤—â-†EÒºGA( šAH$‚A0‚bŠp‚8ä‡&_	„ÑÇ"Cœt�A!&˜çrœã�ÉŽqÚ šA4,§;”å8IA"é&	�ÂhPAÂh ˜B){Ê~Â	 AZ+e:$AË �A($ûÿi‚H+. _zþ®ÑNp‚	„ …‚‡×÷°®Sœp‹ ‚ÙN�#ºÿöS„	°A4&‚H �¿ðžïûì§ÏB� ‚h§ÌÅÈÖ]©tGAÒH •¦,¿ë‚åÑy¤!I ‚q¿ú²œãœvG �B"?ÔN‹äAAB( ’A	ŠB#‘üw¼¿ ‚a,$AÂ	 ‚Ú	4+¸A4‚&‚	 ‚A„ÂC	„A‚	$H ‚a ’ ˜B‚O„)át](A ‚a&H �AÂP ‚AÊp�"è$�Âh ‚A‚	 �@¨ ˜A
+	
+-‚l šA ‚aÐAÒ ˜H �BØBG~ŒrÜ†Pý �AÂ^–ô�Â#à‚a"C„A‚&�IþªVS‚	‘ðŽ8A4L&‚	 ‚A@�y1ÉCŽqÉqÈ çƒ8çp‚	¤$A$—þÒNç‘t] ™Ý&‚&¢Á8±×ïÞS„GÒ.�A2øAÁ Ä[�Ô¦
+Äu‹ÿ­ÚÁ
+A	„‚BÇJ¯­í× �a4›	ÓÿŽö¶Pà�1H$‹qq¦G\ïè ¸}?“ˆ¤‚aÐM	‘Ç!M±¶L$A4‚&�A
+ ˆf"0Î8A2<ˆqÈqÈmaÉŽHs9Ç8çrœ§8á ‚I6Á;l+H$‚@‚h$�A4]A$A4@›~©Š8á%)ÂA$H$L&M$’�‚)Î9Ü XEÑtEÓH$‘O
+Èùta ’î&’$AASÿwÇ.ƒ	$’IL$‚	„›Áø O�Â	 ‚iM	„ÂA	´D~¶SœsÃ”á"œ ™/„	<ƒA^@ñçªò­qÂÞ‚	žÐþ0@‡õ\ïà‹ Šs¸IC¬có¹Ç;”çã�Â	‘òù#†o&äÇ$9Ç$9Ü"
+ÿÙN-°Oh E"8�;×õ¿xA4H ELa0B�]
+öyOêqÁü�¤A0‚	„‚I$#�'I4A A0˜A0‚abÂª�pÂH$A0˜EÐH$Ò&�AÂa0LFôL š ‚aÂ š$@›
+‹ã­†‚	LA0‚	B( ‚Âa-ºAéÛ§ð‚Bƒ&C#êGÂH ‘AS šA ‚H ‚h �A
+$Æ‚Awº ˜A0‚iB‚AŠƒqÎå9Ç8çsŽD‡8áaÐG�áÂ  sŽaÎ9Ç<p�A �A‚A	´A4H$@ƒƒqÅ„Â H=í”å:„‚E8@›@‚°‚a0‚a ‚	¤A5ÿéRç(A4«û½ø [	$‹¤’A
+…Þ—‘ýz÷vË¤LºB:»ý?ïe8H§&/„‚"£¯¯;®wÎà‹ý ‚&‡AÃ?š¯­nÊ}Å„	,{ÿ}ôCž"!„Ðh!_ó¾w)Î9Ç;•a‚‡ñülãœs¹Ç8à�È
+qÐI	´(0“ˆ†„0…'ý¤‚A ‚h$‚!H ˜A4H ‚i	„$A	BH ‚Ð V‚A*&‚.�H$‚A‚!H0‚C)ÐI	 �A‚	„ÂA&&ÚA0„C`›	 � M$M ’	 ‚	„‚
+�a!Â§}ü$H$H$‚pD|�‚‚)ü$qÎ8A0‚aÒiAÐ ¬æ‚)óŽw8é�ÂiL$A4‚Dç8á"œãœp‚Ž8A
+G ™| ‚AÍ†�Î9‡)Î9Ç$9Ç8äAÈƒ’§8çs¹NS�ÊsŽS�ÊrœîS”çã�Î9Ý1ö0@–Oew8àˆü§
+Ô ˜M �Í¨±iÿ#«	Äz¾;üãéÚ¤‚A$A0„4�H „PÝü¿þ�A ‚	„0’	ÅÕ‹½¸ Z‚e8";$‚A
+tú_øÁì§dz­ÂFÖf‚ì\7ˆ¤M$L$A0ƒRI�HbµqñD}M ‚	„H ‚`ƒ	AŸþA$‚	„($AYs¹NqÂEAÇ;”ç š„™rDÇ8ùœ$S‚I’ šA%¸A0ˆùt&ÐAÂÚ ˜BA ‚Cal4§A‹åÐA0„ ˜A( ˜WE9Ç$‚&;„L šH ˜A4ý/SªÙNSœp�6	¤I]EÒþïà‚°‚aS„H ‚a �A$ „/\ïœp’¤A4‚	_b($ L�í½ø/h§H"é¤w)î†Ø�l¶S Gt¡�õ)(°˜B-„Â¶	»8ë	%¤” ˆ5Ls¹Ç8çÃœs¹Ç8çsŽw©¡ep ¢„#°‰P¥)†ØL¹‚l&Sœp‚	„GÂAWT‚ª)Œ2á’RÒIV¦A0LS%ZZI-(¤®¢*Ãi	°OJ’IRI*¤¤)0˜!a0˜'J’ «T´@½ŸL&	$ÛV
+¶ä„]&B‚A‚�‚;”áÒGã„�A"‚A�I]a ^]º.‹á�H �a
+qÌ9Ç8çrœ$S„‚$	‚A	 Â4EÑ„]GÑ2Eòè¾]Eòèº.�"èò.�Áü�ÂS‚#è":$‚)ÂH š$I�KkZÚà‹ E:S‚ÞŸø"êt	§ ˜±oü.’rèO M„M0‚Ž1}nÔî	á ’Aÿ�_êqÎå9Ç;œp¨0‚h$-©
+;ê×ÄPû_�Å„BA"8ˆ�^Ë°ˆi�Tî&‚A„DhEÇ„ ˆZ.Œ">]EÑ|!	²$‚E„‚H �AÐB‚( Â
+‚½} �A$A‚		 ‚A$aÐ ˜IL$#é‚„A ‚	0Eò>L§Ú ˜A4A A0˜L$ ‚ÂaÐ@¶S¢>Ç	�Am ‚& �A’CtL$S„	M ’	$‚!Duh ˜L0Eõ¨}^¹
+#¸H ‚#è ’	"9Îþw)Î8A2è¾GÈñ	 ‚D| ’H#¹qÎ9‡8çÃœsŽÿüº.‹åÒEÑtL¨EÐA0Œ"èÂ§åò1ˆ ˜BÂ&‚H"�"èò.’²èº.�!üo­”å>w)ÐA2œã„‚H �I¤Ab:×¼UE\Xˆ÷úýð�
+	M�A „[ûßÁví¤‚	 ‚±}_Öw	&‚Äa�¸ÿ«×„GÒ/k®·ÂA	°„[uM¤S„‚H ‚i‚!IB")ˆŽ!‘Ã(ŽŽD|ºL!H!ªAa¤‚"&„FÄC*…neqT)Â‚aˆ „E•QN�H"è �Hã ‚&‚	1H ¡„L ˜A
+`ˆýv]Ò& M—IT":„	³¹NSœp‚a ‚	¤A ‚A	²ŸûüîS‚e:&‚	„&ÐH �H EÖ®¬§HV�A$&ÂA4AÐA ŠuAÎ8"ü§&&ÈúAH ª( ‚kÚ‡L8îø"Ÿö]	ØH$v#‹ÿà‚³Ž�sŽw)ÂÙK
+ÂœîSÙN¼+v²é$�>‚>HDŒº#DEÑt_"¹#åÑt]EÑty@�+6GF™t]òù.‹ AYÁabÐh Ÿ_„GõÿáôB‚H ‡‹ØŠ`‚h � š BÄ0¿�Š$A	„‚	‚vŽƒ`ºv	„MH ‚ˆ»ôÿÐaa ’	 …	ŠA„(W{/ø®ÿ˜I ’IÂh$!a‚s¹Ç&GÂa4&‚	B�H$‚	„¦HsŽ)Â#áÎ:A‚ š ‚h ‚	 ‚!a;‚å8EÐA4]Eð‘t] ‚Ñˆ†S�Êr §;”çrœãˆˆˆ0‚‹¦ˆèÆqðAXGC#¢ú$ ‚aÁ6‚Ú—A
+í‚)àŠ~&’$AÁ6�A4‚A/ —G~³Ž�EÐ#¸AGEõýªÞì"œ-„‚D}� Bâ˜ŽµˆA0®tLVS�Âh$N˜ ]ýmN9Ü§		„ÐH š$‚E?±ý{j‚8áÂA#“h‚î!‘ÚÚý�­õ²œ§†‚	$( ‚a„Dcû´O ‚A �DŽ7ÿÁü0šIB( ‚*HFt_Pˆˆaˆ´0[Èú Ì8¿º ‚aÐA ‚A$Aˆa¦""£úA$A0…L$A!¤P�A	�AÂ	„‚& ‚	 ˜!A2œ|ºA$AAÂ	 ‚L ’Am$Pá ‚h ‚A ‚H �A$	‚!A �1
+‚#è �ÐA ‚AL ˜A4‚FZ�@œ ‚h$B‚&�ýAü,ãœsŽMÎ8EÐA0’&¢=®w)Î9Ü§8á"�	„$A4‚	uòÿ—Èùt]Ë ‚h�—Eô‚A|E„D3G$91Îçã“sŽ)ÁÂ	„	þ+ó¹N‚#àŽå9NqÒ)Ò šˆÿÓ½ª¯õ]~—@Š “]�„#K„	é| N¸†‚A1bßö½®ÙNqÎá Dy„†'q[¿¿‚ç$qÎá�&GK´ „7Cøh ‚aÒH ‚	‚l&††�Ah§8á ‚Aƒ …‚!A ‚m„›	‚¦&A4‚H"
+ãÈìŽ¢˜ä6‡;œs¹NqÂE8A2>‚$L¾‚PA4"Á4&ÐAH ‚	¤ ˜AÂa ’	 ‚±pŽ9Ü§&�A �A0˜H$]a �H Šp‚h ’I$I’A�‚Ø"œ Šp�eÒÐARA$AÂal¨+tîS„	°‚	 ‚a ‚A�H ’	G¶Sí¢?		 ‚&�AÑÇ!ILav#·ze<ºqÂ#è§B‚@ˆâDq¡~Î8 WÝ Ž8EÐ±è/×„	¾'l§ � CD5œ†¡Å‚"ø ¬†¡Î9‡8çrœ§TAhDD]ýjò>_¢�°‚Å‡ˆûÿÿ÷&4A„(F:Ã& ÂA
+&Å�}G/°�I$’ š …‚ˆb¨u}b)$ �AÁXÝX�ðØH ‚ ˜A0‚A ’×ï†-[AÂ!m"úA§	ç ™G šAH#ŽA0˜A4H"œ§8á �A4‘Ç!A ‚DD0„CE‘äSœrC ƒA—0™.‚eÑt_.‚a!”9‡8á4‚ìº&‚A’A0�A!M¤B·mh$Sœp�H š	 ‚AA	‚A#òžGü-Ê"ú	Ü%{ì§W])ÂA
+ÐEÐI#�tí|îS£	Ž8A0�6’º/Žïî!9Ü M„�Ew&L š$ÇéóºêSœs¸A‚AM ‚Aãé§ßÒS»0…¡xßâÈe8âqòC‚,$‡8ä‡8ù!É�0‚AEˆ Q”`Š „X¼[~� _iL$!h ‚ ˜A
+X¡þÿA ‚H ‚a$‚$�Ah$AÂ	„($‚I‚	 ƒlº/ ‹ ‚aÂ	 ‚A$�H ˜L$AÂÅ†_#ám„Â	„Â ˜H �6A(&ÚaŠp‚a‚	 ‚A‚	$A ‚a( ‚Ïþ‹é"œ š ‚h � ‚	N8 YÇ;œp‚eÒ&#áÂ	 ‚AGË©78äAÎ=p‚$9Ü ˜Dp‚a2ø/8çîqÎ9Ü§8ç$8áÑÇ	á"œ ˜L�Õ—Ë£Èº/‘òèº… ÖaÂ# E8H§„Šp‚h$‚	A0˜(¸Ùö½ô�EÒ8á ’ ‚aÕõ�ûœp–.;¾µê�—EÐ A¤E$‚cü~¯Áp@ƒH$‚&#B:÷ú„	º)Âa„BÇëÿÕ»ó¹ÇGA}„L0†õ|a„A$ …L!Aˆ†‚¥ôS ˆƒ�8¶‚	 ‚a
+L!$…:×Š	H GÐA0˜†CP@±&.…&"!„4(oêˆè ™Ü$‚	 �A$!A„‚LF¶&_h ‚	¤A0…S Šp‚eð‚	„H$AÐA ‚AA§à�`ŠuVÜ"èÂ&HŽ�A ‚a$�A$Q¯¹Ü§Rœ§	 ‚	„’A ‚		 ‚@Ž9Ýl§ ‘N�H$‚	A$A&�AÖp@­8á$&Ë Špˆÿÿÿ)Î9Ç;‚#úIH ’EÐÇ"w)È7ˆ8HP'Ý`Šuì§Ð9t‚.�A0’&_¥»ÙNS•It]L!a\e>ä‡
+Ò)Îè ‚h%	&(!x×´�÷8çtGå8 �A"Òˆ¯Â		„ �TF/iôA0š&H$A4ˆ¸°Qôÿm ‚	„	 ‚	 ‚	B=¿éŠ	H ‚AÂ&(¤@„DXñý„ý ‚	 ‚&‚i…a2ø'i ‚a
+M’	AÂ$9Ç	ç ˜H#ŽAqÄDB	‘ô&ƒ	’0Êàš	1A”å:Aò<�AÑÇ8á´Î;h LR
+Âg §A‚E8A4AÐA( ˜A1ˆþ]EÐ ¬ŽA4&‚A	$‚!A ‚SöqÁúEw„	²è M…îïaÈú)Â	‘ð‘H šT…Äqïe9NS…`�YA�Ð@›Pî7þëöqÂ&qÒ M ‚	 Š~·þÊ~ÊsŽw_$qÂ	¤ Bþ#ÿœt–§)ÁA�¸Ðˆ"=ÿ8çyu!”â9ã�Úb"#,/Èüã‚#à�4ˆfñ Ze:”é$‚QA65õ½Æw)ÅAb ÂILi°N=GðÒ ˜B‚@‚h ‚iŠl$@›A‚ š$A0‚iÚR—AÏ�A($A4A$B	A�‚
+Ð š ‚a$‚ ˜AÁ6BH!
+AÐH¨h �I$H&$‚&‚ ‰¢‡; �A$ šA	°˜A0^w8ánŽ9Ç	sŽqÂAÐI„‚I	Š)Î9Ü˜çÃ„	³ŽqÎ8A0â‚GàˆèÂE9Ç8æãœtAÂB)¶SÑ‡8ä çÃ„qI(€‚R&´£Aç%„N ’H ˆûDt�H#Žþþq×Î8H&Âe8A4qÂ	¤"?¸ïÖõ`Šp@°Â[Iñ½ø">§Î:A‚AGš!·qŽ¾¹Ý
+B"6	�l™OvSœsŽw¦	 ‚`›½ï‚þ·öS²=ì ‚Þ/|v	 ‚	¤iŠB1ìzñA(#ŽÓ	„"8Ž( ‚a"‚D „DZAÐ8ŠAÂ0ç … ‚b-ˆˆâ Šq�¤GBa0M ‚b,!bÊqŒA�¤BB‚A[ÄD[±AnÐAÂ	A0˜AÐIYN	°‚A(A0‹è$H ‚h ’	$•w E>Ë¢è �68çt]$H ’	!�d~¶S�Êp�m � šAÂ&‚&‚ ‡×Û„	°‚aÂaA‚$ �@�~üºE8@�—Â`›D}">«ÅU¬ãœsŽ§ã„] ‚eÐA4MQï&978á"œ�çã�Ù?Bœs¹ÇsŽqÌ9Ç;„Ž9Ç"Ñ¢<�rù.‹£˜A3Ž|)Ü}²œã‚aòè ™Nt†Òb!>Pÿ„	²œãœsŽ'v…MŠX¦; š$H �6ÖéW¤L š	 �A) �A ‚C	E
+�åûA$A ‚&‚	 ‚	„!°Z_ÞÁA0�A
+ ‚A ‚	B(!ñ¿Xa×A$A!I*‚!¤0�A4S ’	0˜B’D0‚ÐA6*!ç ™qBArCŠA„"#†GÐA"éIA
+ ˆeDrœ§AaA0‚Ai�Â8è"œ$&‚		A‚H LXD‚.�ÃEÐI‚A ‚aÂ	„ÐA0š*2Ÿ;¨AêqÂ.�D} ECºïßÜN�ÐAÐH šKN8�ûÎúÑQ`‚¶‚VWÞ÷÷œs¼V�AÒ$A1ëz~õ²�Nå8@�—Â	„A¿„ùÝ%°–$¶ÒÇØ"žÊt›A>#‚‘0äÇ`„0›k»Ã�ãœp@“)ÊtÂˆ£‚qÞØ": …ŠlÛéqGÔvÂA	•8BìlSŽÿl& ˜AÐA$ …&­ ‚&&�A$�IM$�H$!$ã„];”á0š ‚h …]A0š
+‹¤�H ‚ØA0‚aÂA ‚A$$‚	açtIA ‚h ‚h ‚A$H �I&ÐAbÎ?¶AÂAÂa ’$A0A‚ÎápEÒÎ8I#Ž)Î8Al ‚	 ’(tÒÎ9Ü ˜L¹‘ÄB",?8àˆú&L§8á ‚eÌ�„"LDAeÑt_#Ð@´§EÒ)Î:&V&6)Â´'a5	wI&&Êx¤""N WN&Ð Qi	„�AH]ëëúGÔ^ƒ¤µô>Št ˜A0˜@­�ˆŠ.®ýÁýPAÐA( ‚ÂÅ±þþ°@¬a( ‚`ƒDDq¥éû‚ºH MÛ!øß½R ‚i‚Aˆ†â�ˆþÐAÒ	¡h$qÐB(!ÂÄDbØA4‚@‚8â-†LSnPè ‚aÁ6�A"’ ¡ „RAÅŠ�¤aEÑ| ˜M ‚ ˜H$“Âa#òœ ˜M$	A ‚†E:.�á$ã„‚	M �A ‚D| ˜B’_Ø÷òœ§;”:H M—AÐA0˜H$±÷ç}Ás¹Ç ˜A0‚aÐA&kw�ÊsŽqÎáqÂP‚	 ‚a
+ ˜B’ ‡ÒÞÞÂAt&ÂaÐBãŽMü�àˆøE:#ª.‹åÒ ˜D}ˆ¹Ç	F9Ç&áÌ9NqÉ.� EB"9Ç;‚#§º
+Ë¤LzHEéÄG÷SŽq×²œ">â"( ‚Åüw”ðŠï‚#ô, šA	´â/pí¤H ‚a ‚X@˜ ÂDEPH$‚� ’AÂA$&ÐHPA"˜ØâÎ8H ‚	 ‚	�A( ‚a ‚]Ø'}Ý„‚ ˜@ƒ		 ’	 ‚
+�qÄ"?!�|0šH ˜H …au&_ã„Šp‚	Ž8A0…‚&BÂ‚QHã�ÉŽaÂYp$#è·8áHp‚a
+$“X‹‘Ç8çsŽ	 ‚HºAÂeð�a!œpˆè ˜H§8çrœ ˜M „PAÂAS¢èâ/ûºAÐEôA0˜AÂa$#à�oþ&Sœp˜A#ëßÿ	Ýh"èº/—I$cb(z×Áà‹ ÊpŒ EQ>ý÷Ý‚	 A0š		…¨�×úî§rª	à†ž©w(p@·8è$Š´DqÄDqÞ]%¨d!Î;§AˆˆC{ã ‚	¤HAíot�A1†Å¶Äqõ_ �6S¤Dt	Ã‚Û°Âa ‚A$A0�AÂAi&ÐI	 ‚A$AA �IðŠp‚)Î:.’		 AYtM	¢>MÒ²œ¨	è ‚&‚ ˜H ‚	 ‚	Laˆp’ã�ÁM ‚A‚A�H$B"4qô’°�A2>L š �†§Á²œã¤S Ž9Üã²øAôH …Nâ?Û#Áçp‹£È¾‚WzŠp¬�„²cëÑC Šp�`‹ Šp‚eò>‚H$H �Û®Êrœ">°‚_ØAnA0‚aH!E¿¼îIEŠúûÖ­ ‚	„Ða �I4ÆúÜT0šh ¨ ƒAXÓÿß�Êva�$‚&Ž=ºMa„0˜AÆ,twGá„ÂL$‚ACE ­¼ré9ÉÐH ‘NqÒA‹q†U„ÑÄ"ÒB†Â	—M0‚a ‚a3¸ „0�Ã&ÂHºA…
+ š8è ‚ …
+	Bçî‚;œp@�¤+&’áJÊy.’ šA ‚&‚	Où_èN�à‹åÒºmD ™N·Sô°E?e9Ü$M ‚	¤H$H @»}VóŽqÂE8A0Š}&û|VÂ;„GÂ	 ‚	„Sâ.8öSäÇGöÜ ™ÝÅä3Žqø"œ ‚e„!IO2:#är3DÈý†¿o	Nå?.‘O#àŠ …0…‚mˆ�Ð¹Cý‚a„Ò „ZHZcÒ šA‚	L šA	„‚ZA) �A ‚a0…$A4‚&EÒ ˆé„"AÂ	$A0�A ‚	L ‚a§ILa A( ‚aÐA ‚H$ã„L šA$ ‚i"!„aÎ8Hã„#é ‘N‘Ç	$�A$†ØÑNS�Êrœ	áð�6DU$GÂ*6‡�´‚	„Ú”ôS ‚	„	´A0’A‚&BÂ	„î¨—VóŽw)Â	 ‘Ç8è ˜A0˜AÁCÌ8"?SŽ�Â#è Šv#Ž#ïTïB‚ErH”¡È4¡q`‹éFAÛ	„I¡ÿi{�Óúœs¹ÇZARÂˆˆÒâãË¤@ñ]‚H!ŠÎ©„DDnô"T	„LSbÄwa„{`›&ˆú …‚	 �a
+&˜B±pÑ}�ÐAÂA$A0�IKè"è ‹¢è$‚&AÂ‹ ‚‹ ’—EÑ|�—EÑ|º.‹£ ™Nw)Â.�"è �|º/„)Îå9N‚	œs¸LîAM	 �Ý—Eòùt_.‚	�ÂA$GþÑNS„&M �A$A4qõõ8àˆø ¬�‘Ä	—EÒº&BÆ‚ùÄN‹¢øAH&tñœsD„Òˆütœã‚/‘ð‚&SÂ	„AÐ¦âºÁÝJ|WAAGl›ñÔ†H)»ÓµNÕy1Ý‘ôì�‘ü¾GŽï_ä‡É0Èü �I
+	!Ç†H ‚iB( ‚A$‚TRy| šDt‘Ä",PHD ‹¤Dcœt“I‘ò/ �M"œEM ‚H"žGHqÑ.’PA"‚A$A4@ƒR)Î9Ü, �	
+ÂE8IS�%Þ”þS”è ‘Ç	éGÐa
+n#ä‡8çc¤Gè"œã¨°B‚(ÈTë8‰Â.¨%ñˆ³ŽÆwïóºÅ°Ða ˜Aã‹ÿ¬4A4‚DtA„¦#ðÂa ‚	„‚A�AÂAŠ@�Z ™.‹á0Œ8A0„PAAÂA‚	„š&9‡8ç‚‚öNqÎáP ‹ ‘t�&)açÃ�Î9ÇDt‚Ú# �l">Aç ‚g M ’$&Âþì§8ìº/¢œ ˜B�A2<Lã÷þ§-ÁEôÙ'áˆâ5øðÐH ‚$„Gc‹ñŽ˜ˆˆáÐB‚b6:G‚Š$‚DE'qM¤A!„b”o¸l"éGÂ	 ‚h!
+&;Eˆl ˜A
+H$HL&L&E>¸@ŠsŽwAsŽ&‚ã’"?òC‚©Ç8ç"œã„‚#è"ø ­p‚a£˜sŽDã�AÎ9Ç"Hp‚@…Â:ä}°ÐGrc¢ê1™ÔußÕ‚´SÐD|ºh$	¶Ø!�Ãî‘ÇœpD|ºH$AA?N>Åa„B‚&ˆi±ðÂh§&H ‚i ‚a’	¦"Â)Î9ÇH ˜F$EÃ�Ör ¬E ‚’D|1bNt‚t_ šlÂ.¡ð‚a"‚ØB‚AA‚H0‚# G"?²èòGã�Î:$&ØA0šD}/j‚#è$�A2øI5ÿÙÇGáÎå8A4U�×ƒ¤ Ž9ÝŠ Ø9Ç"Dã˜sŽ�4#µ‘ÐŒ¨(pˆèP@˜±7ì§EÑ´ìEÇŠ°�I6�Hº		ˆ†C÷¬PAÂA0�6M„Óa…„’&�A"‚&‚	 çã�ÉŽqÉqÎ9‡AvÂ0’	M
+“˜æã‘8æ ˆƒ�Í´_#£L� „ ‚g·¸#Žg)Î9Ü§@Š‚�›$ ‚hŽ®�rCœp‘Ç&G">.�A0˜@ˆúáoÇ¹Ü§ì§V‚A ‚d|¾A B-ìo‚m#àŠqÃ	„""â>àˆì& Ž8A0…ÄDT=„Ç&<Ž›#�DN‚&‚HTT;H$!„( ‚( ˜Žúú�—H š)ÄE„)X‹âí@›ØLºh �L$ M ‚E"Èñ&qÂ#èL �A	„­lãœrC‚#èãœp�AAð‚ ã‚#áÎ97)è+*!è#ŽÂhA Ür ä‡8ç‚qÛ‹‚Š�—IÑ„]B.±b†¼ºABM ”[e;‘
+ÉŽ&Î8A0™|&Glm ÛÿØý”ùÜ§D0�XB’CX»éDFÄEÐK8çsŽM
+$‚A ‚h „$A4Hp‚d|¾G">G"8ml§	�ÊtGD4A,a"#©œã¢>‚/´BÂenÚ$Lp‚a0Ž8A4‚&H ‚h§@ŽêSØ ˜AËá‚	!A ‚A#qÎêÁZYÜ„Ž8A0Š}�0äÇ˜sŽ�àˆàè „C/GÿY„GØA0ˆŽ	¡B#µ—V„DGÙt]Ë£›	GÐˆAˆ��oÞ¨$‚	´EÒAŒXˆÇÜ0‚A	B‚	&Â]„wH ™}´AaÎ8">³¹OAaÊ€‚Â	 �6M!Aþw8çîqÎ9Üã“sŽHsŽqÎçB	‘ì�—Hã£ˆÑIA Ž8d|ŒH§‘ùÇ0çsŽã¢è ‚aÑA>Õ°Îå>HsŽqÂH#Ž ‚a0�I¯ðE9Ç8èŽ�rC”ç"øI �6ã^ë	ˆ�z§&’!‚m ‚M$¸A0‚�A) ‚D0ˆ6Ž!Âa!„-0…ˆˆ6&Ä$B)ƒ1 E8H$‚ºH$A†Ó„ÚH �A0‚A‚AÂ$8A4"!„Ât‚	 ‘Ç	 ‚	 ‚A	¿8çîqÎ9Ç;œsŽ‘Ç!Iî)ðE9Ç^C¤�Lãœv=}|ã‚˜sŽw8çîSœsŽaÎ8H!ÎÈèº<�Á°Šrœ˜è�—G0@†8àˆøÁùO.‹¦‚AÁæq}öEÃœsŽw)Î9Ç;‚#ã´·¥þ¹C˜s¸ K`‚ÂÃo�&‚ … Â!°vÇHãœsŽaÎ8A0ƒ	—l M„	¦¤ ‚i	$B�A0…L!A … ‚"n}&ÂÂ&,$‚&‚8â1b)ÑD‡	p‚d}.˜@ƒ	ÐA!b6LäLã�Â§;„‚	„Âa ‚EL¾Š)ð�ám$H$S„’AÂA&¶wGÈü'&_$}}>�óqÎ9‡8á& ˆk¿^� @»A�@ƒ!Ä}{óŽ¹Ç	AØQB¢ÿ°ŠpDt,SÃv1yNÉliß|Góºá‚m‹Ø¶"/^5~aÁØBÂ&‚	B"($á �A4’ãˆAAÂÈáÈù/‘Ì¾GÈù#ä}’H$LD">§½_)Â	—Eô ’ ˜M‚AÐ‚lº<‹¤�¢œVM#�S’sŽqÎèŽ‘Og"è š"éú0œ"‡	A0‚eÌ �I‚	ñ§)àŽà�9Ç;œp‚a
+ ™} ‚A ‚h§ëß³ŽqÎë„§ÛqË!A.!¾â‚	‚$$˜a(GGõì"�šb…ŒYZ#¤�AEè ‚�L[§èCE”@›(h$>#�†V ‚h �A ‚	¤Aˆˆa‹cA¢� ‚aPAÒ	BÅnqÎçîqÎ8A2ùGã°DÇÎ9!Î8 ]”å:&Sœp‚QÓÿ@Ž9ßrœã„Šp‚h ’!lN2<ˆ9Çh§ºGã²8©-b+¿GÏ �:AÊs¸IÈù‚e:Ë¤G"èº">‚	Ä‹õÿäAÎå>qÎál$ŽÂ \zÕk	$‚!AaG$( ‚‚aA4H ˜AÔ\0Ž8I&‚	A
+	D‚	‘äÂ$8A„!„!„‡ÐI] @…L!Âh‹eÑ‚H …‚	† ˆ±ÄE$A4‚&Ž9Ça ‚EB‚A©Ü˜çrÜ$&’8éÿù!É¾MÔ$¡Ç¯H¡Â	‘ö( … …=g{8çã’�çXb8ý©ÒH!"#*äh‹ E@d|Žã¿�ãœs"1ˆˆÝ‚ÿþ�AvÇ°Q�&‚G Œ: „0‚ Œ9Ç8çsŽqÉ¹NFãœp‚i		1Ö³ºœp’AÒ ˜AÂ Ôå9Ç8ä‡&_#ä|âHº&‚8æÜº.‚)Ì9Ç;œpˆùtyGEÐA2 §	 �,‡ÃœsŽHp‚hã„ÃœsŽ�„‡"¹NqÎå9Ç�#ŽqÎå8@›	 ‚R)Â	 ‚a5�çÃœp‚`�‘òè,E±ó]ˆ ‚	„(!Å„"Æ…i¹1ðÂÂ�ÐI4B""ÆÄðE:	‹ �B""C,qB†Pí�ÿ¤aÁæL$A4BÒ0… ‚­:ÁæA’a4B-œ|‚ØG)Â’$BL!Ž8H BÝç$S‚g">‘t‚H N‚DÇ„w;çîqÎ9Ç$9Ü˜ä3Ž>SäAÎáÑ| N‚I¤…NBqÎ9ÇÌ9Ç8çsŽqÎ9!Î8A Y‡8çîqÎ8 X YÇ;”á ‚h$L� �A4@�ëº®µj&ÐA3ŽA @žâµÁÎáï ‚hƒ[ˆA0‚ÙN!!AHE$Çì&�AÐA¤‚!„GaÐI …Mh0„DB	 ‚dx�Âi ‚ˆŠB8‚
+ ˜MH$ML ˜A4H ‚`ƒHE7°š	 � š)Ò&‚A"‚A	‘1ÐLPA0G">‚	—IM$M ¿ÉŽw&9ÜãœsŽ‚8çqÄ\Gê]I ˆûAp� J>@ t„F…‚úÁÄ�Î9Ç;œsŽwDDó¹Ç;”çJrœã„Šp@œ6!Å-ÿýÝJsŽ‚Ù„$•ˆìG£¿‚/¡Aˆa0ˆ7�	�G ÈòA„DC#áAã„Ž;.a	‹	„‘B"4qÂ	£ŽqÎ9!ÈqÎá#ŽqÎà‚a4‘Ç&’AˆaAÎ9Ç0ç&�A"‚&‚A‚		$”ã�ÐG$A4H ’!A ‚	¤ ˜H®ú¤]EÑtLîqÎ8Hã ‚	 ‚!ICÙC‚yÇ8çsŽqÎð‚	—˜?|˜äÇHD0†…^þòCœtÈ-MÉŽqÚA „PH ]8çãþqÁÎçî�ˆAÐ8Ax†'Åß”éà‹¦H ’	 �A‚!
+ŽÁìáÐAÂ	 A[A … ‚±ô„B	‚l ˜I
+H ‚
+ˆí„‚E9Ç	p‚Èæ_JLs¾wHãœt‚#¤‚	„&"îqÎ9Üãœs¹Ç8çsŽqÎå9Ç;œp‚eðŽ8I Dçïí)Ç&_ š&IH ‚`ƒDß8äcœs¿´S‚¶| ˜M‚AÂ	Ž?ø V§Eòèº&—A A0š#èGÅÇ0ë„	Îè ‚i#ŽqÁª;‚#áå>D2ÇqÅqÂA„ÂA¡ ˆAÁH ‚	 ‚	�AÐAmÛãÐAÂ�A"‚Aˆˆ „GëÇ(tA!A �A"!‚l0„RC¤#éôH$‚	‚ ˜†Æð�A$�B"Â¬Ãœs¸H ™|�„Ò$‚	¤Sù1Îçã’ ™|�„Èñdwq J]SŽw	á$Â¤ñÿ¿íçp‚�£Ž‚!l§û)Î9Ç;çr‡;„IG šð@‡;ýœsŽå=”é#	“G ª8�ùÜ§8à�Z„NÂ ˆe;úãŠˆ8A†Œ1Â�áË™.dsa‹ ‚i°‚h ‚	”ô�H"è ‚h ‚a$L$‚A‚	Al"C�Î8A2>L$A ‚	¤A0’A$‚!Â±Îç š&GÒ š ‚a4H$AÐH ˜ML9Ç8æ�á–çã‘!A[&�H&Á¿²nSœsŽwGH+Ä|AÎèÇ,p’B"#¡O|PA Âa0M„A¸þÿ½‚ „DF„|G¯UÎ8 XH!Aãâ"48ãÖðD
+–S”åqNˆg ÄEü|PA"‚AÂD]%È-„ ™|�„Hp‚iM~EsŽDã„ŠGË¤“.‚EMà�wo|îqÂE8A4AÒ šAsŽw8çã„ŠsŽ	sŽH šA ‚A ‚iLœsqÌç ˜Fãœs‘Ç!Arƒ�Î9Ç;œrœîS”åANS•8D#åÑ#á4‚8á"�"ž1\�å8">º)ò`nì ‚drŠáÐˆÒRˆ CwŠ „PH$‚!I(!ÄGö ˜M �A($A.=V#†IH ‚ ´å9Ç;”çr¨ØÓ	 ‚H ˜B"4Gã�ÐH#¸A0‚H ‚aòa\ã�Î9Ç8æãœsqÎ:ãˆŽù8A9ÇH# ™N	°¢"¢±óºœs¹NqÂA8çsŽL!H!ÿµì§8çîSœp’I‡8á @ˆ(�çîSœsŽw)Êr §)Ês¹NS‚#çd½×;¥ÙÇ8ç!",cÃH"CœsqÂ�ì"#´�H¡Ð„PA#ˆºAÃ)Â	 ‚A‚	BA(!¡Î9Ç	 ‚	¤ …!°ˆeS�Êrœð)ÂA ‚C	dO#ì ˜I ˜@›ReÎw)Î9Üã„]#ŽG$Sã�ãœr9Ç8çq‚„k®à�`à�x I‹¡AA –—ßÁõ8çrœã„’iC,8à�gîSœsŽw*]Ç|iÇGÚA‚	 …‚ÄPC�[8A2ù#é ‚�GÉŽw8çR	AÂA¤@­zõH$‚	A4&H ’	B‚HçîqÎ9Ç0ç š)Â	 ‚PH ‚a ’H��"!P¡Ëá0š8éŠp‚i8ñþ;�óŽÖ""-²8ØLŽˆj‚q±aaÁR‚)ÒZHƒXâ"Â`……ÒªI*„•!ˆa‹®�!†„E1
+
+$qÌ:KJ¤Qòa\˜çã ‚	—2>GˆøAÖLrCé”åqNtNA
+Iê¶·8ä‡"qÉ‘Ç0ç š8áÅûßße:0‚	�Êr�EÑtd�ˆº.‹åÑ;#š%ŒN¤Ü';”àˆøFãœr£Šá‘Ã„"‚#ã�ÙG …$L&|	„Ê£XAe„ÐA0…$‚ätL& ˜B�AŠGu “	¤ÄÇ&G">]iè …�H ‚!hãœrC�ÊsŽw	t]#ŽA~§ã�Î9Ü§&`qÇ§x ®ì�‚8áClsŽqÁNþÖ¬$´Cú—@�eÑ” ƒ:×ÁÈí´�†"*¶„G;àˆüR8â‚A0�A&(Cp‘C„‡A…!„!Î8Hã“�áHr
+nqÎ9Üã�ÊsŽw)ÂA �A0‚h �A($A‚‚„‚AÐH …£4h�H’dœt‚	 ‚M—_8çyÄ’	Ž9Ç8á$A4‚8ãeïáÒ8øˆøŽqÎé
+ƒqÈ)Ž‚	�A ‚PH ‚am	°Oþ×²>¡Â	¤PH ‚±aHêóE—FhÑ1D„ÊÄ7q šAv!¶Âh0¡ ‡(p�6Mí ‚	¦’È-‚qÎå8A4Pæ�çE¤0>qÎä+“rœ§8çrœã„‚_ªíV÷«vÂ	$ �Aõì§U²œ M„�„‹¢úEÐA
+YuÑt’‚(vNSÁÊpŒ!ˆŠˆ@°@¯|ã¤)ˆ¸�þB’4¢Ç;œvGˆæŠ›œtŠCOÖ�AÐH$‚A$ØH$‚	LCE!¤‚	„L!IBá„Â0‹¡‹D š#¦p ‚Dt4]8ç&‚l!e9PS”çîŒ$PáÐH �A ’ š&8äÜãœp‚d|¾§&\`�pD~qÉw&9ÇI Â¸ˆð@³Ž�A4A$‚H Ø«â";—Yä]$’DWó›¤GÅ1Z�¿DR$‚8ñb.8¶;ˆa0™tI ‚a
+ š8çGa	„L!‚Çd~”çã�ÉŽèÍ ‚hRh �A —Áà‹¤ ™N|º.‹è ‚‹ ‚0‚	„ÑtC‘ó™t]Èú š#á•Š(� D|ò">HYã´l¾’C×8çp‚d}p�6&_*.#�×�Ê}
+""7à�CÂÇaXÐˆõ¤H$AÐA‚H �D4‡¡i$L&BÚlAbÐI3�
+‚AH$‚!a†!Ð@˜¢:B‚&A ™G ™|�„aÂ	 �ˆaý‘Ì¸„|º š&8Hw!ÇGÁí¤qÎ9Ç;œp‚i˜'d3G8â-P�‚SÂœÂ;œp“#¡‡NGDŒ�—TüNqÑta
+BŽ;â"çN:‚
+„Ò „XLa(ñI#ŽqÄ0„FˆQÂ	—0‰»H … ˆ4ÀWi$Ü�8éGË¤qÎáŒÐH ‚	¤AC
+$‚	—A¡D}„‚G$‚H$h– ˆû&_#äsH ‘N‚!@»óÞwö5ùÜŠäÇ„kÊãœs�T#èRAˆ Z
+†‚A>£!l	2†Å†Ž!ø�fPH"é
+DEÄD$�h ˜L$A0Ž8ˆdp9ƒÈ-…rœ$L"C�ã‹/‘Í$‚8è"�	„‚HZã®qÎçã�Î8¤Yª9¤Ç~A2ùyXE<�’L"è¿ºeANt&1cHºœsŽqÎå8A2>_#ätA4‚|VüCb#â‘Ç$;.
+ˆôA4‚&‡8â!‘ð˜HRI‡B,PMPI ‹ì …$&ÄDD$ÂiœpŽ A2œã¢é �AÂh �B’ ….üã�Â	 D| ‚)Î9Çã˜rnSœs¹
+è(Ç@Št]H$@ñG8à�·�dtN�#D]Å1úHR%+pE;Ò&,FÄ\q½$$!
+ƒ ¬raG&G‚H „2>GÈæ‰Ž8ŠB›œsŽw8ç�çã’¦]Â�‹¤	"è ‚eÓB"(":#ÈÂA ‹ã‘Ð ‚C+õäÜ NaÂ	‘È&G‚ÜqAYO¶SœrÊ9¸ y¹x!¯ö@ðkr#�X|u°@»&91Ä „kPAŠ „BDGGÒA7
+ ‹â,&ˆšg¤;žH$D} ‚A ‚a
+A*Â¢‡&_#›A]&¤‚AÈ
+t&dèKM5È-‚ã„G �Aã²ú8ä8Eòé]H @¸à�8äAÈƒ˜sŽqÃ#šIeóˆ¾GË¢èº”öPBˆ�ˆZ$"B+)K¢é	
+HEG~ð@­ @°“BÈòlDvù„ÛÈ6�¹Æ<Âþù°£„…"#ˆùc‘8è#Ž‚ˆˆ§Ž9Ç	p‚eÌ"C‹’AAÂPA¤-„ˆÚ	¤‹¢èÑ2†Î9Ü§)Îå9Nw)Êr §+‚eP ‚4Lty$Šsº.™Ü ‚XAÂa ‚RA#ó�tqÎásqÎ8Hã�Ù‡žlâ¸ªM{�Öw&9ÇAÊîM„qVs.Œõ`ˆá¶G¬ @’‚LXùtyF‰ ‚.…ÁÁ2>]Èùt]Ë¢>Ä0ƒDF!6,�‘ÿ	ÄL&$B�J"*øŽ( ‚0è ‚�AÐA0„F+}ºý£ŽL#ŽD„AyÇ8çrc„/‘ÍèºA
+Ò	sŽw)Î9Ç0çã˜sŽÈá”�‚)øE8">]åÒDt‚&TÂõ/‘ò<_#átD| šã„�H �A �Am8ãœsŽaÎ:S„	Îç š$.‚	¤AvÁ?~Šrœã�Ò	—Eð˜/üWû)Â#ëÈŠ9
+˜{'e¹P™¯ Ðç™°“’4È£ääà�å>
+AW‰ŽLs¹}!ÜBè!Èá�Ä^â’	AhsŽÒH$AÂ	ˆDŽ,�‘È�‘ô) ‚D ‚D „R ¬9cœsŽ‚&‚	„ÂAŠ „C ˜!Þ†]Ð@›Ú …60�A($DG‚	„ÑN�H ‚	‚$‚YœÖ_þ[Ÿ
+²¨�ŸÊ°CL!vžDÃÌ	‚#LÓ6ÎF{°A›Éù°Ý‘Âv^•fÂæa0…„f`Y£¹NqÉqÎ9ÝBB#œs¹1ÎèÇºAÐG ‚	œq†¸ä š8áÐÈúåò>ˆ9Ç;œsŽ)Â	£ŽM Ž8ˆˆäAÎ9!Î9Ç8çrœã�Î9Ç!ˆÅë¦S­”à�-Ú š8á˜tñ„
+?kçsŽw)ÐG„",P¸úµj©ülU¡hÂ'¡uÈiñ¦°šF];î©*=c†ŸvŒ.ÂA.Ò�ŽqÚA ÄXÄeŽqÂÃœsŽaÈƒ�$ …#ŽM ‚	„aÎ8A ˆ4Ž,¾_#¢ù|º/¢œ§&Šp‚a4A$‚ÙNS„]¤‚iLiÂ	„( M �ÁI)Â#ç9‡& ‚aÐAA"Hp‹¤S„‚A( ‚ÝÔ{LÚ£„HFó~CíL}W—¬ÛNÍ¦ÍæÓ—Å½SeYCº1Ÿþý6Ás›Mû1Z›é5�pdÇ0çR8ç-�VÈh @ˆ,ŽHsŽaÎ9Ç;�Uˆ9Ç$9Ç;‚	—@¢åSê�¦Êží[ôBÐ‹1ßÝ~Êr1ÄD[AŽþÔÝj›�˜wôh•í/4F7~ýÓÕ:4Fÿ…z(‚)ýúÿ®™‹ìÄÿkü ˜H�¢œZAtAí”äÇ	$Ë£šL ˆƒœs¹Ç8çsŽqÎå9Ç8æãœtŽ8¤L!IaÎ9Ç8çsŽqÎ9Ü®)Î8A2è¾‚E8DÂ<ˆA‚bÊtá„Â&)%`Šyt]8ùC�Êp‚a4i‚	„‚8çu8çsŽqÁó¹Ç8çÃœy‹ø}ßb¶¿˜ß¯Òúÿú¯ýøAþÖ¯×üû÷Žð“b"ÙW E>qÊ „PAÂ&(w¤=Æ|ïÒ&’H"„DE!Œ!íUØBÂAÐ†Øˆ´Ø(� ’&A4‚H „0˜B�A0‡ ô7Ïÿÿ^\[±úmòâ}ÿåÄïÖ×þ»ízÚ\#Ž”çã„Ž;E>qÎ8@œ›œsŽqÎáŠ¾ì štG‚@‚jqÂAAÂ	A4—èòK.š!y|0˜A4 †ž0E8@›)ÊpˆúeÑ}—Ç[×¿b«#úÜ":üÂ÷¯úÿ÷ÿÿ¢ÿœK_ëðŒ~¿ø¬‚ØQÄE°‚AE8A0™| ‚!§D(ä‡AˆA0„C†`ã Â ™Õ2�B5$‚×±BÚEòè ™ÇI�A �B�h$‚
+ã„G ˜A„Â�A(#�ô–œQËìÏ§_
+KðE×kßÿòßÿ¥ìë¿¶ïúÿ_x^MÉ�çrcœs¸A0Cˆ¸ùÇÁð@¬�ŠAÎ8Ž �y‡
+ÊsŽL��Hq³žNqãÑtØ#¹N‹ @œD_Zý”ô�éNôqÄEŽ¿Úþ‘'JÒKµ�îø¯ˆµŠýVÿý†’ðÓ
+­ó5]Únµµþý+JÓTÈæ\@Ž8ŠD ™t\ÑÇ	‚G „X ’#¡/‘òèº0‘Ç!‚	 ‚HDF¹AÌÒDtB¨ºf‹¢ùtÚ ‚m«;”åANDta‚&L(a¤AC8çî¡Ëát„ šA$M`ìCXqM.„[¡qn†ñlRi¬wÒlR¦ñkìiÛ…¬]ÔRmãùÜ,ãˆ�ˆãë ôDD^""4MÊ¡Ç;”ç šiˆö¥û%h.‚	ˆ}n§Ü A¤,k­û)Áúî) ”DE¿Ó»Ú¯¦­0šeÝ¤Æ]ôÂˆ¶�ºì'¶„0C#ŒÂ
+,¯Ž`O ¶sŽqÌ:E8Ša
+D0:GîSœp‚eÅ&H"B.Œ"è&S”çã’$„4EºAöË¤�D| MœAÊÎ=BÂAÁê])Î:G ˜B‚!I‚	 �A):ðŽ9‡8çp@œPG"è"œF^b"#@Ì5£H“â"8ïÙC‘ŽHqH0„E�ÚŠL!"#�ÒbˆëE„‘ØB( †ä…‚*{H “	&1ˆÿCÝC&’LZÁëá„²aÜ§"œã“p‚‚AoU;œsŽqÂ$º£‚#£º”å9Ç8æã°ÙqRk4FiÒ�‚—ZWd|Žt]$�H"œ š/ß¡Â.¥9C„A ‘Ç	A2=Ç8áÜîqÁùÇA$ƒ	^œV‚AãˆŒG"�BÂ" èDB‹b"ÂA!"¿#¦Ž!mŒh ‚PØ �6«0†1þÂ	„GÂ	„GÚ	(�qÌ8 šA ‚!H#ŽÅ*b-rCœr+’ãœpÂ8éâ¸èâ.‹åÖç2>¨íN9Þfšã˜t\"Bz.•ÿ¡ÑtÆ‚#¬º9Â$A0A<n?JqÁHã�Î9Ç;œp@’'b1ÇGë°˜B8aqˆf‚8étÇ!´Í2èCIˆ ’
+�B�°´] ‚YGH4L$ÐI”ç¶Âì4d~º$S¤Mt‚H$H ‚	„( ‚a=ÐD|º§H§)ÂE�HGÉŽMÉŽaÊqÇûeÐ!qµe§+cˆõ¸"±ŽáÇî‚.�ø W&ƒ	Û­8ûø÷M„¶ ‚	 ‚A"9°Ðä5Ç8çr�qÂE9Nw)ÁôtÚ"+”èò.‰ÄÇA•DŠr
+2±B�G’ ™CyÇh"úEÐIBÂE�·„G@Šp‚a‚	‘ô‚&’8á ‚IÅêŸÁÈƒäÁ´sŽqÌ:A!„L!!cc»¤""ØÆ<ãÁ¢:IqÅ “	t+
+†.�HÂØL!A$Úa°†ÃÊ ™qBH ˜L ‚a2ùažAl;‘\‡¡!Kï_8‚EÐABŒ">G":0”ÂGã´Mv¹ä4GÒ#¤ÞqÐa;wþ¾@Š´‚m¹Ç|,ã„O¶�A
+§�DŽ
+Èã„&L&\Dˆé$è�å`VŽ8A †¶ŠuIšlD$G@‚³	‚.»iGÐA0M„Ò	VAL ˜L¾GÂi‚	 �A($“CÎå9Nw	|‚Øã�È`rC¤"˜AÑ!Äx³ÔPá$È({û8ç šDtÚYta6„j‚G+V#C{*&TGÐA „PAb#cÄ$GÑNLvH$’$AAl0áÒã�ÍÊtŽ8HãÂ	”uc8çrœãœtÇmtšioH � ™B™1åÐE:¢èº5">]\"?‘Ó—FEÐAÈø´n �`�{œs&Â	‚(p�A Žá!Aˆ¡A8ˆˆ EŽM ƒRAŒ§èA0�AÐA¦ÂC’GT,C#¤AŠ …†!¢:0‚8ö›H$,!A ’wS„NL&_	„ÒI‚H ‚B#Ç8äG8å:#àŠeÅ#Ä|�‘È�—j"§ãÈèº<’#éUˆˆ�ÓE9ÇA+±l Âˆ"œ0E>ØAtÝÐ¶#¸A0…„GØA4A �Al&0‚Dr‡;”8EÐA ‘Ç8áL ’	,$8B""|$Ç;œtH$qØŠ!ILÃœsŽw8ç�ç69°“E:Gãœp‹¡r7ŠœEÐH �@ŠB„	Ï"è$L¯PI1IÆŸÓ8ç&&ÐA„²0m5ŽC4rn‚!a
+D0�²{a
+H!Hãˆ¶-;Í¦l!"‰”QA„-ˆ VPá%eÐ¤M ‚GðŠt‚	—sŽA	—ÚØ‚8ä3¹Nqö\Èù#ˆG2øG ¯-Êyš.™ÇV"#x">‚	‘È�Û,§T’Z"aÂ	¦è‰ ‘tM´…qÐL! �T½„aÂ#è$qÎäÇ8á‚!ÄDEB68ç Œ8H$‚AÎ;.…!¡S“�ç�çðÐÒ&°�ˆ¤š‘$¨¡Â	‘ðŠv½"ùÄh‹¢èÂ	$ ÅêØ�ˆÕGÐH$M �A!‘Ä ‰�[
+9�ûGAÂ	„) �AÂ"G …#ŽD‡8âÄFXóhºAð’]6-3Ž`ƒ]#ôB‚.�"èE ‚hG
+4qÎå8A2éî‚	’!œõ$9NS‘8áaÂAqÛ1ˆ9Ç‘Ò�ƒ Ð;E=„]¶S­¤ˆšÐ¤AÐAmFâ"9„‚&S„]4	L Èò!" ç$Ls¹Ç8ép�Hã„â!„qÄDCahãœrC„#è˜â!Ø²ôãœr ä‡8áaÎ;9œÅ	´.‹ðˆé•ŽÛ	ô¡Ò_H œ4ÛÑt]Î"è¾@�$A ’ †Xáq@„p@”ã„Šî’ „DPA„H|‚ØG3�0>Lp’AL!&A‘Áwl&Ž9Ç	p‚i ‚i¦…±AF‰	I EÖ‚	¶ÐI	.Ú „PEÐ¤A+7­„)Î8H˜çB
+($V6#‚þC�ÉŽHp‚A$Øˆ(Žqäth‚(sqáŠ „CDDwh-$GÚ§RIºB£J ‚i$ÓDu°[vGÂ&]0‚h0‚PE8A4Ð¹Ças¹Ç8æ„ÑÇ!È-†˜ì ‚0â!!g">‰ŽqÚ8ç ™t, „B# Š0à�d‡8çÃœ{	„GÛPA(Qp‚°�67Ž’”<"œ*&Ú"?ì ™N‚(v’		ŠCˆÇçG‚	 ‚&�A)29„ø„œGH ša"B‘Ç	F#aÐA0š)ÂRH ˜BÄF!#‚ejhR#¢$‹§A$ØAE¤Âßh2° ˜A4 Â	 �:Ñß³¹Çh$AÐA¤*ØÞ#`�=ù°qóŽD‡8ä‡8çqÒâ#ÓE91á†ˆaˆˆh§Î;hº
+_´�ÞÁøat‚ØI„‹¡¶6
+!ÂeÐH$]C	 ‚&G‚	 „0‚ˆ">@›@‚²ù#Á ‚	—A%„/„Má"B"B)sŽHtÜãœr á,¾Î8Á8‚’ãœsqÁò>( š8ï]ÛvÂŽ’„§V]$Çê] @³º²>‚H …˜ï1o¢� ‚�@™‘ëÄPð@½E#ŽM$E‡C˜s¹Ç&Ž8A0… ‚$8A³›A
+$th‚�Òº&V[m�A�çM6„PI*ØÂ# Š8á$Ç ™NL!A ’õrC’§8çp‚h§àŽ84!ÑNFqØB4C?”9‡; a„Â Ú<OœxhFŠuÆÑt“éÅ„	õH ‚`ƒnõ<˜.�A2è M—M„BØA"")$qÂ	—Âa
+ã„�H, š)Î8@›!A
+L!@³ºDÇ0ésŽqÂRDtÅ² §óŽaÎ9Üãœs¹Ç8æã²ù&Ž;ÈùÕ+)Êt]c„’
+‘ð‚a4‚	±^‚AIð‚ec	 ‚Ò
+1Âø"èÇ;“îqÎ:MPˆˆ¨�â†"ä3ELŽ! ˜B"-6Â	¤‚	¤AÊÔDh ™t"ˆ‚.›nÐ±VÚ§H":H0˜L$Å&)X">´GM ‚i„�A0Ž8 ‚	 � ZGã˜sŽqÒ)Î8A0Œ?#árŽLsqÎè#Ž:â#„GF@ƒcÈ äÇHîSœs†t]Jî�	ñH ‚ÁpD}B)ðÂa„.‚(qÅlaÿ ‚aÂh „E±!ÄD „B	¤rœ$‘1ÂGã¢:0±†ÊsŽqÎáð‚Gã˜p‚d}tƒ „ZÙtXˆèŽ‚Dt�g ‚h$‚.¿˜p�6I$tL$Sø _e9Ç	àˆúNqÜ šA ’ñ|ˆ8 YÇÇÉŽA„qÒAˆÆPA0‚iL!A¤""/æ‘ô!pÐD}¶ì!ñ
+¨D~Òc�PH$L&,$H!A ƒ†S„‚	„aÎ8I�Hã„ŽAl97)Î8H ‚	„Èúõ¼‡sŽ‹¨EÓÖ6ºFã�Î9Çfi„’&‚Ä"Mj<Œ÷e9Ç8áÂ)Á!ŒÁç"è ‚dy$Üa„ùÇ\+)Î9‡)Î9ÇG˜ˆâ5ùÜãäÂºãˆŠbäc„‚H �6E �1òLA
+E�H§A ‚IAL!�ÒDt†ÄZDt#ìö’hºHŽ’AI6Ä68áø¤ÐIœ0‚@ˆùu šA4‚A‚CsŽw&8Hãœp‚A0˜A>9s��ÊpA2;DDPBî�Ð"è+ \|G@±k$8@›8àˆì&Æ¯¸¶7á8">N�„S Ò_øA_8é$C_ÔSœpDtGÈ-‚îCŽ"A„‚ˆ:“ ˜CaŠ(v§8ä‡8çrœ ‰qÉD2‡—EÓºAð‚e2²ÛqH4L$B§Uh ˜A0M¤B)y1ÑtŽ8ApA4S„	¤L „0‚RÎ9‡8çÃœrnw-Î8A|GüÃ”ér
+Ç!‚F¤†ÂG„!„@às¼4B)†‡’÷­é‚h$ìü-‚8é1b�A0„qwÿI ‚a
+A,¸Ã^Al8çîqÎ9p‚Èæ‚	„A¸à�-“¡Ñ„]$Ž:W( WœsqÎå9Ü§)Î9!Î9Üãœp’"?åò<ºEÒEÑ&�ý":I²>L!H ˜'`èN�I$‚&&þ5òC„/„Èú	á �A4£œsŽHs¹ÇØL&‹.‘Ž&�B¢ÄRbË¡A$Ç!‚DK&‚B.ÆÅ¤mÅÂÃQÃ	”é4á„ÁÇ†‚L&]$A4qÈ�cÐGp‚&Ž:A)$B¿öS“,î‚	à�;ô(&y$ã‚#ì©ˆ�*òù	¤C	„cÝÂE>‹ ‚`˜ÃØ+°AL$)ÐAG�…~qÎ9!É�¢œ">‚I „q¡ãø �H!IÂA0JqÎí$CŽƒA#ÙtÇ;œsŽwC!ÂÎ9Ç8çsŽƒMS¢é$ˆé(aMÃ)ÎáDb0�d}&ŠA1²>GÒ# �l&M$qÂÃ„Š& †§îG Œ9Ç;´Pè,}+ðDv…"5b""„^Gaˆ½¡l[‚ú„Gôš`†/«²é(D}BØhq±ýð@¶�BD3G ˜L¹¤A „k8äÜîEã¤qÙ|"‡SŽw8çî™ÇHDA³�l ­ô›´H$‚T§ÙtÎáh ’	
+	%ç‚”è#ŽE8A0Œ8A0˜@›I,›œrCœsŽw)ñ¯ÂE8A ›ÅÒ	 ‚	 Ê|�1Î8$‚!B9&’KXøô‚H"?c‹áý$A4›B("cùC¤MtI„)0„G ¶îD$Má"c‚#÷Î=#
+Eîÿàˆù!î�°‚a2ù#ëÎ8">]jˆ\isŽA2œ$\hA4Šp‚a2é„’ú„e:œs¹Ç8çrœã„�AÐâ"ãçs��[ì&„Eñ ‚�¤±b6B’ ˜B"!±ÄB	 �H ‚W‘ ˆø@›¶"Å‚E:l�ˆ°‚a6S‚„IGÂ	 ‚	„‚A
+ …„‚ÂJ$Sœs¸A2>GˆøL¹„L¸-�Yp%òc„.‘N¢#©sŽ’B"Ïˆ]Eò8„~w8áËámØ V‚Œj¦">VL«IE*;‚l§)ÒAHb¸ë~¡ÒMŠ šÅÈ@‘ÈX�[: Ž9!ØBÝ91Èƒ’ã¤Ž"è¾Ì8‹©NqÚ&8A" ÊqIB(&Ê}G’	„] ˆûJFþL&	´Ò)åÐ°‚A$A�ú(tÝ$‚ã ‚	—ÈúI“œÎ9Ç; Ž8Aá@ðá�Ñ¢jD#ñ}sŽØˆˆÿ4°�ˆƒ§ü„Š[¦Øñ´¡Â&rábÿd}´‚l4A@¸ý!yC„’!A0„0„C …¸"�ÈÕ¾Ëä|ŽA0™ãœt†GÈà¹AAÒdx�„ù+sŽƒ!Aˆ‚²é“*
+t×‘½©Üã”éM\Wˆa ‚A
+#«èN�üîS”çîqÁm"è ™�ó¹OÙNÍ¶²µm³•É¾"!ÂÇ"(tØ¤ñ ‘Ç0‚LSŠ$‚.…E%i$tœ^ûeÒIBÁE ‚a2èSAÂA ‚MˆÐAE”9œã�ÊsŽwI$H �Tôâ»Më‚ÙÇ8çîL¾G0@¢6AøA0çÓDŒ�‘ùÇ8éœpˆôb¦Š’#è"?¸ŽŠpD}§H EeÒˆe=ˆŽ1ãùÇð‹ @¬Ž ‚Äo¯ÛÅ! uòa&�A"’CE‘â>GË E9Ç&âÒ³Eaç ‚0èŽ� ‚I">ÄlE‘òéy³âbÐEÕÛ!AÒ‡+jš�Î:.™Ç� ‚8á$ÇI ‚iÙ!û)Â› AZAŠÈ^*Ë‚¬‹dœã“�åŽC]•h3gäW(p@Ê³[„»1ÎùÜ!i""œ$mp@¬ãœtÆÄhDDDÇ�°H0‚…ôÂi*üvÈûRS�ÒAa
+b‡u�iç ˜H&\ÂA
+–H~ÂC	„!ŸBôÿZÝúäÃŽqÜîMÂA‘ô‚8ãç›œs� Šx²°C	¤NN<�„Hs¹NS†NL!DtÃ‚»ˆû~GDIi&]0�@�tUâ‚&w+± @­N8Eôw	�ÊsŽMu|‚yÜ˜úö£CBåç°‘´ý$æ+¾èÚíqÇPÂ_ ‰´†5#¦L"Cˆ„‚B"˜»	¤Ð� ‹¦ÇlŽwJ)(™Bá0]„8á ‚¤"ÛA¦¶6Âh šIAp‚Çdp<T}3v›=”ç¶yT¶nuOQHÅÿØTøç�ç"?8á#ŽM��ð‹¥ÍòÝ&ÅA@ÁÑå(s›}ÑV�h":�§@Š{+i ‹ðÆÁ¶A?&>�Êt�`�:Pè1lq×}ŠwŽ…ØL'�úûþß&Ž8A¤‚gã�È£„‚	‘É­ÄPEAÐA6|ð�Hã¢è"�L®¦N’#¦M š	Èùt‚#¡A‚�‚)Â	—L ™|&GÑÇA‚	�AÒ	:qÎ8@œ ™|�‘È �HãÌ›ïÚÿûø…øáÿÃqÎã’˜çsŽˆŠ¼rèâ“0ˆé7·MíôŽÐA1Ta±{û@�X@Š$HG­Åt„WwðD} ‚E„@ðV†è˜	×´`'Âó	ºý¼‚ØG(p‚8á Èæ\ˆæH˜çÃ„	ÉqÎ:W†’"Ž—@ˆü „">]ˆèÂG&ÅÜÑ‚	„‚# ‚ed”&ËáA_„AB§GÖS¤‚8çsŽLº@‚a
+&M’ã˜rœã˜sŽqÎû÷ÿý£Û—w®Þ#b:�‚ˆAA ‚ƒ#‹¥± ‚ˆ4ûh\o’#¡¿a
+]öS²>Ú(pÂA	DEÄY|�£ŽBÂh „ ˜B)~DzýþÁÿ¥ÿd‡G«øoAäÇ	QNSŠ š­s¾¨ºgÂcÆ´aÎ9!Î9Üãœp‘Ç�†ØÄ ˆû�=! B!Âh�Šì%;çÂ;”9‡	å9ÇlDEñó½~¨Â~äŸÿu÷Köõ¶ßÔÎøAG Ž=7ˆÝqÂCãŠ
+Ïˆv*•0Â[!rÇ�œDI…¶ÛN[£	BÚAA!`„B‚ã„	³ŽqÎç ˜G š ‚eÀðÿT›øij¿¦ŸíÚõ®ëë�„ùÇ"C �1ÄDk†V+z^�Â#¤ÑCˆ¤ðE<Ž©*‚réˆcl§ln¼,ÃœsŽwAhqÂDáUnÒ�ÿ«Xˆzw‹âëH¡Ù|�8â‚!Û	sŽqÌ9Ç8ç}¶5ÓEÒ#ˆú&A7qa0‚idtD‘ä	§tÝ°�8AÐGî�H$Mƒ#”ã�Î9Ç0å9ÇAÉŽ«B¾6‚i¦�†�†Íé4ØmFéÎ!éŽ" �L Â‚´’Ò¨¡jÃåŽÎ,4Eb?($‚AB�hR!¬V²‡&�AÐA4�A0™
+
+ „a0¯ˆ¶´ÌKWjÞL/‚)ÉŽ8ç›„8 B �g"qÑèæÂ‡DuDu8çîqÎ9Ü"?nïVSÈúá9ÞA2èº^ï¨":GJ|$‚AÎ8HDo—Î8 V"3�%™­±A¶;.a4Lp‘Ç8âÒm^šml&ÄSJ¶_.…±qI":h&Åèã„.‚a0…M�H!A ‚b‚&å8AÎ8A Ž8IB(,w&>qÂÙNqÂE8"8fÿAÏ0Dt)�ó�T:»Œ^Ç#GÎË¢ûÚLE±éâÊÎ:e ˆì&Á1ÄW#�A0‰( Â’!G0äW)ÂG§� VÂ.›)Ô":HŽ�I$‚	ÐVš˜vañA6Ú�H ˆùt‚	‚l§îqÂ#è$Lº	 ‚i$&‚-Îçã�Î8A2<GÈù2qa"7THqeÍ-½�Qt˜ÛaÂÇý‘áiTuÕûèãœt„E°Qo�è!aˆŠ	„""!=B	—Èùs#ä|"œ ‰C”ý¢‡; G%˜ï¾Hp‘NqÂ@‹¤×r:"¨º]dt,ã„GÅ¡	´	DsŽqÎáv_„˜AÒAËä|ŽQÁ"HwÈ-„…!‘ÂÜ|�ÐH �6qÅ!T&Å&ü1LCI'H ‚g�‹hE\w1gvÅ„ÐAA8åŽDã„GãˆAù7Î9ß;”áÂeÌ&Žâ"."úüæS«°Üãœ|î�èvÂA¤_":àˆùÙtB§ºPâ‚(|÷X">³Ž8áÁ#ø ^ËáˆaaŠR²œ›²>_#ˆ‚	¤!&ÚEÓºM¥A„Á1l$­y
+m—D
+ ‹¦BÄE¶Î8">Lã ‚A‚ š$‚"
+Ç0áËä|�—Â&Šp‚a2àsá„Âdp\&GÂ³¸ N�ˆ‹M¢:g£èTSDE„, ˆûn†,">L¡dÙ�«H �i!¤".",&G">GÈñIE!„p‚a4qÎ9!ÄPH ‚AãœrÊs¸@�6‚^¢é”ç˜çÃ’(Ž•`ˆùt_hºa3�à­2ùÙt"NSáÐ@¶qÎ9Ü$qÎçã„G šH „qì§8å9ÝA²œãì!
+á+É¸A†@ƒ#†cAZAØpÂÄ*ŒaÔ šb"*á"‘0£RAÚ š$‚PL!ˆŽÈøG ‚aÒ	A ‚Ãö�‚	‚#ð�6Âdsc�£D# �&*ï8èQN0áð‚	±(I¨"‡¬">v]‚)Ä|_¡ì¡óŽw)Î8A2ø!!DE!ñÐAÒC#†S0çp�A2ù#Š	$à‹¤mŠ#¡�Š›¢èºÅ A3Ž&‚HRPç ‚eÐL ‘NL�„!aŠA³Ž‚$91è¨!Hãœòt B/Ð¼%CÐ A±h4"ÑÇ`Ž:„29ˆ¶GØ¤B*5.�¤a„ÂA."8çp�ABR&L ¡¥²>‚�äAÎ8IDAÙA"nPé#í3Ž˜">NîqÎ;/—EÐAËäqaòèŠ"øA šS¦qØh#Ž"’¾�HãœsŽaÐGÃœp�A#��û^"#ŒrcøHãœqn…�±‚)Ò$AB,1CÅL …XŒ ™ð$(eŽqÔ¡Ò8áÂa ‚	¤‚Z&_#òcœs¸I‚	‚	‘Àæ ¶sŽw&8D~qÙ}U„Ž<3Ïm$‹
+2œ˜çè0ì#Žw
+”èºHN‘N�Iø ‚	„;b#ˆ( X BÂ8á) �AÂa šÚA!ÂPB#XâE9ÇAsŽˆèF›„NqÂ#èã�âA4RÈùt_.‰„Â!AgfYÅ&	þ¶�@¬˜á"œ"é9‡&‚§AˆŽ›Ø YÁdr��[‡#†@9ÉøÇ²c’ã´c„�B#c‹Âè ‚M„b"¤}($A*#d£¢:¶&‚ šA0�H$M„!„,�çîSœvA0‚a
+(tÂd<=�ÖâØM2‚•¦D}äÇ	Ç	p‚hã†ô§›“qÂ	—fš¶…?ÑÇ0áÍrœ$8áÁj²è[2Y@Š š&Êt8à�`�Šv† ‚A‚@ˆ
+�ä5 ‰ÊBj¿®ÁÇˆˆãa ’ Œ:ã²øB) ƒ­	°‚8á)‚E8eÑ©b�@˜ˆa5	ˆû¤’ˆêL{‹)Ô „ Ž9Ç	AŽ½üïn?æ>þÓézœsŽaÎ8dqášÄvGG‘tè EZH ‚!b,‡r‡!Hs¸ B‚!�²³(p’§!AÊ‚±8è1A ’†qÎäÇ;”ç„	´ApÍœtnaÈœ;“|4BC¹w&�A!&ˆqÎ9!ÈqÎ9!ÂÙNËäs#áÕ°‡òFGÈõ‘ÈŽ‚ILà�*2Ó.�„ÅE7® �v´„(#ŽBB‚*Æœ=zúãúü4‹¡õ³¹Ç&Ž8A†a28z!">Šr $qÑ
+" áL!ÈåiH Ba(¡Ã”ç":0ËáÐAË ‚	„($A4��òn!ÒxýþA#È:¯©À�ã’dpè§ ˆ6Ë£‰ÙNPá$)!ÄF �grœBAùtØÉ˜A4‚8éL0…a‹#Ä}�A#Ž‚;œq!Aò	O\ƒæVâø®5›‚yíA&n'åY­Â0ƒ7;��A‰“‚ü¼#ÄæƒY>'²p{$äà¨"A�>åÁ ðE²y;*óñ¯ ¶p‚h …"»a%"w(sB¹Ç	GA:~wGÈøG šA Ö]DfGEöw …°Šq ‚ã3ŽaÁLãœp@„CB‚!dpueŽ¡OÜ'õ¸´Õ4;ôïB&µ
+&ƒP„ZaXL!!»¨T-‚4/ïiDãˆ‹éç$"DÜã¤-ˆÒŒº">]‚	 ‚Eò>A‡bš&’.›AÎÖÑˆ"&¶"œ ™tÜ§H">’&Z)èã®Hp@¬§Mi®¹�7¹vÃMR1áhÄôc£½ý#s
+Ó§w˜Ú1ZGO1¶ÿFÒù{Ú1Ñ†Ùäö˜^¾HsŽw&;B# …t]M$¡ÂHPAdAÜã�È®�t]Aì! @”ŽŠ´HWÎ9C„GÚ&A ‚!„"Øˆˆ¹Cœp�H ‚	‘à˜BQ‡Zý'§WÞ·7õfÚoN­SíNyvÒwf	7VÓ=«Ý›¡››³›§wWvníw	÷]‚;œvŽ8Š§hãœs¹Ç&	PE9ÇH˜áˆa0‡Èé`�9Ü§8ç�àˆúA†GËá ‚A".Î"èÑ­á!¢16GA•É„Rßû
+Êp�gîqÎ9!ÂXBÔîEÿÿÿnû~ž=Žÿõ¿iïÿCV¶m-=}kü1z×KºÚ ‘Cˆ‹Ã	A2æDDUì š	 ‚A‚!Hã�Ê,ƒŽqÐ„B6"8�A0‚eAÐAAL ˜A0…B,!è�äÇ	t‚§8éL>×û}á�ý+}ÿÿ�ñ¯Ä/ÿ»µíý¿¿ÿúÙ1Èƒ�îSÑÎ9Ç0çG0‚	‚*ÓµÎ9Üãœs¹Ç;ªA#ŽqÎà�Áó³,âf¯öòø ¬Žˆí‹-‚°TãùÜã‚`�AËwHv»ûáÿzi7ü¸gsïõú0˜þ÷ÿý‡íuÿºZ&‚	œv\9‚8ôÑNMÈ`p‚a4L!b,PA3Ž�çpA2>GÂ	„H ‚iL$A0‚D0‰qØA0˜EÒ�´FaGÏ!AöAÂC„Gå8 [aËè§&�A"BC8áCœs��¾þ›—Bƒþý~ÿÿÿúF/ÿúøoû×ý¿h Cí’óŽ‚A ‚ãˆøìº{¤‚H ‚a"‚A$"(-Gß;”ùÇ&¦ƒ[`Š}ð"èEÂ¼E0’&’Š†XøAîLsŽ
+0„}¯Ûÿ�ì›öMÛÿ¾¿wÿ]Aÿõÿ×±U½{¯ñý ‚	‘É”ê)Â	„Ð _êqÌ9NAp‘Ç8è „ ‚in#Îþ§ã�Ô š)ÂA ‚a0‚aÐŒ'S¢;!0M ”îÓ¾Ês¿‹ðì§)Îåw8ç$qÎ8H%ë÷ýŽ ˆ÷ß¬›·ý®ùN÷ÿWý“{þû_í×ú¼Ã½ë¥úÐA2
+Cˆ¬3ŽMè$I„"’ ˜BÏ¦)P@›)Îá( ‚iM �B‚Aˆ±d ç„R.™[¢²Œ"èº.Œ#D""- ‚)ØA3ŽA4@ƒH ‚A†G š8áÒã�Ä$Mý€^ô®½îûÿÇ»ë”;ýý­®¬0“kÚëÕú0!S×Ñ€ÎýwÇ!œrcçl!Ak—L¬H$�l†`ÿçã�Â#áçã°„F#ä| M�Ú.ŽeÑ|º�±ñ_SŽqÁÃ	¡&±í9DÖÒ¾Óbª­(íÖ¡¬_°×Šbøâ¡ðÖ.ê×Öfˆà‚ïûš
+õ­w8äÇ!I¡óŽqÉMÉŽ&¤qâ �J�„SœsŽqÌ9Ç8æ ˜F „PA"‚Â!@²Cœt]ÂEÒIòèPEò£.‹åÑts.‹£D8’	°D|N‘Ü§ ‚)ÐA#Ž‚&Ž8aˆ‚C†GË™'·H68âÚøá¦Õµ¦ÓH6"Ý „6š¤Ð²°«ŠŠM4âÙµŠB.#¤„_ˆˆ�œs�°‚	„"!‘Ã.ÜwAÂPA4!C0~Ê|îSöS°Â	 ‚PDt¹tJ‘tCV ‚ŒÑ ‚ÅŽa×#ä| Ð¡liˆˆŽ ™Of"¶(Åwi¤Ghi˜ÍZi›KÚdx)ŽÐdv‚ã´ÓHÐ	ÿi‚dtƒ.fàX†ÖAl#� s¸A2â„"Bä0>qÉqÎå8I3àAï‹Á²œ®)Êâ�?j0‚R#£VfŒ"è"S¦²øA4]!g2?sŽãœpEð� ™Ç8áÂH šI \ã„	²ž§8çsŽw)ÐG"è$Ž8Aù7òCœsŽw8ãDW ²90Û‰€j.RGá‘Ä#åÌ!A`�aË™#è§8áHp‚h ƒ#Ê”]La""($I.šr‹£ØA4!"‚.…VPáA‚ ˜MRAPA- ‚íÙtÚ ˜A4A†AÐ‹#¸a2è ‚eò>Gá
+¤>®®—þwRn�A"#Xø‹‚iv]PE8I$D|q± E:.Œ"è¾]Eòèº<‹¢?}o#ù}TÑEÒ	_H¬*S‚`œ"�ûôý”ë�Ò8à�aˆr�Ã+µT­H*öAlqAq$A\sŽqÅqÂE8H˜â!„(Y\[¤GË¦Ë¢è¾]EÒAÂ˜BMA
+D| †("� �$	A)"K‘òèÑ½L$	AH$AÂ  pD}sŽaÊp‚eò8r8Â“â¢¼Gü›ˆˆ¤GGÈè¿Êt4lP†c—ÿ÷Â Lí"*ÑÌºPá Â!ü‚ã„
+ƒ‹ŽÒh7j²aÇ8ä‡	B	£Ž‚!œs�‚#è˜çîLp“	¤BÑt–s”à�grœãœp‘Ç;„]ÂH �A ‚	„Â�@Šy/‘ò<]Ë E<YAÐ X JqÎ9Üî‚)ÐAÐHã�Î8çsŽqÎç$S²>\Ë¤-Paq
+"!Hp‚a
+ãˆˆŠÆõI]6‘.ŠRaÒ!Øˆ�Lczj±ˆaÅ•«AÂ	$"#8á$A4‚	DPMˆˆäÃ@ä‡¢nS“;ÿäAÎ9Ü§8ç$GB‚IWè|F‡0‹¢øAÁeò>ˆA0„284Ìì•n/ð@¬ãœsŽw8çpEÒ!Hã‚#ìD0º"9ÇÈ-‡EÅ£œp’ … ‚av‚	B"þ�A$Ž&VÜ§D}ÑÌq«A">M		¤&!„Cb.whãœp‘Ç8ä‡
+dÃ8äAÉºœpD}s¸ B(!ÄìãÎl ˜ ˆë+I8äAÈƒ�\rnEiò:SØî5�ûà�X@³¸ T‚a�h|‚ØG)Â�â!I!Î8AáÈæŠ ™#´tec/‘ô}PA2ùD‡8äœã˜sŽwŽˆ#t]Û	Ša8Al� ‚)Îá„	áÂh48">§8æãœsŽaÉºãìYc�cDAÎ9C°™q³Ž"!_Ø"ž�H$‚Q`„ V""ÈPí ØÐ‚]Èùt�A4¢Ù¦‚Cb(&<�ø">‚RA …„-
+�°5Ç!�
+OÂ)Ò8çrc„¤qÙsC‚vPî™C�Â	‘ò9ò>‚	‘æ†¾ÐD|!aL·8çsŽqÎ9‡8çrœ›œsŽˆ4_‚#¡¡Ì:	A •é¶P»‚#åÒ)Î9ÝAH$S„/„M#æqÎùÇ;�<4A€Ëâ°Cnd…p™Ã[7‚É:dÆ!DqaÐAÅB")¯†‚.�ACIGx˜B"DÂ	&1ãÐA0…bÊ  ™}°M ‚C	A …ˆ²æB	‘È!!A0„28SMFAÓU
+˜/ùÇ$91ÂDÇ0çp‚8çqÄ{!]IŽ�D}_§¦"8ø‚/§� ‚8â��¼`�Eû_íB	—ÈùHâ"#èÚá¶è�àÒ>Lwkö¼ š)Ù} …„"Èä!Î;§&è$ÇHEŠRAó˜Að‚gØè�‘öR�h">ÄDFÏ2ª8áÑÇ!at‚	L"�B‚!Ç	áËä|Ž!B8r„r
+oNA@îÛ0ØjÚMÈk»»NACŽ!°D~9ÇGçã“qHDlu›„GX"�•Šl!D‘Eô"¤Ÿ•·B‚	¤A
+¤);�¦PçB‚AˆqÐcÿŠþÝ(×ÛŽ¹°Ž�„�¤Ž;E¼ˆ9Ç;”èÜ š&GÂ&Lª">¤u"�÷#åtg—Fˆ¾]PEÑä_“s�# Ï…8H§îòé"ëë„":”éáËá.‚AÒþqÎåœt¨-ÊsŽº¯ö÷þµþBÅÂ„‡&‚	"#¨ÇðÂ	ÛIÒAA�xö¶GÅÄYÞˆÏ�m �A$A0A4(DD_†MA0‚aÂ,CW Ëd¡HGR¸iä>_ä3pˆáO®w@óÁÉA7LƒLòwžAüœÁ2nJþŽ9Ça2ùEw8áõØ ZO’Šå9Ç	PEÐA4‚#ñ¿�ö#í—L$‚&2O;:RèO.‹ä|�—Èù.‹ä|#¸Iõï‚)Êrœãœs¸A0Mœp�‚Þ."ÈþÂ+ù¦ÄHAŸˆÂ+wÞƒº3q.PƒY
+œWžÍƒL&ƒ ^i„C/æ†n…NPƒÄZÞ#A �6 ‚a#åÐH ‚‹¢‡ºI]6FtÂA!ùthŠ¦A‚PA$M ‚	 ‚C	"( šA ‚H$@˜´… Â
+p�6qÂE91ÂPGî‚8ïÓF6Û±ï£{øæ70«.ž¶†ša„�Í]ð¨+F6ïA¦7sµ}¬ßœuN‚8éhDD|rŽty�¡R¤‰ò.˜‡‘D_Â�ö^ñZ;®�‚&DE…7åæ“µ³
+‡v
+œ0A‚Ò½‡íèÜÑ†Ù¢£F'Ó³‰4Â§
+L:NîSû`’ns®º¾Ó‡F.Al8çsŽ‚eðŽè$ACœtˆW8è$Hã‘&G’!b�‚)YF).…„]Gb‚	‚l§—H$‚AÂGîÂ)Î9Ýl§8ç ™|�‘òàxuN½7µÍßt¯æì{û}5»6fÍ{ëm
+Ýíþ×[Âv­˜mþÇ÷ÅÄÿ;‚"DAÈ68Œß´[Ô"Bº9™çÒbB"‚	‚m($@›Qûá Ž:A ‚Úâ×ï§ÿ«öýüW®>º}ßÿÿÚüWØC�[áÈäGÂ!Am �1Î>qÉ¹Ç&ç˜çsŽÙÇt@»PÑQÊ!ÿ�Õ~Ç&è �@ŠsŽ‚D}ùoå;_ÿÿÿo0
+V=�ïô‡ÿ]ÿJÿý}°«ï·ë†!Ú¡0á ‘NL#�A
+EB"‡H ™[ÕˆˆŒã°‚i ‚	„‚A�A
+!„‚ ¸çp‚)ÛHã“!åÁ©ÿ÷ÿÿÿ½ÿ£>ý´Òÿ¿ÿÿTaZoïü˜êSœsº§ï¢o~aÎ97†|IÐ³È\qqÜ%&þHs¹P""8ˆÿÿ_ßÿ’}ÿŽ½ÿÿË¡ÿõÿÿ´û
+û’	p‚ËŠ ƒDQÂH ‚h§A6qÅ!eÅì·ä]"ùt]Ë¢Ÿ Ñ.‘Ç	ç ™|#Ž’$‘ÇA¤qÂD9‡8çrœ ŠsŽw)È®q×òO÷ÿÿÿÚï¾½{aÔÿKûÿéoë^»çwû\Dk8ý8 ˆ9N|)Å—FBhº<‚ö]#B2èºMƒA ‚	¤L!@„ šb"Úµnµÿý/­ŠßvMÿjë„Gõµö�û­î¿_×ÿ� ¶s¸AsŽ‚$9Ç!óŽMÉŽw8çã’ã˜rcœtB‚#ÂŠt½‘ô,�ªÎ9Ý#Žw$CeñŒC÷}‚#ð@³¹Ç8áS‚	¢œã„�ýÎ;�Ê|îàˆÿb­c‡¥keÃÓƒ¾½7Ž×ãŽ8j¿Æšv±MŽÒ‹zõŠ†›Xˆ„Øÿd âËáqA4�‹#’ÖmÑ$GÎëGv‹ @’ š8áÐA0šAADÇ	„& �6&�A""($(‹A�A4qÎ9!ØI4Pñ¦�)¾8‡lRqa77MÚb“M¦¨1H:i6�ÃüU´ÅqIÝô­dÂŽqÎ>E9p‚h ‰Ž/ö�Ôã�Î8 W¢é"é•²#GnŽó8ˆúA A4".U£ÈRI°_Ø´/ÙNqÎ9ÇöGËävŠ$""Ðµì&cMBgØVÄ`©¯ ÂöšÂñÂeàš‚ÁvaVAal!eÍ �GECŽqÂ	„)p‚	ˆ°‚	¤±A¤aQt)D„HFˆ”eÐA@‚iy2¸ªœãGuAÚH$NL¾	„&…„ÂA0YÇ;ùNqÎå9Ç!ˆŒÀe„@Ð �˜kÙˆæí„D‘ò>G""-‹ìŽl§
+Ò;©"G‘t]G‘t*4D<EÅÎÐ…%’A,hDDC#Š	„ÂPÕ‹bÞ8á($H Œ8A4*qÉŽaÎ9Üã Ž9!ÂR&GËä|ºA†’0‹¢èÂ.‹£Èº0‹£DI£D])3Èùt_.‹ ‘&EÐI„a
+‘Ñ=Ñ|º8‹åÑ!A„]Ë¢ù.‹¢ùt]Èùt]Ë¢øH�—@˜ëü,îS”äÜL�‘ô‚!A A*ÇÈaÿ‚GôH¡Å„Â&B“EÔDE„)A">	DFhˆþ]ÐA ‹¤($@„CDD\÷A3ÀEÐ ‚’!"
+C „DD0AH$I$AÐA �GB( ‚ôAË˜Má‘Ã 5ÚùOe8A8áÂ8çq¡}J{P‚h"èÂ.‚ \q.‹ä|º">_„@�0AÅ•…:eP§)Îå8 ¡„)*
+{q@—#Ä|¾GË¢èº/‘òèº/‘òèºãˆŽHsŽw)ÁðŠpBÒX¤ãl‚û„˜BÃŽ;O ¶ÐH ‚	„ØB""&9Ç0è$…qÎ9Ü0‚	!„¢Â(s¹Ç8çsŽqÂD0…‚!A4‚A%NA2œ&Ž#D) „R�°‚/ðA4A ‚&	Ä0ˆmqÎçã�Î9Ç;œsŽw	p�H!!n”ºSœt‚	‘ð�6GÂhã„G …qí£¾MÎ9Ç0ç›×ØŽ>aÉŽHpDtB"!b<G„Ë¤’ ˜BQÈ�ýÎ*¦¨ú0‚	„""1eÐ JGˆùt_#åÐ BÈŽS”á �A‚A	ADEÄG.‚¤�H$IM ‚a!A‹‹ÐGPA"�‚ÃœtÇ¾GË¤B‘Ç!KSŽMÎ8">‚.Œ$Pá" „2>G$„DE”å:„Šp‚h ‚#áÐH š.“Bì�‘òù#äx�‘ðF NÚAÂA �D8æãœs¹Ç;”å9Ç8çrœã�Êr�ˆŽ¿û)Ês¸V_#åÐA
+AÐõ`˜ÿÛ&GÁl&D „\GÅ!ÐØã²<A2<A0…‚HbHèº8š	Hd')Îå9Pw	‚	 ’$A0ˆ¦]EÒ	 ’ šAPA4‚!( M A2>‚AL!AÄR	�Iƒ#�+8ì�ò9—4qòa_Î8Hã„	³ŽLº	‚±`‡!‡"Ž§ã°E@H$ˆÌŽ&ÃHsŽHsŽqÌ9Ü§GDMU~aEÑ|º.‹£ºW¤‚	„h[ÄrèÂSœt�°‚Âb£^ûì¾ „F¸á„D „PA"“H$êLŽDqâqÅ	
+„ät_#ä|¾ÄãœsŽw)Î9Ü§)Îå9Ç&Ž8H$	L$‹åÑt_0‹¢ùt]‚IDDPA"!-­î§—Dzt	óˆ$&‚	‰SØ@¶ÁôqÂGã„	°M„Á0Žà�ˆ¼&G070a°Žn¢?_b"�ˆˆÖLpvÒA‚PA#Ž@ôà‚¸a ‚H$A†�ˆ‹þ¨ ‚a`„C	„IPAÒ ˜H$AÂ	‚l ˜M‚cM&ÐAm‚	¡
+*A"#ä|�—Èù/„BD2V-qƒ‹ x+ÙÁ{!­	�Ø}DÃ„GPAÂ)Î9>Lr çÃœrt…‘à˜A1ã ðC1Î9Ç;”àˆè ˜Mú‘ð@¬�¤_#åÑ|�„RA$��¼§AÂH"o½ÜX"œã„Ò … ‚ObÇ”àˆý%²œ!!a
+AˆŠ¦¹Ûª„ír`ƒ¤) ‚DP¢cœp�A2<‰Ž‚h§HŠ:ÅC)ÁAÊÃ¹ÇM	 �A>Ý„L$S¤ ˜A0�A( ˜A0�H†„2œ£•…AEhP@µ;”å9Ü§*
+p‚aˆA*A$«µtLÜ":A‚	MØA B;‚²<GÈäG€Ö£ZÝÉM#Ä|î‹èîF:	„""8÷
+¤GÅ ‚„¯í$‚	’I ‚ÈÚ”å=¤‚	„Ê)Ê‚©9¤�A
+­Ñ$A ÐA4Aqi±}‘òùI	 ‚&G�Ó†›Èi»º�0áÇ|$qÉŽw8íÃB¸ VqÎ9Ü§8ç28�2>\%L¾Q—EÑ~Fã�ÊrœîS‚	 ‚&‚'úW&Tå9PS”å9Ü§	�Â	$‚!Ð»=—Dx�‘òBV4ŠÆNqÐI5ÅàˆÿÁô,îqÂRPB#ÅwâÖ¿¯‡Ã	‘È ‚eåâ‚iB�a’�GTGEÐAŠ"œî&‚!IÒGã„	´ ‚a
+A",!‚Atâ.ÆPá$‚aÐGbÈÂAÓmÁôG"è ˜H ‚aËè4( ‚h ˜Bw&8A
+#¤L¾GÁ6qÎ?§úÿë¯ŠÃœtq!GëÙO	*Å‹#�ø"Ÿ—Èú¾GÁ8Aˆ‹‹[#«®�H ™t_	™zID"‡]@­0‚ÃÄT?_ôØGD ˜A&ÈNCŽAC’Â\_rc™ÈG £A~%nw"Á“™‚œ�‘Ø)vjáò'„x"A›'åY¯A…È ¼sÀO!¢Ë²¬�‰f‚	t‚H ‚r çÊsŽqÎá„Ë¢ù#�A4˜†ˆø ™Xt&S”áA �A4A‚!A ‚H$¬§8çrœL� ‚&Û&BA"T+ki$„V,ã¬ [@Šp@¼ E8A2>ÇA‚ … �Žál§8çî@ðDCqÓU
+°F€@xPƒCaBa0ºh£ëqaAy„×½4�Ó\<¬>Ð´ÓÄFÆÁãésŽH ‚ÂRAˆ¬ºS¨ ‚e@AÎ8A �A‚J¬W×A!@�b¢8 ÂPÔCÄ �;	’I">!A) ‚D52Ç	à‚a0„4A0‚TÂ¢óF*1U4mŒL0S5˜Y‰¾¶šèßF*0œ»°Vš£^¶û	ôbzl-ÝÛ£ÞAl;œpçîL¾GÈæŽ8I!Öë&9!ÐGãœt"(¡ÆÁwŽ/²œ§)Îé$E:A ‚	„’B�AËé"‡
+!ú&A
+�okÙN� �´T±cÖ"ÄÚF˜ªÿXvnÓI?NŒVsi:NÍ ™³.Ú7Ñ‰lÜé…õÞóu®•«×´Âœ_h3ÂÝ´¶b}¤Þ‚	ŠDEC¹Ç8á$Ž8°‚E!!J2‡@‚h �Eð‚.‚A	�T]
+&#ÁÂ	‘ð‚aØ°E:YÇ@‚e8I„H …Š!H0‚"œÃ„GÂ)Ò;„�G�äÞƒÍ•´š‹··öö»íïi÷ú6­]ëût›·ëÕ˜4Å¿úxÿ¿ð»ÓQãC‘8ç|ã ˜B".:«B)ŠB1b21+Ï&¢7`¢¡Ó&‚L Â
+"#
+­AÅ„ÂA¶B–5éxÕŒ1ßÿáŒ{üV¿þü1þ/†waÿõÿÿWê>8çsŽL�ðš�¤Ž9ÇP@¬˜çîqÂ	—Èù	—ÈæŠt“Š)Î8EÓ)Ñr¤‚D#Žw ˜V]$qÂ	Ç ‚(p@•—Eò>GË E8A4‚#‚&\Oú”áMÿþ\+oÿWÛ—Û_Ñ€ÿÿÛC
+ÿ0
+Õ¿þ\þ¿˜�T†ˆŠC¨�Øa0Ž;A„"‚ÄE"7
+„�H ‘tLCHºA ‚Rb‡Ú(tA&l!
+D{;„	£Ž�I‚	tÿØa†½¥®ßì7úÑ…ÿÛH7mÿÚAµÿûþ¿ÿüÃ“8á$NqÌ8A!\ãçã„§�Ðß÷;”<�—VKQts;‹ä|º	ÖaÂG$�ÄxÇ‚eACÆœsŽ@�B#Ö>?÷à‹©!Ý÷ØÞ°Ý’Ãwû šÿâ›F
+ÿä‡Ü“»×ÿ“ïü�ëØ"êIô‚	‘äB($ˆA4"‘NqÂE: …&’I-òéA‚&AÂNA¢FÒº"Hä]Eòèº/¤I²�	AÂAg$tŠ$L&�HMôI¡ã�Î8A4‚8á$Ç$?ÿujws»zõ~A�ßüõÝ“îÿàˆ®ôÙnßú÷œw¿ÿ¿úÿWÛïÄDTãŽwò(âLŽØˆêLpD}v&"(Pb�Œâ	#ª~Î¹.ˆè ¬D\FŽeÑtaà†1õèX�„,!ÄhhœsŽM ‚D0ˆÑÿ…cÛÚýíá…õwþFÕ>ûÒÜÎ¾×ðÖ¢¯Óòãøïïø×Šb²aG"�HãŠãŠãœqì)Ç0äWA Ž:AÂkç2éèNqÐA3Ž!.‹åÑts.‚	”á
+º$I+#åÑŒ�‚	œsº.…$‚R ¢NqÂ.‚)Î:&‚A•„œp@³Ž&9N)Â	 ‚&�l§)óqÎ9Üãœs½¥¶“Ô4¯]fa�¤µb•oŠ	¬TC(‹MdðzjÜ5‡Ûèqk†Ò¦šñuiµäÁâO"Pç$‚D} „Dqzf	 ÐA"L!+T�H*Ä}>üDPI$H ‚aˆ‹iL$	ñ
+œpˆûA�H �Aî"Á
+A$HL&�AÂPA±UQÆ„\6�¸Ú´Ú­»ŠÕ8â-¤Úi¤ÙµˆjÔDCM¶�Ü5©Ç„wGÂeðA3ŽqÂIpú!ÝH®L¾#ˆ]càŠuL¡îÎ:#åÑ…õÐ"œ§]Eð�A0‹¤@›	ˆŽ".‡ü":gîSœt˜BÐÆ¾ôLpAXD})ÇˆA¶?�N
+M#Ç–Á‚M;@Á†7 ÔŽmÞÔD4¡…°@Âeà…„ìÄ ˆ)X4ÌaG ˜ZA#ŽCW‚Ã‡	‚; …#ˆøA3ŽA4�A3Ž&Â	„($Ê�A$A"‚&‚!A ‚ÙEE8EÒDtÇI ’!b� ¬"?¾’$A2øG$!¤ …8çp@³¸@�	p”À…ÊC$ ŽdÄ4�qY1Î9‡8æ›œsŽS‹#ˆGsŽ#jqÄ"èC´"!ŠŒG¾GÅ1HD}Ý¡Üò.�!]
+Ä#¢û¡Ðb($ˆ´ãßúŠ …„")¾­}m#É �A/„L!‡8à�a)rc G ‘ÇCÊã˜pD}">Ž9Ç	A4ˆùt¢èòa4GÐA&ˆèPA2èC˜p@¶Â.’&L šFAÎçã‚„#è Gã �6’H§÷8ä‡8éçÎÿÃH.‚&‡¬FŽ9Ç	$B",¸ôÂAÐEÐa[	XŒPM«¤,!�„	¤�ÅÆ‚I´‚&‚!A"	b"ÛE8A4qÂXH!N**¾óŽL¸P™|�‘ð„Ró�ÉŽw„Pæã�Î;†�7`�?aç"è¾!K¤A;ºeÒ8è‰—Å
+)Â	—EÔjÿÚÎõ—Šrn!ÄD}6šPH ‚AÄ0ˆƒåqÐ ˜A2>G’ã¤.‚HE!´‚	—BÚAÂA
+	 �ADgH+E!lºG$A!l �å8D~�°…‚	$‚;¤‚8è ˜ ‚BÙ1Îå:$qÎ9Ý Âqè,îÐˆˆ¤8�T4D&Å
+X‚×è(¯„iœW¡ ‚´èŽ‚	¦ÔRA"#�äßËPG …"-ŠG ¶p‘Ç8á ‘Ç&‚ „R8äG)Ôã„ŠsŽqÅ$‰¹Çd|¸«EÒ‘Ò)ÁAÂi�HºÈú)Ñ„($A4] …A9ÇÁÒ	Hp�<">–ÊsŽqÂ.�A2>‚	qÂ šGóŽHpDY!öˆŽ,Rép‚	„Â	„‚!‚t’l[a0�F#hº	�#ÆHLq‚h%
+1AAÂH �6ML$-©
+qÂ	 ‚h§& ’	ùÇ;“ ‰qÁI"œã´COî¹Ü§ÉŽaÉ¸ YÝÓ�+ÙPPçðE:ÂAp‹çÑtˆV_#ìT\oÞŽà�6‚"9NqÁQ£¿ ‚	„S„!ÄPN"#a ‚i ‚a�H ’B‚&›BL§>¡ ‚H$HBAz‚ALR … ‚Š$G+lÇ8è"œ …‚8é ‚A$ ‚Ša!‘òés¹NMŠt�Aaû~Ê%&Gˆùˆè#Ž‚ˆ†¡C�hDD]oø"<G@Š&‚bC¯.žÂIä}´šA",!ŒqÉ:`�$H ‚Š4qÇ†H69°UnA4A0‚a’&Ž8A4¹ß&9Ü%EÒ8äÜã„/£Ž,”¦AÐEÐA �A2é/„GË ‚h$‚	DSö]IŽw8é„KÁu8æ+¾Ç	tŽ8A ‚	„Oúœs�‚#õ8áËá<4AÇa2�F<,¸L†@7�L!˜ˆã� ‚A„ÈúA4D5G’êÅèGË¡Âg‘3D
+0˜A*Â ‚&‚ ˜B�A ‚v(!±~ÂA$H$L!AÂI ™p<­&º…ý‘ò>GÁsŽHp‚eðŽ8H$/â/œsqÎ9ÜŠå9Ç	EÚ.‹è"ú		G\¾¤b$"èò.ŠD_#äx�‘ü¾GË¢>_#ä}#ä|'H,"éÆÿç\ Oœp‚)Î;AÂq°^ÿBÁòîö¾×´L&�@›G „PB)‚	‘ô8çr�‘ð„B	„Ò0‚]�Qth ’	°˜�"û	 ‚	š"è‚¢ù/‚H$�A4H ‚Ò „R!$8AEÓ0ˆøAÂ‚	 ’ ˜B�ˆa.aŠ ™t+	„	´H�„IòÚFøq¢
+nýŽÿ�ÔãœuA0„F—Çt"âëG¹Ü§D|F"¬Úì�‘òè¾]Èùt_#åÑ|�¢C®wBì§BÊtŒYNº
+�ˆù9ÇÇ	Nçã„ˆ†„[ë_zwÒ8çsŽM ‚A$Eô�Î9Ç;„Ž:A#ŽL�„qÎ9‡hãÙNW”9Ü£”9A•Bœ&	A!D|�„Sœt‚#é‚& �A! ‚aãœs¹Ç<çîS‚	 �A")Œ�çp˜M)õ;”9ÝL�ò>‚G Œ:$’$Û8àˆü§8áSœpÂ	ú®¹¯°…!`†‡Õ¤A4D2ÇÞ-„Gã_«.…$‚&‚£œsŽwI$H A†Z …éˆèC	† ��q:Ø@›BD2ÇA—‰æ„‚ ”¾GW,rÇ(r~.Èà¨!á0�“ÂPx#‚
+øE²$dÜ�äÜ¿!ÎBBdl«.ðžrPºýsŽaÁ°‘Ç#L!A �ø‹¹Ç&9‡8çp‚"qÌ8A0™sHº£®]$GÑNGp’	 ’ê½”çrœã�ÊsŽqÎå9Ü§0’	Pâ �a�_—ÈúÁà�xl$‚Gã ‘$‚Ý,îqÈƒ�Ò
+~>åMÂd,Â
+PƒBð†Â!`š
+4BÐ2|JdY„Á0†9ªÁƒ"ÌÜ…„Ó´Â!á ‚i!B�â# Ž9Ü ˜B‘N�A4‚8ä‡ Ð ª ’¦B)\bïA">Ò	ÃâæÒº0„Q1Êp‚ÁB’ šAŠ#á‹B;x ‚Iç$A ŠqF;ºa„ŒM…iª1ÓF:6š¼Ú}èÅF>ŒtP’7´shÅTÐ0²õQ½áS‹F&Õ&Œ/Ž§ãŽPêqÂDÇ8á(b"#¤>¤Ç$9Ç0èŽŒ"è|âàˆÿAl�—ÁÂb+Ë¢èÑ,$SÚ.‹ìî6"£™Z ‚ˆügÉ¹Ç8çBØ@Š›?¿;”é;¼¼ê­©ºŒOKÃ¤ôg3Ë1Ã1‘ófm#
+†«læÒtaß®µwg•–®ÍÚl0NŒM›�½7Ò1R|2> š8ám"�„ÂNqÎ9Üãœp‚sŽDw	p‚±‚	‘ð‚ecA($]TÊyAÃ$"‚& ‚	 �
+BY0‹æ‰0�EÐ­„SœsŽA] �A4S¤L$APA �@� ‚a0Ž9Ü§&A «õõ~¿fÏúZ]Bt›Å÷fî­¨éïí›`Ç]nÂz§·v÷Ù³ÿ®ýé7ˆ¨¾/®à‚¾�M�hq·8àˆùttB4;�‹KGË¢û&GÅÁq @‰žGË¢è¾�$"Å0AˆaEþ?ÎùÇP@´A ‚B‚Åñ^ÿÇMýû§âµþŸ†?°Çzñÿû°Åt¿�§û¾/¬‚ØG8éáÂeð˜L$Ah!"‡0çˆ9Ç8æ"‡"œ ˜F …Žg—JGÕ]&]‚	�IîÙ0Ž#º4AÂ‚e(s¹NqÏãœs¹NqÎçîPæãˆˆ‹ Šx ®S‚´�„$EÒAAÂì/V]Âeò>.„ðÿJÿ¬ýÿ‚õÿî`'m/åÁ5ÿûÿ×õwJ`O†ƒ „CDD^ÐH&Âˆ8A4#Š	qy2¨†œE†G_þ_a0‚D}"]>h‹¢ùt„0ˆq	„H ˜A0… � �a†ú0ùÇaˆds/„‚	¤_òàÆëùpbúÿó?÷àßíÿáéÿ·á¿ÿ˜÷ÿ_P@¼Ã‚e9Ç8çsŽB#‰òoù1ÂÚÐHãœp‘ÇEÐ‚ �]2°®²œ§	L$H ˆêâˆúê_#ä|¾GÁ�„�Î9Ý‚#Ž@ó Œ:�l�ªY”ò>¨ ˜A ‚d}�Á¿¼ãœu}~ÿÿÂÿý’ÿ÷°D†ïû$:[ÿÅ`ˆõûÿÿIŠÿA	 ‚ ˆeqÂE:DÇ �H Ž8ˆh �B"1ez!g@a!uü ‚eÒA¤‚ V9Ç0ç„!D}8Hã ‚ ˜B‘ÇH$‚AÒsw8å9ÇA‚	M ‚E¿ä‡ßþÉ×öúÿ×ÿ®BŽÞ¾aßÿUÿö½ÿý²C§÷ötýâßì§8ç�çrœEA Î9Ü˜áX¾Ê{°‚	ˆ«b:�ãœsqÎçãœsqÉqÁ† à�)Ç$9Çl0„PA}ŠUä‡8äÜãœs¸@›aã°„G¿µû[Ž�k¥~ÚwÿaWn¾»v?½ÿ�»ÿEÃ>õÛïµÿÚm/&>Ë �6‘ ‚	£Ž!„MóŽqÌ9Ç$9Ç8ä‡; ‚b’ã„†¤|$GÐF{ ™Uˆ‚#á	³ŽMçã„’&�AÂˆƒ�AÊsŽ)Ì9Ç0çã�Î8I¡
+Á[
+!m �H$S„E: „PGC“ï‚#òc˜p‚l&ÚxXØÛXa
+8¶û^*øj¬=8i5ªö—´ÅÅ¯£0GÖÒ‡Å&šl4¸Ø°ž‚lE¡÷Î>‚i ‚Ý~Á ‚m²´Š¢œãœp‚aA,"cö§ïœs¹ÇIa�íÊÚp�A ‚l$ M ‚F±ðD} Ž:H ‚iqÅ¤Å±
+ªb´m&Ï!nÅ&…´š
+ŠA±IÇHDlRa6¨=¡ŠBØªMâ-Šv¯Ô';œp‘Ç&‚	„ÑÇ!DçîqÂ§GÂ)Â	„aÐAÒã¡Áí]$Â	¯],“rœ§;”ç šA ‚AM ‚	®‡ ƒÆ1c¸"?û~Êt‚	—ÈøMp‚h}w8þ‘NÔ&…¦½«„,ÞÚ
+4ÕË ƒƒŸÚO!f0¹åmˆ;˜pÓ[CTÂiðÒH4A ‚E2p’ šI ÈøBB"â+HŽƒD}Åé�H ’H$aT„S„_§ �H ‚A( ‚i‚	�B""‚	4&GÂ+AáÁˆaÈaÈd†£‘ÁTkù®wÁ°D|Üãœt,DGIÄsSœz&éáñ|N EÓQ†˜ä‡ xsŽw)Î9NwE‹a¤#ãóŽw8ç%G$¤#‹ˆˆŠ¾‚&‚	 �APAÒD0ŠsŽqÎáÐA2>_#ä|!&IwA �AA3àL šA"Î8H˜äpS”å9à§)Îå9\S•B¶JS”áPàˆú‘òép’ ™tL šA’DÇ8ã�ÔãœtŽ8A2è¾GË�¨3ÒáÐ‡�×SŽqÁæL&A„"íëI˜B¢¢¸"‡	 ˆƒ�Ôs¹NS�Êrœîº2Ú ‚l'A( …Mˆ¶"/Mv šAˆiá#ŽqÐAH$M š&Gýê„#ú8á$Ç	‚	„Hu]*C„] ’çî¥qNWåqNS„B(#±´Û;­þòœãœs¸@³ŽaÂ	£Ž!Èƒ˜sŽ�¥kAÂA!#÷ôA0�H �Aâ($A
+DDR	„‘4B‚�Ñâ9žB Žèºã„ ˜I&!IM… ÆMÎ9Ç	$L&’AÃ°_;”<�—H§8á �A0ši==ãjqÎå9Ç)Ôãœp‹¡pE:9¨åÑÊ´]EÑtCEÑ||�#ª&¢‚á„�;þ¢çJyt¡Ê4!Æ‡m‚ ˜A0A°’	MGêqÂI§8á!‚& šAH �1hºIGÂ•ä}_.‹£D]¤L""A’.Š|º&w(‚¶,ôS«¾qÎéA ‚a4qÂ	¦Â&¸"?ÉŽaÁ²œ§&GÖ�¨ˆàúþ‚H „0…„‚	ˆ „_èYt¢�W†H �8d|vo0¼ò'ÐLA0„0… �‚„L$$‚A�AÒ	"‚Ä_zI„;„š š	¤º8éçã„Ž8A0‚	 ‚	„= _åw8çp@³»A ‘Çg°Ž:@‚wîùÌ$&qÁˆA4]3¹YE~ÈèV´]S¦#øî7êqÎøA2ù#éM&^Ÿ@¯ØB‚AŠ „C,+h§&Ž:	„’
+B- ‚h-Ô†‹¢é‚&AÐA ‚ALXLq	�_	$A2é´… ŠsŽM Ž8HLº&L!A¤L!ÁáÂ	‘ôL$8þ>wì§GÙO`ˆì!õÎ8 Nw_	#è$“KÆsb7¦§GÉ ‹ ‚ØEñuqºHº
+¶†1qÿìãœs¸ XdpÎŽ":E8A4‚aÂQ;œsŽw)Êp‚eÐIH ‚aÐB‚!ŸD„]Â	Ÿ&w ‚)ÊxH NÂ	 ‹¤º‚	(£#åÑ|¾Hº.‚	•ÁÌ0„L§Ø">]qÂ	—ÑÇ	‚	„wA	„B �d‡;”å=”å8A2ù#åÀæ	b¤ø³‰”íA4I …!ì¡ý ÂA
+	„a¸¤ØHX¢OùÞGË A$B‚ ‚
+Ä1Ï
+	 ˜A1aT8ÓÜZ)ØH$h ‚a4—.�çAÑÇ�„ˆøA2œ'ÿ¬ãà�fãœp’	 �6L#ƒQæi#ìåÈøE<�—GŽ’$AÂA#ãj8²žhŠ2é] ‹£½W«Áþqþ‚E8A2éa ‚eò>G£êÿ‚#ô´	 �ˆ ‚	„"1Å°‚A0�I ‚a
+MˆŠb1 ™t]$]Å•� ‚PA1,oD}‚/ ‹¤�EÕ¶v¨‚h AZ$‚E:$A ’ …&B.L�‘ð‚	¢œ „EB‚A}zÎ9Ç;÷e9Çº	@�D2:ŠyNqÎç-Î9Nt#iXaG:¢ø"�S„	¶qÍÄy4�I/ýûûÙÇGÒA!OÇÃ	 ‚	�AÁ6�Ah0‚-—AGË¤S GtB‚	„	´ M �3DD|º ™tA4ˆøz.�FH$‚ºzZT^.‚	„)óª	$B§­Jpˆú)Â	—H ˜L ‚aMB‚&ƒYNqÎðG$qÎ9Ç&G–�a�X"?)ÖA4‚lGqKq®a
+	ŠC$!ˆŠþ¨	P"<"Áb)8�Ùt- ÂÂ!AˆÆ.#ê‚A¶Âa´)^ �gp@›	Ž8 ‚PA4‚êLsqÂçp‚¶ÒH¡Ò&G$Œû“r�ö¬3º/�RL �H ˜A„GEðE?.” ¬ ˆø �1¸ YÇµ&áôqÂ	‘È&“±±÷8ç| O†‚A!G&ÇB�A0‚S„‚E¤I$±†qÅ°ÂÙ	�AÂAðÐAóDÂB4êÒ	A‚ºh�—EÒb(MA ‚B‚	£Ž‚Â�H6lã Št/„ÐARÿ£ŽqÎëvA#ŽœDX¤¾»„§Îà‹â/~¾öð�eÑ|�¢œî&]Ž0†>"ê0EÑti°‚	 ”E¡R
+ÇGô�„	ÒA""‚q× šBÐA ‚	BL�Ñ.‹ Grœ¤A
+A�H ‚H$H ‚	„A($‚.�(NÑ°‚[.˜A ‚d à�XEô¾ÐH …!þ‚)Î8H§As¹NqÎå8A0…&	*²œãœ|ã�Â	‘ô‚;á„‚þ �Xaa ‚	"HLTBÿ¬º9°‚IˆÃ†’@¿ôáç …	0‹ Êä)¤$‚Ai($‹Œ1Ç	6)p� ‚RAúœsŽqÁôAE:$@�`�~™C�Êu¼§H¡ÁÂaÐH ‚RMÊt‚#ç2:0°ùt¡è … ‘H$L&FŸË¤qÑt‚#§ˆaG)ãònL�‚)Îá$î‚Gˆˆ CŽqÌ> ‚�A7‹´M�I„A4A4‚	ÃA# Šp‚	„-†‚mMLC
+ˆ¸¸q‚i ‚	‹”+/‚²œVG šHE�AÂ	„B("œãœsL�£Ž	÷œpD|.Gç	”áÈì!b„=»¸ÿwçt]¸Ž·CnG^]-ÁFA2¹5‚R#¤BØL&!„"4ì^LrÇ …ˆ„ˆˆ·í„G$�A ‚	„($�Gï		Â&.‚Al!AA8‚	•Å:8’"éÃ	 Ž8H ‘ÐH š!h‹ô]’)Â/‘ð‚{œp@·²œ,Ã“ Œ8A4H ˆøA3Ž� ]0Š;œsŽqÂ„Š~Å‚!×8æ"ÇA�AÂR ˆ€˜CEDPB…Ši‚7ý„ˆa
+ˆ¡·M¤ ˜H �HLŽH „C[_H$&Î8A0�6‚AÓgSŽ+S¹NqÎ:a �A4:¯UÙNLs¹Ç8áÚ(p’.ŽZ£ŽcÂ#á.‹ál š.‹¥³4_	Á¶ÂGgT&""1ø K‚œpEÐAZ	¤A°¡¼cLxh$‚A$H!IÐH+sA$IL …8A0‚	„Â	 ‚	 Á1Ä ‹¤&Ò	p’H$GA �¥DtX�I+Ž:$3J•Îå9Ç8áA$( ‘Ç!h �A0ÐA
+Y!Áá&Ü$Sµ¤+»çuÝP XEb	 ì!{/÷ŽÐ&Æ"›ˆ Ä<¾–ÊËFŒPˆâ£L$‚	„…�L ›Ä[¡G×¤)qm ÂA Ž>‘N‚		 ‚A‚H!Èòèã �²œ§e>ÐI�Î8A4I�ÊÂªìã¢éÙÇHãœtAA!„("èT#ŽºA%Ô/à�\îS„	ÂG šH š ¸à�=üïøa ‚ZAC{(s+a
+I ‚	„‚H$‚
+ÄPB8ìE �A(Yô‚	ÐM¡O³ÙÄEãˆ�„L „DQNM �6ã ‚H$H �B!„"8¤qÎçîA‚H ‚iMk¾�¬"?&	°‚`›Dq~—GðGN9Ü Ž8D}/î”#ºo#ø¤Áü� ˆûDq’yÎí&BA
+ „DÉŽw8á*’M „0‚ÒAm�A"‚	’GˆùtŠp‚a5 ˜B‚A‰Ž�I ‚� ˆèú&)ÂR�—Eô‚	 �6‚	„¤MBˆéŠA2è�„¾]#ŽA–¦P<ïVS­”å9Ü … ‚eô	H Œ:Kµœ	 ‚	—@Š�ŠQ±­" à�A0‚h ‚ƒ	 �A0„A­¡ZbÐÄE'¬bÛ#âÅ„S‡—@Š°¢‚ ‚(”%TA!H ‚A ‚(°I<XQÇè M„	£ŽÂ Ä0’!’r�|! r
+VU‘Ž@ÌAö¡Ð#Žw)Î8H ’)Î;E>#�‚ýçpA2èºAÑN‚�¸"ž‰Ž¡ÐAp‹§‚/ˆe9Ç ™N‚	¢è ˜%}«G¤‘J˜*Ý5x¯`�jL�‚d|"œ ˜A<G½£¸ ]È[5*
+pAJæŒæG‹„&hú0ìÕ":#‘ß‡#$¡Ò …$B…Ã«eò>#À� ‚AMA‚j(ê˜D|0�L!Â‚eQHEÆ†Ã �A …$¶ØÚ ˜A0‚g ‚A¤‚!¡ÊsŽHtHPL!AñeYL¦¼P\U¬"?8é:H QQ±~>G·ÁtŠyt]‡>Æò:4Üº.ƒ8áÒ.‚ŽÐˆˆ¤‡.�A ‚ãWÇÇ˜çÃ“sŽqÓ<-rà´G H�àŽ@¬rc—�õD« xAÊòãžÊ ƒµ$qÐBM ‚	‚l ˜&Î9Ç;¤qÂã„AÂ&]&MÂH L«ÂºEaÐ ‹¤tÙ|3Û
+A4HGsŽqÉ:.’Aý‚)Â/„� ˜Gp� ™t‚	‘ô�A2<¤�Áì¾GÐAp‚eÒ&@Úû
+#ˆâý°Å�Aˆˆ«g’!zç‘:
+Äx‹?±S EDø†ŠyN›A ‚H …’
+*5ÿ8ë¤‚ApÂ`„DX±A~çã�Î8H§8á#ŽL&DuqÎ9Ç0çºa.Êp‚a4‹¦yûEqÑC ˆûI3�H �A‚�Êòœ¡¦y‚D…GË¢ÿëÖÂ.�EÒM¤‚	¤A?ˆ HY1Î8"è"Ÿ8ÿ°‚DDC „DwÐG ‚h ‚i ‚i$D0Vâ#$A8‹ˆê(Ž©”�ñ&‚Št�ˆ„�H �AH … ‚aÃ LPhDGè š8áË Ž8¤‚AÿçîqÎ9ßÎçã„‚	„ì!¯þÊÃ‚g ™t_#åÒc¡Î:0‰B­ñ„	´Sœs¸!º¼â.Žç‘ò:ÚŠ¸è{û@ˆüãœs¹NM˜!@—8ãœÐA ’$A‚H �IÈüãœs�A4‚ØL ˜H$AÂ( „1§;”è šHDR.�A2è ‚ob…">EÐA4&Âc¢�LºH� ‚&GÒA"BÂ
+„œs¹NL�	qHãÿb6/ï¯Ñ‡PM0„PCBÅ$/{ç]EÐHEXüqzÈé_E:~ð@­ô!„†¦?ˆ ¯Gå9ÇIBØ‹[“_Û8áS„A	´‚A4M‚#ð@³Ž§Jpˆý"œ ˜A3Ž&ÂAbÖ]Ð@ŠsŽqÐA0™ÝÐA0Œ$°‚	„( ‚gr±LºamJp@£°@´îPá$H¡Îá)ÐA ‚PH{	É¸">�AÈú&¿¥¬j…°LC	¶¸it©P¤"#¸amºI$†"„pâ¢.ÙCˆˆ²·qI$’KHb›Ã	‚pÁlXiAÄ
+!
+mÿÑÇ\î‚AsL�„	°Æ/�>�Êrœã�ðˆü šº0�EÐŒ^wý)à�eÒH"èÂÈèº<‹ ‘ß£	ò=àŠpD}§ØE8 ˜B�A4I$,sŽqàŠ{8álãœÅL&�A( ‚a°„D\ M„‚E8H ˜M$‚H$‚ŠDXŽGG’)Â#áçH �H Ø±öˆéˆeÐŽ"M ‚i$‚	„‚a �A)!A+P‚hã„	 ’H ‚a0š_	�ã`�YÇ8çB˜a�×ý°JqÎå8D|$"(SÒ�$]GXEº<‚)ÐA²µ)Áü¾GÎôLP¡¡}ÖÆ¤}as¹Ç	$�ˆˆõ�”ûýsqÂ	 ‚dx#ŽB‚!@Ž9Þã�Ôãœsº
+ÐA ‚PAÐ �A$uEÒ8èNDt‚.ša$Ž8@œPHEÈžA($G‘‹£ „NqÑtŽ8H§	—Âh Ž8A4’$’$H%)Î9Ç0ç ‚aË¤‚H Ž?îÂ^ÄÅMA
+B4"8�wÈùÄGB’!LX�b3< ™Ü¡ A” äYˆÙ#åÑ!0�A „0�Xa
+	qC×ÿH ’A"‚¶¿à�YO$�A4qÎ;ˆ‚ÚœsŽ§ã�ÂGã¤qÂAl$ˆôNqÁEÑ|QÇD~Sœp‹¢é]A ‚ÇÂ	„FÔ¾GË¢ù.‹ä|�—Eð‚	¤.…Çœp@»	ª°M”ç š&‚	 ‚±õ8à�gS¥^�! „Dq±¶_#á4‚Aª „Cn-Ä šBÄPM„ÂADDqòé ‚( ‚a ‚	‚l …$DSº?„ˆú	‚	„Â	„H$‚H ˜A
+H:t=—Âi �AÅ$H#�øÈÿ&çîqÊ€‚0ál§A ‡ô¼GGã¢:.£èÂË£Èº<‹¯öS”çÂ¡ð‚I-2£.‹£È�—A:Þ�Þšªe9NT Š ±Q!a}>ö²?	.�A2;C#�Ç__ñH …( ‚l „PH ¹Ç	áôA‚G ˜F	´˜ˆA0¨¡Â.‚	‚#éˆA
+D„I¢BA$A1a4GH{�ˆ³ŽAÊƒùÜ!A„E ‚a
+A""-PE8 VË¢è �H ˜L!A ‚	„&L$ �g|+d|#ŽAÂA¿Q8ÿçáíb‚A*1QàŽå:é„B,PÙ#ú—EÑ}2>]Dº�ßå8@›(PôI©äGÈùH$ØA5( �Mâ-ãÑÝ¤A ‚E â)þAl+ Šp‚h$L!D}AÂa �ùÇoåÒD}ésŽA&‚	":	;#åÐ#Ž‹ ‚	¤ A„‚	&ˆè‘©.�u)Ñ3FA0‚b‚	„‚;Èè�$AEÑ!Èù|�‘òù#Ät+H�‚
+"‚� ‹¨ÞÜ#¸D}x"?)Ê€‘NqÂÙN�I�?ì,E9Ç@Š{!�‘í¤Á„ˆ�Ž¢‚&_ „C	„‚	¤�Aˆ¸ãaÒ	B!¨û.‹ ‚/ �A($A0‚b0Çw"y ‚	¤F¼�ª!AC	„""‚" ì!V,"èPAÐA �AH š&‚!DX'hã„ ˜M ’	 �Y€‘¨ W‚.–qÎç Št�G�Áú«çsŽ(p‘N‹¨°ãGHˆ9!É¹Ç8çtA0‚h A‚îüÑÂGË£ š&P1Ž9ä_#á¤’BÖHsŽw\ã�Ô+Eòèºa¨ab¢ã÷_œ;œsŽ*	Dq¯­}$ML$A4‚&( N6S‚	‘ðŠsŽM ‘tM$‚H ‚a$�Â±E8D~t�$ŠsŽ8áË¤M$M ’ ˜+/œAÂ	 �FtL ˜B‚L®:åÑ}ôIL!HG*Ê€‘N	A �I �A(&°²è"ŸmS„/„M ‚	 “H ‚ø VqÎá#ŽqÒ	Jíx‹ˆ¿¿rëÚ#��H �I¸aPÕÿ}±AÄDRDv1ªõ­ÄDE„žî#Èýù|º.� �ˆa
+ˆ‹R §DU#w‚B†A‚&�†Qb"?aÓA�A-„ˆAŠNC 7Õ�L#s9+"¹Ê‚7<y°AÂ	—ÈøM$& ‚‚	 ‚E8×þáaÒ „0‚aÒsD]!C�$x#Ž@›	—Eðš	GÂ	 ‚	!
+Jgrœ§(aNw)Îå9NSœs¸FEÐ†	¢>t÷|§)ûX#ŽqÌ9Ç;„A0�6�!Aóº�Ê#�¦™Ìv…Å‘ˆþB’ ˜B#B"#ÐdrA, ˜A
+	‚i„,B
+ØV‘0ˆ39Ç8è �I‚b¢ÁŠŽ:lG:¡!h0‚E„"’ˆA0‚aÂ	„( š$‚A‹PH “±’rœ ™|$I�AÐA#�‚ÄZ‚8¥=—÷úë˜sŽ‘ÜãœsqÂA �8ª¾«`ˆü,|-ð‚#ña.‚&‚Ö¸Dt_A@�]M @œªáÊQqN—<‹¢é#‰]1lE¯¼ˆ8 Wø ™§Ga
+F¼u^jB‚#¥1T¬¯aA ‚IB,!
+ŠN:E:A ’	A0�I$H$‚	„ ‚	¶ð‘NA¸çsŽqÉqÎ9‡8ëvS„‚A ’$QA šI„°Nƒ�éD„h‚L#	$‹ �H�„‚A! Â(s¸ Nw)ÁøH �)Î8H$‚& �AÂ;­„Ž9Ç	 �H$ÎÌÀÌ4|DGó¾$ÐBÐµC¥‹Ë¤„YO®M×µ°A!AA8ˆ‹Ð°A[G¼YT:Û¶
+®qm0‚AaÂXBÔhDG÷ ’	$L „PAÐA?ôÜãœsŽaÂ	„ÐA0…#Ž!Áø \OœpEÒ8á ‘NMÇ ˜A4‚e#«gˆ8IL¾$H �•©t§è"ù.‹áÑ3D4Úë‘ÕçEw¶FA
+AÐ QÓý‚
+ÁðŽ8Hã�ÊÃ„I.‹éþòžÂS¯ìa0„B	„"‚ÅM ‚aÒ	B‚A&!„6*3ÈŽ†4Â!°qI$B‚&	":aÇØ"‡ ˜BB’DE‚¡EA">‚AM šA‚	 APüp‚	„AŽ8A0‚i0�\ËÌÿç|îSœtŠsŽ&bÐÖ?Ás½”èNwAt]5˜“,îqÎå9Ç#qÎïÄuÿvVK¤S¢>"".U£Èº²é
+&*ã{�÷Z¸EôqÂAˆúhD[öñþýZ8áÒ ˜H!AÂ]£Ž�Î:AË¤L!’$A4‚
+3[‹dQÄDPB)0†�ôH�—AÒI‚ ˜L®XI3– ×8è ‚d| ˜A2øH ‚	 ’	 ˜B‚Aå9Ç;„	ÐA0�6S„ô(ˆûçø$	„BÒ&D}cðˆþí2c‘A´…‚b®ëx YÎÃÁ @’	 �a4‚A°…ñBñó¹Ç$A"‚A†_~ÞË¢ùR	 ‚h$‚;à�_‚«œs¾w š"è&GÂ&Cl§@Š‚œã�ãœtŽ:	 ‚œEÑäGÐ@›	¤A ’	&Â� ‚oð@½sŽw
+ÁÂ8èº
+ÈùtPAÈåß;ý‚„]qùNÌøúU „0šhDi¾‚	„($A0�H ‚�A‚Ab˜í„"-—Èù
+"2Œ¨i‹ŠHw¤A0‚i � ÐA6‚aPÇÄ$A �a4A “a"ŸªxÿÁø"?)Î9Ç		ÒHG¾‡þ§ì§Ž‘O§Aèºóº#¢àˆþGË¢>_#åÐH�Š)ÕMÑ:	$ ®Æ…„¢ž]"œ ˜L¾GhGÞ°�?ÿÏÿeò>A„Å°š!Ç&	´Ž:A ‚h �AÂ	„!m*.!ÂL ‚aÐA$ ™;¦]0„Eb÷a3Ž‘Ç8èº š)ÐH ˜AÂÚA"¢Ž¥9Ç8á ‚&‚h ‚|†®AªÈ»uÐÄvGKpD~qÎ9Ç&¤�A0…¼lG‚ÙB.‹«VÃlDq»�—Gu¥eLã„
+aˆ¶!¡cÝs½;aÂB‚H&6ß§üºE9Ç8á ‚h$qÂ	„( ‚a5ýx">L§@Žå: „RA‚m¸AZe9Ç	ç šA"h™Ç)Â#´$�A($LNw8çîœpD}Êrœ"é‚	„A	°D|�î×Ô">‚„Š~2ˆV�¶"’ ¬GÆ?h ˜M$L$$A1¤ÖPí¢
+!l …�â„0CŒXØA4‚		B!Âa)‚BÅŠ¸h ‚	¤‚	 ‚	„L �7ÐfÙ�½sŽ¾ÙN	pˆú	$�±ëýÎå8">C�Î9Ç;œs¸EÐÝ)t]÷´‚&]JpL Ž:¡ÂU ‚
+Ûë{¾2>Nåw@‚b‚~ã¼Gýßô‚	¤A0…‚$‚E$Šw)ÐAÐH š …&	¶‚	�BÅ+Hº
+‘Ç&&Ò šA!AÍA1íöMp‚	„0™NL ™Ça„Â8çu&Lã‚0�@‚²ùE?ÿb‚Å‚þ³½h"œC šA¤‚„¢ïõ;‚#Ê]N£ä‹Ä_¡Ë¥ç,$A!a ‚A„‚¸ûÁl ˜H ’‚HPA!H¢,W¶¡Ë ˜MA4‚	�I?ø WZ¤qÂA$ã„‚	�A0‚a,º†]A„]
+)Ê€�G‘tL#!dy ‚A ‚	¬ W®S‚öPþA2œ ˜A0‚eð‚Xß«ð@¯)Î>Èèiú	)ªB)¤éVPáÒ$ ‚a0’&Nb4¢2:&ƒA ‚;/„�è“B,(°ZE8A0‚i¤ØA
+&"‚A ‚aÄ"é	¤H �1m3��|ÇI#Žw¥HM‚B)
+VUîÁs¹N•œp’Lw
+Î¨æHD	yt_#£"„y°AZaÁ°�:q;”ý‚Áoe8@›GaA„-„/ˆü�á˜OÛ8áÂa ‚H&‡a$[ÑÇH A0‹ ‚aÒh ‚	„ÂA´N!òèòm¤4B‚‘‘tÊ˜ª	/³Ž	œp‘NqÂ	„&L š	A$þ„aé]/G—èlFë8è D‚# ‚	„)&Ú	
+:x¿`ˆòáé1eE1±(G0š„$‚&GÐi‚!Â¯úóŽÂH0„PH(¢QûúG ŠsŽØA0‚aÂ�Aoí(@ŸÙN’.�I ‚eð˜L ˜A4Haò:‚#è}¢èºS¢>Â`�Uã@ˆÿì,îS¤L$A ‚	Ž8ùOœuÂ#è§�ÿý¤ Œ8ˆŠKˆ‹H$‚&!A ‚!a0¢B‡c`´MHé¤‚	¡‹¢¹ªìX@›)ÐAÂØL#ŽÐA ‚	 Â°•C)Â	„	‚ ˜B‚A ¸'_þÔãœrCªAÈù|�Æ…°Q×‚
+ðŽ8 Z.‚AèV_CQŠº.ˆÄ6G@�Y’0‚#à�1;�àˆúÁÎá �Dq¡Œ÷øq^‚	‚!A)
+ECZ(p‘N'eÍ ˜B‚Ú	 �L"t‚i‚	B‚	—L$J@ƒÙOî.’ š	I šL$‚Ab�Êt]S ‚R&‚	"Ÿµûì·Î:@�aÓÂAb+Ð¿¨ ¬ã�Ò'¡®fŒ"1x@¼ \"?¸h ‚Åc¿ýAÿ¶ �H$$,P¸þm/lãœs¸H Z ˜L¾H$LNqÁueaÑE9ÇI$ŽáÐh ‚`›	n]Ëð‹ ‚eAC¦R¬ÑE ˜+.˜I"ŸÎ<�­ A2øAÐAméH � ‚	‘î—e<º)ü¡H:L1a0A„ÁlÐ¤�T¤µ¡Ä[¶‚±Ib„ˆ²{ªŠ—ANW†-ˆØ&ÕqQK¡¬0“¶@œ ­„).’IPŠ	" í¶oÁLu´NMG$6¿¥©t]#Ž‹¢øGp�A‚E8D}<�™ÿeÑ}áG\…¦y‚@®ÐDt‚.‚	 �ûø ^§ïát�@‚´&‚@�cûç%Îà�'éû	„‚
+ “AaBËät‚I ‚A$H ’AllCÂ	¤‚d‡!A!„*PŽÇEØ†y„( ˜A¤ãTA4S„A4A
+	Ç!AABB1†S„Š š		$A?4Ã(Ù|Xß„Sùß&_#äp¨RH{KØ#�h"‡;”øH$�,GôgåÐÂ8„GÁSD])Ò	ŒF£þ×÷—@�Y§$"iññþäÂ¸D}	„ ‚iB(" çïEB¤qÂ	‚8é‚
+„aÂ	Â	"0‚sˆ¾GAäÜ ˜„ŠEaô‘t‚A4",2>°Ž9Ý$]H$A
+	AÁ6‚ÂC�ÁôS„E8H$S¯°uâ"CØ%þqÎé0‚	 ÂaaiÿîùÜ§;¤‚PI
+±b§?53Eò>î4H$‚ÚAÕW‹ç]XAÁ#ªPACaü?äÁ;‚„� ˜H ‚	 ‚a4‚PD}t‚`�lN‹ ‚@‚h$‚	‚&&ùt]z)Üî¾]V1¢:5#-0Ž:8�D}„	„LOú`´§t§!H$&Êp‚h$ÿØJqÖá:_þ�ŠH!ø�ý$¡ ‚a
+ š$‚â‚AEŠ`£¤H$L!bL|¬çjh�è">Ùqoxh ‚i„$‚IÐTi!QÄ š	A$‚M„M?Ê½=2‡8ëœs� ‘Ç;„L šHið@»Þ†ü"ø#Ž‹¢è ™N‚QÇo]L£9LåÊè [î"èº0‚	œp‚aÁõOúø"œÒ‚#ôŽ:§8áTßQT-ßÂØ_
+¤‚&‚	„! ’	‚	Žá ‚eÒ&‚&L!AIH Áˆ�8Hã¤tÉŽ($Ïª"úcˆa0…"é&|BL!AÂÂi ‚aA$‚	‚l&$ …‚A¡¡Â M„‘A ‚hMµ…?Kø×òŸA “!HDmz¯ÁÛ8çt’/dw‘ú4ÌÐƒ„#?Æ°E:	
+vŽÂaab""¯ÿùÇ8ò:Š&B¬t!ÿý ‚d} ‚AaÂ.‚Aˆˆú¡óºGã�ÓH$�H$‚&…B‚')öC¢:SØa
+�8HŠ"úA¢>‚#¡S¢éB�A3Ž�I6@�w„8çÃ�Êt&Âi ‚a6"L"žGÔ-ÂÚ	s½ GÛm]ü�çî�H ’a($B‚
+!c!_Öì šH ˜ÄX²±"”„Z! ‚âžÿÃAp�A0š+l&¥(bÂÆIB‚Ú$H ˜Mîw8çHL&G š%Áýv²éè`‹ Ž9Üã ‚A$@›)ø¸†Ls¸">]D| ™\P¡ä´º0‹¤&GÂ	‚l�¤�A#ûGû{ºï¹N'0å8A
+#Ñì^µŒ.¿ xi�”å¿¤‚&‡H!°˜Z‹ÙÜ … ‚H ‚a
+ ˜Mô‚H$AØiDh$‹ ‚g ¡Ä0…ˆˆ¨†T‰PA0„PA„Âb�°BË¤@›&‚	L$B� ‚B“Yt‚§	$‚H"è0’ãïÊ˜d_þþ_+Â	£ŽLCˆ‹ˆ±]?õë§¤ŠsŽ’Aš”FaEô³ µª—Ô/�Ò8à�YNá„�a‹aÞ�ßPD~qÎ8 M„ÃFÃO~=Hx—o´A‚	M ’A ’;œsŽLº/‘ôII°…$A	L š@Ñta‚)É¹1Ð°�EÑ„A£ˆ$‘tH$�H!H$�H ‚A$Là�l�‚ØA0M‘ô&‚&‚GHRopD~qÎá)ÁôL iïá!\hãùÇôA¤‚HPACB0Xþõ¿†M	ŸFÄ0�8Š—DºHDnÝÁCýû	¦‚RA$A0Ã
+Ý8âÖŽÂ&�AÂ	¤	ŠKá$ÏôqÎ8AXA2øL�¤‚DB	¥²‡[£¾Áe9Ç&]#Ž$‚A$A4‚G‡èò.�
+ØLª#ˆr
+�A0‚e:&S ‚	¤Â	„S­úþàˆø ¬ ˜ ™E9NL¾0@†Çâý„SªE?
+cá„ÐA0„0ˆe�Am&ÐAÂ	 ‚RA „4…„<a´A"é¤‚8íœv#™,¤ÐA0NØ@˜°‚a>»�áAØA4		°…†I¼0‚8áÒ#áÂaA A?å"ÿýçp@³ŽaÎ9Ü§8çp’B"!ÿõ¼î�¤])÷Ap�‚
+#¨þyH"BHÑ~ß»¸Aô�H E@á¸bÝÓ]»ÞªqÎáa ‚jÁcþ¿ü$AmL&šA ‚m’ã�ÊržA0’	$‚ š ˜B‚I ’ šAt¬§+‚HŽ’CaA
+B�°‚�¤‘tÂh �M0™ÇH)Î8@›	„&L ™Ç&L ˜A0‘N�‚)ÖÂHV]qÂ@‚eÀðgáÈÞÿÛø¸">¾&ÙC¤($B’	;Äxõ¯¿GA$A4GB=‘ÂÙeÑä¦BX¤Å1X QöGì0Âi‚	�A„#b@¸ˆýö-¤A0M¤ÆÒïYð<ÝÎ8H$S„	 ‚i‚$’8ëåèN&ÊsŽLºAÂ	 ‚A
+_½•‡�“„A)B‚.ŠªAÈë§‚)ÐA0™Ç	&ÐIÁÖ �YÇÜ§Ú)Î9Ç	 �A4ã½qðGî�t»b!ÿ„ …°™
+!Ò ‚aÂ	 ˜A0�A)
+Û¸a&F	;cûHYS+bˆXBâ�A4†zA ‚&‚H …‚ š$aŠ „DR8á �A"é ‚A$A4‚*<_¿s¹Ç8çrœã�ÊsŽHE±"žþ×‚)ÁÁ8H§�„…Ø&?·EÐE:&	G•³ìiEÐ XA
+^§8à�X"ú ˜ ’A¦	Æí�þwó¹Ç8êÁ6‚CøÕ®ïá„Ëä| �LE!&‹sŽ';”é$A0‚a ‚amÒ	Å2øL°‚a8ì¾G1H4¤ÉJHŽ’A
+ ƒ&T ’ ˜A4‚A0A„¥Ú
+ÙN	°M„">Ç	‚ š&‚
+ý—Â8á�aA$ÿüDD_|$ÁôŽ‚Å �!‹Š`£_Ááø T	 ‚!R:oyø">kEÐˆÐŠœA1XBÇð@¿
+‚	¦"Ä0‚B#‚#ëA …M ‚	„‚H5ÿù°®qÎ9Ç;„GÑNM‚I �®{§�¢œ§AÊt‚E8A!AÂ	­]í,Ñ$™sec/‚Â.�\ƒAÊØ»	„)ÁXE8Al&‚A ‘OíGÈøEå9Ç8áA] ‚H$’ãùÇNÿ¯)èïéÿ†E""Uøa0‚h �A( ˜I±m„!áÆžÐA0˜A0‚e¡É‘C±zÓØA ‘ØZzEA„Ø°˜Ai
+K§8áÐA0˜&Â	‚$A
+H!$‚±�I$L&0’AÂA°º�x!Ç zÂ%ÿçÃœsŽwÂ	—Â& C�NÐŒN�‚)Á@�X"œ Š{	ö^3	]Å²è šI.„s‹4L!B;·tqÒ„ˆì BÅ1Mìq`—8ÿ¢è"œ§&”0“VþHÃ�QB<Œ3zÝBGÄ5¡0Ÿ„’8á$‚	„"�A4Ù Ž8I ‚h§)Â	 �A$A4‚!… ‚H AX&S„ÊtLøS¶T ‚iÑÙª;JEÐDAÂ	—II‚A
+h+)Ê}ÊtH Šp‘NL �Hã„›AB	§‚#é�ÂE:A8ÿQýz„Ðjš~B"#ix@›8çã¤�A„	Ä5a^”qdt¥×Ô‚BDR	¾ÐõÈø"�	âÂHm|}¡z!A �A‚	‚A)†‡êðŠ†�I	A4l%ßµ¯¯œs¹Ç8áS¤A‚h$à�~ÇGá
+ÐIw"œ š$&‚A»—@ŠuT]¢œ0™sA$H ‚)HºG)ÐA ‚	„]$MD]þ®Ë¥ G|¡Âa4‚&ô?¾w@�~Ù0/ÂÍíL*79¿á"B!„"6ñZ&M$‚	$I°’BÂ(CH ¾˜A0… ‚h$)…$b3!t…4…‹iÄ2é@›	 �A&ØB‚jØˆˆáMp‚iMA ‚)ðDŠ—®—NEr ëédø“žË�Ì>w³ŽqÎ:S„/¤’A$7Ð¼/8�´wEò?Kh$ŽB
+Ë¥ré.‹¢øE9Ý´aòèP©C„GAå9Ç;‚/ ‚eÐ(°WÄEïô‚ÙÇ8çrœ ˜A!w÷ºQ¦÷ÿü'ÿ¦„Cñ&G’î‚a±†¡Úœp�68áÒH ‹ ‚i ’!A ‚
+$S„Gá#Ž�L ‚h#¸d|& M„Êâˆ( &ŽÌ’ ÜtAÂ	„(CD0AX VGÂAÊrœã„Št‚	¤A	„‚&Œ9Ç;”à‚hL&L žúúyþÅL/úwñˆÐæüŽ’&B($H!øèü?†‚	L«hXÆ6GñèìQ8�r‡;çîSâ‚H$‚	&BØ°Xˆ�¿{L&b!¦²ƒ>„OÖ£úô?öŽoðˆú8ç#ŽqÂ@�AQ&—Î:àˆýN8H ‘t‚E8A0‚aÒAÐA#éú‚G"œ$SœpEÑ„Ž:#åÓaÊ+eˆFˆ$]S¦ƒ	$TiièÇ
+Ál¡ÁgîqÎá)PH Dz<º.�sŽaÁø@ŸÞºÿý¯ú§›ŽOÅM0„C‹
+:A4�A4‚H$‚ABÅè+†M‚	¤A0‚h$A‚A†÷f¬º.†Â š	gt"÷´�H ˜L š$@›A$-‹l,xÂ	—Èú š$&‚ ˜C©Íz;�‘þûÿøïÿà�)Ü¡Ì8Aå8EÐA5ŠuZÌ$‚/„P�6H �kcë÷j§rœ§„&]¯ÈÄF#MÒ¬OHº#Ä|L ™„	¶‚Å1_H M‚e8A2é°M¤"=1~¡"8îSŸˆ}ŽÉ—ºÿÚÿÿü$( ‚h ‚[ÂA ‚h$Ž8">Lã ‚iH$GH$IB( …»&BNA4‚	A	�AŠDtÕ$q$_A$FAh V�"‡GAÐIGØH M„Š ¬AÞnã�ÒA’)ÂAL0‚PA3ŽaÁ¿(sw	‚.‚	œ|�à×qA|4P0Â£«ïÿÿÿZðÈàÅÁÕ_¡iBÅ°¸Ä=]lŽ–®A0QB,!
+!„
+…Ò°Gt’ˆ „ „BCÙ„,RI¸·G¿h0’ šAPH M„„4N;ß&‚a&MA —pHÆ¦Œh1×ÿ§ÿåÇß©Ç;œsŽ‘Ç&_	„Ò „R8ñà‹ @¶tÜM ‚aH$‚	L ™|º#à�eúew„EÔ¡Ì:.�A‚&�EÐ Yuìh$Ê˜D| ™NLºm ‘"¿®óŸÂ.‹¢ú ‚h%{Çqüºû™É:CƒëT®ÖÕ=ŠŽÓÿÃPB"-Þã‹.Œ$L$‚H$( A„4!B!ÒwL0‚h$’A ‚aA4Ø Ätèl … �¹Øi#4L§*H$ …2°1¢:§(xAÐIM">‚/¶�H$&	°’ ˜D}">AÊ€�AÐA2Ÿm Ã“¯4ÿ±QIûLÿœrCÁl ™E9ÇG!Ž‡­�/”9‡)é A4‚GM1oªÆGü�‘ð‚aË¦Å„]ˆ�d|PLXýbà‚°ŠzB, ¬PH LR	ˆŽ©âØ/Å‚ šbH$ÿá‡ÿûHçë¯ü$M/‘ð‚H ‚h “$8D|#Ž‚EÓeÐH#ºAL ˜A4H$‚	LÇAáv‚”8IqÒD|0‚a0�A ‚H"
+$$Ð@�I&T ‚I]6†EÐH�‘Ð"ŸoÝ{8çîS �H ™Çh ‚	”õýÈý{�—KðD~¤6@aÿ5/í>Þ ×]tDçŒÇ	 �A
+A„I´Çö#×¦a
+	�I ‚ñb7ó4#LéA0‚i1A- –@¢ÂA�AÂ�H ˜&ÓaÐ@ƒPA) ‚†�AÂH$‚L �6L§âLR°ØŽAº±`šÄA„#^–aÎ9Ü§8çp‹á‚ã„‚AÈ÷Æø@�GÂºAÂ)Î8H$‚&"?cÐ‚)ùt‚ØEò>NqÂ&�EÒFhÂgV‚X�X" "?Î8A0I”à‚!AÄXVÄuâ0E9N¶•‚$A
+¨cxÞ½&ˆíŸ¸†6Aá„?Å! „0„0„0�1Â	„8ç"è ˜@›	„‚A›	L ˜A”2¸§	¢>($A0�A($Aa„ÄDBDtyI�":#D�AÂ	„ šA ‚h'|Ü§*,˜H$S¤)Î8@›	¤A0�6ë´qÂ.‹á‚.‚!à†Èg�Áí0n¹Ozñÿ8à�grŸt…cb˜!¨‹„þøJ‚#æÐH$TGÐ†!ü�—M�Í(”¡Â	ˆ¶±�×†H$AA&°’	ÂÕîÂ	 ‚H ‚a �1$CÜi‚m‹T,cþAlÂ	„ÑÇ	‚	„($A4L�ðD|º">‚
+Ô"èº&ÐAÒ$ �H%ýtS”öS”å@L&ˆùt‚A$FqF*Áð…‘!lt_¤S¤ILá W°@´¸ ¬§ ‘NM
+1Åÿ‘ýÿ¤ÿÃ#á
+H ‚($!1·OA ‚A�H$&‚	…„, …!‹"©L&A0�I!HR …ˆ±yAI¶)ðHºH$]“h ‚&L †!‚lºaç ˜H ‚h �A š ‚b"è�¢œ ™t	£ŽMU¥ïÿÞ¾‹êŽ:w M„�‚b›Ý@�eÖÒ8á@‚²é …!C«ç�»eÐ" ¡Â	ò)—AsÛâ
+ŠD X"œøþt0�H �1A) ¬EŽ ŠyîHsŽ Ò0…0LE‹¿—­²êÃ ÖäÆ¿È-… M ‚RAI ’A	°V–ÁH M„&Ë¤…$‚	¤L$I¤OjSË¤qÎ8H AYt.‚	œp‚B4A3®GÎ"èÂ NÈ4yMà‚°EC	Ñ¢°‚j	A2é	~6Õª„NS„GÐI$’A ‚G¦Gø V¼W;„GÂ	”ü!Ä^æsÿiB#ˆã WÅ„MBI†#¤,b+[&‚$A4A( ˜@†,nGEñòùtGH ™„’BsEbŸ°�AÂ	
+I‚»e;.<º#â‚E:$H …6‚&	Å„ÂÃÐaÒ	
+ M¤Aa;‡»£ÿüÃœp‚eò>/‘ôI$_.9ß„SûE8D}àˆú ˜A4‚Á¤ñð@–öôGAè+HºA$@›BéÐA2¨QÂ#¤ºA)÷‡;»`›(pA2>	´@›¾£ö»¿‚ÙO²è#ºTb2:»þ¿#÷ ]È0‘H$&…	 ‚	„âÙ‚d} ‚	‚b‚	„Â	„‚&BÚA ‚& ‚g$@›A ˜A0‚a%Aq"Ž$‚EÑtBÑti¸ñA	°@™E“h�‚	•Á	„›H&( ‚m—AÂ.‚	Ž:Am( ˜A4@˜†)A2œã„¡l!AH ‚h§¬‚kÿÛc_ŽøAÊpQA1ÿG¿Ý•A)¸Å
+ÿ[²èÜ§‘ô‹ ‚±@¿�;EÐH�¤
+)”B#øè.¡ëe8@›M�¦
+/öPûùO¶�—Iâ#V=ÿëÛ~ÿ¸@›#BÙÇH š$A#ŽqÎ8 YÜ Gã�ÊsŽqÂ&‚	‚	„	„	´ïés¸ ¬"êPáAL$A$A0‚®�Èùž‚	„�EÓP@˜±^ÑË¦Ž¨¾‘&ˆú	 �A($A‚&BVÖŽ:‘ð­A0‚h$‚	„ ‚	´ƒ#ä|� �6S„‚&L!A)¹P,†\6Dw!/_ÐBØADz¡­ �A4‚	„Š	L!I±Ø'º¶IB‚A Þ�GÅ”ì ˜BlEÄGÂ)Õ„	¶‚#�ëÿÿúa ˜BØÅ‚cXÕoIA„"ÇOŒu(m"
+ÇßFð_ûçu8çsŽhã¤@ˆé8¨ùßïP�6SœsŽw„°‚h@º¯S„	²žŠp’#áÎáEÐA0Ds¸"è M‚	” ©„ÐA0˜/Ë¬ ˆèŒË A2�M ‚A)M„LCð@¬&Â.�l$‚8á$‚	¤&Ò šÁÂ#áÁÑN|V›L=��€{þËä|!($, Ð»AÈûH ˜A �A$ša) ƒˆ¡aˆú	 ‚H$H ’ …ˆÆèDCH"è$“
+‡þðÒ šHP@ƒ
+8w¨�¿„GÈû!I‚ Â(¤ö6;ëå8":""Ø(�ü§X¸†–H"á—úóŽ�Î8"?8á @ƒE…Bô¯Èþ¿;ÑÇ8èº^­t<uÐ VqÎ8EÐAË E8ÿË£™Äh�"‚&/L9t¡ÖàŠx ™N‚	 Ž9Ç&NL&&Ð}²Ÿ;„‚w"œ š$A0“§)Î9Ç;„	²œîA2�ui±â?HãœsÂ	„R	´‚²œ N8áÕ´B‚& š M¤…³ŽAA#ŽºAÂ	„ ‚	„)&<QN‚AL® …""ŸvL @˜CO„ºL$âÂt�_ÅÐ M ‚	ÐB!„4Míñ¾Ñ4Ò	ŒC¿âÜŒÁ¯â"*ýÖSœpD}`ˆè!¯ßýõ8á)Å�:Ú{îÒ„S„FÌb?_.‹¢ùtF$L M‘Ëðˆ£�Ã �8öG÷ ‚e9O„—H$’&Lõœs¸ VS®LNPÊsŽqÂ	 ˆéˆÐ ]‚.‹è§)è$S·[xù°\sŽqè šA	B( ‚aqÉ¹N�¢œ">M ‚h ˜M �A ‚	‚b™ÇGÒ&qÂA ‘NM ‚	‚pÂ	±MÂ8çT.˜N",wÊ$A
+DtN‹¤A:EÑä‚ ˜&Â‚	¦N#äÅ„‚AM ‚	„	 �1N!7‹u°Š�A ‚I„0LR	+r×ÄFÆÿÁÖÚ8á±HR%Äz_ÝÐ"œEŠÔ|zû»‚)Â.�"øA2¨#
+èæGÎaá	^Áì�—EÒÑ¢qÝïð�{º.‚&‚	t¿ÿ¾ÚqÂS„	Ì8@›	 ‚¹Ç8ÿkÑÇ¯µMÁò`ã’"?)Â&‚&˜M �ú‚#áôqÔ§Ò	ç$’A ‚A‚H$Ž8 V)ÂH"�8á �H$H ‚	¦ÄE„y3¸Eò:AH$t‚	Œc,p‚	 @š.‚	„Â	„‚AtÐ†}Bh ‚
+ šAC	!A‹¸A‚A4HPH �lDRqðÒAÐA( ‚M�A«æ·œqûøh!l š!!ÜkúÓáˆa1Züoü&Èù„˜ŒFõÄ\¾GÍE:#áé„,DD\kýEòèëÿ¿ê]SùN �YÇ&
+:§¦§ÿÁðŠÃœu„LK¼u_ðE>¢×`Áy°îqÎ9Ý ‚Ç	 Ž8AÂ	‚SŽø YÇ;ç$&GÂa ‚I �A0ˆêS‚‚/‘øH ’ ˜EÐAÐAÂPAÓË ŠsŽt]M8‚	„‚A!„
+¬"œã™ÊsŽL¾‚	 “HS4EÒºa ‚	‚&‚&MÂA ‚AXCgp’AÐ š!AÐAØA0…‚[) ‚@‚eÐA4I‚!A+²NTb/¸~‚!–8âãÒI�A!„E„Xýûa ’&ÇÇOß_�—@Š†"ÄXˆâ"ùtaEõe>Áiãñœq§]¶>?½ð@Ÿ¾ V ˜ˆÖ"Õ÷ß¶Â)Òô.5úû!ÀÐõ¿Î9Üã�ÊÃœp‘Ç!&GÐIèÃœpD~SœsŽ+)Ò	Ž8A0�A$§®GðAZ)ÐIé ‚h A„�A$ Â	ˆ@›# Šrœ">]A"èº0ˆøA0š&	A Áñž9Ü§8á �Eð‚AhN.‚	¢è ˜A0‚a ‚a0˜A:!A �@Ž9Ç;”êE9Ç	MI M„-	´Ž9ÞH§&] ‚h$‚Aûÿ¿â( ‚aØBâ1«ÂAAÂa0�A)$�@­KÿÔP ‚A‚AÂPAˆ¿ýk�‹a"‚X‹â¿éÞ´²ž- �ØA0“CD4]L®	"7qøð@·uþÂX&ÄCpÄTu½„GJøh ƒ¡â+ÿ[ÿþÂ	‘òù#êA0Egûú¯`¸I‚	�AÐD}¾ö¥<º/„A$ šH M—@ŠŽ]+GËáÂgÀ‚A$&H$‚	ˆè/Ý÷ @¬º§Fˆ …!ÕKçA ‚eð’ºA	[a
+„çsŽ‚	‘òèºAôA š �÷S¤w)Î9Ç ‚d|ºX">=¤ŽäÝ»òaG	�A
+A0„0„RCA$H$L ’A‚
+ØA†‚lt”±Â	„˜ ‚a ‚F…7“ÆAH! ‚ÄE1b©ý­
+	 A �ApÂHDA›„‹¡ ‚#ìˆ‹$ÁE±OÚA ‚hCa±LDF¢¨ A„!AÂ	„( ‚BôädÃŒ+GüŒßÿ´‚`�X":G�àˆóJ„GðD}X@Ž9Ü%H#¸°¡:þÈúGèŽ’AôAË �üK¡{#åÑt‚#åÐA0‘N‚AÐAw_ì“0‚	„/¯Ù.‚(u„)Âh#Ž‚	$L~ÊN8">C Šî§sŽqÎá"œ">‚B“êñk`�l"Ÿj´šbÞÃµì ˜A„PB‚a‹ªE9Ü§As¸I$H šA ‚	„‚+Èø, ‚h$‚&#ŽA4‚l\Sˆ†‚;„�I„Úm¡GâØ@›@‚DBDD&ã9°™PM">I‹¦‚L&Á ‚
+ÄlS ‚	‚²ûh ‚hL ‘H&ˆa‹ePé‚H A„_H ‚R ‚xÐ¦9ï�ÕùÇP@®ÊÃ‚""1øÿ‚ëÿe8 L!×zM8çp‚d| � E  £„	Áòèº)Î8H Ž8@ˆkŽw8àˆùžíH"ø¨ˆ¸þ®|+[)Êp�:b×¦1°_P@°@¶_Úb"-‚íç
+Aÿ¤§ãœp‚�H ‚	„I$1Ì9Nwºhã„‚A �A4H �Ia0VPçsŽqÁÈøAH ‚	¤L$AÐG�AEÑt,ªá$‚&‚A	$ „0ˆqÌ9Ç$çîqÎ9Ü$A �H!Ab)$]Eð‚gp�A ‘tL$�I‚a ‚E„S”ð‚H A”á F)Õ¤$qÂD4’¡Îçã @¬ ˜ š	 ’)ý½oø‹	†qéŽ7×‚	†A(ai CC¤ÿj�‹AAÐl6?Çòÿ—Òˆˆâ=�òC‚“G �DY[—Ò.�A"}(†"(~þÎ8D} �A($´°ˆýx WŒÃ‚#ªT’ š&A$-‚‹î=_Y°îSá Eð‚.›H ‚à�_ @·ó¸HîM	„‚H$ˆâÿGàˆøE<Ü �Ia$B( ™taDtÜ§)Î8A2ù�áÒ ™|&0‹¢èÑF˜A4ÐA( ‡Áé„ÐGržGË¢ép‚AA	°šÿöÊržé ‚aÁ6GÐA0˜A0‚qõ¾Ž8 [.‹¥é™Õý=BÂA„D0�GÁÚ ˜A0…B"â˜AhX¼lÃ ‚H$‚A ‚a$ÂA
+‚ñÜ�—öA3ÛA!–>·¡sº&±H�´	6ÂAb#1ÞÝ �H ˜M	„$bqöðË˜IB‚	¤0�|F�Üò¿ßå9Ç8àˆøA2œ š	A¬{&9Ç
+à�rœ”áð‚e8Aâ#Ðÿ@ˆþÊp�l"úh …ü,º	K EANS”çrœ§;„‚	#<‹¢‹£È ˜B"8"Ÿ„	±ìŽƒ8áÂ)ÐAÂ'#÷¸"?X"œ§GÑN(p’ ‚e>8¿ùÝ`Š~¦q°Í…‡ì"�B‚ANB�Ð"?H§&NL&�AÂL …‚`ƒ	ÐVw8áÑN˜AH ‚	„( „0‚Þ([A ’	A#±´Ð„Ù:.�A-°ˆøA ™tìPH ‚a‚mÑC�ÐA ‚A‚A‚a
+!X°‚ ŠsŽE8@›AH$Aû×ïéG‚Áð�²�#Ž„(!â(GµÁxA�&"IüWÞ‚;¢ùt®ˆ�Y0�"è,¾Ì+Añcû²:÷
+ðA4AXÅŒ~ý”èNqÁüºI$L!ÇýúÂTS¤qÂAÐH&Â	 ‚D-N97)ÂÙNSœp‘Ç& ˜A0‚h ˜L¾C�ÁÑtC„�Aô‚EÐ@›A ƒ	‚gÔ&º)HÖ‹¢è ˜L š8è� ‹ ‚ØFÄ_.›.‹¢ûA ‚aÂeÑtÚA ’	 �@Š{‹Aé’&L&ˆøA
+&�H$N/8çrœã�ÐG$‚H§éò8ÿÃÅ¸†¡ÿ�ñA.a
+!4B.+_ý¶‚& ‚ „q|xä~ÙC�ÁV¡
+L­×mô­ÛÚ‘ñA„DX‡aÄ_h ‚SaäL!nÄZõ÷DtA$	$A4A!õ0ƒÃùnVw¤M‚	
+%ø YÇV¡ÎçsL�¤�A ‚	‚ZÂ)ó¹N‚;‚
+Îá‹ ‚iH ˆù¢CD4Èª„L$�H$eÐA0�Iÿ3Èùt_w)áöqÂ/œA„H �@Š~¨t§è.ÁtNqÂA ‚A�AÇþºï�ávAqÈ=û¤�pÂhEŠ!&‚ šIA4H ‚m
+v#c[AË¤La	„PB"/¥O‘Ñt‘8�Iˆ°„DR[N›tØA0‚L šM°ÂBÆë ’H�¤B!„ˆ �A ‚±õ‘ÐA&�@ƒIM ‚wN|"o_ÊsŽ�¬ã�Î9Ü$SŠpÂ¿¡�Gå< ­œtîHÄ|~Gè¾Gòùt]Â	„ÐH šZ.—	AGÍH„@‚²èºPE8M°‚aq�_Ð"¢OË¦&ÐA
+ñóŽqÿtã�ÊsŽw ‚a�?ï]ëe>É:wl�æqïÙ}p’	M$B’C	AÎ8H§L&Ip‹ �A$L ‚a„"‚Èø ™NqÂA#Ž ‚aÂ	ŠA ˜AG‚H$")Ð�dto&(s�LE¶›
+¢èÂ&‚H$‚H$‚A ‚h ‚`›*v1l&GËä|º$	PAÂi1AR‡H šA&L ˜L ‚z
+6ðš§éØ Ä]/Î?	„Ða†…ÆÁhAMN9ÇQL …Cb/rþsWÝ”èº.ƒG(@�fˆò/‘Ò	QÂ#­Ï&ð�8"�@�6#ÄzÅ?ýÙtÊpˆø"‡V(Ä_ßÁÊtÁõ#é'!Qq§}÷ÿï‚
+èº”9Ü š	4Lp‚Ê|îS‚#òž]	”ál$qÂ	„S ‚A$Ý¹E9Ow8áÂA	²  ˜AÚ!@²ùt‚.‹£	$‚BLˆ‹g�"žaÄXL®+‚	ˆ„E”áÑ„‚	—ÈøMÇAÐAÒAÁ6UÊrœã�Ð@›eˆùtL ˜A4H ‚aPAÂD}¤S„.�A4A"Ÿ_ÿúØB!„#ˆÃA ‚H$A0…Å
+Âô<^ì$‚&	´Ä0„DGX"žGÔºi=ˆ�Ð V]Eð�8�$&ÄDrë¶L‚!B„W�þßEÔ0‚H ˜m‹ÆŸ�áëà�$‚&�A0‚L …
+ŠøMoá
+ÿ&8D|Nw�‘òù
+"?çä}s¾	Hú	áÂ	‚bŸðŠp@¬§8çã Ž8H �A�A4’òèº`›#£
+Ë¤‹¡AŠ	¢èòH$Á9|—Èú$]AÂ.‚ö+¢ésº&t‚	„ÐA.‹¡ë‚#ðD|¾+a ‚h"é	‚	&ñûêö‹ðˆúå:P‡Ã#†n¼$"( ˜ˆ�L�—Èú	�A( ‚H4;c»hL$‚ ˜A6PÂA(F)ÇôA4!Ha0˜B‚3ÄETGaˆøA ‚A„	0ØŽ";#è$‚A$-Š šm‚Á‹b5AH ‚A!A �ASöŽ>C6�>ç�ç%s¹NqÉ	"5C“;‚å=p‚óº ˜@†‡‹ðE<~‹¢è#º ‚ …nœÑòù#ç2>]Èø„;„Cx C—YžGË¢è#åÒº.Ÿ®‡¬"žîS„NqÎè ‚cï8áðŠÁl+	2œ';¤M†ÁqûîüS	{sá¢œ š)Â	 ‚DÇY#ä|!Hã„ŠtA4‚ØL ˜ˆa
+ ˜B¤_A"œ š ˜EÐ ’	$‚	1l0Â	„>ÐA ’A)‚c±LCBÒ �A ‘t/m ˜J‚&’A0M„ˆ†‚Ú"L ‚`›	„& �AA!iˆˆ†‡@�XE8A4&	‹�…°Ò¦
+¾¤#B*>Sç Ž8 BL!ýcsŽqÖð@…¨¡°Cqâ¸E8@›)åÓlû­m	”áË Êpˆý�÷O—Eð‚`Ÿ.‹¢ø½Šý°^_#àŠ}òœã¢èEˆ�ÿŽˆø"žîqÎ9Ç;éA„ƒB-»õªzãôŽ9Ü$qÎ:§aÂA$	‚»8çî	BÚ)Î8A4S„A$@˜Â	‚ÚºGã„])Â#áp‚eÒAB‚A
+^ÙN‚a„Ða4".!GÂº	Ð`›&PM›†T	‚#åÒH ‚aAÐI‚!AÒ	‚EÑtNSœsŽA0‚h Ž8H$‚A ‚
+ÚLR¼§´§—EÐAð‚a
+)ÿûåÿˆˆa0…¡†&ƒ	Åˆ±C�x÷]´H ‚�HE
+Ž>/RúÙ|Â&W¡‹hr>9Ä]@‚ehˆø‹ŒE¨ ^îGÙÜ¨A†&ãýü�úA"èXA4@˜¦""˜ñðG}AÐAAˆa	vÂ+B¹Å|‚Ø.8 ]«’ …#ŽLp‚D}ì"‡;„GÑÜ$S¤A3Ž$I­S^]ÑÇL$S¤)Â&AÒ"?vq)E8@¸aÂ�…D�³ˆº¡Ñž]S�ÂH ‚a2èPH @Ÿ]”û ìd|º&L ˜B‚	¤‚	„#R>/
+-*
+îqÎ:§&]$H ‚	­tìã”ùÇèhƒHãøAŠ4qÄBDo‚	„S´qÂÚ ˜M¤ØaˆÖ’I&$I$GÐA(!tM„!HŽ˜A=pÂ	˜BÂaA„Äxøa4‚	„�H Îá¶BÐa0„XØP‚iñlºhL$M!,S±I ‹è ˜AÂ	„AË�àÏh“‚
+R
+!ÿóŽqÎç	”â-”=â?Áà�8 VqÎ9Ç	# „DGãéÞ]B.¨�©#á"ïwÙ9Äyˆú$GC�Þ8çp�Eñ@¢Æ)z÷è+¶ÑS!qaÝ1ª0ˆýÐE:qÂ§m �ZX¸Œ
+w[„¼ ‰Ëá¤"’ „PH#¹N'eðAY|�„ÂiL$A4a
+IˆçîqÎ9Ý �EÒ	‚	„AÐA4ãl®<ÂlºlÑ+ ’H&CH"òA#4H LR$ŠX"ét‚	ô‚	¢è š.’!A �I‚DtapEÑ|º NÂH"é!&‚&BÂAì§Îà‹áfAK@†÷â!ÄGü0… ÂhDR¼Db˜"ŸX#»A ¡„ˆÄEŽGýh ­ñn…ÄD Zô°EÐA4ª1ÝrB ‚`ƒ …±ÂA±j£ìAÒABÅ Â`„8ˆ¡~ô‚ š ˜A0�6š	~mv\2ÿ�[
+9Ç8çGãœsqÚ8áÑ|+ÊsŽ¨L§)Î8EÒ&‚H �Ap@Ÿ¢Ÿ—FE9Ç8áÒ	A$BM‚	N"èQR>F™&$µœà‹ ‚&D}”&ýw/‘Ð W)Ô$’#çE:&ˆñã°D|º§8çt]AÂ	%C‚lÇ×àøƒñ‚A ‚!–8¤M	8è!
+$"A“§AÈøH$‚	‚	„ÂIH$Rj„xA4GB( ™t,vþ.�$A
+EÑ}GÉV•‹ �A$Â.‚	¢é$M]C	‹*
+p�6‚EÑt_$‚&L&($�»FLpˆúLa]AXw¢1åüûÕg�ç�ç�çEDzòœ§GêS„’b!Š.…éb´Ôã¤	sº"9¼2:#â÷	±aE÷lŽ‹ç¢$ ‚aEb?*—ˆvº($„b1b1Z
+ÁÐI
+!„,E�á2qIÈ'Í¢=Rù°ŽB( ‚hã„ˆA4!^NqÂA#Ž‘NA0šAÂ	¤H$ÉwGË¤„Ž8H$‚º ˜A0‚h ‚B‚Û@‚`šaòè¾GÐEÒºH�²œ|$]Ž‚["èò:¡ú	;„N‚¾‚I-‚%ä|�„Sœp‹¢é”è�—H§&/—H ‚al§·{)Á°EÑ|"�;è0šþ…¤§/±ñÆ‰B š	$G0…F?áp@¡„&BÅ �B1«¿ðaˆé]B:!ËõIˆé	´",Y¿ºA$D|P@ƒ	 ’m‡xH ‚h ’	HºL†‚AÂR±¶@›&!AÒ …Wÿý�[9Ü§"�LŽD}v_#ëZ®Ê|ã Št] ‚A‚ ˜B�âøDuõ;”èº&�I ‚aÂ	 �G	ðrøH$‚.š.†‡}„GA„!GË¥ßp@•þœN�—G0Â	‚(p‚h4´ê,]‚#þ9t¡GÐ NV“7V	GÇ6¶F<`­Çé �AHDFA4‘ÇH$‘Ç&L$
+	´MŠ!H$S„‚@‚`‚`‚h �AŠl( �@œFÂ	 Âa¤�A”†/ ‹áÒ ‚eÐHCC)Ð ˜AÎá4&ÂA"è … ‚	„Š(p�@„| ‚aÂ)Â#åÓ&0‘&B’	� X@Š|V‚	„V]8ø7Ýë�0Çâ‰§ˆ9Ü">ÄXL$„t›®8@›”å¤‚	„0’Â�cÁõÛ)Î
+ˆ�åÑ„&Ë¢û*Ê¢	…ñÎ`�YB‚B‚ØA;bÄxóÍ/‚’ ›A
+	Á1
+uµh ’$0‚‚a‡„AÌ3§^
+nOÚD~A‰Ž�AsŽ( ^‘Ç;„¨ Šp‘Ç	‘A‚m ‚ÞÐÊržÂ.’AAÎ8I$‚Aƒ)Î9ÈæÄ]Åœ„�H0˜B‚)ÖÑt]EÑ„GAÂ/ ˆø@›I‚.…¡ô+]AÊt.‚)ÐI	°’ E>wTÁhº0‘XG A4H B";)øùt´t"¡Œæ…FEuôDD_\±ÂIA$L …‚A…¬YC´HºA
+BÐ¸¶""!•PD•XŠ«Gc ‚	„‹D0šD š ˆÄ""!(!³D] ‚	„.…BÑ ²ß»Fü˜âÑNBÐÅk@ˆÿ¢¢ÊÀ‘OAAÁÐA²¦Èø‚*¢¨S•P§E&‹ ‚e%•Bˆ)Ê#L®)Êš&‚’§/EÐH$!¡Un“×}ýxˆ �b"!„"‚@‚†	‚
+	Ãa"8²>#åÑ|�š&„#1‘Ä#ä|�—ÂEÑta0ˆ€äqä|�—Èè¾]ÂD|ºeTPç„ã˜sŽqÎ9Üãœp™Ç;”år/‘ÐHºH$]Ã(Ž!#äs<‹ä|º.‚D|"c†û¯¿ß�68ä
+µü¡Âzºni/ì†Ø´,‹7ßöÑ'È ìÐIûí÷s´ ¿ROPÕ¿
+ ùÍßwÿí ¿ÿÿ¸H4
+y o÷nßÑ‹£éõonÍ¡Ç°‚Vwÿ±ðÌÑ!_øáìŽõæÿÿÛ#ê5mˆâþ¡ãN@�W‚oýü‚;{ø§­Øf¸ ÀßëWôü_ùBÿ÷ö­~¹í¤í¿ l¡ÉŽîƒqF"·œß�5
+ð�È)AAÁÓ	�Ó‚ØKËÂô‚#«ŒVÅz˜TÈ˜¯!›ô›¤EC¹tk5ƒ^�¾‹¹
+ƒ†’F
+¶’jà�$ä2È{tÿMä4÷õ¨I7ÿãpÝô¤£×!É>º_~÷¿ÿÿž	Z ûÉFTðƒ#ódùœƒëõMcl“‘SŽPûÿña5—ßá¼ºv�§ÃJï—]�àhkpHÁrSø©�/6•ø"¡TbvÕÙ†bsF&Â½ÙQuKÒVàÚ�$s©
+“áSíµ·×]sã÷§þõÛ¯o¸&òPkþ\N¿_ºût÷Ë‚jøß»×]È$;�G‹t
+¿ÿþÿŠÿü/ý|Âo\W}'oµ4Mÿÿý/ïðäÇî¸"£ðÞ»èÁûØ~²ë�ýï_™û®ë_�×­}¶ëú¾±ATŠ! wôÕoAÅ*¯Úô«[ujß†Ã	+Wøoýþœ\nÓM ›vMŽ*+NØ¤„.ÿ öÛÍ«Œ½&„D4.Óˆˆ°@Â&²
+Ïøáš
+ÁT½ßÈÁ­ü"¯ãßýqDCµ¿Á o3¹Ç;•^ŒßíWŒlC�ƒ¸/ûƒXþ³‰Ôa¦!Â±}ÍKûî‚P›tÿÿïÿéä0á×ñÿØ=5&ä,FAÁƒü$×¶JjM]ÿ„6-¦C�¶ÈS�ðØ3DQÇ$>
+º:‚Ø,~Ý6	4Ã0�ÿÿí‘ÿ¢
+cž+ÿaßøI
+´â àÛ§þ²êÔAøvGøsx´,‡¿±ÿ.¤4:`lEÙ!Áÿ„#ôÛÿkíÿöqâ/ü2 Ì\Ésy�»ÿŠ,pMž1¶é�<Çý¤ö¤šUzÿí[ÿÿ'ÃÓÿü"P…Å“ïhŽÿB"ÝÔƒ%�|#—YÝÞòÎš¦šûä¡à†s‚‚#¡[ÿ©céÅ!Kû�ÿÿäß$3ÿßm/.?�¨GÕÜŠ_üÚPƒ3uÃ
+v11üdJÜ2xÙPdgäÅ¯¾ïþÿ~¿l1Âa—AÞ@Ø<¨ ^™ÃÙ"0Î˜ïd¶<‰žhß¡dnFC[8¿Ïê½jhŽŠ«òñŽ¬÷i˜+Md2x1]‘d^ª¢+ë}…ÿU†�$KÄb}¡±r>#-üqO¿ñ¯ñÙz7õ^[¿úðŠÿÿO	qßØGÑ›d0á»æÿËøþ¼‚K#
+Š ÌÑæn�ëÎo›¿´Í%Ò[ DÎœ«hDh?âá_O~!®A.ï'8�<ÊDÿéüiûý·ÿëý'ù'ÈÇ× ^»[Úÿÿµ×_ÁA#™Ë*í7‚AO"ÀŒë�ÕmBHRwâ˜o¦\Úúé<3é§hA-!xË×œä~O6:È(p‹èAAKæ8#¢Ú…„GÄDP@‹èï°¼¼b*²qâ#¬*CCÛk�ÿ­ÆÿëÿÝû Ùá!’
+¸ù8iÌACü†@@[dp™ù�Ë„�!]¢pÈ
+¿Ù
+¨IìƒÁ�ä#ðIoqÿw‚¼?kÝˆá�ŸlGü�á¶ê?û×�%1êˆ<Qc“}¸Ë�ã�!È†&@ðjÄìSM4›È:á›v/û
+r
+£ÓK¤ß¾ä3Gæ&@áåø®)ˆí�bÄ4(1÷õ{¼'~®C|/Ï­2nHr7Éá~D‚àŠåA�næ²v[•3æ-»¦?©øþ�XM0ƒú&ša™P…„Ð}‹Bößÿ¤aaVÌf÷/³¼¾äêòó`Š_‡«‚+Y¤ÑxÂa—‹ë!’Ã’=£@OÅSmMqë³¤œ4([ËÍ)ŒÃ²÷�—½¾šwõóaVÝÇÃù‰{Ç_èÀ¿‡¿=2c_Auõ˜.*¿úùqõûx‹¶#ú/ô^ûÿ·ßëÿþØ"?Ô7÷úú¯î[ö�ÑöXèQö�ÿíG¹�ÊCd2ÿ÷±UŠ‡ïÚAXé»J?þ)v/Ó—¹¬ÒÓˆéOÚX¥cM ·ÒzÅº¸ì<†\û0˜‹A„ÂjôÁ‚¤ÖŽ€Ò_J,¹ÈA²DG!’
+�›B½}ãéþÀ“¯·~9�Î8Ãl�@÷é’âà6Ø&k¯ü6Úÿ‹	¦Ã#ƒ !üG¿ðË¿û¹xò ±å ¨+Š†Ð€#AKSAdç±ÈÜƒ(Â �2(>r
+„Îûkè´%à­m†—øc¯m°Ûmï�É
+(mü‚Øjh-ÊN@ÞÊVA\T�‡$çâŠaÎ9œ»)L†ZÉÈ:™”9†ûa�/cäa¤ä2BÆÿ!�qC`‹‡#‚Ûúm„§Ó ÐÿïV?ÿá‡¯ä2Yï ­Çiÿ#rãâ	%ø¢pÌ6‹†ªi´KÈE2ÙdàFÒ‚öˆ-�‚4Á‚! ƒÃ/l7@‘
+Qü0‰;d!ýüGÆ“ÿf~¿oÿ^ü†@C[D�ºþC[·.®qÉ:�ƒ‘¹N_xˆ«Wðƒ/‰¹ì¸O ƒX Ë²¬ÖGˆ0A„,.ÖÙÉÿôÂœ¾µFö¨Ú¡i„Ó
+³!�
+xMÉ¹
+ƒí¦\ðÂF,Z¿ÖÁÓlò<œ¼Ã.Û6iò²ïÌäÝ'Ø+‚Ÿý[7{}í°˜N¯ª½ÿë÷º(ñÓö1Šâ¿ÅñðÇûoý¿õæ5û`?ýsÃMþÚ‚.•Á[.ô‡ðÞŒ|#¾\.\%‡�xô)ë„lSÉVÿûéz_÷¨"=�È)Aƒ•nÐH28,ú8÷û`ˆÿÎíõõÿ’}µ²c¾�5øŒ&GÅŠ~¾¿ï§ëÿuê·ÿìŽ�¥ðâµïØ†¶ƒMv>Òúèã2®´ì†¤?éï±lEÚu
+ŠN=­˜°ÄP"ºì†Ž%tÂB"‚
+›Ëöo0¨mt
+V(»%y'U3¾"
+[�û†hG!�žÈDa± ]Û yÜ"­
+¸ˆˆðæ¤"ˆh²Ð²nh#¬©ÿ»V´ß¨ÿúÿ÷ÿþ�¡D¸˜ôC<Èf;Ó�hro_S=ÿU(D5L&‘Bh5XdÂ3@ÐXþC$
+ŠÃ�Ì#ƒ@¹NF9
+!"‡ È,W9
+2ÓŽCP¬§8åS‘\†€²¬® drHé§@… ‚+<G!`‰a]íAB¾Z€ðVcŒôTBUˆAÈ-‚°åzÈ9c”‚Ê²
+ƒ•g ¬9ÜãD.AfÎ3dW­Šáåæ°¦Ã0ÇÌkÈÃHÿëºÿýÉ¾½õ®õ÷	 b„AÁ#b¿f6¼¾¯‘úf9Q|"ÉÙðE�Ë“þ¢Ü;‡�ýšzkäØåÁï¢­ù+fhÃ7;
+�`¿NF>„W�[
+y”à¡; fñûÿ·×Vyä½
+CT@Ì4¸'±¯þ¿ÿ„lwÅWœGf¡”EE!´
+ôEq�þ�ô‘°É¬ìzÖ¦B"/×ùpÊ	ÑŒŸ6eB0Áˆ5kéü…âC—e9ÒKëñ„ð½H1ž˜&„ ÐvCá7<uïýëðŸËÞcHÚpÉ9£2aaä2žð¯Ù9þ]¿ÝÚx]ÚÜ½‹Pþ@ðÆ�Šÿû—ÛIÖÙ¸ÝÄf#Dä`Ù
+åI?è_ÃT¢ÁÛH¦«|†@Áßht¶$ßó{}L˜b�ÔwûèDgDa d$ÿü7®Û_¯¡ÞûþÞ—¯ÿ¿á¿þÁù'\„úŽ™7¤QV�ëÙ{–ÿŒÛÈ°;öÖÒ~ý%°–“«¯~#øÝ,‘EÈ$ó7?a„˜Õ4ýUŒ�™Ž’L:ŠÿÞ §A§i�ÑÀ!ø¦¯b��¤:sZNž¸+Sú¬D^©ðÂi ÂÂ¡¦¢/RPØˆŒ2—�PÄDE‚h0‡òêÿâ#ùÇ‡ïþUÇ†Û�<#ƒ¿“vhà’�qÿôY¸Ðb…�­:mìÆˆ�ÿAÁÈ¨Äeÿ×
+�þ¿ÿœpC`È9ÿø8æÐA™ƒ“ƒ)?ïCg….¥Àƒx0_öCQÈh i®óãõí†ûÿþ
+0Áëü‚ØA‹ ¢òƒ�ÈË•aÎfeÈi` ìòa®€š…²`¬ä°†PøÄEÒARþÓôqUß ¶‚3‘òa23’òYƒA›M2Âáî!uF&T Ð0b«ˆQÐm ¾ŸýP^ëHÅçTÌ 6g‚¹tÚ“?Kü<¹)qo.I¯¯Oÿÿ«ä ùVE¼‚½�~&9
+ƒõ¥íWïþIÃe?ÿÿC’ø°žBYX|'Äâ„ÌpAâ°ÿAùÅÁà¸È-‚�"nØ‹JÌb¿Ó´czhPÑŠº~ƒóA(º†ºaOmX†B�«´xõ"öŒ<Ãï³™Ë[9:ÃÈæ‘‰õ
+mÒûí±y°W%nÈÅ^xŠ_þ¯n½¦ºvžß«Ô?ÚZ†þ¶m›¼3Xæpaàˆü›Çª*òåü>¿ˆ^½×áŽ±ô
+ôJ°zÕ§¯µBÛ8áuç`ÿëßÂ÷ïì=$c#¥ïñ]7Ö?ÿ·û¿íÿú1úõðßX�»ÛV¯ÿÿ{ewÿÿÿ^‚ÿÑ‹ï«é}'û~¿±ÙV9�‚hà½ÿ^—×Òüˆ;éY!þ½**«ðEÿàÛe9;öÅ¿¿[÷þô­ô�MußI½~®¿È-‚¾ÐÙQˆ†ÿoô­(‡§úàˆëë¥ö’M§®¬5ÿ¨½Ø0TØuÒi„Ó‹ˆ¨ÓCihŽm*oÉBMÔR¯æ€Ø D¸ñáˆJÅ1."ÊÂ¢
+½¤øãM(¦ÕÐ†ƒï
+ûþ†ˆ�Va|( ÂfïøoÿÄqh0B-`„Dy)b‹vÈ1b	GøˆŽ¾ÒVôm¹¸øÈÈÙ&ÓbTÊéÿØ·S«SWõÿÛþÿÈqøˆ§-â×ÿÈ-‚ÆðŽÃl2Ì1bß²>N)Vf‡VÈb�7øˆf¾ÓhdßÁÓü 0!m6™HGÿ‹ÿûwÿ�[f²Ï‡üÌVÛ‚#îæ×È‰
+Ç yCn}½º/¹+ÃO�[Ï)ÈbÓ	‚CD	�É
+H zpxâ§³á
+iT/�È
+¾!8ŠáDò8!ôOÈ=õ‚7ý6îèßpîš…Uÿ¿µú;ïBßÚ¬¼ëÀÝþèkÿÿ×Èï.N‹‚m×ÈHÙ ËÂ?Wì…Ï�Ärœ¾ò8Ì>APrÜ]'|Å½‚ô¨žx!fÃY¬«.2¬&µ!ø d.aÉþBAà›‘`!¡ä�}'âÍ¦›@ÿÛèEÅ£
+¨ÇODõ�Ý!„@Ó¤G
+”?#_ücÿ¢ïÓ7]ÙÌäíØf
+:0Ø`‘‹Ós{F.Ïc˜áœØ[ÝS¿
+•ú6¤Q÷.?ÿßÚk˜uÛÕýkÐÚ›š\'LØi!3�üƒÆèBNè_ÿÿ·UúüW­ßôÁ½Šl?«ý„]‘Õ!¦—óÿô¿ç·þ–­ø[ë»ƒ¾Ð7u6x¿£¹«ŽGÁ§øÿÖÿð[û÷KÂ1ÿÂûNþÿ�­Á¨ûÿþŸþF>öÒÿÒë½þþŸWB‹�ø¤àÈ…û]I?ÿµÿk“»ø¯ÿÿÒõ¯âº÷ø&ÿÛI´¿[_ô¬[kKEÃïé¯‡×\&Õ%Èƒ¥uÿû%ßqi¯ñ§jÞ³ÂØ«V!ßÃ	<
+ÇRÇ]\Ñ—z­ß‚„n¿±M*i¦èEÅ5ÆÄ$žl&!Rh4Ö*)Bºx¨­0¶�cï³9“Wá„ÒB"ËÁ r‡&A„{Ã0™všˆ¹äÆU‹TC^ñˆG†5ò ¡Èà�àÔâ`œDY�Há�K ªáýÚûä
+4|�wUe<EðÒé¤�ÿ‡¿c_Ùš…þ½ŠÌ‡àÐùœZG:^6á1‚ûô†A¢>¿š”d¼uÁ³¯_ÿ‘)ÿˆ¦ÏDH
+Nàˆˆß¿æÛN"¯ fN@ðãû¿��[
++8á4ýô/È-ƒPä	,•�‘º4áˆ‡á„í[Þ'„L	&j†òyýb�¨4	œÆùtBh/}é*m©%i?LF¯ ÐäX²†ð’·V—­ä
+d8äƒŒ9ïÈbÐaD,†²XIÏ¬È/’¯×ºýÿÂ#	ÌoFCF:áküÎFô¯äð…¼ð¿æzùvÒt½žNc­;Ëµ/58þ¯j�ý3XAÞòFÉØGÐÓ¿[§ý„Ì=6¹Û¸¤¯þ·Jÿ´chéñÕ÷J¿u_ýk†=EÎ&·ì4¦çÿN¹^@ÐÂjBú^þ!woZ„ßû_úõ^Õ}ú1ÿÂûzS¶îÿÖÿøÿ¢;š¢ÏÿéèÅöô·ÿÿÿÿÿÞü":ø"?ÿÒüúÉ?õz§öþ¿òa°wÿ­Wíÿÿô�M/÷T›ß_ÿÓ!¥`Ì1…ý'¨¨‡ÿ®•ê»¿ÒMëÓù!ÿØw6ƒgCa«Òi§qwÇhtÝZ]$Û{ö“
+Ücõb˜LÅ¸‹+
+¸ªè5jÞÚˆ±L4›J?GO fnïx°ƒ�ÿˆˆa1QLmE1´ˆü�á¨¥â3¶aC	„Âg3��
+¿¯ mëþ ŠØ
+}raˆÈ0? õÓñø_ÿþÂwöÈÛUÿ$:�oƒ à¿Øƒ;†u	Ùš§³½ÿïÿÈ‰d2aòž±s	Cˆd2£È-ƒgœrµ QdøŽÂ}j!°ßèZëj¤2˜r69	„+�K!¡þóyÅÙÜ;£	„a0Tuƒ6Èà^"~ƒ¾ôáõL*Þò`Ì‚Î™
+{kÒÿQðóŒW›}Wü‚ã� §„Øw§ÿÿÉß‘,«.ÍeÁà¸Ïi‚Cð@ò7!8ŸY	‚nE�ñ¼�˜+=Ãý!	úáN,&ŽŠŸ„M:ZaYñò7"¿ú.½�ÎçŠÑ½û9ÝÙä.ÑŠô�l0´»£‹FÓZöÂëäßoa�™ÑˆþûMû	›³s¥˜;÷Z0ëþ¸Ý§nÒÛA…KÝh†;þ?ÿë§_±Iÿo^ªë›ÛKK�|CPl!ÿ×ÿÿƒØéx_ÜU«ÒØ®½o h.¼¸[ÿÿð[ÿ£~ «õúóg�¿ÿÿÿoÿô_£ý-tºuÈË‚÷þF>¿ÿþH|»þü�ëÿ¥ß¥§¥ã.+Â<’dôöÈ�kþÿÿ¯oÿö«þõÕRZ0Þ—÷¡_iC	zöÿJIznºzb­ú®½©7Ò½"OÙÒôTb˜ðDtÐ¸ÓNî˜¤m„“NÕØí~!ÚªMªºW{_†A0Ó³i!ÆÐÓƒMŠa3xJ„4Ê;šIˆ¦©¡¦Ÿs
+Ê Â xaÚ"ðg…éíZ¢à€´PË¡ä
+€Hä
+QÛ¬}vŠGû)ã�¾öÇÂ~Mü†H…–9¢R ·!�L¡Îä2ÅŽùi( ÒZg6Ê%+	ŽA…#h?–ƒ0<sìºÈ>�4S‹¿þò(ÿüë1¿ ¶
+ƒžœ�»– �À
+·8©ÑÊ*!¬CiÎåaÒUÓ˜VÿÈÃH­ŽRÿzû f‡ÚCþaÿg
+þŸ‚)ÿûû¯Úø"ŸìD}ý!¡]Ç×Ü� �[8þä
+D×Õÿl1ö�¿ÿR€B<‚Ølr· jƒ�Ôòv–CRH-†ˆ xmÙè"Ñ<0¼>y€Ê|'jø0¾l­#{dáÑ´ÚF4A¡ëw¾”†@aé¡ØJ?â“ä2B�®4?ùÈb3AjÈÜÃ�Ð>ä�æ9rÇò;"¹ÇR(ä¬ŠëþLp™:m„C%Åñ\h/‚! k‚k*ÍÅÁ ¸)ÉÙÐaf²\]•apÂDãa¸œp�¨A„
+h'Ä ñþQ�ú1íÕaQ¿„Ï‡ƒ9œŠäæTÊ³ÙÐ™'Ñ…BßP… Â…¦…é„ci»I„"ãFÕÞ¿ãtª×yºŒ;½KÚç'.ú„, âÐ‹0… Á¤Û9Ú¯F'<¬æ{£ØA‚¦ÙÄž‘‰Í3v›Ý„èÃ·þûOï^Þú»ÛZïW/¹¼�¦s8¨Äç•‚˜Oö›opÌm§i…û7]¥v…ÿfËAö«§Ûfù‡þ8cÿzMˆ…ø¶!b¥n.Ô+Õ„ý?é×÷¿×ëUé…ÿÿ÷ý¦ýwO†æöÐÿÞ?åÂþÿê`'í}º…ßáo_ÿÇm Èü0ÿý&1¯ÿ˜¿£uþÝz¿ÿKõÿRá_öŒÿÿãösm'ÿ¯ÿ¯õðD{ÇïÿÿýûÕ{’.¿ÿú„¤ßß÷×òN�ÿ×¿è½íWkô¿û&ÿÿù!Ó¿Õ-ÿÿÕ4`9[ýÕQ!ÞïØi#ª²ßÿ²ßõøkÿßÿÚ÷ö—Vþ*ûÞ¿õæ†ê¯jï|ZiÇ]«i.žœWv«±ZÿÖš§lV°ÓmSv+ûx‡
+aªåÇè4áä£BÃT†Î%ÒÃ´£MµtÂ±Ö�¶�¶4Ðˆº‹Ób“¦“T´Õ&ÅZkøŒÂz0BÂö„E…\Pa»
+.bI†9ßjÈcá©Å«dt»U¦‚&]¦…®ßú#�`ˆdk�ÈAÈ†[úÐãý¯üR†ˆÿûmÿïþAlK x/dAÁ¡ÈeYÀ�ÈA—!¯;þC$‡R
+ø¡A¤
+ì(P«úoúºî¿®¯´äyŽäáÝÃ¹—ß÷ßÇZ÷Åuï¦õK[ÿ]½r¬‹eÙpFùÄ~\Þ¤<ÏdxCEÙù•d|™ä8ôA¦ÈÜÎ
+Ck2VDÂO�#	^x"Žƒ –|.	Aä(ÿË§pÓ9¡µa5D6-0ƒ4âÕ y,A„,‚üE0˜@Ëâ9„ÐqaK‚°—÷Â#6ô»F+´Œ'hÅÅÑ½¿/´^st]»Eë	ë¦Œ{F:hßæ7/ÑŽš£ö¡
+65HÆÓ¥üÃÕº	'œZ½Ù³Z³¶aÕÒv	yŠ®×hÄô^tÛ7Uåí0´�ZIÑ‰¢ïôó}Ã7´b»m5NÔ¼÷Òoãc~Æ–ïý¥¼^ß¶“v=>Ö¯­tûÿ·½þºO§Môÿ½ª«0½I¡_Fð@—â­ÿ¤½/v!R1_®—õá‹cøŠ[ÿõ\]s�_¡Âõ×Ëƒÿ·…ü×Oÿnæ’ð¿ü/µ˜	ÿÓýÿúHÇû_ïÿ¦ôcü¸7ÿÕ´¿m´zÑ�ÿèÀ[kü¸ßEÅþF:i?à‹¯¥û×Ù!ÿÿ
+é ¿½“øl7÷„ÿäcóÈWÝ�<�á‡?<Kõ¶©µF×ÛJÿþ=mºÔÃ¾—d‡ì�ÿï¥ ¿8í‚#ÖÂ#§Ø"ëÿí¯^H$ó·E�º* ÒKG²R‹£pi!DGßéÜRN¿Çkkû]G×këëºöºÿú¯Vûë«i~—ÿ»Úö‘ÃWh,r°­Ì£r½$®•±ºbÄ>†“M®ÚÚPø°ƒŠã‹øam9;Úß|Sw_ÿ©�Œ†@*@ðãŸÈ2CXHAUÎç ¦9Œh>,0“ºC
+1tƒ§ŠiŠ6!1QSˆSÛQ
+6..Ób¢¢��®)4Ój·i6ˆ�P×ˆ´,1* ÈñpÁyšæA„[0�¦oL ­3¿ÚžJÚj¶¡ƒ1 ÔE¸µM&È‡ÈdCˆa<\ŽDByˆ`„0„DX_ˆ­;kImr€G'ÖÖÂ ¶ñÿ!’
+¶@úÈàƒk�$‚ùÃZ49ø x1d2 �½êº…!tÂaT*ù
+§rÝœl�áš?»äáÿ Î:náµw›úº§ÿÿÿ‘Á	G]5½õÿ_Ða4xE™´	aÁngMRq8=‘¢îNÈð„…ã“˜AšÆ‚y�®CG‚¬‹ä�G²ø¿/2ÆaÈê7öJÈóÂ1´chÚz(A´°˜P„4÷F6……Â„, Ó9ÁN>Ó£ò
+°¡`“¦˜O8ƒ—é…pšd
+¡õWIéÃ	²ï1ØO1û	+KžTb¡Z1Qzš6³‡i¤c{µ1tbËÍ^‘‹!ýÝ«1„ŒY‰ª1´aH´L†`äÌ‚
+VA¶®AeÈiÁAšä äÜ±÷¦ú¯V×KÙ†Òwfë[½°�'Ù³V®Äá:ûºI>õìÜÕÕÑ†Ý*¶m¯I¹ÅÚ¯Ké´ƒ§„Éa: ÕSµA¨TÂ¦@ˆ x¥â+Æ“¿ïû·­�Í·HwÂuO¾?Ú]ëºÖô:{÷„ðÇkÚã¾qÅSmË_è:0®ÿÿú‚¬Á®…?ÿþ0O¿Ã~Ãâ÷¯|Bÿ°Æ7J`Ö!~÷o\iXbw—›1=f>î=âäqýWÇLýoKÓFÚÿæ?˜úÌÚAî`+ñÂë^ÃÂíÌxºû‘ŽGä3ŽJ?"aËßÿ÷$:ýÑ‹ÿ]ü¸è&ÿÿÃ_·ûèÅÿ
+ï^ŒKÿÌ]vìÃšËõÿ'ÍÔÂdpPáƒÉðl/”†_eù7-Îäo3#peÙ7)Ë‚rr3göb–åÚd<ÌÞk#²PN	AÄç÷^¿‚.ž—ûÿ^ëëÿäc†þÁöLŠÉñK×ïÇdßK_óŽÞ—’Û�F}½Q…GÓ	èZhÂók¦†&„XL!aa<&´FˆÏv�®&ŠN!¦h0™ì&Ÿëa´¿þ¿ý+×ÿíµ8ïúëý®õßy
+á¼�îë÷¿Õ¾«kÙ7G}Ò¯í%¹�?°‘½µ{½#g¼¿œÍùŒÆmÛó19~Róta8ÑvæÖ_ßó
+Íª0¡›M“ô_hÂ£/å1¯ÁôÅD8lm®ƒƒÖ×Óµ¸‡÷à‘wQWõtÇ{LkDo¯ü0µØ^ëï‹A±ìRò÷ßø¨«÷«i˜ þÿl®×´´óÙ‰¤Â§Bõm—cf3x/h7òîûïAÒy‰6¯¾ìÄž«ØŠi­¦.*¢˜¤þÐiÒi±+OOÕ�«O«tØ½‹‡±NÒq{ka(¦o|?¯ê\@ÿ÷ùÁöÐ÷ÿþ?ïÿçÄÿïKøþÅúÿñ™ á�Ýúl&™v˜M4ÐaPa!ä2�›Ô[AÈávQQMšÚikf#
+›Å5M[7¤Ø¨ê™½“(¯cõ˜ÞÝzÿÂÇâ¿×þavÿ^a/ù€Oÿ¯þÃÿÿåÅwõø†ˆˆ†G‚eÀÁ€È‰
+H„ÐˆˆaÙG&ˆ,�`àÒð¾»²Ü=¯ÿà‹¯Oþýö—ýRìe�ÿÿþ‹ßýµòcÿþÛoìV"#¨Ìà¢Ñ0Äpˆ®¯ïwß¯°±w6—_ÿ_¥÷ðºµ^¼·þéi{ÿ�~×öû
+ËpØm~\2@¯¥¤¶¨Î÷[ñÄh6§±Q´íªñ×è(Øöý�öÖÖ#¯í»ð½}1QE;‚#ß´T²�’vÞ¬R
+ÃTÛ±I¦Ó0Œ/QI§ÍHTaæ`é¤a:ÒN)ŠfˆRi¬STiÇ¼wÜ\=1Z©.Øˆjš	­„""!„øj\‘ðP›†TNŠLA„Ìh5÷VÔ,4ÓU‡~ƒ¡4C$
+"eÎ@ð�@ðÒDDTB.o_ÚÇ­ŠUA…øðÂM6)0›Xˆ†#ˆÿÿÿÿù@jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ r9F@äÃ_Ï?®q,�È-ð‡È¶½s@9xz]ÿ9ô±ïKÿ'uý…×Šý®�­¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø€endstream
+endobj
+61 0 obj<</A 92 0 R/Border[0 0 0]/C[0 1 0]/Rect[343.91931 401.87988 354.95947 409.20007]/Subtype/Link/Type/Annot>>
+endobj
+62 0 obj<</A 93 0 R/Border[0 0 0]/C[0 1 0]/Rect[332.15955 109.56006 342.83936 116.5199]/Subtype/Link/Type/Annot>>
+endobj
+63 0 obj<</BitsPerComponent 8/ColorSpace 82 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 99/Length 705/Width 76>>stream
+8;Z\7=dHuK#cntas4d856oGk./2'4CrH^4;b5s,3Lph0T[dA\*rrZ4frrMW]n\Oa@
+T++*\I=8;aGC^t=B5h7ERo#ZWThG5i9dCU%Od0??DR\5-[qI_r*-!DfWL7JU4\bnm
+7Xg6C\Xlf`,GdIaJ5q.i;WQY98,V1G".>S4[l[I4j8fMEIcl4^.Jq2l$F#Bfb8599
+6#r8#=Z*g1d,BB4j(Jh:RL/+T#=,@HMLoW.<oPiYh8Ci'"]QkQ:TNnG<;>P,l7D_a
+,kRgLm2YFoY,A$n3(4EkacI=3Zq<qM!PoJ-KGU.rWQ*BPadA37aoK;2PpEf5@inFV
+6X6oW$U[.";a:N_DCpsOKalif$j6]WO>qS$W"/be*4b[0$M+6*Nh+SJi[kRDjc#[3
+;PoP+6dq%=IO4lGG>(nD,!EV!R9LBL=4AD4fiGt'+/@C<0pfL>]OZg$NeIfNDGId2
+]G53$c7X<>5nY'3KkfhHWt8Q*o%4WpeIK$sS69SjmJCOP[L`"5$)3q5.UL]J^gX`h
+'$57PQnU+GEkOfaM^G4M9s5mMZcpSHdYaL<DRL5)l!?Z^=K77DrKFcP0W:5=Cpd[&
+l<,29%$eUce%P?+C7MIE)7rpTGL/*([GSg%M"(PNI)J95jPpO^9i=n,?I.4@XO9AY
+AV(s_H$#Xl1XDrpYLKs/,1;d]m7l@*h=eP\"or.$M.Z~>endstream
+endobj
+64 0 obj<</Filter/FlateDecode/Length 10>>stream
+xœ+äî|endstream
+endobj
+65 0 obj<</Filter/FlateDecode/Length 4367>>stream
+H‰ŒWË–ÛÆýþ–Ô9ÔO {[�drbÙ‘o¨,0 f”"}ªß�G–ÃVuWWÝºu'þÏ;œ4ÉîÍ§º-§æKý¶oû¡¹ÔÓÐTÉÐìP‚’“,O
+I’¡Þ=íþkþ�s–¨oÕßS”!J
+ø­ºìÞ<\Hò®ßýs÷ãAû#uÍ›î;<i[†|®à›Ã×„&‡!ÙåÖ¦y&LqF^Éá²ÛÞ—Ÿ_%¯¿Ã˜„C„:aW@hÊO€?fØ{åH»Ä·íŒegc&ÁÏÙÖ×¾:�ö
+êoÀÄ;Úà
+øI‰\ÿâC‹žG¬“0N	¡4zfhã5AÆï)Œ#š_”IˆN¥Žåyæ’wZFö¹Ãç`Í¸	
+eî	4¼›1°
+¶—UÊà…”R{b–x`
+ gàÉµ_–™+Œ™‹] ¬ÐáXÃù[w…/‡Sµ%§ÚòCóœÍß¡`Jn#)Ì±÷Áxü¢ÐðçAB�ý/C_Õã¸®–‡"X0UëÙ?ÝGµ˜‡¯ �œÇt®_®3¤
+‘(C]¶îÔ!I%ÊØç	�‚„Ç|í‡öäøÂšiÀ†Ó/åõÚtÏîéhùiŸ!á
+•Îb0rÜ_ûöÛsß%¯RŽè¾éNMUN5dñß‡¿ë»±VZPªŸTª`ý1>ÛW2MOÁzèûi�
+øšBÙ •§Ý¾ìN‹	€—SûõØ·ÍÉvö˜!Œš]Ú6/†(eü cœ‰”!ž‰}3EYñA§XfHæ"I1ÐQNut—þK}©»Éˆ�P‡0¶o˜†ò÷ºšú/Ù:á%S@Ô,'ú‡(ÕQm¢§ì�ŸšÎâÙâÂex¨Ç[;-0¦²àŠLâ²-¿ExS±Þtún€R‘­3¯»/ÍÐw*]Q‹p›\‘1,™N.æÂ$·¼®ÏŸ�ãñÖ´'×æá4+rÊì÷Í¸zœÏwà:÷_»Xh†áw@3dFæ›£eº”jÈîd¸DòÂžó°F†ACÝa_K?,Åþ©¿©†X5%ËÊ]XÓãÐßžÏ&rÜH9W©C’Ú þßµVÚ¡›ÆèÐÊ 
+üåVP!è£)0Œ(S	’Ë1gb‘ãY°Q^øcªz˜Ê¦›¾©t>öcsiÚr¯d›Ý „êk
+=®Q°s¨	Õ:Öx<—×ÚÙûéC2Žsß“ý:lc+9¨€Ì›Ç(ÃÊ,¥‰n³gHŠq—ü§¡¿l(TŽ�ÅH%‚)i�SãÀô]3nL€íäJŠßˆâèH\Ñ˜‘×CR],Â1©Ž¯åÏ®½ýµëå SØ¥¢À3ìn¶=Žµhûè0*9—îí3èçé|™u¡yþ2r…$¹0¿nã¤:“èr…ø3Î<XïÇºû!n 2˜o®ÒeÌ½nÀr>Ýê(>i¥‹–ÄTãŸ “å
+¼.¦½âZ$MÆ�ûñZW7Ýe0­ é†ú©…!Ô(	buðr›V=ù)èzæ\o0Fx,$¬~Ö`¨?×³dIŠÀbg?f«ÓR 9D’’L`åf¿e‹ôcÇ„oþøö_ÿøõáç�‹vÚåvj©ÆK(„ÈsnÂa»�èf^™ú-ø‚^ûÏ†òDK¥×Š„êòà|.ÿtãRÁg®Uß�Í©l-ÄraùÂÈ‚bq�°/ëE…ƒàûØÖ—-ÁBíAÐYŒV;Ü'#1³?F�œr€)^ˆ“QÛ‘»?7ÏçöÛz—LaÑÒ}¯XD0b°\U·dÝjºÓœç®I‚!0C?)Üš©a<lêcL¥ª\\€²‚ æ.¸ô�M«™‚«4r8ïþ6ê‡¯t&�+¡®ãÚþkZõc �Â"²»”“ú\/…fT¶0˜–ªz.®qé=†²{®SÐ�°
+p“%¸•x¤2>Á°à˜½ï¢yGüÐmÃÜùq×ÉX
+CÊg¡ß†›½Ì8Š<U'¿Ž¸WxÂ`+2�/ñÄGW<
+ƒ<ƒq×CþëFÏVƒì	'±[=ýp¿Ý|™)³3Õ/³3&\ë@€öthÞ¥é�|Ÿ‚òB�!ç½BÉ�—�DÀEäg±ñÒRÆ„Ê·÷ˆÈÆ¦¤7–YhßYK�wÈü!§þ²æ*Ðµ$wò!Ôc.”¨,\ïG|ÖDwq�gk"hIEsãÊY�|ÌÁ�Âëà$�rØbð;5“‘cÕÌ|[ò¹RR²ËÊ©o‹Üáè‘Ç}W‘¶šÕPïêIuŽÚW$1•Z1$Ta¯*Ö#5fJàÈfœšj]X‰ü^¨ý
+^euvd#BNÜnÑT®[S[ûÃjÞ[)(Ð4	žÇHÄ¦DM¾Xa¦„�YãVÙP
+D'øšËæ*Lœ�ªð˜û7e¸ZF`Àð¼¦zœV|Ob-Üwë£‚¢§\)MŽÈšî¶3cæ¾·ŸïBË{x´vÍÌš
+8jp›lŠsØâÅõµš”0'ö_ëõ:`„	Áæy�Tµ·S½‘7¤i;ÎáÝnÿy�?¿Ú¢°7´€×±BÎPs¿ï`?tÆ³n_¬'˜H/>ÁÀ=Òlö�8˜Kì´ò�uUeÀè©ÓEcÇ-<ÐÉÎæÎÂã«ãþbŸ”Æ‚&…wœnU}Zj2¨TFáß¬'-‡Ì7/Ó�RÐPÂq’YŠºf¡„"AÑ	ž†r”'Ïqò‚"¦zn2dŠóyO£Òçá.>3§jÐƒù‡5õŠ;ëNÕ^ÛÀ"Cô"¨;r¼UD¨!I”„uÏÃÖˆ°,6kL¡ˆÈ��Ææ±Ý€*�WR‹¥Y­Ü(P‚|íNLÁc>ŸÇ ß`¥d:À�gExõm£¸ µ)vïZèð�ñL0é¬Åùš­H1 �U)„G:zI$9
+êg]Ó=
+¥–H ñ•bW’'yÅµ\´îÙ€)‚³Z­óz£÷£NgËz`ä¥¤( m ¥—’f›rh¡õ0ìHnc³ãiq5Ë€}õÂÌZÎâË­£H<»íP‰u3Wº>„äÞ0cEdq\
+€”«r™,®‰‡™TÇÄséOu›mÈxÝÉ†ÄÕžÑøÝÁÆ¹V¯Ö~6ò1W+\”¾yp"ÖŽ[Ds
+�Á›‚cJ$Ì^Ý’†Ê¨§2¶¤2ØHí²^4ýi9Ã!Žàç2¥MS¢ƒñSyk§ïƒ°‹�Ñ�åm=‚
+?kÔÈH±úãµ®nmiîW„´¡~jÍÌÈ¶ö/œRk�’'¿=d6™!‘àÈöÓûŸÞ|ûþWïaÄd*Ì„Ð\Mxˆç§å±J[pÇ?<6§fãñq7Î¿³à@\Bã—ç¶ŸœØ•«ƒ°PKüQ©ïø×¾û£lë?^[â`b®ô­Âhìõ®œnÎ!\(ý…!‡\E?íZ^xó!ßË6T@r1ólºe„1�Cœ2Ÿ½ïèÉ§¦#(ÓL¾”æTÍZ§_”€Ò…}äÓì‡¾ÐêmÛ<×]U¿^tÛÝ†`Xe¹ÕÈ?Tå©¾Ø­yù—¡ÇlÝdèy×3]¥d±T]9%�…Š°2qÏ’^ÿmãdÐg¹ëêÿÏx¹,5ŽCaø	æXÌ"â²d]—tŠîa¦+ÐÝÕEÏB€I\“Ä)Ç¡‹yú9’uµÅe:–tôŸÿ|§SÏõC¦mÁ<Jg®6k¨ŒïZ9ÕÆ¯g.TÙºÕ¾†¨�î!îG‘Is¦€«2ÝÍ›V'I¸øìÆÕE¦[Ã³râYå“z©��Úë0¢étY÷›öÑŽ#|öä»Œ�¢d4eŒEÝõªÙ÷ÆÉÜö¥k�°79w†îäkx°)L­6~ËX‰ÅGˆ3‹ë¼I5VþJ<ò
+Â(tàðéöiTUÉDGâ49ÒÅêâ*:OxbØBÊdé•rr:xÛØ™t…º«¢¸›Cç.�8 8±m¥BÝ¼ì 7§]ÞËHé8�|”µ£¼�TRs»[ªÍ$†oì=àZ=7k¥;PÎ2Òd(úîáPP>gå	¨Éõ
+ä9G`“H’tn³%ŒJîØø§ê§hŽmçí®¥[˜ê-‰SAñ6.Iš,ÿûþE�¿½ô\]²>Ä–é[hA‡�Ïê`Äµ_	è–¹e<fAÝ»²¿0sIv?9³›v¯ºyn80s……�X­éð�KÛíÝìÆâÕ!í
+OÃï 	®Ç§ñ6�Å0Ä-[ áì‡1µƒÊ Tk3iš´<Ã '�¾¯]û¤Ä¢>#„ë›W———ÙV-Ù÷Î¤Y¨úrŠ$âŒ‚wb¿ÿ¢ÝÿùnýÒŠÁ±]ˆ­à”ëáß¢²’0épÐMz¦Õ ‡’§’1i@
+«.N}»{µì_‘«vÒð	ƒ>#¤„–G+ž¶èL­�h…pÍ÷«:´'“Þ¹
+’†yåÞz®t‡2Qv¼€Þë�š/ÁP”.h¼AzÓHS(
+ZA>Û]7-¾«®Q÷Ûú8�ô³€îkÙNŸRÌ°E÷›¾}Ø¨®o<¿TÁ_ç®j´ô�²Ô-Ñd—åÃ—NýžÿÕl·ÓÃA	sænü©mÿ�Ú |GSç°dÑç#U ÁGl¿)~Ón�Â+gÐ.ˆÿ„HF!Ó ‡$Á+
+L•CÀÄÌÍJ¿þÎ!¡F*ZÊ¯öÆV±ÊÃþØÏ”šäÎ),Ø�ì8š—"ŠštGÆn—´Ê¹R4(>Ù™6¼¨¦}cœºÖüyl
+»ÑvÆSŽ‰ÇŽÕ2¸‹¾­á^¨‚Û¸zoÚ‚�ýò¥Z«ÿ`úÈé’e=ÆL].ü{•x>º7.+=ç^—Ö‰¹nA€#Íy`Ô*SéÝ4†éÑcé=MˆÌYIVWXFú;:öŽý3­
+¡Îé–A©dÊÌ)Õqñ¥°*^ÂÖV¡‘Ÿ€¾¯qc™:“židrƒ÷*‰Œn
+é#­æŽ8ØÌ·9Õ„œ\>7�z8ÍÕOèØ¦~rË>›dZ ¥Rö¹YZ>ŸÁ®>]Ø–M‰‘+›ã¦ý�­R
+ã“#´‘VËÎf‡Á¤sYù'A¢
+ÇC
+—’AÇÂ’ˆ<ƒòöA;uøPÀÐ¬™�º?5ÛÇ,BC
+(Æ˜ÌsÂËI@G!ÑÙûM�S{ðqÌy´?dF :Ëñ‘äÁû¥�¹­6É‚„<t®êCÛ�©nÒw²X~›¯®æ·«¹dó’™¶€q„^ð'€:€á±oúS_{w–9¸=!7g¨48†‡ùh�—y&³HÈÁd©_�°]+Â»ù4„Mè‚I¶ª�§mïÞ<UIˆõÛ=s¸ÈP€Èu{nBqt“®VÛéé¨ý<
+Gcñ¿Ûnû8•�?üÅûå ÝC¬Al“%ýç14%î×«UÝMŽ£¿Ì¢K6R%	³°ÁÂnƒ¢Cô±î|„úzÍ �¸‘äSÔvÝvM¿Ùå<ÖdëÑ3„¹ÆU2ZQïŸ›®Ýïê}NeÈJ¨T$x²Éºy®÷o(óF>øF¶TN
+&Èø ¾’öŸŒ¸2Û!Yø$^‹>yµÏù…[¯©O&GS:Ö™,á±2Íf'›=5ëSWO:Í«íÙp*…kÏµ«×
+l¯k„Î–õvë 3‘+ £¸Œ|ÛÃÛ€èú—)5C¥Ißac©Õ¤Y´½†°>&,ûs4]Þþñ¿é×jendstream
+endobj
+66 0 obj<</Filter/FlateDecode/Length 149>>stream
+xœU‹±
+Â0„÷ÿ)nT�˜ÔRi·Š+\K›b$Mb’"úôf•[¾ûŽëèE§žö—B B?“Ï¨9+”ì�íB›vMôWM0zT6fX£ÊeÑ)sr
+®RJÜ½qA1œÝÛ7Lys­Ú Ú¡à¼Æ� ª¦<bnù¿á¦b
+zLÚÙˆÁ{óaÛþI²§Ž~‹§3Bendstream
+endobj
+67 0 obj<</BitsPerComponent 1/ColorSpace/DeviceGray/Decode[1 0]/DecodeParms<</Columns 1838/K -1/Rows 2376>>/Filter/CCITTFaxDecode/Height 2376/Intent/RelativeColormetric/Length 43305/Name/X/Subtype/Image/Type/XObject/Width 1838>>stream
+&  ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@Ì097)É¹NqÎå9NWå9\@°rCœsŽw)Êr §)Ês¹N@ðƒœsŽw)ÈDîqÎå9Ç;”çî@ðËrœã�Î>AlH+a
+Ù2 ¤å�ËrœîS”¬¨)T§)Îå9PVåP2…ÊsŽw)Ês¹NWåPªåâ"#–êÀäŸúûÿòƒl<È‚Ü�ážŽ@ðÐ9G.W xgrà¸ xwåÖ‚iªaAB„ð™\&ž¼vÓíj¿§oÿ»bä4ÇGpä;n/´.CIÈ¿.©z¯ôîâÿÇ¯«®ú¯¹Ãš·GãYpA`rnx-Éb§�È™˜rÓ _	Áã!•„¡Ër?È	2Ü“©qÓ/¹uH!aúGÄèXPš¼2ðŸ â
+2üÝÁƒA¡ds
+xP¹n\d¸�{=•Š dùn'á4ñÚsÚiÁ¦šØF.ŒT„1ØVŒl&ƒ†�¦Â˜öèÆý¸L!iªŒ^_ié£
+¬$bêÎÔ•œé>þÒ0Û7]›»‡­¡‚—zv¦í;RíÎ-ÚKfìÅ§¦÷KöyQ‰‡ÝKunc°‘‰¤î×î…4Þß¥ÿïZ^­~½¿ZÌè:W¿Z]º¿ï»	¿ëßÞ›¶¾ßÿKÛ÷I¿ÿüZø¸cýW¾!wÞ÷ëÿÇú^�ŠñØü1ûßû­/ßÿñç†ÿ˜ŠÞÿ…ô¶ÿ^ÿ_ÿay�}¿¾ÝX}ýÿþ¼ÿßÿF/û÷ÿËƒOÿÂôðß¥ÿÇýþIÑ{ïþIÿÿÒþðÿÿÿd‡þýÑ‹Ûk·÷¤þÒ1®¿ûû×òNý¿tººÿß ÜvÊº÷ÿûýþÁÒü�å8wÌáýþëáþ¿·{¾ÝÞþ+¿]l¡íkö×ýúý¥÷kv¿ÃëkúV¬5Ú†Úö·qiÖƒ°ˆèwÅßõi0øâ-84ïn–Ø¿ö>ø�ŽÂÒûŠb“àØ¤-¶•¦;j)‹ ›Å4Î!lq±I¦éÚiÒl¡Zb¾)9Ä?á0‡—›Lâˆeà„LÞšj™…a„Ó	„AUÚ„f0•°ÂœEÁr8hSšaB Âú˜
+$ ä
+‚ŽAl4Íû�ÞA£ ÿuâ½$è5÷�d��”(�»ú÷ïé%†¸ÿd2CMÈ
+¶A¶Êr
+AžmqÃJ?tÈ
+„-0ªC=ÿõ¥èÇ]ýHd¸äq—f{/'M÷ îä2Yÿ× Nõ¿�~*é~úãŠ¯ª_¤@ð×Šäœ�ª�Ã‘]Î>C2,ƒwò"
+r‚MÎäì�XêJ?²ƒÁXk ÓRpx.ð¸*Â�X0™c•\A—„ ª8²&Ðj²ðŸ•fÌ Â&ƒÎäK!£	ÁìÜkXA“ƒÁ8=šÈð»	„AþèEÛM G€…¦]:6ª„0šh46¸a<*s	ê	¯î›UÂ
+†ÓªS!hZa4-©�þ³ÙÎŒ6úQ/2¸¨&bÓ¼Ææ6V#ªæ*7Ãìâ¤øfÌÅ—­¾Â—m„´b£y7 á‚)Òo�—›9ØIì*¾í)>a˜uØMû0jÝ'IÚ§fýÂ½éþª­]§õv¹»Ým?]Û76n]§ÿ÷ý-ÿøÿñ
+º{Zßi{Çõ´·Çcÿÿ\qu¶¾–ïNñ÷Šþ¿ï¬Ãÿ_øWŠ¡÷ßÿýÄ/«ýnÿÒßÿþþ¿ÿïíÖ?Ë„ÿ£˜ÿi~Œ�á_˜
+ÿ¿ü¸70·_ÿ.áMýÿ¾+ÿÿÒþÿßÿÿ„ý¸oÿ_ÿ×_ÿþÿA4¿ÿý‚#ÿ°Dþ—áPDü¶Hõú²C¿û×ý’Áû±_ÿ_’ÿõýÒx5þ×ÿµÞ­{­¢1ÿ×û×½N;ë÷ÿëk¯íÿi}ªoýë¦?Ø¯ƒŽ/Ž*/ôÓ^=mb±ßiðmÒÃøâ»îíö?†RÝ¶)ÚM4ô-¦ß
+<æ)Öšm ÓM=0�Gm1 û¶�iR§¦�&kOÒfÁÁ<FS�¦Gi Ò[Dq¤ö©˜‚hZ¦o]0™‚�ay
+9Ç`�ˆ¼5LÃ	…öC$4àDDR!�
+.B@ðTr`PkÞ±õ!’
+¤	ûø¤½ØMi$#ëÿ¿¥÷îC'†H†H69ÀÃú�Èrì„´È+9
+{ x�A¤4È9Ï xhÀR /áSUÓ[\ƒm‚O
+¾ûNí;Ðg2:º¦Â$:1ßê]Ä\ZãËÞéÜ†wÿÿˆt›uQ×ýÈƒþC1ò
+Ã–>A»ôúà‹­y‡ü�àð{5“òéž³Y8ÉL¸5•ar99à�‹ò¼ö†CC“sÆLrp eÇÐdŠóÙÇ8äN@ËÂðÖ\a óÁ/.ÉÙ¬•0ƒõBÓ´âû£
+F6TâÐnÕ(L!z¦Œ}}¦©5T„,#kqaBí8¿ç±hÅ»wô�ÙÍ¤Ò£^ÜÅi¦™ÏÜn“]l'j¦ÓF8`‘‰‡vsp�…|»aÃ£)¿îÔÝöaææø}'vŸ§§W˜t›·V›vnÿþí·ÓÓôþÓ«óÍžÿéýiÝ¥ÞŸÿÿ÷¾Çýïþ¹‡Òýpýúßÿÿïÿÿþ!ÿÿÿá‹ûÕ/}÷ßëîèBÃõßõÿ÷ödªˆëø_ýÿÿoØmþá»ÿïý/uPVÿûÿ¿~ßÿk/ÿÿö+m‡ëèºÿìV—ÏcFèo¿ÿÿö½Šï×ýÿÿþ°áýê6¿ÿ…¯õ[þ÷¿ÿ¿õÇ_ÿ÷ýÿ¢á•0îA�ßíZÿÿ@ˆQô‰ík™Û¿¿îÿõô`'÷¿Ðm¥úýßèÌ6m»ÿÿ×]Q¡½ÑÃÝï}ºÖÓa§÷ÞÚpëªqHv”ZÛšiÁö•÷lSM ×½;aöºj¢ïVÖ.ÓŽé°Ò‹“ÂþW¨G8µé¦ÔFÚqÅ!mzPÐ‹A­á:ÓkwŠA±M!†„[V¾Ù[5ŒaMá†^Qqú¡ˆƒLÞ\LXL¸"f0š`˜L¼„C282;
+\£ÿ�<5Èd†î‚Øi»ú4C×M/ö;b£Šý:j¿PÂ ×¨ˆ�¿þ¾ß×©�k‚ ]È9§$ä
+9Áeý²@R
+Ð@ð0ö�…!¥0Ÿ×…Nÿµýr
+c�ÊpîÑ—
+Ð;Bôïí�ùã�Ã¸â£‹�+úUÓ]_Ô�á�É9pLs9ÉŽ™'	ç�ÈkŽHr-�<QÈ£žeÙêC\rEÈ8äAÌëû`ƒ4ÂÂhÎ.Ì#lÙfÉ„
+8²XaeY/!Ðh2nx ¼ä�F	“sÚ!ÆÂŸ™¬¬0žOÜîCÁnx!�ÊÀ@Âh2;A“Âòð—«ÒhÆÐÂ„Âo†§ñi¡hÇC
+¡4m4Æì!ij¨E®ƒXP…£0šƒM0˜MMþ‘‰½3žœ<ú<œ»³›j¾n£a0§<»³Ñ»Mß.ó³ˆ�RÞyC0íK»³lÝËßžNƒÍôœ3}¡„ŒN¥æ“ÿûÓ¡Ì0˜N¶Ó½µ×¾ðµM…_³t=éh4Ú÷i÷JÝÞ¾öÙ°{	Óéþ›[Òl3oÿ¸Úïÿãý±¥ãüBÓö8ÇâÝ¿á�ÿCïí�Šïüb¿ÔÀÌÿÍ‰økâöæÀ�…ï‡ÌáÛØ·¶OëÞà¿ýóßëûÿý~ü/õ_£ðÃÿF/ý¤ÿð·ÞôbüÀg«øFÿììÑ>õÉ?ÿþßòõ~ÿ´¿ß]IéWûÿüßý[ô¿×þÿ.–Ht]>¯ÿÜ“þŽÿ®ÿÙ7ý/¬ïïÿþˆ;·ÿè/êÁßÿòO½m“uþWXI-ªOìWÃKÿ_ÛÛKûÿ¶ÛI†í4ý¾ÿ¯ßööýéé]=¯k¯Òs¾BÊ�6)o_¯ãøh>~ƒ‡
+V>ö!ßÝGÙHÕn®•oµtºßk
+Xá·ñQø®I ¬ºë) �¦šm ÓØªCcô- …§VN6š	»8’wnñÚœEÚi¼B­Š6š_‹	LòÔ0�¨A„
+¡µ[ Ðó‰STÓ#äpÐG+Ú!t6©¡]Xé¡„ƒM4Ða3‚®,Df Â xjùÁ�Èd´[c_$‚DŒÀd_ãKrƒ?E9Oªi'ö‚�—M“÷÷á6ÐúA �A2é�Æ#Ü"œã„]z°’	ÒÿÆC2>GË¢éý ‚a†#åÔ†Hg�˜nä2Aqþ©ƒB!Èdp™x x+a»!Ü&@âh°Ÿ£µ„Îå9ÇeÒ—EÑ}&¶�ÞWÛ8á‚"
+Cœp‚AÂ.ž¤c�8÷&>CáþÿŽü•©€g|†@ôêãÛáÿ ’MˆkL&þ>êëÿãÐˆŠ"é®ªŸ®»÷;AÎà�
+Gã�×/Èá¸öh+	qc–91ÈG&9É9à ËÌ†8†Xä‡'9("¹à•žÍd¹Pe¹Ü�‘ÁìÖy‡"ŽKˆ$á.=šô9Ì9	*Èøƒùs¹'"h"Ù‰Y}AA„hB	„Ò	I?CMa3P Âa´õ.ÊÃr&…„BšeÁXƒB, Â�aT,&½®0„44âÓ@ÂaA¨A¯Â	”ùÝAõˆˆèÆÃÂM¬aFÓ°Á#Ñˆ46šUF'Îž^„=œY‰±†jŒt¥æŒW|0‘�a¡…hÄíQŒ4Ñ�£¨ÅîÒ	 �@�H ™|�‘òè¾ÒwH3v®A›�ØM³wßÝœÛîÍ’m›¬ÛV¶Îl0šlÓlÃ7>oaéÃ0wÝÝþÙ»½LZÃ1ZI°Íô›Þ­/«õŠ$A!Ç\su\uí/O¤î½7ïOõý}?oÅØÿÓÖ—ï<ôÞ÷Ç¿ØM"� ‚&?ZË¥µ¼¾ýÿˆ^`þßýõüÂ¡ÿõýÿá�L5üBÿþ—z^þÃKî�I …$‚H$A'0	õý	|/�éz÷ít#ûÿëþÃæ¿\/ýüÀl»ÿ­Ú0'úÐ \ãˆ†‹Ÿ¿þÿ£þÿßõÿ×ÿöý¿ôcÿÿúWÿA¿ú ’$HÃœp@¬§a,�÷öMÿëGÿÿìW½÷ÿÿÿáü�á¿}/ÿöÉ×ÿá¼":~„Pâ- ‚z/½+_ûµ×Kì˜ÿý­_}–ÿûÿÿ˜vûÎîÚú_ÿúëÿO�ÝµÿmEÒ;‚Gý�'ø¯þ;âÐvÇî¿ßûÿuüöÖÇ}§Ãÿ¿GüUûu­×Å0×¥C@‚†Ðç$KKqM*ÝíZs˜Õ×­XiZi¦›÷í�4M ºpÕ:Š�>.íˆli¦ñÞ¶­¬:x¿¢�|D2MCJ�¡¡m!m3x[Pñ
+Ð†Å!	ÂÔFÓq¦Ù½m:Õ!l*MŠŠb£i®íEÐA H§ ¢`s¼ºaÌ„A0ˆðÎ"B3˜"‡aa³qâ:	BÂ!f$0_Df ¨5	„ Á_`¨$Ê)1È¦F`ÞW´I¬�YpmS±×þdt.!•�Ðdp Ž‘ô}”U¯õ;+ÄOyOˆŒFa4û;•, ‹â‚	AŠrŽHrt]*tøH_¨Øˆ²8,D0]¢ù#ûEÓ" §8ó�cÒ š	a ‚@�Iw~=Áè§‘ÿëŠô&GË§Â	�A@ÀÿÄZ�•ÿ¡ñ^§)Êpˆù.°Ò	Šp�H§;”åfC 6‡ ƒ“r†£�G x4ÁÃ6C*È4�ÄRA,\ÈfG�È( aÂa4ÈZ‚�T…
+š„ø�ÙÚª.Œ!xTÕ\+~º0›¯G—I‹­§vž‰CQÈ09‘Ã¤îäGìFöÃ‹¸¸øþ¾9!Ý{vßý}Wý{è¡ätxfVfÈÅ xkEÏùÇÓË‚H|†W*iæ„rùH£‘G×R+òêCVe9N}Ÿ ÖåM‘Ñ… x=
+`�„!ç‚ìÖN2S.
+eXF€¹²’Â/óBg29. þoÊÃañPh2ñ„ Ô¾$ç‚^O	MAŸ4æx.Éb|YÇ¸R:r¦¢"Ž¨Z6©Åø]P¨Z1°ƒÑ<Â……
+8·tc· ê-Mé„/A­#	»éªxOFÓçv�ˆÔdGç³ËNÅ·oÒwg:L)�£m™öåg#w˜ü»vïNÂa#aN,&éåçh½F'†Nï†1C¼¼ØP›åÐ£Ž@¸ä4q×lüÂv¡up›››áô�ÚoÒô˜]³Ô-ª¶ÒpÌæöõI?	þÝ7f}Ù°#ÿÕ?¯«ñã¨�âç§m×zÿÿßþŸÿþ¬ÿ†?ßèpÆ/ìi·Å}õþ?¿‡!�Â.®6Duýÿÿÿÿ¯ºÿþÃûÿoÿù€nÂ_
+uÂúÿÿ¿E¡!„¥Âf­ÿÿÿûiÛ_ÿö¿øaî¯þÇØ~øF×ïÿ—
+‹û\ÞC-ùu]=/ÿÿÿcF*V—ýûÿ¿ÿîF;þ½tûÿýÿ¶L&U­ˆ¡õÿÿÿð’ö*ÿÿü?×ù�¿t¯íH#·dßÃÿÿ×ÿd‡í.ÁSˆ¡T¿§é}ÿè¸lÝ¢áÞ¿åŽßþ×wÿk»þaï§õ×ïû_üD<ƒDqÑu¿búZûië¢pvºwZÃ»ï»kmm(»Û(|":ì>â®¡„¾ÚmWˆq
+;»µca·ó²´ŠsŽ@Àïm„i„ê*ø´Óˆ¸»‹å
+…NÝ4"/µMŠbž8ãb©
+¨ÃiÃV4Âia±lC­ŠâÁgã�Æ]wuˆÙ‰S™´—Ú1ç•¹ä“mˆI«
+¤ŒÜ	8¤Újo
+š¦šÃA„ÒÂöa„Ìa]¦§L&šâ",ƒŽ’Ì†‘t]EÃpéQ˜á4Â päWŒŽ9ÁªÈ
+°"#A„@ðlsB"=²8QÄDCÂâ"¸«�%Ñ¯‹«2V˜²:ö’¥Û	XíŠ�™HCP›MqaÙØ4R²?Õ¡aiB&Å„}>•ýmP¼È…8ä;¥%FCIË¡ˆBë]0ç­‰LŽ™!ÎëÓKTÆC ;�(¡
+W x¶@õ#Á
+�‚!œpPšªØ&LŽ[(¤]¹AÃÒl=Ž—kr
+ŽA"Æb³mèÈ­)‘j	ou_ÆŸ‹ˆÿÕofBHç’èÊ¼�—R‚ü[žð�
+yäW;‘îNÂ’â\™¡Ë†-<«#Â„r#‘ÙÏ‚ÿ“4„-0žkÁ´, ý4Ðg‚~†kÅ…!f0�6aN®.d>Dú£4cs}Ñ�ª£0Z1Q‰ÅÌa§1Ã	…ËÍ4m4c|Äíl=…ø†+`´ìç§I÷ªÃ6“7ª¿«ÚfÚIÃ7i½æê¶Ô'J¥lÝî
++Ù�ÚÛ´Ú×®ÝŒ}ÇB×M×õíÆÌ÷÷¯æF°Çü×ÿI}¿ÿÿé|Û|ºw¼À—ð×Ë‡ó{ÿSæ}¿ ß ¨ì†úúSÿÿuþŒzûÇÝ'ßÿþdB¡ACþ�Áÿ ¿ÈÇéÂ#¦Hu»ý-ÿþ)uÿÝ¾]xÈ;ûÞ¯õý¯v­«Oþ–žþIü“µ¿ÿß¡ÈBÛéC	0Öû_í~[I:ëÿýŸ^ô\>ÿnµH˜û¼��Ö¿ñÅi½ zÅ^Å1¹C¦ßñ
+‡
+x­ŠGÇn®ÛUÕ>L•4*Ö8¦š‹V"Óh Ó¦£Ø¤ÓkÓ	´›R‰Å!lRhRès´ˆÖ„GP˜M“œ\5@Â&&Õóša0™!m:A¦oL"ÐM{2O—Gu¨Ì©†HkŽ‹��6!¯B#ÄG}ýR×â¿6¶¤­i­8Aö+t[âü~þ¿ÿÿÎÊ¿Åû\®«Çû~—ÊáØ¿¯_¿k×ä©?cô¿öþ½Ä—çdÑ�4ý¤]­!úöVÇæE+Hwû¼hWß-á~6½ŽÖÄ_¿¥ó	üý}ûúZKïé}þ@Ïâ; aÈbiñÜ¯$9ÁÈÂ3ôì8Á“â?|ò3
+O˜dù? Âp¡L;	¡§Õ„�Á†Ãí¸HÙ8A¶ÚAáÁÝ Ûoïé:MÛ¤ûét“ßé>“¤÷×þý]ÿv—÷z½u~¯ü¡Ft]ÈæG"86’t]Ë™R8�åÑt_#ä|º/‘Ä#�àåò>]ÈùˆæGcDs.‹¢à¹Éòèº/‘òè¾G0'ô;ËõÇöýÌ'äÀÏi-{mÿß^ßþ¿}°õÝ¿oÿn¿¦ÿ¥ý·ÿaûÕ¿oßÛ÷è7õ±ñO}1ÿ�AÃþï½ëí�ƒý­ïïùïVúý¿io´ßk»iXJêëuWòÛI´»a«kl4¯éX¦( Ã±	Ðâ‚lPMñØL*ÐgU†ŽÐ0ˆ.9`È¸ä‡ ¤ä2ãÜ�á—#�4‚ÁBV
+9PB9+]&	*íÆ¨7éÂ
+›ÒÝôbúW®Ch~»uíõ%—‘,ÞO�78ä¯™ŸT²	¹PJÈíJ‚ûÐ|ýÂÓ@Š„!¦¶Þ‹ÿA„-œ_èÂÚurñ„oË·O£ÍÿÿF*ˆÇEìÞÑ�Õ|ß·C¨õ‹¿Mú_Ç1vÕë·ÔW¦õ˜ÿ¸úß¥·^>Ãð¿õÿûü_Ìû{£ÿÂ#ÿÁôÿ÷÷‚)üußëÛ¯mUÝE-¿×�‘u–ëW·ø"óî!ú¶”UÓjÒå;¼Uu«¯Q_uõLSñLSÄGµ§lWÆèD{²úPÂ!‚
+X¯A Â¦0ƒ#…±¡t„DfêÝvÒöI°ê÷¬Eqÿü�Ì �àîCD<3\…‚î@ö9�àÊ9å¹Á\|�Ì4†�
+©… Ûa0L&A›–@¼Â¦AjÈW ½‚zýµ®ª
+ªºÚ¯1Œ.ÅÜ†pï1Ý§ÓÓ‡êŸw¿}Ü_úÇë×ô‡ÿñóÙÜ\‚93ùÁÈhtÿ!˜?ù0h9JÈ+UeUr ±…h@œs9C�d‚œ�Ö‚g('…#r|Bá\k7žn‹%„¼†0—²¬œÍaIY!Îäì‹è<«0C$çrw•y>1ÂiåYp]—/.
+@F�ƒ`¼ðJ	æUåq³ ¶
+ÍÁ�ËnOˆaW}¼-5	 ÐµP�¨L!a‹M°ƒ‹ÓBÑ´Øqiáu
+L âÕâý¯ù¿£§j]ß…74m4bÌnbÏ¬¹Þ¦¨ÇF+	›èÅ¨ÄïF+9žôaXwðŒ]œ�51íQ‹{UÊëk%Hº<‹¢ùØ5é¶éÛém˜:]Óî“¤Û
+ïutaÙ½S{õÕÍÌöSÓ³¥tÂÒ¶çðþáÚÖ«›áøS·ñ²ÝX
+ßïÝwâ©ëºÚýìÓÅ
+/§Žž…~øß÷Zoý/ú}º}wK×ú†6ºÿÐ«cB–ü¼úz_÷¿¯û»ÿÿ¾¢÷ÿï÷mí*ÿÁa§ß·µÌÌ	þæG÷þ`Oþ¿ÿú·…ÿ_[ûÕ‡¡ßß£jí®ƒzþïÿ¯þÿÿÿÿ»Œí/Ý.«ü<ö¿˜M»A;nW·ß×Žº®Ù7ÿ¯ðD÷ïÿÿô—ûñúÿ˜vÚßö×¬ïÎàßîºÚß¿íÿ¶¿õÿýÿ£�Â÷kßû·û¯oíWµ¿úá­®ÚÿñÚúéqKíªzWûwéÁÿè¯ú
+5î·mSNÓ[Bö*éVTØ‡Å1
+†ªÔU·Ú[é§¾Ä?‹Tù8q~³FïTâ.6©ŠM;‹ˆÜ1HDjÓ¦ÓÄ[ZlTh6�‹
+\TZlD]èEÄE×¶@ðgEnÑhfóa4Ceˆdv
+3xA‘Ã@ShŽV0L! l0™ŒÅËÅÀ¹r³ržG’”Wè� A‘»ˆˆŒ¸éz÷¯ÿqZD÷ºu~¡¦zˆƒ}Çÿûúÿ!’Ü�àÛÈ£’rƒ(ýÝ…2†{L)hA�lŽ«Ó]BÐ_ÈdqÈd‡ŒWh>@Àï�<íÔC¯µ¯ÿÿ©À‡"YšÍeº�Ì‚NaÈà·&å¹P^TŠ:’Œ‚:� sAïÈÜƒ�ÉÛ©!ÈGÈ7OµA„ag°gàƒCŒ!jJ
+²PU›Ò ð‰Ì¸Î„p¹aA ð\öVŒ`…„U‘òDÃá¼Ös„NJÉÙøÖBñ.Cè70œÂÌw}=4a0º1°„j�#}„Âa¤YŽ„4qatm5F'šú1ÕQ�„~š
+Ì%é$é:[ì¢†
+^i3y»Ðvlí³ÉÏ£É£g;[ìÞ.cá‚F3zKCF'¿	Ã6w´a°ÂpôîÎm&�í õ1´aÒvÿOO¼Ûú¿ÖÿIl'a0ŸëëÜ3v›Üþè_Ün¤ó
+¿iésîŸ·ÚéÞ©'ïþìUEGö¾8ýºþÿøÝº¿W­>“âªûßÐëoOý�ôÛwâ“ÃªÿÄ/6ëûÿó.ÂÿBïð¿ïÿ0ÿëþÃ¿ýHß^ÃÿF×¿Âõÿ_ÿý]hÇþÂÿú1}�ÿÿÿý·öÒþÓâý¿»Av ˆÿ¤cþ�ö?¿ÿ··KÿF/÷é~�¯ÿ‘�ÿßøm}ŠýåÐ©ÿxoö·t]V÷Iü�ÿÿÿ¿ä‡õKÿKÿÿÿ¯ö×¿ÿ÷ý
+â±Â#®ŽÿK¬4¡„µO^Ö_kÛ¯þÕ/¿ÿúúô½¯_%º]©Ý¿Òÿ{W¯¿âGh82¨Å]÷vÿb­XˆvžöžªÚÜ~­Õ­ÛÃKVÒƒ´.µ¹8=ºzb­o‡ÝÓM<m4è^…†)4,&ž…Î$M4#ŠA±A6“A¦Çšt˜b¢˜¦™:pÓl%OLTS]S1&˜L¼\›8•4Âfò8T!‚(xˆÃ
+y&0
+'Dq*ØLº	—iÚ)!„!„ÓU7„Ó#¢à¹s«ûµµê@Ì ‚Ø#ƒˆa[æ»oZ¾ÂýlWvatÕ�£²ù‘Gâý$>§eÒùÚƒ÷EÈû h�<‡öÈe¹NqÌ9ä¬�á‡!³+Ž@ð!Èf¹€Ë´ÈXL�õš)Òˆˆ´š`˜F€Þ@ð(šê«§ÝÞŒ.»Oÿÿ;¢«I;£vˆw ]Ý¡roó²êÐããëêö?Q„÷¯ÿõïrƒqËI¹Ü»&>CC‘\Ã‘ „°\ƒSœr+‘¹à�ôBŽÏn@Ü|¸	åFLrc�x#Ì�;‘ïý<1a0ƒB,&ƒ*
+Ä¦E˜A…0‰ààÍƒÁÉñ~…šaGÌàÌ#àb]„é…/Èð¯=›Ñõ	ÜC%„,d¸”t&VdÜîg‡ôkÁ„/­Õ
+‘›CUB¨CFú6¡Œ!aS	£
+šjƒEÚ(µ_ì/	¬&´Âi¡£FøB/Âjš÷i»96a›EÕÃ(š1YšVÎNªÍÖÑ†Ñ‰•4ƒË›=š&*19"ìæÚ›¡åëA„Ò17é©‰£åÛg6“Õ¨f$Ô½¤a°Í¥ín×Ð×0Õ¤ìÁ§kÞ-Ý›½VÌ××¾Û6ïM?^¯v’NÌï[7VÙ†öš}kÞGûÒ¸fÁÞ‡Ö¿ñÇø¯þ|§­'�†(zOÝ_ß÷Nÿ|Rü{{ý­ÚQýÚÿázüúFþ–Ã˜Øcû¯Øckÿÿô¿ÿÌõ¿úÿ´ÿÑ�Ì
+½ÿk÷ÿÌ†ÿoÝ‡ÿý½¥¾Ÿòà¾ÿÿôcÿ|ÀOßê×þ—÷é~ÅaÂ¯ÿÛÁþßïýþÑuÿ¿þ¿ÿô¿Ý/î¿¶]E×ÿýÂú_Âmý²o»¯‚/»ðßÿá¸Ø®¶_oöHw¿ÿü÷â²Oÿûˆ‹úáÖå×ïô
+)¿îïÈqÞ
+/Ãú–ïÿù‡v»]6ËuýWÿá¢éÿ½×¿ó±uJ–í;b#Š†šÄ>æ‡UöÂÅiñ§wõÞhý‹µ¿ïûM�a…û¯»ö6=;ØþëÚ‘þAâÐˆ‹žM¦4Ø‹†ÐNÓM‹h âƒHEì0•Å(B.#½¦ƒMŽ-Š´Øi&†„Cj/¶©4ØÂz;UF‹iì¸+ÚkeÅ.½aÐ‹fÒ
+4ÐaÙ�ŠOkeÃ@¯kÙ½†Gô†Å!rFƒ	˜m6°ÒÛÙØ¢.²úÚEÌÀeÈdœG!� 0ˆgDA‘ÐDœD0B!‘Éá„"#ÄD2�ÕPM“zÔDDTDE!çjˆPA3‹d8Ý¤�":ó²¥ˆÝ¢ í–?HW	F‰UAq¦†¾mKc’{éÖ]EùNˆëÝcØØBÂ.’ ž±®Ñý/Ùá›þÐH� ‚	 ‚A_þ=ñþ‚	—ÂA‚E9ÇE×òƒNb,<3x†S�ÈÇ!™!�	¤"!„Â§d3ðP˜L(PL ý#Žw)ÁÁwF¥Òÿ^($‚A‚H&]Sçk)aÅØtbNä¸w˜ü}ˆˆzâÒ|_þ‡„"œãœ}ù…ÿõÝxa„Âˆýx¢†�ìƒw.2®MÈžCdµ!Ç,rÉÙÍÊŽÜîn´x#Ê"ŽAÇ$:|Oˆÿ`ƒ0š•a+ÏÄü Ô!Ë‚¬�ˆù*ÂÂA{*hòøº, Â™
+˜N
+²,ÓÓLƒ?eY‚YÂ�‹$åAÜ¨/	y
+ƒìã²á��£œ}ú„XBÑ…�øBÐ4ãL#{FÐ‹TÓFNH¨0…„ª-ØBÐ´ÓBÂ`„E„M7ï~/F‚h83#²EIÙ¼Ž“èÅEÜ3Îtž7åÝœò¤lßÑ‹hÃ†Ý¦ä?„n£
+³™ÊŒn¦&Ò76²cèí]üÅÙƒM³
+ZO‹ìÝÚ[Ý§Þ7¥ý§õ|6×†n÷Ö†Íµ³vŸzkIÙ³0iÙ€nŸìV=í'ý¿uØÿ›¶¼éqâÃéØcï~´Ÿÿ~¿ÿ¸·ÿïàŠ‰ZWÁY�ýõâGþïÁÿÿ._Ü5½±ÿüÀeÄ/¥­ÿ_úÿÆŽÁ®ÅE~×~„>èÅý)�?ÿÛ\'oðØ_ÿü.ÿ¿ó:ß¿ü~P÷~ŸÖŒ_Ž¿Uìÿ~� ßÐo­´cÿÿ‘�HÅµ¿¯ÿßÿ�«H¡Ãúlƒ_ÿúûCõ¿…‚.ûö»Ø"?ÁÝüÒ¿ö×K§}ÕÿGþ–é0ˆé…q´+¯û×ÛFÖ×åÂ?þøk�P;v·ýýê¾ýü0•ÿýÿÚûýÿH ¬º/—OWÛ[×ûAñQ|k¬V½Å±]´Ç§{i-ü?†œ>ãí
+8i½-í„¾þêø¥ †ûÛhZªqÓi±¬žA;M7i8kI¡h4)ˆ´Øâ-®!¦Çq¦›
+$ØÂ¤rùwDtÝ­›Èðˆ¶q6™ÄL»ì5xgjãj(0©âÚ¾y ÂMœCh5M&›˜a5ÙÝ'Õ¥!’n!
+aP8ˆ³Žàx3Â!á®:_êFä	@Êk´Lî”�­Èƒ‡ö,DA¥JÁ„”0^EÐE9Ç8ç{q¸…Ã	„ÂRI\\5ãê,nCŽxi�Grœ‚ãè‚rÿa„!„šÆÌÈŽx#ŽwÎ8îA»”èöÐI"ê"\/Èhpaßh$H§8ù‡8îàùÀ’Í2¢È%�< �àÞÈ¹Àœrc�P?mˆ�LŽ%pªB�<vCE�°	¦Ÿ)ò0ó²ÅLÿU[ÿ´$qÎ;hnA°wr¬8páÈ6ŽÝÚvˆ.ãÿX‹ÎÓ¥jëúîî8ý´&GËäs.‹ƒ‘µBÈe¹NÿÿÿëÂ
+B([;4ú!{�<îNÉaÍ4Ba �Êƒa8‚�á2VEž{ ®9
+w.ôÈe9Îù°Ý�Û�Îä£ò:’Ž;)ò�JcÑB	ªš�¸ Âi›ÉT
+X³ñ°‚AV3á¬!a<‚aà—CG³�aôÈc	ÁàŽd1Ä1a°O<å•d£-ÁaB°„EèC´¢æ:1-SYŽˆ{F<0…£i•ÈÚh½ü!i¼Œß�m ×„ŒH&…ªhZ£xqa8°¸MO»,~éçjŠÓ¤õ½£¾´Ÿtn²!á;
+jósi©îŒMÙˆú^F&x.¤aÃ7­/˜é£clò†oPžæ=ýK²ù¹#Å‹;&­²8Å•\Ûjú¾ÍÞ·¦è8M'¦Ù‚0ö¿z];ÐjÿæóþþÞ1
+Þ›ÝW­„Ý
+ós§›¯½îÿæy­Fˆº;/—[�ŒB­õïcA.<WøñÐÿïÞ?Å�né.¸c­u�¿Ý?tïÜ1üyÚDh‹¢èò.—'
+­–NÆÑt]EÑtaK’.‹äsóÿL1Ì�æÅþé}~üOúÿ¶!ÁWñßêÿç`H š	AÑ,Ž‘+.¬ì]AÒAÑ<3È Â&]FÂ7ÿýXhÆÿÿ˜×÷}rá>�¯òá:÷ö_õÿü/†ýyØ4]qXÈ08†E$qEÖAÊ§¯ªB"H ™DµÿÛIÒþÂ×ÿþÓ¤Ÿþ‚ÿöàŠÏí°�ÿôbÿþŒK¯Û÷$?hB;¤G Ò8Èéq¡í‚H ‚	¤"ñö¿üPm*ì›ÿø"êºØ"éúÇö�ÿìq_ó·_úÿ·ÿøþÝD|!¶_#á4H�á ‚I!†„	„’.®ÚwèÀ…ß½´˜h¿þêÒ¶þý§í×û_iÿoÒþúúô½/_s=ý¯Så:ÿH LXH ‚Gì4’JGÐ _�Ðë4BØ‹ø;â8ãnµcc‡ÅÚë±¶ƒ¸‡kÇ
+®êû‡Wûwië·õwêéÛÃ¶+Š … ‚A#Ž;`�?kª°‚PAH{	t&S¢>]SiûNOŠ¶šaªvÓNÓ±	í:ˆ½4ÓiýŠL â8‹N.8¤k
+-n+_ˆ¾ˆe¸ �AÐA ‚Åkbá„"AÂ	•°:
+3A˜ËŠ.öo0¡„QI¦ÓPƒLÚ0©4Í£›ÓA‹jši¬Œr9±m3‰RL(¦OŠMš°ÂçdÑ&8çØÇ`�Z$A{Î8 _ÆC ÉAÁˆa<r‚»�<2‡G
+£¦.Â²5Å±b-�ip�"ú)Â/Ð†Ã¡lR&‚H$]UÄTDqó»ˆa �A
+úÁ…8Hãœw
+°—ëé$Ý‘Á¨ªÔm”á4’!˜9Ü‘Ö(†@-wÂ#E‘Ã4!A ‹­…õlPAÂ	 ‚	Ú ƒàÂ	„w)Ù�iîqÛþðÂªè šA ™3Bd|º/âÂPBð‚i‚!ˆ�Ûû#†RI�Wµ8ö!„H}„I—ÿ­ ‚A›;ª0½PØa4ºÁC‹aÒ	‡Á”å9Ü§
+‹q°Iá"œã†\2ã.¼X@„285À‚>]t]PvH ‚Èl ™t�ÉðC$6?;Ýâ!„tž¸ˆ �Èd•�kC  ƒT&C¹ÃiÈ6AÀÃ�$¾Xw	~ö�Hã�fu—UP¡\-…	¯er˜á ‚X¶1A$Þo7û´Huýöv‘
+Áø XÆ‚è§)Æ•áo»ŠaÚ@ðÜw}Z ˜H$’.¬R&‚8ä
+IzßÇWûØÄY4Ë†^¿Ç�á´9
+?�ký¤D}ç+ÓA‚Gã‚#©Á|'eaŽ\É¹	d\Ï~V¨ ¡Ï ¨/ÜøKÂ>l†ËÉqf�ï0äQÍÜ†~+Ïfâ^C`äÜÎMÉ9ã%d «.ø»LŽžCe’ƒÁ|D4¤‚8ä4Ü":°Â0„BJƒCMB	ÅÔZÁaA„4Õ
+ƒÐ4Ä0…„úÓPP…„ÂðƒXA¦‰àÂ(A„-t§Î?ˆ¼.œv4b¶ìÞ‚7´m9�ÜÝO¤bvŒ7.èÆÑŽŒOF,ÄæŠÁZ
+4ŒTbJ…ÞŒN4bmÒ£cÚ1v!„‚	„Ë¢ùKŠ]bÂA„Ëƒ)~mÙ†ñ§§K›½sœ˜f	;6ûvûi?ý$ìÀüßg3–ô¿páœÍÖsõ³lÝ®n†1=ÒÃ7RøŒDEØ¸ñv•¯éoZzÿµkÖÞÒxcÞ¿þ�¦·½«†<*¶Ÿ�®6¯Õ'~½ú)Î9!Î99NqÙU ™|ŽDpB>]ÃdB÷¿¸ª�×Ç¿õû	|Bý/ÿ¯úB	0ÿz¿ýÕ¿ˆ__°”2œ§*¡[A@Êrœ$A<#kþõ…ÿù€Êú¾þÞ)a}ÿ´õoÿùpŸ˜	ù�Vëâ""È£ó!‘Ç¯¯Nôcßßÿ¿þð�ýŠÿÿ÷—B‚7Cÿíÿéz1ø1DtàíÒëô¼þù!ÿºÒ¼ã·aÓëëÿßøúÁÛÿ×°Dí‚#ßl":z_ßÙ7kuU¿]õÛ_ÿOýoêÞúú0ÿzþÓê¿ÿö¯öWÿßïxbí ô­{­8®Í¦Åiwûk{«~ƒçÉÖ­ÿßQÿûø×â¾á­öŸÃOÅ½â£ŠMµbÝžh[V©±QLTTT[rˆh;»µM:~*îÖÂIµa4I¬6)‹‹M6/Á™ëÑY½B„ÈáS
+>…¨„˜jMžqSÃØI¡¾ÍÉÐˆ¸¥iÃLCi§g‹ax†GÈùäcˆd|º.�J#0À7DDZ˜ÂÁL`A˜Ârˆˆ°D
+±È£ÂÂ ­m™Œ!ñgÌ.Èá¬GÓøŽ#ˆŠ¸ˆÁ3
+³^DòCŠ+tÙÀÓA×õúÒ`Å‚ŠIš’	*I"€È_�^d4q×Èb„2‡TÂa4é=2
+àE¶A¼
+í^%è7ô`ˆü�È
+np &]pØA2?ÓŽÇ†GïïÙ�ÒÚŽ#þ„é�ã²àîß—RÀk²‡ Î9!Û&BÈd» x4¹ÂCZ8L�àDlC+ŠàÈáô)ÁË¢áš(†AZ¦	… Ê]oB-‘Â—Xˆˆ†AÇD~@ðVwýë¶G ‡2&¬Ž�<0öä
+Ü9€P;‡!”ó¸Ú¹€ƒó jÈâŽ,R×õ}a;^¿áÿªëÿûÿÆ/2¡4;#Äy�ÍÎžx"á·!\±ÉÁÜ�È¸Ltò%à‰a1ÅÈqÎä �šÈó n9
+äc™Ë�æ‚n¤
+#È.þé&a&Jd1áAÅ„È/Æâ°ÐVÚ!„ÂaxA›²0ƒˆa|Í‹al¨ GŠÃ@A‚!a0…„Èðœh¸†pÏ�¶+ÂFÖ^1…/0’i°­©ô´m5‹—œZ§¦� íÛ¡ûæ6îŒX´úZhha0…ªÎi¤a=![°›P›Vµæ'16nµ7êÑ‰‡i¸MžÊsC9ªá°ÂFþÎ%Aæí;�7¶oI>û
+Ñ‰‡i´b³ˆ¿g#sF÷†	¡ÃÒOÄdp“‚ñÞñ¥¤ýôñÖÅ3uz¡qÌ=S{B—N•ý=
+6ÿÌ?±LÃûCµ]lÝ÷ú�rcœsŽÒ&8KØbº¿{þ±Õ<~ÿþÒÿ¿×¯ÿñÖñÿÜ{}�ëö	NÈŽÑ€�—.ÿüÀl<'æuù€Ÿ¿¿÷ÿ¯üÂÿ0¯×ì7O—�#ÄG2õ0à‡á·¿ÿÿFÿÿø__ÿÿýØi}õÿË„ýñ^�EÒ�Í ‚eÒÜŒpÚáÓkÿû$?ÿþù!ÿF/¿ÕÿýþÅ}ßß¿¯á¶yl�ûÄ\GÚœw{_´¿÷VÉº.ŸÙ7ÿ]Kû¯ë×þÕòC¢éþH}ÿlø";uë£ ¤ì­”Ü0’|67¿Öþ*õoÛ_þ?úýzu½ýë×íUúµ×ý·Ú†™!QVÇkÔ5oøi¦ñI=¥iè;ix°ƒöêÖPÊ�{†±r�ñI7«ªuðwžØ¯—Y‘ov¢©¦-ŠBÚCa: ãh'Òi³ˆi„ªÂ
+°Å5öêƒŠh ÓB-í7ŠOªí9‘J,"#ˆ´ÂfB"ÂøL aaLÞ–˜A„ÂžFÌ&/)rd¦_L&™D4CHp·§
+pE­•°²t[
+á¡€<7DCˆ�2I$�­Wì&tþ=.“%™nêÒè$Š �L0‚cÌ–“î†¿¤GQ*T�Šúû†VÄŠr…
+Ø±ñó!´v$’!i¤C 
+â."Èd( ^„Õz¯�¼­¦þWVœ2–WßŽ#ÿª x1Ä¸�•d¿"@)+"Ì¸îÓMN�‰…A¯îŒTb|Å·tc£F/Ò_¶ÍÔ½Ý'KK­»¦’÷Æ¿ãÜu”Š£¿ÿ¤ÿüWï÷ÿ0/ÿÿúõ¯û°ˆéÿ’¿{Ž¿î½-Ú×ßïìºÔSk«êü0·–ú»i]µÅÄ6)ˆw»´Å!´›»MzI0„jo	›Â
+2ì!îÈ€Ü×¿®õÊäªÞ†»úû¿¯+–¯Æþ—Îá?côL×ãÒ¯Èd�w&þ¤ðIÉÁ�^v@ð(r‚³“r
+pCLr‚a‡ Één?	‚§¦¡4ùnë;T·»_¹!÷þ4v6ªíÌfãjâä5ÝÄm¢Š;»ò¸Z±¤ïN×êê+õüì¡~Çu×§~d6ŠZ4F¥FZ¥ÿž¶AüÜOˆ³5šäH!0†,—Ê‚ü—Ñ
+9'„1Yd‡&ær.ÂPTÑ8àAp„|¹›Æn3‚#¤CE‘l‹ü „DqiwÅ„TÓÚªÑ>Âa´RgÄA¦aLØUá0…¦ƒEí°F˜°ƒ	§Ô2fàBÊÃàA„×©tvu~Ñ‹£˜œ'wF:1Q�Ô»nŒwÑ´Ã
+bz0Û­£F+LÜ¨*1ÑŒhÇ˜á…»…MÓº7Ñ´Ñ�ÄF¿óv­›?êï9Òan“³`¡Ù€tÛ¼'¤�›Ÿs›Úfê_³÷ß}˜fÍ7M×¤šNïW	´Ÿçbþ¸Þ1Uö›û¿ÿkÐ¿ÝÒvŸºãkê­'Ý^�ÿÞ¦ÍôÔtüš+ÿÿè µÿì:õ½/ÿ¿ÿÿÄ/ïðÇú_mj4ŸÔU~8ÿýù€¦×ÿû˜	ÿÿ˜¿ßÿóÚ[
+×˜û«FÿÌ	¿_ÿÕáwþÚA¿ö¿þ¿ÿÿôc÷±íßèÅ÷ëïïÿÿl�ý’ýŠ
+àˆÿ×ÿÉ>õÿÿù!Òÿ¬;àˆúûŠ¿¯Â#ðˆéÿÿþ¯j»ôIÞ×ßîþûµ÷¯ÿµßíóÜÚ¯ïM‚.Ÿî¶¿ëëük ì'®€½†ûöÿl.uíþ;	ûíÐ\U¦Ø"?ûVïXiE6¿¶�'vÕ´ÆÆ‡Éàø¤Ób�vbSi±_÷mDZ{]Ò(ŸvÕÅEÅ±¼_²¹jéé¡´¡©Í3‰N`Š=Å4šm+Õ4…´„ZmO'Öƒ�‹
+=.›Ní4øÜh4Ì@˜D(0å;/°h0„A‘Ã0âLÆaaÏ#É2àÜ!š˜GÃŠXi›Âf0ƒ0CëjC #‘\‚ØqˆÜr`¬kÝéra³« ¥ß°Ò°•CI/VÂQU_µM4ÓÙØ�Éw`‡ÐÄy©g2>]Eò>]Èù#ƒ’´U¢èº.Œ3º.‹ä|ª"èÔŽ#ºSDJtaEÑ|º.‹åò>GÈì‹¢1ÄaEò>]ÈùEZ<‹£D],�05‡;�:F± t§ xmŽAl7Œ�Ì	0(L�á¼<4¬.ëëîA¨w xiŽ×�ÖþÞÄ]_×Wÿ\† @ä+‘\ã©k xe¹8×,=›�h9¡ Âg;“². Í°••d.dÜ›�È˜A ðGÆ³aèyA!£ù¸ù™ô‹þÕ�¦„XA„Ô(A¡nèÇ
+†@Å§êŒ|!
+×kÂöšaN,»hÅA6¾ŒTbg¾bsÝÞ�VcÚ10î¯ÑŽ†ƒM#
+¾–@ÐG#r!”9r†[ÍÍ÷„ê»ïÈù³Wøt�¦þ÷g&“A›»ï6vönÓ÷iU³K hÁä/&d,$°ÈaÈð�§OiCô5¿ÿá»µõ\Bô/wÕø­+MP"ŸIÝT'ûþó`õ¿\¿öÇÿúü/½z×þ“sêÝ{Ò—›ýÿÕÿÌ	õ÷ý¿æ?ßû˜	n×ÿ¦á:¤ú[k.?û¥ÿ„GZþý÷ü7ý¥ý}þ‹¡ßÃÔŽ1¥ì‹†™w‘#%øTü…‚nS‘`Žò ¾øÿÉ;ïþAï×ù‡oö?É=ú_ù'ãkù…ðŸ£éªžO·JðE<=Ðaa4âÿkøiZß{jëö¿ößèÀ1í-ý¿këÃzHÂmõ_0™Vx—š/»@Š�¶–ßh¾-Ú/f:1î¸wllSi|qÃß^Âwÿû­Åÿv×ì·ú}$¯Ðë]y�´µõƒ3F-6¾ÿjúa6šb‚wMiÅ!lqVº(§LE¿¦ÓmSa
+?Qêÿ˜�¼w±ÿ]ý.>‡Ø¦*šöšhS
+4Õ†¶cN„Cn,57—‹ö]¤Ð¶«Ú©t¿ýP�þ+Øñ
+õ˜ûöÁ…�<5GÃŽp ¹HCˆh�äÿé3OX"ëÁß~ÿ_ÿ¸¤""®">ÙŸHjÖýß‚.¸DzÿA¯ðEÖ_ø"ë‚/0Du_n+CýŠººŠûø¼±Ò}ŠÖéŠû¤8¯év)¨ØÝ4#·\!±\S¡Ó^ZÂ
+B!¨§º¦MSA…'ÈéPkqÄF†ØŠB"0D¹­´¨[ë´­´½½^“ÃˆˆÖ#ÿÿ�9‚Hr7 Ê9Çräì†Täœ‡rA°\|( vA¼ÓÐa5Âd-„ÓL†@5@OA&Ûû¯¶ªþºËöØD‡h\9îâÖ^ˆC¾•oL{â¿¤ßþ½¾�Óz�Ñ„+ž–EâüÑäQÔŠùà¼5’{ó¹r,eY‚BA|k!à�àã–äÜ‰�Ó‚?û È�C5Tò³qw`¹)�½Ÿƒ"ñ.>
+0ƒ5°™8<Æ³A~n%eXB&IÏ]ä,‡°A—a?_ÂÌ*£F<½âé:˜AÛ¿ªv¨ÅàŠ°˜OuFÓF;L$c!u…
+ƒBÐ´caÂE¦…ëÞÂt�žÞôêí^ŒL4�tn´áôbÌNsoÔÜÒy‹1C»Ó¥oÓ¶í;ÌMœìäs¤Úl)�Ï£É£¿K÷Úai\7±æëûvÿ¤žºwW§}-/Ùƒ^Ó¤…³ôìÁ§­ªxÃ7]/a0Ÿ¶aòÀXƒ¹Á¨rz­~ïðÅ‡{ñé>ÿþëûÓâv±üBÐßþ¿Þýw^÷¿�o�4ŠÈeÁ>)'	‚d
+#Iÿaþí°ÿ¤lúÿºX…ÿ[Â?áUêa¯oÿ¯ùƒ_ˆKüõÔ+3Âð´ý¥þßøl7ûuÞÿéø_ïôaôcÝ®?iz¿ÿ�áÑ…ý››®Ú1É¸w·iÒ_Ãîÿ¤ÿÿïz1_Ø¯H?þ–ä‡b›÷ýÿÿýŸúOý8‡1¼|u&ÿàˆ÷í#;gÿì›ÿ÷ÿ®¿þÁL›ÿ]«àˆÿŠý/ï²oúUþ•ÿ�ï§�Ü†`ä ø%¡×êý?½ÿ½®õ¥¯¿ÿ _{Ói~Ÿ
+x5÷ûî÷Ùõÿ¿ýt¼‹eÿù‡*
+d°¼7ˆ˜iÅ“‚�dòÉ «¿	‘\«=—†™¦\ÉÏKØw}¬4¡¥OI8áÚÚÅ¦°Ó´óGNÐqÇ¬Cb©ŠÿÛ­mV+âÓÿ‹¿ÌêŒ/ñM4ô‚T0š´ Ó¦m&“ôc„#M;TÑ…oÐzqQLqÅlRmlTP{V8¤-8hlm4Ä:iÝ4ÚL&Æ„D[¦œâa0„q\a¤¿Ñ´O9~Œy/i·j^£	èÇF=Óó`ºi›MìâlÚnÌzk¶©¨A„ a
+a„Ða	—�6Î$ÎiœÐaLrc•
+4Ìf LÃA¤ˆl/ö9œDp.\…´Î%Îˆäb
+ÞÿÌVÒx»ÿã`£k¦ú¯ûvb¿	éßuÞ„Df$4‘�<\†HgŽbý|À¿Æ`aÁ­ÿ¯BûUß^¼?ÿïV¿¯ã¶¿ü]6v¿æ2âö"·_ÿ]½ÿµm.ÔÿŠÿæ&kÿø">_Öëÿ~‹Þ¿ö)´“ŠTÿ—ŽÿÚgpDzSÿÃ]³?j½Íûý¾½W]@ƒÂM„ÂO½ÎÕvÒgñÃïb“ˆ¸øâ7jÒMbïâúé=9ð[‚8¦›zÝ¦ÅSQQM.Òm7Xb¼4„GpÇheÛ ®ûA Â0„Eª&^#�æN�Åå
+ÈïŠNAlb‡á„¾K�N<0H<0ˆ-�$<4Ü�{!�c�Èò@ÄL&A’Èæ
+�e�1úªzª{N@ðÐ;SF!�‡ÅìhCÐ`�]Ègv½WQ×ò+‘Á°Ð¶Hs�er!¦ç”.C�þ@æö]“ãAp{#¦0šyâ\Gè2Í°�„,ã•pS“Â/�³?‚°"v Ë‚àðEò\j0¤ng#âXJ
+ƒz•a#‚7.¶çpƒ²¬�¶ð©¡a]ÛM6škªÐ´Â…MF:v¡Pš£APš«ƒ0œ0‰á‹	îóžô×M»P‘ŠŒ6ŒVÏpÌ½LmQ�£æ<åØH¼ÃáywgÚ„Ý£brEÞÙ¾ŒmÝªÂåßÿv½õvíkï}ÚüiÙ½ �'fÍ6Ö¼6÷Ã~»C¼[7}+fÝú¦ßÚfyº¿ö=_ÿú´“Ã§ñÜcú×ÝãÿIâøc×c½Xþâ¯ÿý7ü?~¾îÒ'Øûþÿ¿£ÿæXhÃï
+}‡úÿõûóhºöû­ui×Oöÿà¼¸O£kúãÿþÞ>ß{êßÿëT#øokb·ç�ªï
+ûþ�ÿýûÿÿá¿Ã{[mûÿ¶¿ßþ^½Zq°ˆë¿¯é}‚#þÒõ…d‡ÿ¿$ùwláõÃkÿíEÝ“Ì=úhÀgßî¯�ßûÿí;ÿô
+×ýí†—¼5¼ÎÛù7wõt´åÐ/ßm{[kù˜=´©¨««á­­úñW|Cîhl/ü0œwc«û®óÜ?ïoQø5â¶!Ã]œlSí1QZ!lCV˜´Ø†œ6)ši±´Š«XtÆ›ÚÅÉêuiµÎ%Ÿ]M;	œG°™àAm5Îeû
+c´š´Õ4Bãjëf3È&!U¡´†ÖB"#.8ˆ†ƒ�áÇ-Ã2;DDR#vÁjA‚"-^
+\â"8®C$cÄECú¦¡/â˜®=¦ÂÁ‚Ö#ÿ�:†x xw!ì�á®ä' x,¹7 ¢2 7)›MH+XL)Ä²,…€©ù°×sŽqÎ9Üã�ÊrœîS”åANS”åANV¥P§&9!Î9Ç;œsŽw)ÊsáNWåU
+r¸¢8çrnPäÜîS”å9PS•Å9\S”å&9!ÊsŽw8åANWå9PS”åqNWB‹‘ŽEsŽqÎå9à§)Ês¹NS�Êrœ¨)Êr¸§(‚¸�’ãœs¹Ç;”å9Ü§)Ê‚œ§+ŠÂ©®šÒªÚþìI”#²Tv­ˆçz£µ’.$áöÈ3û´¢ÖËB€É÷ƒöáÜqQç‘tvŽÌÑÜÑXDh„GaIúû¯úòÐ¬2@‚ë¯ÿýê@ðYÎFåAxFåaòü!�Ùy,"ñ/4 ì«.ÊÌðE²>'Äs ÝÈŽw<ðGÄ3œÖw'àŽóÙ(Ë²ü ÏW £	a'<âXJ{AaA‚šª1Âz'š†k‹	ªi!‹MP´-UŒ0šaTöªŒ]œ½—m.cz1æ'°§¼úhÄÑŠŒMšjÂ´bvNÑ�ÿ£3ÌtcjŒTbú+ò¶´M†ntêë¤é~ÒM³ezÃ	œó{úëIÑ¶ÙÎóìÛÒAæþós|>û£§KÄ÷I¶l2A,�"l„v:SoCôëØÅÿéW×Óð®ƒ¿
+ãú¶›þ6¸*nƒuÓ¿¶?Ò|?{®"-¯ÿÛaÂñ_t¿ÿÿ±Ò÷ÿþé¿ü?H[þûõOûÿaÌ	Â}­ÿ÷ÿ‚°åÄÿÿË�‹ÿáÕ‡ü9€�†¯{-ÁW½_ü7ú1÷ÿûÿôc†ûÿÿßÿÑ�ÿ·øoðÞ—Ò)KU½}ï‚.º^Åÿÿ¤íØDuÿÿ²Cõßéø¶ÿwýz+ý¯ôaÞûÒøOÿÿÿ™ßWïÿõ×ÿKÿÌ;þMÁîIü¿ù7©ÿõ­ìSiþ‹…}ÿûþ»Ã[Þ¿øïßûú÷·½¾ÞÒõïöd(…:VÝZ°Ò‡Ô\^‰Í¥§ÓMVÒˆw±L]ªðûj)m-(‡j¶¶·q^Æ«{izV*)�
+
+5¦Ãb‚ièDCN+ŠiØ¨¸‹j¡±Å5šiÅ:¼mDE1Iòn*°¶¡4 ã³röƒ#‚¸ÃLÞša3N›1ž¦@ì ÂfôhD4A�Ú¦¤�4.YM˜£x4˜†@*8ˆŽ@ð,ra¤k‹úÇM„—´Õx×b“Ù7H¡0�'¡»D
++–ø–…òÊaynM
+Ù7N™€Ó�¢è·)\&²ÜQB5ùn®ú+™£°µwâ?Ù]W;.‰úÁeÏÁ&O¿Zh5OÙ–ª…Ë¶ŒTbý†n7VÒz¿FTDu)äpÁ0¹—dØmj´Ÿã÷aÂ	‘òæGÒS�ÊŽ:E:/�ÿôcâÒÈâ!„�H$ÿ¿ü}M8êS‚œp@”ã‚#è2è’åÑÚD…ÿ×þÂB"’L$„C†—ã�ÊrˆB#ú¿Û&þÎÅ“r‡0þA´pˆù_NÈù+ïUûöûòcèBÜ$qÁÑC’îLsŽw!G!!�AË¡e/W{iZqZ|E¶CmÎ9Hp@¬~"-?b˜¶“]™Q#ŽqÂ¡ÄD ˆ.9Ç&‚/�–¥nÂ}ûÈw!ªæÄE$L£"¤¤,ˆŽ¹!ê‚ALrnqÎå=rè¥#ª!•$GiHÑGi#ŽB‘Á@â($GÄYK’øùÁ¬p@•Ó	$S“$L$]ŸH"ƒ)±�Ôã�<5;”òè…ä-{Ç8â‚AU¡ ‚e"¼ºØLãœtH ‘tWSK±Iqz�ÈnqÂ.ŽËr„wRì2c‹&Q°TMÈC‚#ý�è½„Î8´‚H!ˆˆÊã¯A@ð×Ã¢:¦Sˆ¿YÃ\sŽ¼1IõÂ8â)�<3\†@29§ xmA°Í†hÿd
+§Gkj@ðG7ÙØ*ÏaB�Ú‚ò
+X@ðÓ€A‚~‚ÎÕWœI+
+�n!W]B¯¾@ðÛ�$a[Ü?´ä5!±ÝMÉ�«.†™|&‘+Gx‹£Èº0ˆùt]Mh=Ë³¿|‚“‡MH5»ÐiÓñ",!a
+L§)y¤;u¿ÿÿãûG�‹¡Ëâ"¿rãžÜ§%W<d6>E…È2K2cª‘Ž¿®ƒ)Èã¡iWç‚>A„, ÂÈì‹ÄøŽaÂ'g0‹²øyVNeØ(RÜ¨'nU›€� ÐaƒÏ\!£Éñ¬¬#‚#‘îeávkÐ~âºßš£xvi¦Œtm=¨0„w„z1°…„^èÚôƒX´Ô&†a]§ÿÐA
+;ZK	¿8š10Îm›ôìÝFF$ŒM.ŸéoÏ£É·†’F&˜w§a0¥Øl+Eç.èÅg&ŒtcjÁ#ß`¼BßÂ„î)7OÞÞé=~ûlÙy‡a0ž¼0[³ûµ«¼ÝWOöºt›ÚO·ßùÁ°yÙuÁÿãÿý'±�Ä/þÿÿðÆ©½¿†6ýõÅ¶1ý¾ô;K×~(Vÿó_þ÷ì9Ä…ú[ÿëö¿û}ÿ½C˜	áŠ_ˆ_ÿ™	#µUÿúÿ×öú1û]ÿÿðßÿì?ßù€0ÿnÿÿäÁÂ#¡¿þF?÷õx{ô½Šÿ¾öÿÿ
+ëÿá¿ÃF/ÿ‚(ÉQ×_û_ÿý¼uÒùt¯ÿéÌáûÿÌ;ýÿäœäŸß_ÿýÙ%ÑÚ´HLîQ2ŽQ)[Öëþ×öéÿ;½¥w~£kÿ¿iÿú_oú_ÚÛv—™Ûÿ_ÿQ„>ÊŠQŽ#¼�…[»c´–Õ“u{
+8‡Núð~¿ÃöëØ»á°Ûì":¦Åm1§{·þƒm=‡ä
+QÙ!>FÐA8e9æQYDµI¦�E Ø¨¦8ê6“¶VœZ´â“b¢®+¦ÒŽÖ£j;ÛI4â¢Óúdsa
+º<„q„ˆèS°´ã
+S# ƒ	„Õ4´1 ÁKö);fÐŽšMÚfÐTÓA�¤,5MO'Å&ƒ+
+¶m%av0¢Ê‘Ê!åÒ“Â#YtLeÓ±¡˜
+"á€ˆG |äQÚ x-80„DE„"B"4Â ¶ÍxdxÇDr2>GB( ‚9{80™Ô‚¨Q®¯ˆª�6‚©¯!�DøÑØúœKÖéS×hGG1®E6µŠÓ!‘ŽaÎ:ABÊÆHÊWû
+ÐM6º²u¸ˆeYí¢.Ë¤-Èdç>"¯#!”L¥QÄB#ãÃA2±Y¿zèÉFÍ…tê¿8‚	#ˆ¾íl@I BB‘¢HmÄDW£y£!¯>¿)³�Qq@½�Òáà# ‚'LãE+H ‚AAwnvŸù€Y²
+@²
+‚�ágðåÓ8eœ`EÑ!äsJ
+iö�6ÅLªmâ�‹wu~¨†m¬DE”s�U7w˜ä3\yÙ"tEÑ+AT"Jƒ)ÏB°&RWé^5a†GÄE+¡Åÿ¿ê1’´!¢1Hd
+È7âxEü«7È;�ã�®D²à»Éñ(*<Œr&9‘ÁãÒa�<7Œ�à³á>5‹Ø0�š0ƒNôÂËÀ�á4Âa…ýbÌ�UWŒtca¶Ö¡
+MÙáôbxPŸ¦Œ'	f6ŸtØ">v�C˜Ý6ý==<Û·RîÄá7^þá˜—˜`´bi&Ã7zVSi?ýŠ¿oVðƒëM{×³gþ¿zý&ãÄWáþïkcñ¨õ’þ£øè~¿ìãàØD…öÀ�w¨}£_¯F}?üvÇP�¯·ÿÆÿïÃ÷0éÿÿTÙqÒtáðE×öƒ}aÓGÿÿûaù!ÿÿµlB#ïüÃ¶ßw¥�ã·ö®ºëþIÿÿßÿÛ´]vîÞJ÷Ú·öÖ·®ƒûKì,5û¯ê®˜â\:�‹†—uiEEEìEìw±LT5mSRã˜U
+·Mq´ÓQÆÓZv� Óú¶*/âû]Š(i›Ó1„Ða_]B
+™ˆ!Ž-*†a4!„A‡úÃaŒ†H�˜Pfnw_Ÿ‹Û��‰õ_Ûº¾¶ÃMûÛíQGý¸Çý�•¢¹ª_èEùÇÛ�§EI|wúKý¡|—]¶i�š%³³5�—DI
+ÐÎ:¶ƒ*F¥H—þà�cñwD}„?\R_8êë~)a¤¾­û!¬:¸¾þÂÔïä5‡Aó²Å�Â#ábŒÓóŽïßmŠá)‡Â2©y�êqß(~/Œp‚KùÙ§Èk>Þ"B.—%ÐeO ÐãA‹ãÔ�‡!dp×ô‘OÑ!ÈƒÝqy±ÂES‚Ÿ~â, B-¶E×Ô†háÝ3Èìi/È„Èèâzó°%;¸Û#¡w3EÓãƒqÎ:úi
+õiá•D±Ò/(D­rÇGÂ]�Ò#µh_á,úØÄ~üƒIätv�/È_fhíZzüâ	S¼Š#']�’u&]kgcX®<PHÖšÃDIW‘¥;½Î!H#Žó²¤øÆØ¤§ÅØý¶¢‚	—âf—¸EÒ¤A¤t/ø‹@ïü">]ÙÚ´A¥ø¤‚t"õäºc;.ŠÊ�5h,}ðˆùt]
+ Òìy3‚r,`ä]¡D rà‰Äg>ˆŠSòP‚S<G�pÛpÙ0zÚóþåÑt-Ñ¢8„[Mƒ9¶l¬ÙfÛ‡CA&²£ïÂØCÙ�jíU7Nîï6;uNï¿g�íÛ÷ýv8öýé:�|BÃ	—VÓ!’
+ßKßÿýíõ0ø±ì•"ºšíÿÑùoÖH{ÔrCØìÓ)Ôrº$(ÄPßë®ºüºô«|Gb!ÜƒSÛ¥ØJ8ðK·ìl?0ïŠéø¯Š�oðÃçeÔ]]ŽÒêmæa}¿FÝ¾=ŒgjÑtŸæ->ûÌo·û—R
+Nšw_xã·ü~CŽðì6WUV7Û¿oþßÛÞv­ˆV¶ÞEò û¶B‘_ÿ~"ëï_o]õÿöûäã}%M¿·´•a¯”8v¹Øº]ªl
+7L\1HTWvA§¶WM ƒtØ¥ØŠ	í%^SàÂãÙç°˜BB:CŽ¢D@Èk¬ƒHçvÙn
+yÙše;b;<‡Åúe7ZÜ2àxzÌ•QÝiivÜ4„_ŽÈá˜W[F‹¶ß.‰G¥ìGíèŽ‰RðØ<�S”ûolRW”èN¸_œ^"›nÎ8L­‚º=ƒùKáì 
+ó°DUWŒ2s³Egh]�jAOFæÑÙšèdUÜGÊu·’…âˆÿ™=Ù“{™[$8äÍÝhòñ‹#á½”ålÐòJåI-ð@¼ŠfCIq§ì!IÅþ~‘XÎçø ÝÂGbè{WóºòªºG¾\Q‘×JñoEäÈ?�<X!,ÖAVqÜ�<U²%„ÌÜ6Ú9�hVIòàƒáî\)@C
+��7Ô†Xä*k©Ç½†P‹ ®ƒUý­´rì ©�l{r
+C†¿üpJð°ââìÛh ï0›6^Ù½Òcé�¹¦mSßÛIß'„6ÿOÿGÙ�"¸²4_ÿ÷~ŸÃ­Pµù§Ô28ÜD{÷ÞAGäÇýµÄWÔRØ­ÿõ\¬
+ÂdÈÜðEŸä3ÁÌäÎ^døÈKU,r1É9|\VDt�	.¼"‚�ÿýòþ,(FÕBa]$‚!vÂÖä¦.t¡;U&9VNÍÏf½AE°™ �ò™ìøz”ëÿÌ*÷‡§y�¦Œ]r/£NcSåÛ—ZXÕ)ŽèCTýt‚7ì'¨O]Q�lQnÝÌ×ú¹~“Ì7¤î–º—º Øfì*ßî’ôb°‘Š¾—£t:»¢ê„*nb£a:7ÑŠŒW—TŸ�” ÞÛ�¿t¾÷ëß¯zÃ¯XÕ.†)%¥Z\Þƒ«n’	¹Î”WIjé_¥QZ^¬�è�á&äÇ
+ìâ;0½w~‡úø…Ýy�õû¤!zý/J¨=U�éV—1×­/T…±KJ©-Ó0ç˜á"�4Ž9Ü§oìM_÷^ÿ¿­{mêß¨^`:ÒªëõÛô©z¯¥Õz¤¯éWâ‚DA‹‹ˆ¯b?ø¥Fûý»ß·ÿªHÅô½U%IGW¥ý-U¾º­}Ò¯UÔY„L§+ŠÍç‘ÚMÿMuOéû·én�KòN‘n’ZÿJ‘‡µ­/®´´¿ý½k¥Û0ç›œs¹NVÊN„DD2Ÿì­«ºZ}ùn¯¥ÃMVþpÞßô¾ÃI,¨Òÿ^•^´º¯n––––E{Õ%þ‚AË¤Ú@»„ŽÍOêíPq¦Ä\Cî!¦ÞÁ‚õ¦¨CãL-£=(M8µžNê›K¸ujöºN©ø [á>ì/Ûqáá=5alâ1b- ›BcA¢� ˜j<!LWA:¨é´ª’é8q
++K¸«J>§×ßŸ\r»–8f0ˆ8asF.Ð°…Èg†nM3reôMŽ Âéª¥pÐ0¢ªšŠfàª˜Mr¸ZwÇäÀ�ÈC�<l†¨äÑ¯}¾$";tPûokZŸ«B<W³ê;2ÄñjGúMè$™
+#4½ˆ¾eª°‚eA[¢XEÑ’ªˆAÙäCG‘N‚¶ÆFòèº/‘òèº<�":ä2Tr H>Œ´ñË¤‹ ‘Ò.‹¢èÂ.¯Â šC	ð‚gpœ�œÈè�ñd2 xeáø�àÐ8)
+X!�
+#�ï´t‚/œAÂ<¼7CDSvA‚b#Š	‹4Ò x`NˆX!©û–éêCa
+æAV!ÊŽv–Šµö*&ˆêLæ]A#ä|ºXnŠs¹NqÎ8H§°ˆð ®Rè¾©
+¼t«AÚOw
+¸Tm4chCì§*
+™PS„Î:A6qÒS‚aÚ
+&�AÒ$A0˜H&Â	 šH$‚#ºém4—^3sapƒi7]œB#Ž"ÛP":S E<ºS«ñÍ÷Gÿø _PE;z2V’ô9ïâ›»á×ÞG>ÈÄ"D„‚.‚ÑF@œ+VR!A$’EÑtä“ „EB‚AH$�ÁÑt_.‹¢ùtyEÑŽõCµT½,�w!]HãrŽE‚œŸ~/Ç‚gÔ&…‚+µË¢ùŠ9¬_#pÉÑö#ˆá±$‚	’	¢5ø½"(æŽó9;=šÈó
+Et²à—8Ök!°tÈNCpx&änK5<Á†¹!Ìä\÷ïÐHâ.�ËàŠ ùÈÿí �A ‚AS„a ’|0‚Š ™qAGÈäGÈú)àŽå?_¬,¾y ‚	�Ê’š¨!a<&º„óY­0Aô¨¡µR\9~š6¨Ç˜P…„Â„ýSF:1ðBOÿö"!"ç�AI šXé±òƒqÂEL$@›AMA—@�gcIz6’1kêŒT°­#·F(Føu@Š„Ò´bté:	âÖczN‹·N“üÆû[þeDGòèB/¤éöL Žá$Šx„S“îÛd6‡8ä8äsŽqÎþw[ýÖºAÂgîS”r‡<„åÕT¤¨ò¥<µï.´•ë¥
+¹Î‚Ñ‹¿UuÁØfº'Š›?}û7R}þ’Ó$AG�A4�A0A4�„“Š¡ayÁÄRAH$‚&H š	 ‚E:¤›Š‹DyÿUï_Z¥Å}$¿é%XJ’U´…Õ^>¿¤��W×Ç_b7b!„Òt]B.‘ÇGîä6ß!Ç_×ŒDCªÂ	¤&Êt]V—KUHkëÂZZK^—Jz’�}Q€¿Ò`-6½î»2Õ�—Eòè A[.�ém„Â•¤F$‚8þ@ö8 ‚	¤ ‘E9Ç8çzIÁÅ �Š:ZUIU%¡IR\V—ñIxAz6¿ÿúÐm¾ôðË©Òâ!¤&ÐH �6A$Ž©)èDD{Äk\DPAmM%²è¾®]_õ](/ô^ÚP«J)ž‚÷û]Û
+Ý~5ÖŽÍQØkW­ÞÇZ#á$A ‚E9Ç¼$Päœ$FqÂ	‘òè| �A ‚A‚EÑMb«U¯®_0ñPKè{G×­’ýÉöHpDz�kÜ�úÒ\Èb ‚a0‚	„Â.�I ‚ÿ„[È
+°„0‚	„‚&%Šx§U]}zù!Õt¿JGéð–ÝW¾×ÿWímÕÿ¿¥	lÈ„,º/¡ÛÅúh ‚gp�Hãœ}²†ãœp@¿ÇÄD Ž:&wAÏ3È[ô×&ëwIØ^“Áù7†žPõ`µà‹¦MþÚmÜWü=x÷¾ïµ3éR“}0M„�Hã ‚&qÂ	„8áøˆ¤B>‚&�Âh§	Ž8H$qÎ9Ý($DPEÓéX¸õ_ŠñÆ—+¦Â¶4-Å1Å¿ÞÅ{PÖ3G¦Å&¡ IØ¾„RQA9ÇH+(îœ†«™ü"èº0‹¢ÿ—ŒÑu	Òt×UÐa'Õ4ÕBƒaU1
++M0Öi4„mFÖƒBûA‚AìB	©NS¥îS Grœ§á
+H ‚[°’"Cœs¹Ç8çsŽw)ÁÃ	„($BÂA4§+‘tv�˜«1 Âˆˆ=SA…M
+0˜ˆÓ]4ÐeÂ˜Ða!á„ÂÂ0µÃO
+\DDC$A0‚h �HÎ«¨øˆ„ˆa „0‚!‚½v®+ŽLÒ†Al3 G!’P"#£$#ª/‚ÿÐA
+A�Gãö”à�g|ã�ÖÊxAA‚a$F‹¤„3™$*â"� �H ‚	 ‚H …¯ìCD0…$0‚iú½b.#«Z]�s*Ö‡ÐŒBI Ž9Ü§&í¾Ls¿ùÇð�A4EÐA0…"èºeqNPÂŒÂ°ÂB–ƒ*S8åB&qÒ	"ùtNÃ28*[&\ÒAÒI‚H TÃA‹ˆˆŠB-ŠdÄE¶‚a ’8çp–“n""4)A§«)Î:.�.-™MÑÇEÑt_	ÁÝ¯B‚A�d0äÇ;œsŽ8êSøa�I	ð‚<�dt(t"’RAÂA„	#¾øŠA„""‚A’<uÐñµ'ëÅïIˆIHãØdp<‚ˆ?ã$�A4S ‚.‚	^´»eRB2œãœtˆ�Ød|�#Ž�A4‚8ãB")±‚Å2¨T¿™
+áYð „YÈù#ƒ5²‚¨â!#Žw)Î:d|VGÏ~ôd„h‹£˜"�P N§²œL ‚h˜äWo x09Ü§8çîqÎés¹ÇA�H ‚i ’ šDy�H«]‹DtB($‚B‚&‚/· xmÐa4/î¿OŽ"2‰Äœ�ˆd•�<,‹2Àä‡!¢9–¨,A²?Ó‘þí¤qÎ8H[ÈÇ!Çð@½„M �A‚	&tD„yÝ¤ ƒÈgóL�Cò�tÌãù|B�ÛrÜ„r	�×Â	„ÀPƒé0‹¦XL �A Eð�1¶ò†�ç …MA#v#M¢èDE°VíÂÃ¾îêª}¤W�™!hhPI!sŽœ{eÀðUÒ	0‘Ç;„w)ÑAùty£½V—h0�^lÃ
+˜HwA%sfÚNò÷ŠEÒEÑ„]$_êøA<vÈ£“Ã„’ÐB($A0“aÐ0˜B)
+åÛÚú}¿éÿÝÆÔ�ï�ö‚Z ‚a0‚’(s�mˆŠ šAr‡8ëß¼l’#è�šÓþÚÖîô¿×ÿõâ/„Ö8‹›“ã†Ü�àÖ9Ç÷ñIL$H$‚	_AG‘ÚÒ.®?÷‘`ŠçrvO2Ž@ÇíßÓçŽïÉYqj¿�Ð?&‚	„‚Iá"œã„ˆŽÈàxe‘Ä	 ‚h%ê8ÃB�ˆˆ¯ÿPƒBÂj\Â>³…÷µQ‹#Í©uðƒ†NË²^\Âp{òcžÏ\"x@ËàŒÃ$'$›	¤BÈù#äs.áØˆ�GA4‘Ç	è�Ñ}#è���¯ÿ.²ê�íæÂa4mU×ývJô¦;jxTÐ¹tåÖ!§˜]5å0‘Op{øA0š	täÁÎ9Üãœp‘OŠ	$‚	„‚	Â$#DaT¿Ûúl3oÝKÎbÓlçI½ïù»15â’Ý©ŽŒ}œòî–�í…hÄåè`‘†ßˆ¤AÊ„I�A�ƒ¶"‚!	%þ¯½Ž6ºãô´®«}'®º}®Ý5ëJé»~©+§í7ßÖóu&ÕúæÃ$2Õ/ŠØùÄÇ&­²†ÁÁÄ.ÕB‚A‚	 ‚	„GË¢t]¨W_ï÷Ä/Æ­:ö•ýÈþ¿Wùƒb­ñØí/[¥ÿ_¥ëI‚#	�Â&_	ÄE†ØH§h§&‚&^8�F’zO0>Ú_á[J±þµ¿ÿCÜ.—´ßÿþïÄDE¤) ‚	‘ÐLº/‘ÀðKtA©Î8H§8á ‹á4D"è†½/ÿþŒ—	FÕÿucŠÿïl#iß.</ìVŒú¿þ¼ÈÂ/—EÐ"Ÿ)×ÄC …‘É�<6DÃœsŽaÃA„$‚HBR!ii±_én— ¿½zwýÑ�þOXoF-ÿ¿ÿÿüPB"‚&&Ž9C”ýÛDE ‘C‚#ð@¿éêL‘¢zD‡ÿû­xìu$=ú_d þëWëÇd‡~ºö¼ŒÝwýø¤#Å„ACl�á–9Ç8ëVA ’	 ‚	„GË¢èú|â.„zûÞ¿uiZ§®ßí=¯ÿë¦þqÛÓÛÿ¿ÿ´ûKæZ¢B<‹¤‹åÒ8áqÜ ˜B’$XqI
+³Â.„DV¿—[z±oCø»*dŸ¢$Jí¼ö­¦‹¨í¯AªÞ›a½¿o^d„EL š	r‡)Î;
+ÄDCw„qÒIAzË£™ÚE´´Ðvpƒb“­ªbÂn¤ßV(!v–A„*y]«TØ‹´ÚN*Û
+&-6)=(@�|b„XA"œã‡²†Pçã�ûAA‹ ‚i I„"/µŒ Â`ƒ.š
+MÆ1†c	—{NA‘Æ	Š½&N&5Î#hiŽñÅR
+«Ø„	Ÿ
+ÃŽtŽ9Ç!6ÄRA —ô>"‘4_ x,D
+w x4[ˆˆŽÂ"‡¶\!"¼„Câh$‚A$Š§8çã°Êr†qÇ‚H ‚‹¡AÍåÑ…ŠìDE¬� k™H¡ÁeqNSýbÂ&’8àî;œp‚`¬$H ÚaI„]…R‚‡K‹ „B	„Â	‚
+ Ž8Axˆ¶Èàx„RAOÁÿÃI(øŒ0�1�A¤�Hãœr ì^8Š$H"é]6]Gji{U£!4Oe9OX JÂ!"œ ‰qÂ	—ÈøB’ŠYä¬DC[A¤H$&‚N�ˆ ‚A Dt¤}#åÑt_Ë®<Ta„‚
+$SœsŽHx±ßa�AÂ	„("é$‹£ ‹£D´d¡$‹¤ÙO°„E²ƒŽw8áÂh(·H+AabÏ }"è$‚	4‚&L,ãƒˆˆ ‚ÙC”àˆøA@Š|¡Á
+ó¿]‚£ŒX¤’’	sŽD²†‹A‚‚a
+ š&2¸©¦t‚.‚;„]*ÊuÂhXdM_(Ø-!B2B	!�
+p@ð`rl�á\†@a² !Iƒ	qÁ·&;a)	"‡Ü ’—EÔ§)ÂQ�<��'™N˜R	i�.9,�¸á2�S�"˜D¾dB.�f‚
+òú¬/iL�£ŽLv �c´&B!Â‹¢é]$!œp‡ö›:|‰áÅ0¤3ŽCAÞ0¡0™ˆg¡Áø¤"M‚	$‚&‚Aâ""Ø ‚R)Â	‚£½lDTDlZ6L�‡FÊ!÷œ“N®ÂHUU§Fì»hP=’"èz8†°™|�‘òàxi¼DE$�A �D|º/‘ôt}A]T�U'ÃAÚ¤©¦è†�õ^ž­tÌÙUM¤Ñt‚@‹¤S”ùÜ „DE²±ÂE9Ç8ç|XH ‚AÂR.… �(![K­VŸT¾±]RT—¤¾Òú8ÐI†Ò!A$PçîSœvÄDD0„/Ö¯k—K~i—Djäì“”ƒa(.
+´CŽH0çrÜ�ËúKT’!¤ý*ú¤¾ßÞýDòé.w‚)ÿa ‚‡²ŽqÎçîqÊ| ’!H �A ‚I ’	$s ‚a‹|Ba&¡¦’FDkÈð�žòˆ=šËDP¤x'…ù<&ª¿ö—Ù9!ËsAph#þ( ‚h2œ ‚h ’&\Å$A
+ ˜A$-`�bê1ÅÞÆ„GHÆÑ:
+b{9°ÌZÕ²î©$z[7uFú^ œÂ£i†•RÒø¤’ÈÐ	¦¡S>7@�X‹SŽM$qÎ9Çl‚Àãëâ,&‚A"œMèº&W„Â#¢tQ�‹%Ó†`—»N¯äs=’„Ÿô]RFëAS¢ëMwHÃÒ1RtÒ.¨¿—Zô«Ølò‡IÃª0üÈF‚H ˜EÑtNqÎå:$"")vÈ,Ž	 ‚	£Žw-A¤ÂI$‚&"-P¿¯÷´°ÕtºK›(KŠÖ•Õ+¤—Òô©tµü-«Ân Š~s¬.dU„L$( Œå9Ç8çÎ9Ç$íˆˆŠ$K;àˆý´êa%½ëÄýý¯®qÖ±õ×ÿô“bºKÒ¯¤ÆŒWÛ®…$ª¾e®GË¢ù.‹ E=ß#ñA ‚R‚a¤í�8îqÎ9ß£¾Âa‚	„‚&!Aˆúæuÿµÿ]º¯­$’´ªé/B×Æ†‡í$ÜS}%ÒépÒAa¤H Šp‚ûqa‚H �A}o«ñÅ
+r>ïíÿìWÿ†×K¥ëcØôªªZXkÃ�wzZëmyI‚)Ð»‹Ø÷Å„(#ŽqÂ	£ŽMÜ�#“éúi	‚JM�Hã ‚hŽ‰ÑØ„h¾�é/ÿoûÞ«K˜ÿ°’ýa>’AtaÑsëøk×Òø®,&W!Â.�Amãb"˜†GÁ© Ž9!Â	 ‚a4B¢.!´.„C[.‚	•(pEÓ_KýZÿ|Ã·Iz]ê°^’é^ÿ®´¾’úßI-$˜/b‚�bÃã”8 MœpD|"‡8ùÝ±PZˆ¤S�Á`ˆýj]@�eð�8®v-»I°—i ÿaíÿ}¹¿×\§N­%iª·­,%¥¤«¥á%_áö‚Ð²ˆEÐA0MµÆ›Ip�AY
+±Î9‡8á"Ÿ	$qÎá‚a$$‚PA
+AÐA	œs¸A"� ‹«%lGi§´Ã[V!ÚIÕiuÔðÂK½„’IW_P‚m$­RK¯‡ñh#	„�P@œ¯ûd!Åý¯õjÿD~Å4œÞ�Ž¶(&�E=lR]UR
+7Š¨QLWha0˜L ˜ ”TBªJ�=™„ DIö‚!a ‚AÁÇ$=�×îqÎ9Üãœs¸ V¡ÐA$A �A ‚	Â&‚EÒÂ.Ž#¹¡IƒCA‘Í¨a2:C1„ôÂi Âa2´Ða4Ád3Ž½o28�UtÓIèC¢é �WúØ†ˆˆ††AÕKëÿ>†B""ÄDFˆ
+0@ðÌ‚P@ðÕrÒ<¸m?î, ‘ÇA‚Gãœr ï˜sŽqÌ8 _ �A ’A ‚A‚$T"øA ‘ÇYt@”BTê+Aöd
+é&ÑNõ§! {‚a„R8áÐA.ô)‹”X!±¡]ä§KUê.Ä4&’	
+Îä(êqÜGÆÅ!"œ ˜VqÐE8D|OA@�Z_%¨‚u‚ŠB•ƒ´‚.¨"œ§„$Æƒ#ärA« Úå9Ç	$qÂ§Îá Ò
+l$ B‚A$A0‹¢è$‚.�+Bi6!qŠ	 �x#ŽqÄ+ñlƒ0â‚@Š-B/ÐE8 WÐê"9UB#-™
++# @…Z$	p�A$qÂˆ9Ç²
+£œrCœs¾q×a)i„,!	�ÂHŽŒ"èEé•@M²�z ¬í�U$B‚&�A.¥Ð"�„	ÄF6¾"èh$8çrœ§8çã�È®SœpDp<4F‡A$A4	‚	£ˆÂ/¢�~2œ ‚)ˆŠH#ŽAC4rCœr çÈ5Žw8á#Ž8çã„‚SD0‚ˆ†UI]×eS�Ð"œã�Ê}<îvLsŽH~!Ã²C ‚h+.�û.�ÎYt]/æˆŠ"èò#ió!¤"‚!H0‚	„&�I†S‚¢Œ†�çrœãœsqÎëÅ±a$a0‚A$A
+H"û>Òˆ-ƒ=ó#48ˆ‹ÞwX7a!„B�Š	Lº‚.†Ÿ2,°j>
+$Ü†@eq
+'!¨9	„LÞ‘Ä]FA0‚eÒ|/S�ûÐA �AŒâ/‘òèº<‹£²é<¨@ñbCS�2Ž¥œ).	¦d»GgGbHTq)1Ø„	¤Ap‚a4Lq®	"£¼âmjÈkÇ„1°¨Äæ*|É)
+EÐ5]«ã�ˆˆ�]D…�TLÑ©*0ÖÓ{uè¸”’ô›I´b|îk!å²C¤qÂ	£Žw)Î9Ü"è†‚DI"B.‹¡N)>C)úhƒ[üÁÒÛÿ¿+ß—Áâ"(E„ ‚hŸòù)ÂDZÿŽ)Â¤—º¦ùÙbv‹ Ü�qÎå9Ç?åu¡tI$ŠAyQ„]\�æäRz3…¼ƒd°¤ ðIÏpÇ®þÝoå¸Dh›l „4Âgp„GÍÃa2¶±dW&ç³9pl+	r?œ™n\É¹ax{Z#ø²#ª.¹Üø¡²‡
+\Ù(5„!„-«OüRû-Õ=»SÁ½2:.„ ™Âå@"?yJD…Âª„Ó�*Žëa4Ó	éáB74qAŸih�º7Ð BÓ
+i¯a¾hÿíw¢Üi ­„‚aA ‚IR>""Â5"è ‚b6ÛpÄa›Ú	ºßØ�¬q	&á:7¶
+ŸFø}ê	Ã:1ZPÍÌ3|‚÷WýîÿºR ¢"ZåANy*¶ï7œé:]´“JÎ#Ê“sÚªêÐ^¾‚ú¤ºªÒç=tïÌ7ûkwìº+š!ô@Š¡\RI„A2èÑ�$Þ©UV—cõP´ºYz–º_·IW¯Ké%×¿v»ÿlV‰*ÄDG!mº].—¿¥_õ¯ÿÿ¯º_¤«úÿ»äÿÿißÆÛ.ŽeQ´Èïý/úM­kIk_ë­i%~¶—_ô—ýRýù´œ5»¤H2¶·½¥Õ%ýÒ­.´’[}%Ký*V•1ZÒ¯_ë«ûýnBF»ÄZé$§ýzÿ×¯­}õŠØI*Õ$¿õãúZúÿ.Šàkõ¬:Iº¾šZt—}Ø%¯I+éÕ ­êÌýyn\ªÿêô·Ä2è†Ž"ùËãMkªMp’ô�k]°’J·¥„“ª:Ðlw
+ÒÕ;[I8¥t›H»P‚z¯lƒF@Ðˆƒ9�º.‰šÅUu˜¨ªjº¨®“mŠb˜¥	ìòT”9ÎµÕÅE=llv˜$Å´[§VÄE„Êš4A)C¯„0˜B"5TÐ´"2•o
+„4Œ ÄZ¦ªž4-„×¤@‚Øì�à¸åÀâØVvMF„eÃ$P8ˆˆ¼ÀS¤„CˆŒ/2ˆ8IHîqÎ9ÇSŽÜí:#%H=xÐþ"4""‚!�HE�ÈómRô½È
+0""H'’a4¹^ÕÈd
+¬0…;7!�:DDu±®¡�Èpˆèí	s¸L0ÒbùnH“�Úñlð$PáB¹’Zl�TbÊ x¾]‘ñ€]ÈáÈ
+C•f�á,†qÈÃ�<�Êãh6�™�àHÂ#ì­‹è<†}Hbdø)îjAaËr#‚kaá€øÃŒsÁPT<5‡A‚.’PIƒí4¶¶ÝUCé…ù�¢°ÅˆµÄ~¥î�æèz C‡Tƒ
+Ò«f
+C,wÈo0v¿!¦ä:$Sœt}?	ßI{«õ÷M×IÇŽÃˆˆ£´|}÷n—ÕÿOµ¿Ã>ÎàÜ¹‘òèBë[H‰h3q`DuN¯<P?ù1ÉB�\r ær'ä#©ï#²†kûa†}“×ý©„Ë²¬åÕx³q°1au@ÉøA‚XT_£äz7góðaØ…#ƒÁ™þ{5†H^AT0`þ¯_m$c†Ç˜šŒtŸï¥«°¨Æ×F:hÅíM?	Ì'£	Ú1…„Ô!§1÷ Q¡  ‚	†VÂôý�oIëžé?{Ì;MLOx÷—pÂÜ3vµ|6ŒMÝ¤œ0’mƒÛY�³ˆ¿fêU¨nŠýWºn­ÿïÖ•Î+]½UÖ¯V•m{0ðÚXf¦Ù°P†¿~[’©ÏŠ‚„ãÈùx7íZ¢ÛIÒoþë_„B#­Ž!w­?zÇão¿ÿºÙ‘*ìXˆA0šwü-…Ú×ñëî¢Ä!ÃÂúñx¯àº6Þþ!\Ÿýÿ¡g¡ÂÁQˆuÿF>ŒI­z¿÷A_EûvŒ¿¿ôaz!œpÿáuúÛK‹«	àˆûÿÒé.»þ\nëÝPZ0>®ÒÿÑqú	û$:÷øF*¿÷Ó§Åuú]ö¿Ú«ºüiu†ô¿¶ÁL›þ¾ëoÿ^=ur‡‹ yŽ�—\“¯‘í<&œ4ûî¬›Ú]µåº¾¹�ÿÖõoýWµÒë×ûôL0Š€‚a
+	GÐ­S¸ÙÄ6/V-m6A&½„jƒMˆ!Ý±jƒb¢›Om*ÃöƒþÓ“†H~*Pˆö°ƒÂ
+éœJs	4Ü ÓÃÓ¦˜A¼SM!zjï+j)ŠTØ‹4ÓNöWJMˆ2ƒœtQ§ñŽ½›AZ\3r¶¡È+E4ÌH3Ìa†
+qìßh4ÈøA¤.q^©«â�±‘ÄkMr Øâ!¢¦8aÈH#�N9Ü…rœ§;”çr�²c‚.«¤¢=mˆ¡M¶($ÊØ$)�Óä­}^ß‹½*ŠÔ¡Ð°ƒ"�„T.ŽÇWÚÂå¹4"#¦,GÄhv¤	¸j2ãœt]$‡ »Sˆ†¯ExXA3ìÕˆr'†RÆÉZ+‚¡�8">"¹6—VP"ŒÑ$ß&Ä"ú ™Ç;œr�±�7u�Q:: ÊX!’YÁ®qÈcñÔDDClY©
+XÈvaÓ QdS'‡È4Yc�<p‚«�ØäËäÛÑ}‘.‹ Ãd‡yJEÒBÓ†¾�€ü&AA`Í¡ƒÈ+�>M¡2aíŠ#¡jŒPðƒ¾rCÝ¶îîÐTayn³©"���±•UFß]Ã³
+êfÙÙ‚Sg �•!è"é’IF¤HI²
+îPèÑ
+§ýÇßðûûþÖCC¤×ÿÕTE¶"É*‘¿ÿM-~©'®•-.ÓH$’#ç^äŽ‡nJÜðG„°”Â	‘;�^õ%ŠU’|Ž<‹nU‘ðAÒU�jt±ÇZñöÛ '™­ˆA„-4è0…„ºËª
+ˆiááž5©Xx'ÀƒòÇËLù¬Öª@‹%¸Lƒ~/|ìº+‰"èÂ ‚`°�6jI¿a£iª1Ñ‰á‚—mfm-oôô¥æœÄÃ=jµF×UÂëëTi„ôé>"-‚A!hŽ™TaÙ[VRvá;9é÷fÀŠÜâ¤ÿýÌ6ú1b•æÝ&ô)¥A6‚ø¤8ªukF+JHÃº\·$U�B ‚Ü�.ÃUi´é+ýÜµÕ÷ÿ¤›ÿêsK¥¥úÎ}RyåÒç?-ÖÐH ‹¡Hº5&ÛÌÐ²ªn/Û¯ziw¯þø¿ö×æ0T5ÐóbHÝëÿ…ÒÝ|·&¿I7a¹€ž÷ªx…ïëÿ©‹ïþ£®º^õéRT’~´—ñ	 �FˆÑvÂ#¢«‘EøoëßÚìW×0
+÷ÿIW¯¥úZÿUþ’ñoc;H¤‡Ûûß¸Oÿÿûÿõ¥UŽ*E¯¿Tµê¹n�¶Á‘¤?É?‚#½ÿu¯µÿþIûõßÿ×¢+äQé§!K­i–êh$˜d+Èh~Ú_o×ÿÿ·ZWß»úWÁ¯­—]%ÕRµ(s>º_]%ØN;ãýXk¦Á¯am'ki{mÚV•¥�HÒÒŠL.ÂézÆ¶­ªIåÃikÙÊŠnï;J)¤6)4œa=6)�SÂl6)Œ1M&žÅ5¦†…0ŸUlZ]|W]"&…ÚL6g‹¦º Â„5³zÆcA ÁvÜ4M0�i„hUW¦šiˆLUUmS^…iîJÔ�àÌä2A@ä¸!’æŠˆˆòl„HX¦ÐA2¶."â5ÄYÜ§i¶"Õy6©QnT•" ¥²lt"Ž9Ç;Ãy­¢´M‹¨ˆ E>HEóˆò.�"c�rÜžÎœåÌ9Ç8èL§ØHŽ’P�QØˆ ‚h$qÒ²‡ÃA&])t_#á#ÿÄ$ÁG5 ’$‚	—DUt[„A„LãØèâ$‚ÆGC�œDtG!ìBßˆ¸IH"ê'e:.¼·
+DUN9Ç;œvöNqÁH B;m„"¸Š&�A"‡
+äºa($L¡Î:g| Ol†@Â†®È�—¢Þ´ÝTX{Øû°Â ‚	 ‚$#E xÓ Òù�á°pšd^"öÉµjM ŠvìYž‚L!Ë¯ Ê&S”$ÛIº¦¨ÄiëAÂA$Xí„”D ™tMA" �g�Žoy¡ê²
+ÇW®]´b|E¿²8+GF+A¤‰#ËO«ê™�ÝÕµnŸaAqÂYÄG¶†På<XB?¥–”õ¾Ä0‚LŽ‹‘e "éŸi×Rp¥¹Éþ¡H�JƒPÿÿè"œ§¼L ‚ xqÂ&SœsÅ0@�Ò’é™4Âa5 “+dsË²p˜ Â™Ë‚,Âg²\^þþßm ‚	„ÂÛA�"‡	#D]- �£{a4ŒY�.ª‹¥ð‘Š4×PžŸÿý‚´qÂAGâ"Ö)¨ÝIºÒ_ÞšPŒ4–©:O„nL Ò6Û·û¯A¤LO´S ‚	ŸFÐI]Z_¤Öè'œék‡Ô%hò9ë¥®rðû[^""�P‚GDAE8Eòé.œÇþ©zÅ±Ò­V=*ÒªÒ×^—cccäØ“4GÂH!¢œ§8á´L!·Z_T©Z_Õ*_ð©$—é –íttBÂA±Êˆ"žGÖÈùty¯õ÷]*¥EÏ­/¯Õ%ÒIy	%üql&_#ä|¸B�H ‚iL „ ™Ü§)Ê¡Ei¤—ÖDºJ•t½%¥JºUÒëÒZå¸Ò;@Ž8Ab",Ž‹ ��Æ»ˆˆ­ºJ·KAäÝ}UÒOëÒ_ô—&>•/hãœsqÙ‹¤‚	á$]	”çã•Ç+û]+Tøî­4“´ég–a-aØN¶µa5T’ï&A,¸(ˆa‚CM�A5"êœ8¤ÂQ¦qôÏ$A×QIW,V• Á	a>;Ý”å<PµñMØAˆM4ÓP™ÍUS]4Âh0‡„Ï ¶˜TÓÒ	pE@¤‚8è#ŽA�â,&AÂA ‚º.‹ä|â0‹©�h�àÌ8ˆˆ¸Œ-t!à‚Ñ.‹¡X`ƒ	B’&‹¨�ìB	„(Ã�Î=ˆÄE¯i|ay6�HYNB‚"C�g;”:#åÐH �A$H A”å®Mïiâ,$Ž8 ‚0‹¡q @˜*g:&Üµ´8çrc¿œuŽ]A2¡¬ºoìPEÒ	DDZ	$‚EÐA´‚¾¹6ô“#ä|ŽDp<â"Š®]ÁeÐ _½j’@�2œ „R8á@­Ã#ä|º.Œ"èêƒBBÓA!ì·)B"Â±×&â,$l!ºÜ Mû+eÎåv’ …qÉ@ sŽ'Å—B! ‚a^yõ¡
+ˆˆ°„ ˜Mç ‚6‹£¿Oˆ¥h§8çîLqÿ„‚D-2èÍH''Ä2�ä±È‚Y�d†Vl›j‚@ð\p‚h ‚gp’	ˆŠTÔ†Xä5H	¦AU8*�<¦@£ËÂ
+ÜEÏL4I9Ç;œsŽqÎçDGPÒ.�!:Ã¦Úíù	\Cä2¡­ù6šêÂA0šAÊr9NqÎ9Ü§8ç$Q„L­˜‚Pû77Ù†ÃA÷Ù¾¡…Ú®"M+ü�ètH$š&vµÕÝÇ}-,�ôÝuÿ²l*h/H ‚i#ŽqÎç‚�Î9äÇ;ÿÝ;¤uþÿ_ÇÿQ¯ÒB"‚A8ˆ¤"Òã„‚ ˜L$D| ˜H$`Þ¿¶MÈ£™ÈHëK×ý.’ê$)Î9ÇÎ9Çò™lEÑ¢ÿO ƒC3a¯.	ö§ÃÁ;òè“„Ê‚n•`î{4|–?D#‘3–äX*5 n9rc‘?dÜÕ)Ó¤ … ‚a Ð;#‘ˆù.‹¢øA@Ží!ÿ.º£	¦�§ú¯J¡9˜¦q¥PT5Ô!ªaBs™ˆØfT#5
+
+Ñ™Iq~ÑA0ºH ˜ ¾Çˆb, Š²�D|ºz^­úNÎtl;ú1TÑ†…ßpÌoÒFûª1Q¹ºiô¾øtoÞž�¥ª1y64b)„Â8á"œã‘ £
+rœøqÁ™t)‚AÐHºé}q^ÓûüUœuÑº�Êa·ëñH*g4––Äj’\z
+¦ö’1QŠ‚ÙåKÛEÖÂ‚�0‹¤Pè �CO­nWûÿ±˜ÁëAU× «Kª®o8ºÕNK§Òý'­*Ði¤PçîSœs�jÌ$S”èMOˆz¬À#Ýö�úZ®ºÌuéW]*¨¤ºë_ÒlU*ÿàŠ{	$8ç<º"?´Åÿ�ÚþÿíÕ%Ö’_ÿÖÚUé-z]WZõÒ„®´©%è"è$@žŸ¡Å0„0‚Dt¨„PÿüæôŸô¿Û×UÿK¤·KõKýRúT´´¿ˆMþ½r½hv"ÐA4‘Ç	ˆ„	„‚.‰4²4\~«ßÿ
+­~–µ¤ºZ¯­%¥×U^—®’Á:IW¯&ËHŽŒ �#¹NB,1AqdUe[`´,_û~ž•ÿæwý*ÒÖ¿â©µ^ôõ¥__UKèŠ÷¯ªòÝQ8 ˜a¡Êpˆú;ù;Pál$qÂ#ç2ëúåÅÅÞÃ¦ÓûÏké-XO[‡pè†[öÚ}Ç¥Ô:Â|8¾¯{A¤žžÄUïa"‚"CáG‘t_#åÑub!„�A
+ýaØOŠb¢Öí+M&!>�	tµI„î)*žÓ—ª�¦µX«X®˜­(H"øA ‚U8ÿˆb!„JQ|�­9túÓ_fõ58’iÇì&…ˆSÈ&*©ª­6Ù½<&4×[7$©›Ðb5Îj©›—p’	‚G ™t_#‚‚è§Ò$’	A ‘tA®8‹Df-0„A„DCL@ÂÜ�á¬;TAjÚ[
+k“s]�A �¤â""A„øìb)ñÄF„DR¢ ²k–åÑPH ‚Pç ‚d|¾G2àß/¨†Lº	0‹çOÔ†@Ç	%É²Î•;] ÂAˆh"øˆ°ˆû%ƒM$*¸ŠM �@²ŸÇb.§_NR?Za$)Â�ç‡p‚Ûeð‚hl¸ñah NL‚Hb,D[N’BˆÄ„Gâ, …—Eò>§8çrœ¢èªbÂa A~M–Ó;•¶H ’	A ˆqÅ´ØˆAir¡
+$Â	}S‹ÑÜÑu—[ãâ($I ‚grœãœsqÎ9�$]4	G_Ëp$Â.ŽaAkiØÃ(£Š „4Šã©Ç8çrœã�ÇvVÑ¢Hºe:8¶C 5ì†HiAc�<G'¿+­£±tF.Ë E>Âa‚H$…qÉqÚ¾Ê
+�ŠR‚ÖêAµÈ(¡ÃnÈ>9šj&EƒU�Ø‚
+\Eòƒ�˜DÂ96[I ‚	¤-èV„DCÑŒ!‡N5G–«ö«l",ÉðM0šü}†,$8éŽ9Ç;œsŽw0äÞGÒHæMòè��,ÅÈiŽìÃaá#a ÓN›;„pá¶šh*19vþ# ‚h"�Ø��Ðè!�„ËæyRB"Ø ÈèF“–é+[w¤ýîÛÂvðôõk¯ ÂE9NE9Ç8ä‡8égÏ÷T¨'vR¦×¨¯ª½úO~�u}×“`´sIHþ§„˜aE8A4‚&ã„	„ˆ† ‚	œ/×_¼ŠôA‡;›#ü–kûuþ¿Óa ‚AÐ#�ûøâDaNÍrèâÒ!¢éØ…%d\£AÍé•„Xª4Éá‰a~\É¹NIõ„-Wü'þ#ÌÝ¹}.žÚ_m¤‹ý\±SÖ‡h§&‚ šAp‘N.‹ä~tFI!jÚa4Õ0¨ÚÓ—=B…	…	øBÂ3N]Q…Ñ¿Þ¿„¦6ƒëßÿÅ/±H$’)ÂA,hDDCX¥¤"*ØHÄÑ�ª1ki¤o¨I�³èÅ—”ÂsºZMäs*Êí ÓQ¿Å$Ú1>Œ>Ý¶—íWÉ°ZiP³¹NŒ ŠtŽ9Üãœs¾qùt]XÎ"Ÿ/¶é-.s¥íR¥Ä&§VÒëôÝ ôýþÕ5“~ï¿ïz}/½ºcÛ¦ÒúEÑ¢E=$‹¡h&M ‚RAqHã ‚a4"!„]_KI¤´ªÅxU	!­!H$Ø¸¤¶Õºô6Õ]ÒžÿÌ[^!{÷×kñÅ"èŽ�ö¯øˆø‹;ÕÛÿ¯oÔf¤½R¶â�u¯áms| kü?íúûîŒ'É±n]Îd}WA0�IL¾GÈã#á2ù#é(è� ‚H�à°;i/T©+ÒZ×¥�ºzßÑŠö—ÿ÷¿ÿïXeÕ&Óá¤tA]$
+/C{ˆˆ‹Xøˆ¤×éW®­~½.	»FÃ¾+»}/�ïÿÒûÿ{Æ·ì¬¼t‚G$8ál ™|Ž‹äx�—ÁX"øI"è{ýizœwÿKú"¾gz½÷&úßÏh_÷ú˜MÂ#¯¿¥¹úº‚epL§&!„bÂ  tEÐˆ¯ÿGéè_õõÉ¾kÙ½×{ ß_ýo¿nÕ¼„rcÿïÎË¢ºE�¡�4Ü§N§)ÁùÇ8äcœs�üîiÚPô¬/qúÙoúV°ÂÕì.kûŠaüuúúa&Ò×m´º.½<„s^—_&Êh š.‘N‹¥I„RPA ‘Ç	 �A4I•QJ�Õ&)Šª”!ULR¥Å34** Š�¶“iŠOÚ´í4Ð¦6Ý±Lza7»OLb¾"B( “aÈþÊ¬q˜Þ]bš¦ºfäÕ4Ò{L&	è0¢°›¦ílÞXM5O“…	ŠBMo»„ûL šöM‰;#¯öÒ.‚	¤	 Žá#qÂIGÝ£ªR<Ã1È
+žÙqÄG xkã.
+¸‹L&œaéI‚ºH$/ÔXˆ�†PÐ±ˆ-�ÄD4<›/ñ‚h ‚	¢è"œã�Î:Dœ+´_;:J¡%â("è ‚	„yb"($‚&‡Aa$tv¨©PK“atyˆ¶Ð‚åò>]×÷çï¥×U\$Ñž&òè4A
+&AC	‚h ‚	¤ˆñI°‘šö…ÒãŽÆƒ^M…×½2œ$H š ™|�¢�Z.—H$‚&‹ ‚bÄPA ‚A„¤‚º	$]?Ž( ‚På8D}Aÿÿè~ÙT)Îá2 Ø [&]�H Ž8I ‚h �Hº¤‹¤’&šA
+[ˆ T7!Â‘|E{ÄYC„.�A2è ‚eõžÎéyÄòXo!’-ž�e‚
+œqÈ*¹ÃPr‘ÈDd­”£´ Â"ùÄF"$‚&� ‚a
+	}Ry&y�/Ä?<5Ü¸dhžÔ�Xåq &|ÉQìb(¨º/‚)ÿü+¼\@ôáÐI ‘Åãz!ƒÕ>"!·ÐA$t($‚&‚ š"éžZó	8h0®•a³e¡A9¹î�]æ%ÐA¢>ÿûŠAƒA ‚UÐCþ¿ôãOc AÅñã‹H ‚i„L§‚)Î?ò>—ÿ¿þÅ]VŸ®MŠQ„‚.‹£ …ÚA � ‚h �A">ôýHð—›ˆ(„·{Kˆ*w¢Ídø�C“s?ªjúd3¹ß“}#ºë~/î+‡ýË¨M4Ïæ°@Âb0Ä&h=’òø!v[®™XOÉÁX!tAŽ'¡¸œDt��9Ü·#òý7„/dØ[#£ÙÄ_9‘Õ	ž‰‚ ‚a38L � ™R«¾¹…^b|Çj“M¹Š…£
+ƒ¤Ñ‰i„-SÓ
+šiÕ$Œ*Òk¤B�A„¹Å�°Æ	ŠH�¼…¾>ëI¶lÓnÔ»ÌV\ò¤èÃa›X¿Ü<ÄÙåº¨Åš ‘‹LÝÃ¾DuF,Ç0ØfÒã‹‚+XH$Ï�2œ Št� ®wJýþŸþ…]VÒØ8Ú}­ñû±Òvõ½[6ô´6ZuzˆA5A!•ÉML$$AÊ�{|Ú/{Kü/Çˆt©ì~¦
+uïÿãÚi}÷ö«]±Òþ(+6‹¢ø¯þ·Kïü^ßÖð­¥0$70°Öÿðßÿï×ˆ_ûI¶¿á÷ú&ÁHºñÊ M ‚EÒ�A%$—ÿâ½­¿äGØv>ß¿ÿrá¯^ÿÿ†ÿöÐAÒDt°Ò Âa�¯ÿý/¯#ß$þßUûÿ®�ïEíþÅ}þßÿ&Âßb¨ˆ¤BN’.‹¬.Ë¢è¿ÿö·_ØðEÓ_o¼?Ýyœ?¯þÚØ"=×{ý¿ü7ÿÅ]S”@V�„ ‚D B,!äá&ÿßÚoi6¦{â«,w¶ïû¯û´­Òÿÿ¼ÎöÿÄDPA
+!ûKf‹ñ^š{I°ÒAÇLqIÃ	5i§Ý|\:Vû»½Š�bÐw§
+ Ýûwëi_#è �A4EÑ:H�öƒAáè6+g¦¸¦­8ØÂaQ§…¦…†š¹Ä4Ð½Øk§›äßA –8†z†Zi‚!h4×#ÀƒHtÖÐeä á®™¼ Âii›×´““Mª¶šäØš|4Ü§—H„yqÈdS�<�àÕ"""ÎB!—‚"Ž"<›#DF!a
+Z½DEDDy7t#~wéÁ‚¤	|�áL®a!v´½�ÊˆˆŠÜkÐH¤H"üE…Çh2œò,“bÄ‚.«ÆÅ"øHâèXA2è^÷&ëIÈˆ!`œËr
+C�R†H5F…�<‚`\*'òV™N ½�K xjù.Lƒ¹
+| cÜˆ9<ñÉ¾”'þ5´Èi:Ú�7}òdrh0L(BÜ"èŒFˆ¾›IÅÙ†Ã�ËuiÐI†˜O6˜l0•®‰²Vð@‡v—íê:Mkë ›z—š	æä½Î!Hº	Iô|¿}ÿúU]Zz÷½ êè®Ä$DS5%äWÏo“íÈAòŽ%Š—WCy?¼t±_—DÜ<Ï8‹¢ùtžÈø [µX]=A44XT¾¤¼�	ÌþF9!Ër%¶�@þï%ùãœs9•i="ÿE½hÔŽÔ!AB�°‚PA
+&²ë.¨Úvº1ð©Úm#EUR
+X`˜(L'èÞÿ—Þž„C!ÌÄª_(E¸Ú.Ž¹ÞŸ—X"£‹Cû^s|?MÅ#
+Î&Œ6ÂíZ—TaQ¿1$bË«ê¾ëOþß.ÚA¾ëó´fD™B#6†WåoP… ‚‚	„"+zÕé¿C®áßÚ¯^•éROAªg––é&öý½_›¡›œßê¾4(+3@�Zçf¨Ú×Ç}ÿïüÚI>ßðbúÒõúHP]i%ÿ±ÿéoZMúü¡ÁREÒH “º ‘(E:Å$D}œt]Äh‹¢V»¥¯ûÌtÿëíÚ¥¿IWK¥¥ª¶—õ·ö•^ûä¦¨_.¼G£  <?ÿÿ·ÿÞÚéªé%ID(ýßcW§ÿ×«Ùn:#hD2¨W]´Mð‚gEò:;KŠÿÿ#ïý¬6‹®¨V’±T«ü&¯RÞúI+^þÿ¢ÜYXˆ²œ¤hFœDEï¿úÚ÷ÿ®ù8Ztºaz­ÿKwÒ×ýÅH$}Vÿ/´]A ‚grœ®=
+�?¿ýß¶ÿßËw!�Òþ½4
+¥�¯Dcýe½}êMËÿÿ&ü$",":+Ì›]úWÇ¶ý¥}ú
+®Ó[X»¤Û
+{iµÕIÆýt0›~‘qt�iï;H…•‡sáNU
+))ÊÚ‚…n­ui;ºÖÒ‡ÂÞºÅAÄRüUìRvaÒ»v¦¶©Zí…¿½á4tv„vQ¤ÓÂqÅ&�&ÛÅ5v˜L'AÎj9˜õÕnÖÒa=ŠëŽ)X šÿ-Ë3±>‰šéµ†ƒa…¶˜A§w<iªM„"ÕPa=4"Âñi¡v8i¬_b",¡Q`„DD0@Â`â""â,'ó)€<3õ±¬=KC¥ÆõT¯õaRI%ámBj„*c¦B,4üZ®I¤#Åò�ä]G‘tyEÑ|º.‹¢èì
+‹"èÑ«Fˆº;©¢.¸28òè¾]EÑ|�—EÑ|�‘â9‘ò9ÁP�‹£Èº.‹ä|º.‹åÑt_#ä|¹‘ò8!<‹£Èº.‹£º0ˆù|�‘òè¾GËä|ŽŽÍ¢èÂ.‹£º/‘òùÈù|�‘ÈŽ
+§t]EÑ|º.‹ä|º.‹åÑt_#‘#�Ì@@+ò@Ù%ä`³_O
+œÇF÷¬ÅI´‡Jÿ}÷ÿÿû_îÒµÿb˜…þÓ_tíû
+?ta4a?i'I¿ ‘·¿ûïéúõ× ­&×0IŽ+ ¶[�Ìr; ã�Ûr–@ðîDr†Ü<2Ç!G!�ÈÇÒ adÁ‘&Í©¦A¢	�'€™ˆ Å¦{MSÃ0Ý-Û–:1´÷áª¿ít]Ù‰ºâûµ/]ÅÈâ>8ÿ®ïŠ»¾¾g4?òPNÏ}EÀ™
+Ù§$>	|Ð^d!S'ñ)þ[—i™ÉÙ+¹(&9nw%}ª]Ð´ý=4ü’
+°ƒþ‚¡i¦U
+g™sAÅ„i”9XnŸg£LÝ
+œa4fÎ3†yœƒ	„Â�äÃ£Ö)Ú1—ï°‘‰†˜$c£Ù�4Œ'Ú1¶mó+
+²©¬¿Ff—îÎ&švŒ-û£˜²ý†šjœºËýåõÌú¨ÿ¯j1_t’ÁtôîÖÓ³vo­Sô…ÌO	K¼Æöæëÿú¼Ú°HÄÑŠŒu}Þbkû_étÃ×Öþ\Nß÷×þÿOµ~!~ûŠÝ8¯þÃÞ†Ÿ¯ØpÇ¯ŠÒ˜Ü¸¯·×FÐ¯íÑ„¿ÿð¿0/ÿÜ.ÿÃÿ½c—8¿ýi~ŽßÓº[Ù�/cÿ¿ô¯ÿö)ÿ–ÿÿè¿ÿpÿe�¾ï‡
+ÿúE}ƒØv ‹Ï[Oþ?æÿ^ÿßð¿»¯ÿµKÿPEç­¯]£
+–8l"=þÁG� {‚
+ŽCIÈ3Ù‘l�à¢
+Ï¦³DÓPˆêÜqÅöÅ&›L^ôÚü]ªÄZ]~œ_¯NÒÛ­(½/»¨¶=ŠŒïß§ v�#&(
+ƒ´Ô†qÉq
+A0�àÓE!¶@RŸp]?kØl3å1m5iµ6…×šn„lþ*4"àâ4œRÇÅ&š»V’±NñQ¡ÜÀ€�í ŽWMÜ‚L-¥
+Ó!ˆp…�Ã¾#.q—A42é;A¨B"3…¸eò;4Ca„Ó1 i¦ˆƒ”â1ÛM0ªƒ0]='’;tC)ÚpÐh:LÜÜ3mt�´›ë�ÉH‚\â"#Dk x#ƒZ]ôúXí5}tC,z ô—§ôšõúÝëýþ«ã¥�´Ž±¦¬zö©=ª’“žg²Px"Oõ#²?7P9	ª�Wá‚&ØUl.f.üyu'åÔXA¡
+ÂLülA­ù˜…Ç¢Ç$äÜÖG2|k>Ø:�aÌç‚/—Ù`fŽ:|º¯0©i¡§1ôbü¾Ñ…˜³§v“O	#i¦áBvªš©?'ô
+0«�7?yuêþb³ˆ¾`ìåI¶n¤ñ÷ZM†m§j‘‰£)ót#�¤0øp�É¡žTmQµV6‘ŠŒ_ÛûKöÒý¡ö·Zý§
+ßÕ%Ö•×¾–’¥ ´DsœKJ¯úýÿÿÿÄ/üÙvë_¥¨£×¯˜•¤•i%I$ê»T:[�ßö¯Ûÿ…ÿ§Ý/½[æî—]z»úID*ñ¤¶%÷ôþÅZ6¿ú1ÿ�ëF.—ÿô´•z_Â­$!zé$ß·_JÙûè/ÿKÿýÿÒãÂ#òC­éRÿ‘GÒJ•Zà¾½_õ÷ízÿÿÿ»þ¶ÿßíwÕj—^+MzO„Úþ§{ûûòá´�ëø"?û	Úl4ü“ßõqu,fŠ¾µz¼-CÓË…¼’{ªO�Í~Å{W±Vƒ ›Ö4ÓN5AÇi¦›H64íØ¦”'
+ŠŠ°’Ø%ÓÅUXX`“j¼A	~ÖxO*Q¸‡HE³‹h Ðzn­›ôïvôLVáTçauÅ1ôÎj*üz]'"
+Ã³ŽaˆˆÕ4" Á†�„Âqš™àˆcÂ`„_ò`§ÅÒ^|1I/Z…»Gÿò@irì†Lä
+Ç Õä`Nç8R¤HG�A�„4øB�3›pàVA¯vž@Ø.@ðkrÉŽ…¨a„y\‡Ó@ù©0ƒI4"@¢
+óò`¨98!¦ä+�1ƒ WdÀPšdà‚«�<	â�˜l�ÀèG ƒAœÛ
+b0ìÃhÞÂ	š	· aÚ
+dÇ!�ò`×¢…
+«¯á0²ìÃoº¥ôÓM?}éé[A3
+¾4C5Æü;ªóÝß!®?Ö×ý=¯íþ=ö‚­w×U^l¢áÃ¨¸¾#nã�é«ÿþ?î¾—êAqÈ°Pþ¶F>îï×ë¾Ba.š—#²N{#ÂZãÿúÿþG™XK�g²ü!äÜðK‚ÎŠ#ˆ0@õíú_ÂiÞ�A„-¼Â¢ëú_¯ÌÁ74
+.ƒ‹AÆš1ð…§ôŸ�°O¼‚ã”>w"A<>ÍÄ/H+rÈK#²</ˆ&	C8äQÌùàÖ]“|——49ðO‹rÜðEµÈ8ä49çrvJxKÁ^chÅœX©ŒZ19¢÷ÿ…ø§Ó]=$b|»³vbï§1ÙºÍ×){åº¢€ÏÂq âð©„-a ÂaUaFÌ!.ð¸U5•aŠzj!a
+U‚Bœ!a´—ÁIþž’f3u'fÏÓ¥üB~­fçósŠ§›šÛº^øfêNîûë~ªŒKæÖÑŒ6nMLy�¾ƒFÑŽŒtba‚bÑµNÃ¿£hZ1Ã´Œu¹y;šj�îÑ‰ÌTÑ…ã¦«˜ñÓ÷_ÿô¼Æ£¯éénŸÆõØþÿ}«éæý;¾¯»76Pé6ŒOozzfÑÿM�{öÿvs{_N›ªÔ)½£žVoTá›»ú14ŸÔþÿöÛKó|ÆóOÜ�ÚÛ+ßùµß×ëaþÃÿø_ý{Ó«úM‹K\ÛÞÖ¶ÖëôºæÞŸëIê�·÷ý/á;�ui]�¤üÀ¿Û˜ï~¿ýí¿þÿþôßÿþßðÿ¯˜�/fÿa�÷wØ…Þ•ÒáŒ1Ûúq^ÿïí|1ÿßxßÕ¿Þÿíïÿûß_×·‘o«öÿ÷ï
+þ
+ÿÿõì?÷]†úùp�‡ÿá^ÿÿÿuöûÒ¿6+ÿü6�ð�ßöòC­¶B¿ïŽÞ>Ø×Cïýÿ¯Ù7(wýÿÿ$þ;
+}¿ÞâƒhÅþâðÛþŒ{ÿëïÿöõ¸ßá_þÇ¶Ái_û÷^Ú_ém¯¶¶­úE½·¥íþÚÛþaÛÿ^˜}x¯�¿ös¿ÿÌ(@­°Ý÷ú]Wÿßûáÿkûë¿˜O¯±Å]ž.Øa_×ƒ°–ÕÚ«}ÝÓí¤ÞžÛ~—P|UÿÝ_Óƒ*�=ø+ÕþÒè›¶¿þë“r�Êwé¯ëÿûÿø^aÛýÿÉÿZôwnÂ÷Nšvn*IŠWPAêÃ®!„ÂÁÅEE{wPÕŽ“j+»¾ÓØé«×A‘Ý¿ÿíh;Koµ†¶ûêŸëþ•§ì4ÿ@›»Tÿµý¿¦×î]< Új:ÃoNƒ	¦�la7é†i ÂÂÄ&šÚÂUu»_¬žjŸöÚM<5c�=&**øi0Õ4ñv·±}±ó0qWò€£Øô–ÖÅEE1A„B",(L!dtGADDaˆv\3 aDE‘òá¡‹/„mÒjÅ!±õBMŠ¦¢£bza*+BäûB�†„^ÚmF›ß"`C�É
+GÚ^m‡¦843h"$4
+4Ðh†f…aQLÄA‘àˆµlâ	¡eÛeÐÚ…A…	„BÐi ’â¤nC 12x xeÁˆŠ@â#0
+&$�%ÿú¥éˆð×þC…õâ�kJ˜dp%‹
+*tH4ÇÃhqòSr$>@æÎ™¸.ÈjÌ˜äºd	Ü‡ry˜,£!³&×žÚ�Ú€�„\�˜;�<\�ànä
+g xmºµi>NîMÂ¦š�[öA²�UÄì�ÄÊÑ2°@Ç‚dh�“Ý8}¦‡Tn£
+¥®©úôkªO¯¾8jŸÒü˜îŒ+D»†lí#i†�ÚFýwÿ«ö¶–ão‡ÄwOKtÁ+“r+•sÁÈ¸GûÈ±ä°ŽC@äÇ$ä¬”âà"6ßïúô>êÛõŽ!ˆ°ƒ¡Pz„ Âæ²¬h0˜C
+þþ ¶.?�.ê@ðkqõ[éÚhÚÌKF-Ëª0Ÿ£ýZja>^ìÝ¯ý§’Â/óÀAÍ>Ðd¬�È'a¸Ö{4Á2(åŽFçrpG„àðƒ “.Ï1nx Ä[–äà›”þäà«
+9	X@Ìä°¼>d1«†o#æý6•Þ_¥¤õ¤ìÜþ{¸zI¶o[‡w®÷çæ7„Q0‡Ú˜A„ÓBê”*xC!¦ƒBÌ!°fÀ�„,(Bü,œ3ï]C*q¡ºŸÂÛWCOñ÷ÿ{û[þ®6ÿþ”0°Ÿ	z7¤bsE)Åg#t0¥Û¤bÏ(wpÒM¬Z6œò†LÝv‘µOã
+£iÿ†§Tc£	³nŒG;éÌ.+þÿî—îÿíí¤‡Ãm-��o}5NÍ—§jº[m=¤ð^ÎpÍç,'iýÝê›=š³sújý›µO/:tnü/fÌÄÒzü¸WóÆý	ÿÿÿ˜aûûµø…ýmÿþýê:ßém¦é®:ÿýýæ¶˜úo­{xý_ß÷´aí/Ø­¯ÿéý´½¿� �B_áßÿÿ[Ñì+ô¿þýzÿþ÷ímý¼pÇ÷ÿC†:Oý’ŠòOý’ÿý~7#ík[èÅÛÿý¿ÿà†»ûÿý	û]º˜	½üwßÿæ.
+þ¿Ì
+²#¥ÿª.ioéý×ßýZäÇoþ»K	{ÿÿÖß±ÿÿï¾ÇétúÿiÌ½¼6¾Å~á½+_ãFc±õÃKõ]°¯ï
+{~D£I'ÿëÿ¥ýÿÉ¿×ÿÿdÞþc°D~¿üiõ’¶ÉõþF;l0±i¦›PiÕ´›Û
++M�Vö)8i'öªm.×F×÷þ›}Ûûýßúî¶ÿú_Û÷e8}}þÔØ„ÅÅ´Ú†‚zn˜L1¡m&šmRÆ­Sh0AQ\^ŒÉ¯pþïÿŠú]ºÿãÓaÍ
+ÔzþŸBÂDX]a­±_s2Õ†Í¦]‘Á ¹Dq‘Òa°„~°ÂaïH(@ÂÃ8©Á±A4ô""Ób“it-�4ÓA«H_
+7jÓBÂi§( �T-6#¨i4ƒX8¸¤¦""“�ÉÁñZÛk¦™€¤|ŽIµ[.Á;Q×WTÒÁxA�—ˆäÞ6“öm­1ZjC$âXŠ0RƒXä2jÜ\0„DQ�´ÂÂƒF\qaHé<R¯N>#‘Àˆˆ¥ˆ‹MPé­­Ô5P`˜\TU…ŠHGi Å5Xa[
+Ž!ÄDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ€�r'd@ÒM?Tü<�È5³›~¼|‹s@&†Õ-¥ÿÞ»6ý¯ýüµû];XˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@endstream
+endobj
+68 0 obj<</A 94 0 R/Border[0 0 0]/C[0 1 0]/Rect[427.31982 649.68091 456.95984 658.44031]/Subtype/Link/Type/Annot>>
+endobj
+69 0 obj<</A 95 0 R/Border[0 0 0]/C[0 1 0]/Rect[96.23914 206.40015 120.23987 214.68054]/Subtype/Link/Type/Annot>>
+endobj
+70 0 obj<</A 96 0 R/Border[0 0 0]/C[0 1 0]/Rect[220.91968 195.72034 245.27966 204.36108]/Subtype/Link/Type/Annot>>
+endobj
+71 0 obj<</BitsPerComponent 8/ColorSpace 82 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 99/Length 563/Width 76>>stream
+8;Z]"D0Ei?#Y!DIqql8F7.C!QJs0gG85H,sUK8K;6^`uU4*E/`<"6UkFmo'[YOTBr
+pHTTfZgJ.hqgi)bC:pq/UJ+)nh0RNg'r>XgF>;?0[]Qh1PWtWg#maj^COF\q?=bFf
+*Ub+$D-p[rC":Gf2Omu8Kf5WBBJ8iQ9ld>(FUW!CCt#^m.nPaO/SH`_W*dUakISeR
+Q`jLAKCrEtat!.YgtgCK$6^7Y(6qj,$(%+pX)im:Mij:JYA^b3q![<*Fj7UIE$%f7
+f;++:oYu@5P%B.n[34Xc]s#V:SFA[W6;9-B(3b5,3as]07;5QiWl>[ME%>S+Fu;J(
+,$qM7KRMOW*js<D3]gB.-S)UI>/0,>^,M@,=Te6Ge;g?5kI/CH;\kYWU7AHrqrfZh
+1l.HTA:</d(?TE:a]l@`g7!^C"ug<'>R[un7*ok#*%u<1Ihj4dbEA*i,fhC1qY?s;
+LL+j(>!c`F$Cf?cS5ijQBPdRs<Yi>WA#K@:;g(39f1u,0_=K!&N2^VUc$JO:15M=K
+FH[LFbA-(YR<7fJZ"(h7*IH1_"p"KnC1m~>endstream
+endobj
+72 0 obj<</Ascent 905/AvgWidth 441/CapHeight 724/Descent 212/Flags 96/FontBBox[-250 -250 1082 1000]/FontName/Arial-ItalicMT/ItalicAngle 0/Leading 33/MaxWidth 1343/StemV 80/Type/FontDescriptor/XHeight 506>>
+endobj
+73 0 obj<</Ascent 891/AvgWidth 401/CapHeight 712/Descent 216/Flags 34/FontBBox[-250 -250 1009 1000]/FontName/TimesNewRomanPSMT/ItalicAngle 0/Leading 42/MaxWidth 1175/StemV 73/Type/FontDescriptor/XHeight 498>>
+endobj
+74 0 obj<</Ascent 833/AvgWidth 600/CapHeight 666/Descent 300/Flags 35/FontBBox[-250 -250 702 1000]/FontName/CourierNewPS-BoldMT/ItalicAngle 0/MaxWidth 748/StemV 191/Type/FontDescriptor/XHeight 466>>
+endobj
+75 0 obj<</Ascent 833/AvgWidth 600/CapHeight 666/Descent 300/Flags 99/FontBBox[-250 -250 800 1000]/FontName/CourierNewPS-ItalicMT/ItalicAngle 0/MaxWidth 868/StemV 109/Type/FontDescriptor/XHeight 466>>
+endobj
+76 0 obj<</Ascent 833/AvgWidth 600/CapHeight 666/Descent 300/Flags 35/FontBBox[-250 -250 638 1000]/FontName/CourierNewPSMT/ItalicAngle 0/MaxWidth 659/StemV 109/Type/FontDescriptor/XHeight 466>>
+endobj
+77 0 obj<</Ascent 833/AvgWidth 600/CapHeight 666/Descent 300/Flags 99/FontBBox[-250 -250 836 1000]/FontName/CourierNewPS-BoldItalicMT/ItalicAngle 0/MaxWidth 939/StemV 191/Type/FontDescriptor/XHeight 466>>
+endobj
+78 0 obj<</Ascent 905/AvgWidth 441/CapHeight 724/Descent 212/Flags 32/FontBBox[-250 -250 1072 1000]/FontName/ArialMT/ItalicAngle 0/Leading 33/MaxWidth 1294/StemV 80/Type/FontDescriptor/XHeight 506>>
+endobj
+79 0 obj<</Ascent 905/AvgWidth 479/CapHeight 724/Descent 212/Flags 96/FontBBox[-250 -250 1157 1000]/FontName/Arial-BoldItalicMT/ItalicAngle 0/Leading 33/MaxWidth 1405/StemV 153/Type/FontDescriptor/XHeight 506>>
+endobj
+80 0 obj<</Ascent 891/AvgWidth 427/CapHeight 712/Descent 216/Flags 34/FontBBox[-250 -250 1089 1000]/FontName/TimesNewRomanPS-BoldMT/ItalicAngle 0/Leading 42/MaxWidth 1273/StemV 136/Type/FontDescriptor/XHeight 498>>
+endobj
+81 0 obj<</Ascent 905/AvgWidth 479/CapHeight 724/Descent 212/Flags 32/FontBBox[-250 -250 1075 1000]/FontName/Arial-BoldMT/ItalicAngle 0/Leading 33/MaxWidth 1242/StemV 153/Type/FontDescriptor/XHeight 506>>
+endobj
+82 0 obj[/Indexed/DeviceRGB 255 97 0 R]
+endobj
+83 0 obj<</Ascent 891/AvgWidth 402/CapHeight 712/Descent 216/Flags 98/FontBBox[-250 -250 1120 1000]/FontName/TimesNewRomanPS-ItalicMT/ItalicAngle 0/Leading 42/MaxWidth 1309/StemV 73/Type/FontDescriptor/XHeight 498>>
+endobj
+84 0 obj<</Ascent 891/AvgWidth 412/CapHeight 712/Descent 216/Flags 98/FontBBox[-250 -250 1206 1000]/FontName/TimesNewRomanPS-BoldItalicMT/ItalicAngle 0/Leading 42/MaxWidth 1390/StemV 131/Type/FontDescriptor/XHeight 498>>
+endobj
+85 0 obj<</D[4 0 R/Fit]/S/GoTo>>
+endobj
+86 0 obj<</D[5 0 R/Fit]/S/GoTo>>
+endobj
+87 0 obj<</D[5 0 R/Fit]/S/GoTo>>
+endobj
+88 0 obj<</D[5 0 R/Fit]/S/GoTo>>
+endobj
+89 0 obj<</D[5 0 R/Fit]/S/GoTo>>
+endobj
+90 0 obj<</D[5 0 R/Fit]/S/GoTo>>
+endobj
+91 0 obj<</D[5 0 R/Fit]/S/GoTo>>
+endobj
+92 0 obj<</D[7 0 R/Fit]/S/GoTo>>
+endobj
+93 0 obj<</D[7 0 R/Fit]/S/GoTo>>
+endobj
+94 0 obj<</D[8 0 R/Fit]/S/GoTo>>
+endobj
+95 0 obj<</D[8 0 R/Fit]/S/GoTo>>
+endobj
+96 0 obj<</D[7 0 R/Fit]/S/GoTo>>
+endobj
+97 0 obj<</Filter[/ASCII85Decode/LZWDecode]/Length 766>>stream
+J,g]X(a+\E1P?>`79Eue*-[2_,"\/rW[tc@1F#WHj17AQO?fU/3"_S^R=R.::[eA.
+AM#[\;\IYd[J_ZoJ.0FhdU%%<SNgaS$.4\3R7gE11jA%$?UlhJd\$eS,,kC=$`\q"
+U/Ir1!'f@A&T*3;@7f*ReecQ?=Y;ANP#CEn\a_9eN6J-adRNlI]fkgNX3l$$Qq1Z<
+G^$S9;hlu6dGm,h$Rk\j$8R=JU,sd>)8Dc3&O(lUTgn6J)Aedb@OB\BFi_gJs'5-H
+$"mh+g+IQ_S\/TE8_I@mQUPoG]Q],N8&m-"d3`I'o;M-C#eG^rU*HVK1I#1%&J'Po
+iC!BA?5I=C?m,1XrQ&ntkM5Fu#L(1CQgG.YQOhd#rI`GKU8/?X6#NJ=8jGG5$49''
+9UR36.!3=Vj<uCmKG5h<P:,>:&;+s.SIgl;$#'s@jN(X:7D`kG5XiY^>]W?LaYGRW
+OkB[SQ;Q>Y*J4sVQ;!I:oT31s#:,B=aT>G'5,tH2Wc>&3ZDo1MUZ/:TR>9J70S6V:
+OYDi;$!f6T-=C'c9u9$J4\`n3gi-!'R@#[ae(F7TQ'9n94b?VbMImKR`=Q%s#5&N5
+d/kU*4.1g`<D&afW$+chFK"S!Pq*HVYlX/%KWu#f&Q#_OBD>X8<Pf2M3`X-^>]!KV
+C&Tdl("h\TPh"Hn?%J9nIXdMjQ&nns#/uZ-f`Cc-31o=f8SX^fW"j'&[]&/"P\9g_
+CKs,!`#`/NIDeuf7]Jn$hA;15H/=mim<TZW!Wi~>endstream
+endobj
+xref
+0 98
+0000000000 65535 f 
+0000000015 00000 n 
+0000000366 00000 n 
+0000000446 00000 n 
+0000001088 00000 n 
+0000001672 00000 n 
+0000002305 00000 n 
+0000002925 00000 n 
+0000003520 00000 n 
+0000004113 00000 n 
+0000004342 00000 n 
+0000004417 00000 n 
+0000005594 00000 n 
+0000006670 00000 n 
+0000007768 00000 n 
+0000008891 00000 n 
+0000010036 00000 n 
+0000011192 00000 n 
+0000012349 00000 n 
+0000013471 00000 n 
+0000013686 00000 n 
+0000013774 00000 n 
+0000014956 00000 n 
+0000016137 00000 n 
+0000017317 00000 n 
+0000018499 00000 n 
+0000019674 00000 n 
+0000020860 00000 n 
+0000022035 00000 n 
+0000023220 00000 n 
+0000024411 00000 n 
+0000025590 00000 n 
+0000086583 00000 n 
+0000087325 00000 n 
+0000087400 00000 n 
+0000092318 00000 n 
+0000092533 00000 n 
+0000093719 00000 n 
+0000094912 00000 n 
+0000144270 00000 n 
+0000144975 00000 n 
+0000145050 00000 n 
+0000149311 00000 n 
+0000149527 00000 n 
+0000193388 00000 n 
+0000193510 00000 n 
+0000193631 00000 n 
+0000193752 00000 n 
+0000193874 00000 n 
+0000193996 00000 n 
+0000194118 00000 n 
+0000194742 00000 n 
+0000194817 00000 n 
+0000201568 00000 n 
+0000201784 00000 n 
+0000249009 00000 n 
+0000249129 00000 n 
+0000249805 00000 n 
+0000249880 00000 n 
+0000253913 00000 n 
+0000254129 00000 n 
+0000393488 00000 n 
+0000393610 00000 n 
+0000393731 00000 n 
+0000394574 00000 n 
+0000394649 00000 n 
+0000399083 00000 n 
+0000399298 00000 n 
+0000442855 00000 n 
+0000442977 00000 n 
+0000443098 00000 n 
+0000443220 00000 n 
+0000443921 00000 n 
+0000444134 00000 n 
+0000444350 00000 n 
+0000444556 00000 n 
+0000444764 00000 n 
+0000444965 00000 n 
+0000445177 00000 n 
+0000445383 00000 n 
+0000445601 00000 n 
+0000445823 00000 n 
+0000446035 00000 n 
+0000446082 00000 n 
+0000446305 00000 n 
+0000446533 00000 n 
+0000446573 00000 n 
+0000446613 00000 n 
+0000446653 00000 n 
+0000446693 00000 n 
+0000446733 00000 n 
+0000446773 00000 n 
+0000446813 00000 n 
+0000446853 00000 n 
+0000446893 00000 n 
+0000446933 00000 n 
+0000446973 00000 n 
+0000447013 00000 n 
+trailer
+<</Size 99/Root 9 0 R/Info 1 0 R/ID[<494e4431323339303530383334333737><494e4431323339303530383334333737>]>>
+startxref
+447859
+%%EOF
Index: branches/scout/projects/mapping/matlab/sensor_transform_test.m
===================================================================
--- branches/scout/projects/mapping/matlab/sensor_transform_test.m	(nonexistent)
+++ branches/scout/projects/mapping/matlab/sensor_transform_test.m	(revision 1346)
@@ -0,0 +1,47 @@
+
+sensor_model_width = 100;
+sensor_model_height = 100;
+
+map_width = 800;
+map_height = 800;
+arena = ones(map_width,map_height);
+
+sample_sensor = sensor_model(:,:, 60);
+
+%sample data:
+x = 200;
+y = 100;
+
+dx = x;
+dy = y;
+
+objTheta = pi;
+%objTheta = 0;
+
+translation_mat = [1,   0, 0;
+				   0,   1, 0;
+				   dx, dy, 1];
+
+rotation_mat = [cos(objTheta), sin(objTheta), 0;
+			   -sin(objTheta), cos(objTheta), 0
+			   			    0,			   0, 1];
+
+udata = [-1, 1] * sensor_model_width/2;
+vdata = [-1, 1] * sensor_model_height/2;
+xdata = [-1, 1] * map_width/2;
+ydata = [-1, 1] * map_height/2;
+
+transformation_mat = rotation_mat * translation_mat;
+translation = maketform('affine', transformation_mat);
+
+sensor = imtransform(sample_sensor, translation,... 
+		'UData', udata, 'Vdata', vdata,...
+		'XData', xdata, 'YData', ydata,...
+		'Size', [map_width, map_height], 'FillValues', 1);
+
+size(arena)
+size(sensor)
+
+arena = arena.*sensor;
+
+image(arena.*20);
Index: branches/scout/projects/mapping/matlab/sensor_test.m
===================================================================
--- branches/scout/projects/mapping/matlab/sensor_test.m	(nonexistent)
+++ branches/scout/projects/mapping/matlab/sensor_test.m	(revision 1346)
@@ -0,0 +1,48 @@
+
+%Define sensor model.
+
+%Definitions:
+sensor_model_width = 100;
+sensor_model_height = 100;
+sensor_bounds_x = 30;
+sensor_bounds_y = 100;
+sensor_width = 8; %cm
+empty_weight = 0.1;
+wall_weight = 2.0;
+outside_weight = 1;
+
+%Space creation:
+Sx = linspace(-sensor_bounds_x, sensor_bounds_x, sensor_model_width);
+Sy = linspace(-sensor_bounds_y, sensor_bounds_y, sensor_model_height);
+sensor_model = zeros(size(Sx,1), size(Sy,1), 71);
+
+%k ranges over distances (cm)
+for k=10:80
+	for j = 1:sensor_model_height;
+		for i = 1:sensor_model_width;
+			slope = k / sensor_width;	
+			if abs(Sx(i)) < Sy(j) / slope && Sy(j) < (k - 2) && Sy(j) > 0
+				sensor_model(i,j,k) = empty_weight;
+			elseif abs(Sx(i)) < Sy(j) / slope && Sy(j) < (k + 2) && Sy(j) > 0
+				sensor_model(i,j,k) = wall_weight / abs((k - Sy(j)));	
+			else
+				sensor_model(i,j,k) = outside_weight;
+			end
+		end
+	end
+end
+
+%Define the sensor model for when no measurement is made (-1)
+for j = 1:sensor_model_height;
+	for i = 1:sensor_model_width;
+		slope = 80 / sensor_width;	
+		if abs(Sx(i)) < Sy(j) / slope && Sy(j) < 80 && Sy(j) > 0
+			sensor_model(i,j,k) = empty_weight;
+		else
+			sensor_model(i,j,k) = outside_weight;
+		end
+	end
+end
+
+
+
Index: branches/scout/projects/mapping/matlab/prob_map.m
===================================================================
--- branches/scout/projects/mapping/matlab/prob_map.m	(nonexistent)
+++ branches/scout/projects/mapping/matlab/prob_map.m	(revision 1346)
@@ -0,0 +1,101 @@
+%Function which creates a heat map of wall location probabilities.
+
+%Input comes from 'filename' where each line contains 8 space-separated values
+%Each line contains: x, y, theta, IR1, IR2, IR3, IR4, IR5 in that order
+%Example line of input file:
+%17 23 .45 -1 42 -1 -1 -1
+%x and y are centimeters, theta is in radians
+%IR values are the values seen by the robot, where -1 means that nothing is seen
+
+%Output: probability density map.
+%All output measurements are in centimeters
+
+%TODO
+%find conversion factor between IR sensor values and centimeters (currently 1 is being used)
+function map(filename)
+
+%Vectors from center of bot to IR sensors
+Bot_IR1 = [4.5,3.5];
+Bot_IR2 = [7.5,0];
+Bot_IR3 = [4.5,-3.5];
+Bot_IR4 = [-4,-3.5];
+Bot_IR5 = [-4,3.5];
+Bot_IR = [Bot_IR1; Bot_IR2; Bot_IR3; Bot_IR4; Bot_IR5];
+
+%Unit vectors with the same angle that the IR sensors are tilted at
+Angle_IR1 = [.78,.63];
+Angle_IR2 = [1,0];
+Angle_IR3 = [.78,-.63];
+Angle_IR4 = [0,-1];
+Angle_IR5 = [0,1];
+Angle_IR = [Angle_IR1; Angle_IR2; Angle_IR3; Angle_IR4; Angle_IR5];
+
+%For now, read input in from a file
+Data = dlmread(filename, ' ');
+
+points = [];
+
+%Map area, defined in centimeters:
+[X,Y] = meshgrid(-100:2:100,-100:2:100);
+%V = [X1(:),X2(:)];
+prob_map = zeros(size(X,1),size(Y,2));
+
+
+%Set position and range error constant for testing FIXME!
+range_error = 250;
+pos_error = 500;
+
+%loop through each line of file
+i = 1; ir = 1;
+%for i=1:size(Data, 1)
+    row = Data(i, :);
+    x = row(1);
+    y = row(2);
+    theta = row(3);
+	%look at each IR sensor reading
+    %for ir=1:5
+        %if row(ir+3) ~= -1
+            %Find vector of object relative to center of bot
+            distance = row(ir+3) * 1; %TODO!!!!!!!!! replace 1 with a conversion factor to cm
+            ObjectVector = distance * Angle_IR(ir, :);
+            ObjectVector = ObjectVector + Bot_IR(ir, :);
+            
+            %rotate by theta
+            objR = sqrt(ObjectVector(1)^2 + ObjectVector(2)^2);
+            objTheta = atan2(ObjectVector(2), ObjectVector(1));
+            objTheta = objTheta + theta;
+            
+            %add absolute position and shift into image
+            objX = (objR * cos(objTheta)) + x + 1500;
+            objY = (objR * sin(objTheta)) + y + 1500;
+            ObjectVector = [objX, objY];
+        	
+			%Calculate distribution for this point:
+			
+			%Range variance in y direction, rotated by the object angle.
+			rotation = [cos(objTheta),sin(objTheta); -sin(objTheta),cos(objTheta)];
+			range_error_cov = inv(rotation)*[0,0;0,range_error]*rotation; 
+
+			%Position variance in the robot direction 
+			%(TODO introduce error in position estimation perpendicular to the robot)
+			rotation = [cos(theta),sin(theta); -sin(theta),cos(theta)];
+			position_error_cov = inv(rotation)*[0,0;0,pos_error]*rotation;
+
+			covar = position_error_cov + range_error_cov;
+			
+			dist = reshape(mvnpdf(X,[x,y],covar), size(X1,1),size(X2,2))
+			surf(X1,X2,dist);
+			colormap default;
+			return;
+
+			%Using the values of the pdf as an approximation for the prob. density map
+			%(needs to change) update as:
+			prob_map = prob_map.*(1-dist) + dist;	
+        %end
+    %end
+%end
+
+%graph the probability map.
+surf(X1,X2,prob_map);
+
+
Index: branches/scout/projects/mapping/matlab/Makefile
===================================================================
--- branches/scout/projects/mapping/matlab/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/matlab/Makefile	(revision 1346)
@@ -0,0 +1,15 @@
+CC= mex
+CFLAGS=
+LIBS= -lpthread -lwireless
+
+all: receive
+
+test: *.c ../../libwireless/lib/*.c 
+	$(CC) $(CFLAGS) *.c -L../../../lib/bin -DWL_DEBUG $(LIBS)
+
+receive:
+	 mex -g receive.c -L../../libwireless/lib -lwireless
+
+clean:
+	rm *.mexglx
+
Index: branches/scout/projects/mapping/matlab/receive.c
===================================================================
--- branches/scout/projects/mapping/matlab/receive.c	(nonexistent)
+++ branches/scout/projects/mapping/matlab/receive.c	(revision 1346)
@@ -0,0 +1,220 @@
+/* This version of receive initializes
+ * the token ring and then waits for
+ * the robots to send data.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <mex.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <time.h>
+#include "../../libwireless/lib/wireless.h"
+
+#define WL_COM_PORT "/dev/ttyUSB0" 
+#define WL_CHANNEL 0xE
+
+#define MAP_REQUEST_GROUP 23
+
+#define DATA_POINT 2 /* packet type for map data points w/ odometry data*/
+#define DATA_REQUEST 3
+#define DATA_SERVER_REPLY 4 /*Just to give the robot a target.*/
+#define DATA_SERVER_IDENTIFY 5
+
+#define BUFFER_SIZE 1000
+
+pthread_rwlock_t buffer_lock;
+pthread_t receive_thread;
+
+void packet_receive(char type, int source, unsigned char* packet, int length);
+
+PacketGroupHandler requestHandler = {MAP_REQUEST_GROUP, NULL, NULL, &packet_receive, NULL};
+
+struct robot_datapoint{
+	time_t time;
+	short number;
+	short range[5];
+	short x;
+	short y;
+	float orientation;
+
+} robot_data[BUFFER_SIZE];
+
+int tail_index; /*Points to the newest data in the buffers.*/
+int head_index; /*Points to the oldest data in the buffers.*/
+
+void* run_wireless(void* arg);
+void init_wireless(void);
+
+void mexFunction(int nlhs, mxArray* ret[], int nrhs, const mxArray* args[]){
+	
+	if(nrhs == 1){	
+		
+		/*Initialization*/
+		head_index = -1;
+		tail_index = -1;	
+ 		
+		pthread_rwlock_init(&buffer_lock, NULL);
+
+		pthread_create(&receive_thread, NULL, run_wireless, NULL);
+		return;
+	}
+	
+	/*Return stuff to matlab*/
+	/*deliberately ignore nrhs.	*/
+
+	if(nlhs != 4){
+		mexErrMsgTxt("Error: Expect output arguments [P IR T R]\n  \
+					  where P = [X Y], IR = [IR1, IR2 ...],\n \
+					  T = angle, and R = Robot number."); 
+	}
+	
+	int target, index,i,j;
+	
+	if(tail_index == -1 || head_index == -1){
+		double* point, *ranges, *theta, *robot;
+		/*Appropriately return with nothing. (til I figure that out, return 0's)*/
+		ret[0] = mxCreateDoubleMatrix(1, 2, mxREAL);
+		ret[1] = mxCreateDoubleMatrix(1, 5, mxREAL);
+		ret[2] = mxCreateDoubleMatrix(1, 1, mxREAL);
+		ret[3] = mxCreateDoubleMatrix(1, 1, mxREAL);
+			
+		point  = mxGetPr(ret[0]);
+		ranges = mxGetPr(ret[1]);
+		theta = mxGetPr(ret[2]);
+		robot = mxGetPr(ret[3]);
+
+		point[0] = point[1] = 0.0;
+			
+		ranges[0] = ranges[1] = ranges[2] = 0.0;
+		ranges[3] = ranges[4] = 0.0;
+
+		theta[0] = 0.0;
+		robot[0] = 0.0;
+	}
+	
+	else{ /*Copy the buffer data and set the buffer to empty.*/
+		pthread_rwlock_rdlock(&buffer_lock);
+		{
+			double** point, **ranges, *theta, *robot;
+			
+			int num_buffer_elements = tail_index - head_index;
+			if(num_buffer_elements < 0) num_buffer_elements += BUFFER_SIZE;	
+
+			ret[0] = mxCreateDoubleMatrix(num_buffer_elements, 2, mxREAL);
+			ret[1] = mxCreateDoubleMatrix(num_buffer_elements, 5, mxREAL);
+			ret[2] = mxCreateDoubleMatrix(num_buffer_elements, 1, mxREAL);
+			ret[3] = mxCreateDoubleMatrix(num_buffer_elements, 1, mxREAL);
+		
+			point  = (double**)mxGetPr(ret[0]);
+			ranges = (double**)mxGetPr(ret[1]);
+			theta = mxGetPr(ret[2]);
+			robot = mxGetPr(ret[3]);
+
+			for(index = 0; index < num_buffer_elements; index++){
+				int target = (head_index + index) % BUFFER_SIZE;	
+				point[i][0] = (double)robot_data[target].x;	
+				point[i][1] = (double)robot_data[target].y;	
+				
+				for(j=0;j<5;j++)
+					ranges[i][j] = (double)robot_data[target].range[j];
+
+				theta[i] = (double)(robot_data[target].orientation);	
+				robot[i] = (double)(robot_data[target].number);
+			}
+			
+			/*Relabel the indices 'empty' (-1)*/
+			head_index = -1;
+			tail_index = -1;
+		}
+		pthread_rwlock_unlock(&buffer_lock);
+	}
+}
+
+void init_wireless(void){
+	/*General communication initialization.	*/
+	wl_set_com_port(WL_COM_PORT);	
+	wl_init();
+	wl_set_channel(WL_CHANNEL);
+	wl_register_packet_group(&requestHandler);
+}
+
+
+/*Call wl_do and occasionally send a broadcast packet declaring the 
+ * number of the server.
+ */
+void* run_wireless(void* arg){
+	
+	pthread_detach(pthread_self());
+	
+	init_wireless();
+	printf("Wireless initialized!\n");
+	
+	int a = 0;
+	/*Passively wait for packets to arrive.*/
+	while(1) wl_do();
+}
+
+void packet_receive (char type, int source, unsigned char* packet, int length) {
+	printf("A packet came in!\n");
+	if(type==DATA_POINT){	
+
+		if(length!=18) 
+			printf("Packet came without the standard length!\n");
+
+		/* expected input: x y theta(double) IR1 IR2 IR3 IR4 IR5*/
+		/* Pull in data:*/
+		
+		short x,y,i;
+		short ranges[5];	
+		
+		/*Bytes 0-3*/
+		x = ((short)packet[1] << 8)  | (short)packet[0];
+		y = ((short)packet[3] << 8)  | (short)packet[2];
+		
+		/*Bytes 4-7*/
+		float theta = *((float*)(packet + 4));
+	
+		/*Bytes 8-17*/
+		for(i=0; i<5; i++){
+			ranges[i] 
+			   = ((short)packet[8+2*i+1] << 8) | (short)packet[8 + 2*i];
+		}
+
+		/*Write new data to buffers. (Lock down!)*/
+		pthread_rwlock_wrlock(&buffer_lock);
+		{	
+			/*Note that you write no matter what.
+			* Also, if the buffer is empty, tail_index becomes 0*/
+			tail_index = (tail_index + 1) % BUFFER_SIZE; 
+			
+			/*Write the robots number.*/
+			robot_data[tail_index].number = source;
+			
+			/*Write in range data.*/
+			for(i=0; i<5; i++) robot_data[tail_index].range[i] = ranges[i];
+			
+			robot_data[tail_index].x = x;
+			robot_data[tail_index].y = y;
+			
+			robot_data[tail_index].orientation = theta;
+			
+			/*If the oldest member didn't exist, buffer was empty.*/
+			if(head_index == -1) head_index = 0;
+		
+			/*Otherwise check for overwritten data.	*/
+			else if(tail_index == head_index) 
+				head_index = (head_index + 1) % BUFFER_SIZE;  
+			
+		}
+		pthread_rwlock_unlock(&buffer_lock);
+	}
+	else if(type == DATA_SERVER_IDENTIFY){
+		/*Sleep before sending an identity packet.*/
+		printf("Announcing self as server\n");
+		usleep(5000);
+		wl_send_global_packet(MAP_REQUEST_GROUP, DATA_SERVER_REPLY, NULL, 0, 0);
+		usleep(5000);
+	}
+}
+
Index: branches/scout/projects/mapping/matlab/testRobot/test.c
===================================================================
--- branches/scout/projects/mapping/matlab/testRobot/test.c	(nonexistent)
+++ branches/scout/projects/mapping/matlab/testRobot/test.c	(revision 1346)
@@ -0,0 +1,128 @@
+/** This test should just have the robot stay in place,
+ * register the token ring, participate in the token ring,
+ * and reply to packets when asked by the computer.*/
+
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <encoders.h>
+#include <bom.h>
+#include "odometry.h"
+
+#define MAP_REQUEST_GROUP 23
+
+#define DATA_SERVER_IDENTIFY 5
+#define DATA_SERVER_REPLY 4
+#define DATA_POINT 2 
+#define DATA_REQUEST 3
+
+#define WL_CHANNEL 0xE
+
+int state; int velocity;
+int server;
+char buf[100];
+
+void respond(char type, int source, unsigned char* packet, int length);
+void transmit(void);
+
+PacketGroupHandler requestHandler = {MAP_REQUEST_GROUP, 
+	NULL, NULL, respond, NULL};
+
+int main(void)
+{
+	server = -1;
+		
+    /* initialize components and join the token ring */
+    dragonfly_init(RANGE | BOM | COMM);
+	
+	usb_init(); usb_puts("usb turned on\r\n");
+		
+    //odometry_init();
+    
+	wl_init(); usb_puts("wireless turned on\r\n");
+    wl_set_channel(WL_CHANNEL);
+    wl_register_packet_group(&requestHandler);
+    
+    wl_token_ring_register();
+	wl_token_ring_set_bom_functions(transmit, bom_off, get_max_bom);
+    wl_token_ring_join();
+	usb_puts("token ring joined\r\n");
+
+	char buf[500];
+	
+	int prescalar = 0;
+
+    while(1)
+    {
+		wl_do();
+		
+		if(!(++prescalar%1000)){	
+			sprintf(buf, "# Robots = %d, # Robots in matrix = %d\r\n",
+				wl_token_get_robots_in_ring(), wl_token_get_num_robots());
+			usb_puts(buf);
+		}
+    }
+
+	usb_puts("Terminating\r\n");
+
+    wl_terminate();
+    return 0;
+}
+
+void respond(char type, int source, unsigned char* packet, int length) {
+   	if(type==DATA_REQUEST){ 
+		sprintf(buf, "received packet: %d\n", type);
+    	usb_puts(buf);
+	
+		int store[9];
+		store[0] = 0;
+    	store[1] = 0;
+    	*((double*)(store + 2)) = 5.0;
+    	store[4] = 125;	/* IR1 range*/
+		store[5] = 125;	// IR2 range
+		store[6] = 125;	// IR3 range
+		store[7] = 125;	// IR4 range
+		store[8] = 125;	// IR5 range
+
+		char* data = (char*)store;
+
+		wl_send_robot_to_robot_global_packet(MAP_REQUEST_GROUP, 
+			DATA_POINT, data, 18, source, 0);
+		delay_ms(50);
+	}
+	else if(type==DATA_SERVER_REPLY){
+		server = source;
+	}
+}
+
+void transmit(){
+	/*If a server hasn't declared itself, return.*/
+	if(server == -1){
+		wl_send_global_packet(MAP_REQUEST_GROUP, 
+			DATA_SERVER_IDENTIFY, NULL, 0, 0);
+		delay_ms(50);
+	}
+	else{
+	
+		int store[9];
+		store[0] = 0; //X
+    	store[1] = 0; //Y
+    	*((double*)(store + 2)) = 5.0; //Theta.
+    	store[4] = 125;	// IR1 range
+		store[5] = 125;	// IR2 range
+		store[6] = 125;	// IR3 range
+		store[7] = 125;	// IR4 range
+		store[8] = 125;	// IR5 range
+
+		char* data = (char*)store;
+
+		wl_send_robot_to_robot_global_packet(MAP_REQUEST_GROUP, 
+			DATA_POINT, data, 18, server, 0);
+		delay_ms(50);
+	
+		bom_on();
+	}
+}
+
+
+
Index: branches/scout/projects/mapping/matlab/testRobot/Makefile
===================================================================
--- branches/scout/projects/mapping/matlab/testRobot/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/matlab/testRobot/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../../..
+endif
+
+# Target file name (without extension).
+TARGET = test
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/mapping/matlab/testRobot/odometry.c
===================================================================
--- branches/scout/projects/mapping/matlab/testRobot/odometry.c	(nonexistent)
+++ branches/scout/projects/mapping/matlab/testRobot/odometry.c	(revision 1346)
@@ -0,0 +1,171 @@
+#include "odometry.h"
+#include <encoders.h>
+#include <move.h>
+#include <math.h>
+#include <avr/interrupt.h>
+#include <dragonfly_lib.h>
+
+long lround(double d);
+
+char control_velocity = 0;
+int encoder_ltm1, encoder_rtm1, move_speed, move_angle;
+
+//Measure mm displacement in x and y from starting position. (+x:theta=0 +y:theta=M_PI/2)
+long diff_x,diff_y, velocity, target_velocity, target_angular_velocity;
+
+//Measures radian angle displacement from starting position. (initially 0)
+double angle;
+
+/**
+ * Retrieve the estimated x position. [mm]
+ */
+long odometry_dx(void){
+	return diff_x;
+}
+
+/**
+ * Retrieve the estimated y position. [mm]
+ */
+long odometry_dy(void){
+	return diff_y;
+}
+
+/**
+ * Retrieve the estimated angle [radians]
+ */
+double odometry_angle(void){
+	return angle;
+}
+/**
+ * Retrieve the estimated velocity [mm / s]
+ */
+long odometry_velocity(void){
+	return velocity;
+}
+
+void odometry_set_velocity(long t_velocity, double t_angular_velocity, int start_speed, int start_angle){
+	target_velocity = t_velocity;	
+	target_angular_velocity = t_angular_velocity;
+	move_angle = start_angle;
+	move_speed = start_speed;
+	control_velocity = 1;
+}
+
+/**
+ * Initializes odometry to run on timer 2.
+ * Also resets all values so that the center of the robot is 
+ * considered to be at the origin facing the x direction.
+ */
+void odometry_init(void){
+	
+	encoders_init();
+	
+	delay_ms(100);
+
+	odometry_reset();
+
+	
+	//CTC Mode. CLK / 1024
+	TCCR2 = 0; // (Fully disconnected)
+	TCCR2 = _BV(WGM21) | _BV(CS22) | _BV(CS20); //CLK/1024 , CTC Mode.
+
+	TIMSK |= _BV(OCIE2);
+
+	OCR2 = ODOMETRY_CLK;
+}
+/**
+ * Resets all values so that the center of the robot is 
+ * considered to be at the origin facing the x direction.
+ */
+void odometry_reset(void){
+	diff_x = 0;
+	diff_y = 0;
+	encoder_ltm1 = encoder_read(LEFT);
+	encoder_rtm1 = encoder_read(RIGHT);
+	angle = 0.0;
+}
+
+
+void odometry_run(void){
+	//Angle swept through in a time step CCW-
+	double theta, rl, dc;
+	long dr,dl;
+	char buf[100];
+	
+	//Get the change in wheel positions
+	{	
+		int encoder_right = encoder_read(RIGHT);	
+		int encoder_left = encoder_read(LEFT);	
+	
+		dl = encoder_left - encoder_ltm1;
+		dr = encoder_right - encoder_rtm1;
+		
+		//No motion.
+		if(dl == 0 && dr == 0){ 
+			if(control_velocity) modify_velocity();
+			return;
+		}
+
+		encoder_ltm1 = encoder_left;
+		encoder_rtm1 = encoder_right;
+	
+		// Try to avoid over/underflow.
+		dl = dl > 512 ? dl - 1024 :dl;
+		dl = dl < -512 ? dl + 1024 :dl;
+		dr = dr > 512 ? dr - 1024 :dr;
+		dr = dr < -512 ? dr + 1024 :dr;
+	
+		//Convert "clicks" to um
+		dl *= CLICK_DISTANCE_UM; //um
+		dr *= CLICK_DISTANCE_UM;
+	}
+	
+
+	if(dl == dr){
+		diff_x += lround(dl*cos(angle)/1000.0); //mm
+		diff_y += lround(dl*sin(angle)/1000.0); //mm
+		velocity = lround((dl * 1000.0)/(ODOMETRY_CLK*TIME_SCALE)); //um / ms = mm/s
+		if(control_velocity) modify_velocity();
+		return;
+	}
+	
+	//Call the left wheel 0, clockwise positive.
+	rl = ((double)(ROBOT_WIDTH_UM*dl))/((double)(dl - dr)); //um
+	theta = ((double)(dl - dr))/((double)ROBOT_WIDTH_UM);   //rad
+	
+	//Distance the center has traveled.
+	dc = (theta * (rl - ROBOT_WIDTH_UM)) / 2.0; //um
+	velocity = lround( dc * 1000 /(ODOMETRY_CLK*TIME_SCALE));
+	
+	//angle is necessarily CCW+, so subtract.
+	angle -= ANGLE_SCALE * theta; 
+	
+	//Change state variables. Probably lose all measurements less then a mm.
+	diff_x += lround((DISTANCE_SCALE * dc * cos(angle))/1000.0); //mm
+	diff_y += lround((DISTANCE_SCALE * dc * sin(angle))/1000.0); //mm
+
+	if(control_velocity) modify_velocity();
+}
+
+void modify_velocity(){
+	int diff = target_velocity - velocity;
+	if(diff > 0){
+		move_speed++;
+		move(move_speed,move_angle);
+	}
+	else if(diff < 0){
+		move_speed--;
+		move(move_speed,move_angle);
+	}
+}
+
+ISR(TIMER2_COMP_vect){
+	odometry_run(); 
+}
+
+long lround(double d){
+	double f = floor(d);
+	return (long)(d - f > 0.5 ? f + 1 : f);
+}
+
+
Index: branches/scout/projects/mapping/matlab/testRobot/odometry.h
===================================================================
--- branches/scout/projects/mapping/matlab/testRobot/odometry.h	(nonexistent)
+++ branches/scout/projects/mapping/matlab/testRobot/odometry.h	(revision 1346)
@@ -0,0 +1,59 @@
+
+/**
+ * @file odometry.h
+ * @brief Code for estimating the robots pose.
+ * 
+ * Offers simple position and orientation information.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef __ODOMETRY_C__
+#define __ODOMETRY_C__
+
+/**
+ * @addtogroup odometry 
+ * @{
+ **/
+
+//Odometry resolution, *64 microseconds.
+#define ODOMETRY_CLK 255u 
+#define TIME_SCALE 64
+
+//Wheel = 2.613 in.  
+//Circumference = 208.508133 mm
+//Distance per encoder click (circumference / 1024)  = 203.621224 um.
+//Robot width = 5.3745 in. = 136.5123 mm
+
+#define ROBOT_WIDTH_UM 137000  //um
+#define CLICK_DISTANCE_UM 204 //um
+
+#define DISTANCE_SCALE 2.10526316 //Magic constant.
+#define ANGLE_SCALE 1.12823207 //Magic constant.
+
+/** @brief Retrieve the robots estimated x position*/
+long odometry_dx(void);
+
+/** @brief Retrieve the robots estimated y position*/
+long odometry_dy(void);
+
+/** @brief Retrieve the robots estimated orientation*/
+double odometry_angle(void);
+
+/** @brief Initialize odometry. MUST be called before 
+ * the other functions work.**/
+void odometry_init(void);
+
+/** @brief Reset position and orientation to the origin facing
+ * the x axis.*/
+void odometry_reset(void);
+
+/** @brief Report estimated velocity [mm/s].*/
+long odometry_velocity(void);
+
+void odometry_set_velocity(long velocity, double angular_velocity, 
+	int start_speed, int start_angle);
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/projects/mapping/matlab/testMex/test.c
===================================================================
--- branches/scout/projects/mapping/matlab/testMex/test.c	(nonexistent)
+++ branches/scout/projects/mapping/matlab/testMex/test.c	(revision 1346)
@@ -0,0 +1,35 @@
+#include <mex.h>
+#include <unistd.h>
+
+pthread_t counter;
+
+void* count(void* arg);
+int first_time = 1, global = 0;
+
+void mexFunction(int nlhs, 
+	mxArray* ret[], int nrhs, const mxArray* args[])
+{
+	/*deliberately ignore nrhs.	*/
+	if(nlhs != 1){
+		mexErrMsgTxt("Error - only returns one number.\n");
+	}
+	else{
+		
+		if(first_time){
+			/*Deploy a thread to count.*/
+			pthread_create(&counter, NULL, count, NULL);
+			first_time = 0;
+		}
+
+		ret[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
+		double* value = mxGetPr(ret[0]);
+		*value = (double)global;	
+	}
+}
+
+void* count(void* arg){
+	while(1){
+		global++;
+		usleep(10000);
+	}
+}
Index: branches/scout/projects/mapping/matlab/input_success_0.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input_success_0.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input_success_0.txt	(revision 1346)
@@ -0,0 +1,261 @@
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 434
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 386
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 434
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 408
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 421
+0 0 0.000000 -1 -1 -1 -1 447
+0 0 0.000000 -1 -1 -1 -1 478
+0 0 0.000000 -1 -1 -1 -1 478
+-26 0 0.458628 -1 -1 -1 -1 478
+-1 1 0.504788 512 -1 -1 -1 478
+14 6 0.504788 -1 -1 -1 -1 408
+25 12 0.507766 -1 -1 -1 -1 447
+51 25 0.543504 597 -1 -1 -1 408
+66 33 0.546482 447 -1 -1 -1 447
+92 47 0.564350 421 -1 -1 -1 421
+102 53 0.562861 375 -1 -1 -1 408
+113 59 0.558394 494 -1 -1 -1 375
+124 65 0.547971 356 -1 -1 -1 434
+134 71 0.546482 365 -1 -1 -1 408
+145 77 0.553927 421 -1 -1 -1 408
+153 81 0.562861 408 -1 -1 -1 408
+212 115 0.573284 375 -1 -1 -1 386
+272 151 0.573284 330 651 -1 -1 375
+308 171 0.561372 294 -1 -1 -1 338
+319 177 0.553927 294 623 -1 -1 347
+327 181 0.540525 294 574 -1 -1 315
+335 185 0.522657 288 434 -1 -1 322
+359 197 0.461606 288 494 -1 -1 288
+367 201 0.443737 276 408 -1 -1 288
+375 205 0.428847 288 552 -1 -1 265
+383 208 0.410978 294 574 -1 -1 270
+391 209 0.396088 301 462 -1 -1 265
+401 211 0.400555 294 623 -1 -1 250
+409 215 0.402044 276 597 -1 -1 241
+491 242 0.251650 365 552 651 -1 224
+503 242 0.212934 462 494 714 -1 224
+527 242 0.136993 -1 447 681 -1 221
+536 242 0.067007 307 408 -1 -1 217
+544 240 -0.052117 255 365 -1 -1 217
+548 236 -0.134015 386 494 -1 -1 224
+552 232 -0.205489 397 447 -1 -1 232
+556 228 -0.276964 347 512 -1 -1 245
+560 224 -0.348438 347 478 574 -1 255
+571 205 -0.558394 307 494 -1 -1 375
+583 182 -0.888964 386 -1 -1 -1 330
+587 170 -0.918745 375 -1 -1 -1 347
+591 158 -0.939591 307 714 -1 -1 365
+595 147 -0.967883 347 681 -1 -1 375
+599 137 -0.978307 386 714 -1 -1 375
+604 126 -0.985752 397 651 -1 -1 375
+608 118 -1.006599 347 623 -1 -1 375
+610 110 -1.025956 397 651 -1 -1 356
+611 102 -1.039358 386 751 -1 -1 356
+614 86 -1.075095 322 597 -1 -1 347
+618 75 -1.097430 397 681 -1 -1 330
+622 63 -1.116788 408 714 -1 -1 301
+626 51 -1.140612 408 597 -1 -1 322
+630 39 -1.152525 447 -1 -1 -1 330
+648 -13 -1.183795 434 623 -1 -1 322
+655 -31 -1.186773 478 714 681 -1 322
+659 -43 -1.200174 494 623 714 -1 322
+664 -58 -1.207619 447 651 714 -1 307
+668 -70 -1.212087 478 623 681 -1 315
+691 -144 -1.293984 -1 447 574 -1 301
+692 -159 -1.302918 -1 434 478 -1 301
+692 -171 -1.316320 386 386 478 -1 301
+692 -179 -1.326743 294 365 421 -1 288
+692 -187 -1.332699 270 330 408 -1 301
+693 -197 -1.335677 260 301 408 -1 288
+696 -217 -1.346100 245 294 347 -1 294
+696 -225 -1.365458 260 276 356 -1 288
+696 -233 -1.384816 288 250 347 -1 294
+696 -238 -1.413108 294 241 338 -1 301
+696 -242 -1.471181 288 237 356 -1 288
+696 -246 -1.538188 276 228 408 -1 301
+695 -247 -1.585838 250 228 421 -1 294
+693 -247 -1.591794 255 221 447 -1 301
+693 -247 -1.591794 255 224 512 478 301
+691 -247 -1.602217 245 224 434 -1 301
+687 -248 -1.645400 237 228 478 -1 301
+679 -257 -1.849400 197 241 -1 -1 347
+675 -261 -1.944699 189 250 -1 -1 408
+631 -275 -2.632639 241 -1 -1 -1 221
+626 -275 -2.678799 260 -1 -1 -1 207
+618 -275 -2.730916 294 -1 -1 -1 203
+608 -275 -2.784522 315 -1 -1 -1 191
+569 -275 -2.867909 408 -1 -1 -1 197
+554 -275 -2.884289 512 -1 -1 -1 207
+476 -286 -2.881311 623 -1 -1 -1 213
+464 -286 -2.873865 375 -1 -1 -1 217
+443 -289 -2.876844 512 -1 -1 -1 217
+428 -290 -2.881311 494 -1 -1 -1 224
+406 -293 -2.881311 552 -1 -1 -1 224
+393 -294 -2.872377 574 -1 -1 -1 232
+356 -296 -2.854508 386 -1 651 -1 237
+342 -297 -2.855997 623 -1 -1 -1 245
+327 -298 -2.869398 597 -1 -1 -1 241
+315 -298 -2.875355 552 -1 -1 -1 255
+295 -301 -2.872377 552 -1 -1 -1 245
+268 -303 -2.864932 597 -1 -1 -1 245
+256 -303 -2.861953 421 -1 -1 -1 228
+241 -305 -2.864932 512 -1 -1 -1 237
+234 -305 -2.884289 -1 -1 -1 -1 255
+232 -305 -2.891735 -1 -1 -1 -1 255
+232 -305 -2.891735 397 -1 597 -1 260
+223 -305 -2.875355 397 -1 -1 -1 255
+222 -305 -2.872377 552 -1 -1 -1 250
+220 -305 -2.869399 408 -1 -1 -1 260
+182 -307 -2.854508 574 -1 681 -1 260
+170 -307 -2.842596 512 751 -1 -1 265
+157 -307 -2.835150 434 -1 -1 -1 260
+143 -307 -2.827705 462 651 -1 -1 255
+125 -308 -2.832172 597 552 -1 -1 447
+47 -313 -2.878333 -1 681 -1 -1 265
+11 -313 -2.942363 751 623 651 -1 276
+-70 -315 -3.080844 -1 714 -1 -1 294
+-80 -315 -3.153808 -1 -1 -1 -1 301
+-88 -311 -3.232727 -1 434 -1 -1 301
+-98 -306 -3.345895 375 375 -1 -1 213
+-103 -302 -3.462041 322 -1 -1 -1 597
+-111 -297 -3.607968 347 -1 -1 -1 -1
+-119 -289 -3.767297 288 -1 -1 -1 -1
+-134 -262 -4.215501 -1 -1 -1 -1 356
+-134 -254 -4.322713 -1 -1 -1 -1 307
+-134 -246 -4.412055 -1 -1 -1 -1 315
+-134 -238 -4.485019 -1 -1 -1 -1 375
+-134 -234 -4.532669 -1 -1 -1 -1 386
+-134 -226 -4.590742 -1 -1 -1 -1 347
+-134 -225 -4.595209 -1 -1 -1 -1 338
+-134 -225 -4.595209 -1 -1 -1 -1 338
+-134 -222 -4.607122 -1 -1 -1 -1 347
+-134 -218 -4.632436 -1 -1 -1 -1 330
+-134 -214 -4.645837 -1 -1 -1 -1 315
+-134 -205 -4.610100 -1 -1 -1 -1 330
+-134 -193 -4.556494 -1 -1 -1 -1 356
+-135 -103 -4.443324 -1 681 -1 -1 365
+-139 -32 -4.418008 -1 494 -1 -1 447
+-141 -15 -4.419497 -1 494 -1 -1 447
+-144 33 -4.595206 574 375 -1 -1 -1
+-144 37 -4.620520 623 447 -1 -1 -1
+-144 41 -4.653279 552 434 -1 -1 -1
+-144 45 -4.696462 421 421 -1 -1 -1
+-142 49 -4.742622 462 434 -1 -1 -1
+-138 53 -4.763469 421 397 -1 -1 -1
+-134 57 -4.788783 421 447 -1 -1 -1
+-130 61 -4.828987 408 434 -1 -1 -1
+-126 65 -4.882593 386 408 -1 -1 -1
+-122 69 -4.946622 307 447 751 -1 -1
+-118 73 -5.037454 330 494 651 -1 -1
+-105 86 -5.332286 330 -1 -1 -1 681
+-101 90 -5.418651 347 714 -1 -1 597
+-96 92 -5.493103 338 -1 -1 -1 478
+-92 92 -5.534796 356 -1 -1 -1 478
+-89 92 -5.548198 408 597 -1 -1 408
+-88 92 -5.551176 365 -1 -1 -1 421
+-88 92 -5.551176 375 -1 -1 -1 447
+-88 92 -5.551176 408 -1 -1 -1 408
+-88 92 -5.551176 356 -1 -1 -1 447
+-88 92 -5.551176 421 714 -1 -1 397
+-88 92 -5.551176 386 -1 -1 -1 434
+-84 92 -5.580957 421 -1 -1 -1 434
+-80 92 -5.621161 462 -1 -1 -1 408
+-72 95 -5.603293 365 -1 -1 -1 397
+-34 116 -5.646475 408 651 -1 -1 375
+14 143 -5.655410 397 -1 -1 -1 375
+24 152 -5.682213 478 751 -1 -1 356
+70 176 -5.725397 397 -1 -1 -1 330
+83 184 -5.723907 408 -1 -1 -1 322
+147 217 -5.759645 322 714 -1 -1 301
+303 286 -6.047032 315 447 651 -1 237
+311 286 -6.115528 255 408 -1 -1 250
+319 286 -6.187002 347 552 -1 -1 260
+327 286 -6.270389 447 494 -1 -1 265
+335 283 -6.344841 356 447 -1 -1 265
+346 279 -6.405892 386 447 751 -1 315
+380 263 -6.642651 288 478 -1 478 552
+393 250 -6.880898 301 -1 -1 -1 301
+393 247 -6.895789 315 -1 -1 -1 322
+393 247 -6.895789 347 -1 -1 -1 338
+393 246 -6.898767 338 -1 -1 -1 330
+393 242 -6.930037 315 -1 -1 -1 356
+397 234 -7.037249 356 -1 -1 -1 408
+401 226 -7.120636 375 651 -1 -1 356
+405 215 -7.144460 375 552 -1 -1 375
+411 201 -7.145949 386 714 -1 -1 356
+415 189 -7.160840 434 651 -1 -1 365
+441 141 -7.172752 375 681 -1 -1 347
+445 131 -7.175731 408 623 -1 -1 347
+450 120 -7.175731 386 623 -1 -1 307
+467 83 -7.195090 356 651 -1 -1 330
+472 71 -7.199557 386 623 -1 -1 347
+480 55 -7.190623 386 552 -1 -1 330
+488 39 -7.223382 375 651 751 -1 322
+496 23 -7.263586 365 623 681 -1 315
+504 7 -7.272521 397 574 623 -1 301
+521 -26 -7.311236 397 447 597 -1 301
+525 -34 -7.323149 447 478 512 -1 322
+539 -70 -7.570331 315 375 751 -1 270
+539 -83 -7.851760 365 397 -1 -1 301
+536 -87 -7.923234 338 397 -1 -1 322
+532 -87 -7.957482 338 447 -1 -1 322
+532 -87 -7.957482 338 434 -1 -1 330
+532 -87 -7.957482 322 421 -1 -1 322
+532 -87 -7.957482 338 408 -1 -1 338
+530 -87 -7.967906 330 421 -1 -1 338
+528 -87 -7.979818 330 288 -1 -1 330
+523 -87 -8.039379 322 447 -1 -1 356
+519 -87 -8.079584 315 447 -1 -1 397
+503 -97 -8.292520 294 714 -1 -1 301
+491 -109 -8.361018 307 623 -1 -1 315
+484 -114 -8.389311 294 -1 -1 -1 347
+476 -122 -8.416115 301 -1 -1 -1 386
+468 -130 -8.436962 288 -1 -1 -1 397
+460 -138 -8.472698 260 -1 -1 -1 386
+404 -178 -8.605226 288 -1 -1 -1 330
+368 -202 -8.681170 301 -1 -1 -1 270
+300 -242 -8.788383 338 -1 -1 -1 276
+216 -283 -8.940269 751 -1 -1 -1 255
+45 -304 -9.272333 -1 -1 -1 -1 356
+-2 -304 -9.419749 462 -1 -1 -1 386
+-15 -291 -9.562700 -1 -1 -1 -1 681
+-24 -279 -9.719050 623 -1 -1 -1 -1
+-47 -261 -9.946877 574 -1 -1 -1 -1
+-92 -204 -10.377212 -1 623 -1 -1 421
+-100 -129 -11.008571 714 -1 -1 -1 -1
+-96 -121 -11.114294 512 -1 -1 -1 -1
+-92 -113 -11.225973 574 -1 -1 -1 -1
+-88 -105 -11.334674 -1 -1 -1 -1 -1
+-72 -79 -11.669713 -1 -1 -1 -1 651
+-66 -73 -11.757567 -1 -1 -1 -1 623
+-62 -69 -11.806705 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 623
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 681
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 552
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 714 597
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 651
+-60 -67 -11.815639 -1 -1 -1 -1 597
+-60 -67 -11.815639 -1 -1 -1 -1 552
+-58 -65 -11.823085 -1 -1 -1 -1 597
Index: branches/scout/projects/mapping/matlab/input_obstacle_0.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input_obstacle_0.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input_obstacle_0.txt	(revision 1346)
@@ -0,0 +1,393 @@
+40 0 0.375241 494 -1 -1 -1 -1
+40 0 0.375241 421 -1 -1 -1 -1
+40 0 0.375241 512 -1 751 -1 -1
+40 0 0.375241 447 -1 552 -1 -1
+40 0 0.375241 375 -1 597 -1 -1
+40 0 0.375241 462 -1 623 -1 -1
+40 0 0.375241 462 -1 -1 -1 -1
+40 0 0.375241 462 -1 -1 -1 -1
+40 0 0.375241 478 -1 -1 -1 -1
+40 0 0.375241 397 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 421 -1 574 -1 -1
+40 0 0.366307 447 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 434 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 397 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 478 -1 -1 -1 -1
+40 0 0.366307 494 -1 -1 -1 -1
+40 0 0.366307 421 -1 -1 -1 -1
+40 0 0.366307 462 -1 -1 -1 -1
+40 0 0.366307 478 -1 -1 -1 -1
+40 0 0.366307 386 -1 -1 -1 -1
+40 0 0.366307 462 -1 -1 -1 -1
+40 0 0.366307 462 -1 -1 -1 -1
+40 0 0.366307 408 -1 -1 -1 -1
+40 0 0.366307 494 -1 -1 -1 -1
+40 0 0.366307 397 -1 -1 -1 -1
+40 0 0.366307 462 -1 681 -1 -1
+40 0 0.366307 421 -1 512 -1 -1
+40 0 0.366307 512 -1 -1 -1 -1
+40 0 0.376730 462 -1 751 -1 -1
+40 0 0.396088 552 -1 -1 -1 -1
+40 0 0.433314 494 -1 -1 -1 -1
+41 0 0.442248 434 -1 -1 -1 -1
+48 0 0.305256 -1 -1 -1 -1 -1
+48 0 0.305256 447 -1 681 -1 -1
+48 0 0.375241 714 -1 -1 -1 -1
+48 0 0.381197 714 -1 -1 -1 -1
+48 0 0.335037 751 -1 -1 -1 -1
+48 0 0.294832 -1 -1 -1 -1 -1
+48 0 0.282920 478 -1 -1 -1 -1
+51 0 0.315679 -1 -1 -1 -1 -1
+76 2 0.309723 494 -1 -1 -1 -1
+80 2 0.288876 574 -1 -1 -1 -1
+85 2 0.266540 434 -1 -1 -1 -1
+88 2 0.262073 434 -1 -1 -1 -1
+93 2 0.265051 552 -1 -1 -1 751
+97 2 0.275474 552 -1 -1 -1 -1
+102 2 0.266540 462 -1 -1 -1 -1
+106 2 0.251650 365 -1 -1 -1 -1
+110 2 0.239737 552 -1 -1 -1 -1
+114 2 0.230803 462 -1 -1 -1 -1
+133 2 0.233781 408 -1 -1 -1 -1
+182 5 0.190598 -1 -1 -1 -1 -1
+195 6 0.187620 -1 -1 -1 -1 -1
+200 6 0.181664 -1 -1 -1 -1 -1
+204 6 0.174219 -1 -1 623 -1 -1
+209 6 0.168263 -1 -1 -1 -1 -1
+215 6 0.166774 -1 -1 -1 -1 -1
+222 6 0.172730 -1 -1 -1 -1 -1
+226 6 0.183153 -1 -1 -1 -1 -1
+234 6 0.187620 -1 -1 -1 -1 -1
+240 6 0.190598 -1 -1 -1 -1 -1
+253 7 0.186131 -1 -1 -1 -1 -1
+257 7 0.174219 -1 -1 -1 -1 -1
+266 7 0.151883 -1 -1 -1 -1 597
+344 8 0.145927 -1 681 -1 -1 270
+351 8 0.138481 -1 681 -1 -1 270
+367 8 0.126569 -1 623 -1 -1 270
+376 8 0.125080 -1 597 681 751 270
+391 9 0.123591 -1 552 -1 -1 276
+395 9 0.125080 -1 574 -1 -1 276
+405 9 0.126569 -1 512 -1 -1 265
+414 9 0.129547 -1 512 -1 -1 270
+422 9 0.134014 -1 462 -1 -1 276
+428 9 0.132525 -1 512 681 -1 276
+434 9 0.132525 -1 462 -1 -1 255
+439 9 0.142949 -1 494 751 -1 265
+443 9 0.154861 -1 478 408 -1 270
+447 9 0.172730 -1 494 512 -1 270
+451 9 0.189109 -1 462 512 -1 276
+463 9 0.230803 -1 478 228 -1 301
+465 9 0.248671 -1 408 294 -1 265
+475 9 0.279941 -1 421 322 -1 260
+477 9 0.290365 751 421 338 -1 301
+477 9 0.311212 -1 375 338 -1 301
+477 9 0.340993 -1 386 315 -1 301
+478 9 0.373752 -1 408 315 -1 288
+482 9 0.402044 -1 397 307 -1 307
+487 9 0.434803 -1 434 294 -1 322
+490 9 0.457139 651 434 294 -1 322
+490 9 0.500321 -1 408 276 -1 330
+490 9 0.521168 -1 397 270 512 322
+490 9 0.546482 -1 421 276 -1 322
+492 9 0.616467 -1 408 265 -1 386
+492 9 0.626891 -1 447 255 -1 386
+492 9 0.634336 -1 447 250 681 375
+492 9 0.643270 -1 447 241 -1 347
+493 9 0.658161 -1 478 232 -1 375
+496 9 0.677518 -1 421 232 681 375
+500 9 0.748993 -1 478 228 -1 447
+500 9 0.766861 -1 421 221 -1 375
+500 9 0.784730 -1 552 217 494 447
+501 11 0.830890 -1 714 213 375 478
+501 11 0.829401 -1 574 210 397 421
+501 11 0.829401 -1 494 213 386 478
+501 11 0.829401 -1 623 213 338 478
+501 11 0.829401 -1 651 217 386 494
+501 11 0.829401 -1 714 221 322 552
+501 11 0.829401 -1 574 210 386 574
+501 11 0.829401 -1 597 210 356 552
+501 11 0.829401 -1 597 221 386 552
+501 11 0.829401 -1 552 217 338 494
+501 11 0.829401 -1 651 200 347 447
+501 11 0.829401 -1 681 221 386 512
+501 11 0.829401 -1 623 221 375 574
+501 11 0.829401 -1 597 217 386 421
+501 11 0.829401 -1 512 217 375 447
+501 11 0.829401 -1 681 221 365 447
+501 11 0.829401 -1 681 221 386 597
+501 11 0.829401 -1 494 213 365 552
+501 11 0.829401 -1 681 213 375 574
+501 11 0.829401 -1 597 217 347 512
+501 11 0.829401 -1 597 217 356 574
+501 11 0.829401 -1 574 221 375 552
+501 11 0.829401 -1 623 203 386 512
+501 11 0.829401 -1 751 213 338 478
+501 11 0.829401 -1 651 213 375 478
+501 11 0.829401 -1 597 221 386 552
+501 11 0.829401 -1 574 210 365 512
+501 11 0.829401 -1 714 221 408 478
+501 11 0.829401 -1 714 213 307 494
+501 11 0.829401 -1 623 217 356 552
+501 11 0.829401 -1 512 210 386 434
+501 11 0.829401 -1 552 221 397 447
+501 11 0.829401 -1 552 213 386 623
+501 11 0.829401 -1 623 217 386 478
+501 11 0.829401 -1 494 210 375 478
+501 11 0.829401 -1 574 224 365 447
+501 11 0.829401 -1 623 217 375 478
+501 11 0.829401 -1 623 207 365 512
+501 11 0.875562 -1 714 217 356 552
+503 18 0.869606 -1 623 197 347 574
+504 22 0.859183 -1 651 203 338 421
+22088 16228 0.000000 189 307 408 32281 6400
+514 36 0.939591 -1 681 173 270 434
+514 36 0.952992 -1 397 171 260 397
+514 37 0.967883 -1 494 176 255 397
+514 41 0.979795 -1 494 173 245 478
+516 59 1.009576 -1 434 171 217 421
+517 60 1.018510 -1 347 164 217 447
+517 60 1.027445 -1 288 171 213 347
+517 61 1.039357 -1 397 169 207 447
+517 61 1.054247 -1 397 166 203 447
+517 61 1.049780 -1 288 171 197 494
+517 61 0.994686 -1 322 158 189 347
+517 61 0.982773 -1 330 166 191 356
+517 61 0.933635 -1 408 156 181 255
+517 61 0.924700 -1 347 154 194 255
+517 61 0.918744 -1 356 154 197 255
+517 61 0.918744 -1 338 154 189 232
+517 61 0.918744 -1 322 156 197 241
+517 61 0.918744 -1 375 154 194 260
+517 61 0.918744 -1 288 154 197 250
+517 61 0.918744 -1 265 154 197 260
+517 61 0.918744 -1 315 152 194 228
+517 61 0.918744 -1 386 154 194 260
+517 61 0.918744 -1 276 149 197 250
+517 61 0.918744 -1 356 151 197 260
+517 61 0.918744 -1 307 147 194 260
+517 61 0.918744 -1 301 152 197 255
+517 61 0.918744 -1 397 154 181 260
+517 61 0.918744 -1 330 154 197 255
+517 61 0.918744 -1 270 152 189 255
+517 62 0.985752 -1 -1 169 183 347
+517 62 1.025956 -1 -1 173 171 651
+517 62 1.046803 -1 -1 189 169 574
+517 62 1.081051 -1 -1 183 166 -1
+517 65 1.095941 -1 -1 191 164 714
+521 73 1.103386 -1 -1 203 173 -1
+525 81 1.131678 -1 -1 213 241 421
+528 132 1.232933 -1 714 270 147 288
+532 176 1.261225 -1 681 265 144 265
+533 202 1.274626 -1 552 260 158 255
+535 221 1.296962 -1 552 224 160 294
+535 221 1.296962 -1 512 224 156 288
+535 226 1.322276 -1 447 203 160 294
+535 230 1.338655 -1 512 224 164 288
+535 234 1.343123 -1 494 237 171 294
+535 241 1.347590 -1 462 294 169 265
+535 245 1.356524 -1 408 434 173 288
+535 251 1.378860 -1 421 494 173 294
+535 268 1.429487 -1 386 338 191 294
+535 272 1.430976 -1 375 356 197 288
+535 277 1.444378 -1 365 322 191 288
+535 281 1.466713 -1 375 294 203 301
+535 285 1.497983 -1 356 294 207 301
+535 289 1.532231 -1 338 276 217 315
+535 293 1.578392 408 365 260 232 322
+530 298 1.630508 681 347 260 241 330
+526 302 1.679647 -1 375 237 260 347
+522 306 1.716873 -1 338 245 260 375
+518 310 1.737720 -1 386 245 288 386
+514 314 1.754099 -1 330 228 288 347
+510 323 1.757077 -1 375 213 294 338
+506 329 1.768990 -1 375 210 294 365
+502 334 1.813661 -1 356 200 260 386
+498 342 1.885136 -1 434 200 270 421
+478 369 2.063822 -1 -1 176 301 -1
+474 373 2.107005 -1 552 178 260 -1
+442 393 2.206772 -1 408 178 213 -1
+434 398 2.221662 -1 330 181 197 -1
+394 421 2.342276 -1 -1 191 166 -1
+386 425 2.358656 -1 -1 200 166 -1
+377 430 2.364612 -1 -1 197 162 -1
+363 440 2.364612 -1 -1 183 160 -1
+343 456 2.366101 -1 -1 200 164 -1
+331 464 2.373547 -1 -1 191 158 -1
+323 468 2.383970 -1 -1 191 154 -1
+315 470 2.398861 -1 -1 210 151 -1
+169 522 2.431621 -1 597 232 145 207
+160 527 2.425664 -1 623 232 147 213
+118 548 2.455446 -1 552 228 142 213
+79 557 2.461402 751 478 255 139 221
+70 561 2.459913 -1 494 232 142 213
+62 561 2.467358 -1 478 237 142 221
+54 561 2.482249 -1 478 245 147 217
+48 561 2.497139 -1 462 224 151 207
+40 562 2.509052 -1 447 217 144 207
+31 564 2.512030 -1 421 213 140 217
+21 566 2.512030 -1 356 207 144 207
+15 567 2.520964 -1 386 194 142 221
+12 567 2.526921 -1 421 191 142 217
+12 567 2.526921 -1 408 183 142 213
+12 567 2.526921 -1 408 186 142 213
+12 567 2.526921 -1 408 191 142 207
+12 567 2.526921 -1 408 194 142 217
+12 567 2.526921 -1 408 173 142 213
+12 567 2.526921 -1 365 183 142 217
+11 567 2.525432 -1 408 183 144 203
+8 567 2.497140 -1 397 186 145 203
+4 567 2.436089 -1 375 197 147 210
+0 567 2.388439 478 356 224 147 173
+-27 591 2.395884 597 276 191 152 -1
+-34 595 2.398862 447 270 183 147 -1
+-40 600 2.395884 462 255 173 149 -1
+-41 601 2.388438 421 237 171 151 -1
+-48 604 2.389927 386 241 171 154 -1
+-54 607 2.392906 408 228 166 151 -1
+-55 607 2.401840 365 228 171 147 -1
+-56 608 2.400351 356 217 169 152 -1
+-58 610 2.398862 356 207 169 147 -1
+-67 618 2.395884 330 191 176 152 -1
+-68 619 2.388438 330 200 178 152 -1
+-69 620 2.382482 276 183 191 147 -1
+-70 621 2.378015 301 181 200 152 -1
+-71 622 2.370569 276 173 197 154 -1
+-73 623 2.369080 245 160 183 154 -1
+-75 624 2.376526 250 154 189 152 -1
+-79 627 2.375036 221 147 203 152 -1
+-79 627 2.370569 232 134 221 152 -1
+-79 627 2.385460 228 130 210 147 -1
+-79 627 2.489694 237 120 133 149 -1
+-79 627 2.529898 255 117 126 144 -1
+-79 627 2.620730 270 113 104 149 -1
+-79 627 2.660935 347 114 -1 151 -1
+-79 627 2.695183 434 114 -1 160 -1
+-79 627 2.805373 -1 110 -1 164 -1
+-80 627 2.867913 -1 112 -1 164 -1
+-82 627 2.933431 -1 129 -1 183 623
+-84 627 2.988526 -1 134 -1 181 681
+-84 627 3.037664 -1 145 -1 164 597
+-84 627 3.079358 -1 149 -1 307 574
+-84 627 3.147854 -1 176 -1 245 623
+-84 624 3.232730 -1 210 -1 191 -1
+-84 622 3.307183 -1 276 -1 152 -1
+-84 618 3.359299 -1 375 -1 144 -1
+-84 614 3.395037 -1 462 -1 140 -1
+-84 610 3.427796 -1 512 -1 131 -1
+-84 606 3.465022 -1 -1 -1 124 -1
+-84 602 3.514161 -1 -1 -1 122 -1
+-84 592 3.621373 -1 -1 118 107 -1
+-84 592 3.621373 -1 -1 122 105 -1
+-84 592 3.621373 -1 -1 122 106 -1
+-84 589 3.636264 623 -1 125 105 -1
+-85 585 3.682424 -1 -1 140 103 -1
+-95 571 3.718161 -1 -1 154 -1 -1
+-101 562 3.741986 -1 -1 164 -1 -1
+-105 554 3.789636 -1 -1 178 -1 -1
+-109 546 3.804527 -1 -1 191 -1 -1
+-115 537 3.798570 651 -1 197 -1 -1
+-121 528 3.804527 421 -1 194 -1 -1
+-125 520 3.820906 552 -1 224 -1 -1
+-130 513 3.826863 -1 -1 228 -1 751
+-141 496 3.826863 714 -1 241 103 -1
+-145 488 3.819417 -1 597 228 105 -1
+-149 480 3.817928 597 -1 250 106 -1
+-153 472 3.817928 356 -1 255 109 -1
+-157 464 3.807505 714 408 250 108 -1
+-193 417 3.753898 574 -1 228 120 -1
+-205 405 3.752409 681 -1 232 120 -1
+-209 401 3.733052 623 -1 228 124 -1
+-215 392 3.727095 330 -1 232 120 -1
+-236 366 3.689868 -1 -1 217 130 315
+-240 362 3.695825 -1 -1 210 124 330
+-245 357 3.697314 651 -1 221 129 330
+-259 343 3.698803 -1 -1 221 127 338
+-263 339 3.697314 -1 -1 224 129 315
+-271 331 3.703270 -1 -1 224 133 322
+-275 327 3.700292 -1 -1 224 129 294
+-279 323 3.685401 -1 -1 217 130 322
+-282 319 3.677956 552 -1 217 124 315
+-288 313 3.680934 -1 -1 221 134 322
+-291 308 3.679445 -1 -1 221 130 322
+-292 304 3.677956 -1 -1 221 133 288
+-301 296 3.676466 -1 -1 221 131 322
+-308 289 3.676466 552 -1 224 130 322
+-312 285 3.671999 -1 -1 224 131 322
+-318 279 3.669021 -1 -1 213 131 322
+-330 269 3.667531 -1 -1 221 131 315
+-348 253 3.663064 -1 -1 221 131 307
+-352 248 3.654130 -1 -1 221 133 307
+-352 244 3.633283 -1 -1 194 133 307
+-352 240 3.613925 623 -1 197 133 315
+-353 228 3.667531 -1 -1 221 129 315
+-354 224 3.677954 -1 -1 232 131 322
+-357 220 3.655618 365 -1 213 131 307
+-361 215 3.643706 -1 -1 210 133 307
+-375 204 3.651151 -1 -1 213 131 322
+-385 195 3.652640 651 -1 217 140 322
+-393 187 3.645195 -1 714 217 131 322
+-397 181 3.633282 -1 -1 221 133 322
+-402 174 3.624348 -1 -1 207 130 322
+-409 166 3.613925 -1 -1 210 133 307
+-417 158 3.612435 -1 -1 207 127 315
+-427 149 3.615414 -1 -1 210 134 288
+-444 131 3.631794 -1 -1 203 131 -1
+-454 122 3.627327 -1 -1 213 131 -1
+-458 116 3.618392 -1 -1 207 131 -1
+-464 110 3.613925 -1 -1 200 131 -1
+-480 100 3.616903 -1 -1 213 125 -1
+-490 92 3.619882 714 -1 213 131 -1
+-502 81 3.622860 -1 -1 207 130 -1
+-515 71 3.624349 -1 -1 213 131 -1
+-536 58 3.627327 -1 -1 221 125 -1
+-545 49 3.625838 -1 -1 221 127 -1
+-549 45 3.615414 -1 -1 213 130 -1
+-553 41 3.599035 -1 -1 203 127 -1
+-563 34 3.602013 -1 -1 197 131 -1
+-571 27 3.613925 -1 -1 210 127 -1
+-592 4 3.627326 -1 -1 221 125 -1
+-597 -1 3.622859 -1 -1 221 129 -1
+-606 -6 3.630305 -1 -1 232 130 -1
+-612 -10 3.645195 -1 -1 241 129 -1
+-619 -15 3.652641 -1 -1 237 129 -1
+-631 -21 3.643706 -1 -1 245 131 -1
+-635 -24 3.631794 -1 -1 245 133 -1
+-639 -27 3.625837 -1 -1 265 133 -1
+-653 -34 3.618392 -1 -1 -1 133 -1
+-661 -38 3.606479 -1 -1 -1 133 -1
+-669 -42 3.596056 -1 -1 -1 134 -1
+-678 -43 3.590100 -1 -1 -1 136 -1
+-692 -48 3.588610 -1 -1 -1 130 -1
+-703 -52 3.585632 -1 494 -1 133 -1
+-709 -53 3.573720 -1 -1 -1 133 -1
+-712 -53 3.551384 -1 -1 -1 137 -1
+-716 -53 3.545427 -1 -1 -1 131 -1
+-719 -54 3.546916 -1 -1 -1 137 -1
+-719 -54 3.535004 -1 -1 -1 136 -1
+-723 -54 3.557340 -1 -1 681 136 -1
+-729 -55 3.581165 -1 -1 -1 129 -1
+-737 -59 3.567763 -1 -1 -1 133 -1
+-745 -63 3.539471 -1 -1 -1 136 -1
+-756 -68 3.535004 -1 -1 -1 127 494
+-776 -72 3.548406 -1 -1 -1 129 -1
+-778 -72 3.554362 -1 -1 -1 129 -1
+-783 -72 3.551384 -1 -1 -1 129 -1
+-788 -73 3.548406 -1 -1 -1 127 -1
+-796 -75 3.545428 -1 -1 -1 131 -1
+-801 -76 3.552873 -1 681 -1 129 -1
+-832 -80 3.515646 -1 -1 -1 134 -1
+-833 -80 3.512668 -1 -1 -1 133 -1
+-833 -80 3.532026 -1 447 681 131 -1
+-833 -80 3.543938 -1 -1 623 139 -1
+-833 -80 3.543938 -1 -1 -1 137 -1
+-833 -80 3.543938 -1 -1 -1 140 -1
+-833 -80 3.543938 -1 -1 -1 144 -1
+-833 -80 3.543938 -1 -1 681 133 -1
+-833 -80 3.543938 -1 -1 -1 139 -1
+-833 -80 3.543938 -1 -1 -1 139 -1
+-833 -80 3.543938 -1 -1 -1 140 -1
Index: branches/scout/projects/mapping/matlab/input_obstacle_1.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input_obstacle_1.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input_obstacle_1.txt	(revision 1346)
@@ -0,0 +1,259 @@
+5 0 0.376730 270 -1 552 270 -1
+5 0 0.376730 301 -1 447 270 -1
+4 0 0.360350 294 -1 494 260 -1
+4 0 0.340993 288 -1 494 265 -1
+4 0 0.291854 315 -1 447 270 -1
+1 0 0.212934 301 -1 462 270 -1
+0 0 -0.043183 288 -1 552 276 -1
+0 0 -0.089343 294 -1 651 270 -1
+14 0 -0.058073 265 -1 574 260 -1
+21 0 -0.072964 270 -1 478 260 -1
+30 0 -0.148905 270 -1 494 245 -1
+30 0 -0.287387 255 -1 512 265 -1
+25 1 -0.673051 294 -1 447 276 -1
+25 0 -0.743037 260 -1 462 276 -1
+30 -5 -0.717723 294 -1 462 260 -1
+38 -13 -0.714745 301 -1 447 276 -1
+44 -18 -0.713256 294 -1 434 270 -1
+53 -24 -0.726657 -1 -1 462 270 478
+53 -24 -0.726657 681 -1 462 265 421
+53 -24 -0.726657 -1 -1 447 270 421
+53 -24 -0.726657 -1 -1 397 270 408
+53 -24 -0.726657 434 -1 408 270 512
+53 -24 -0.726657 -1 -1 408 245 494
+53 -24 -0.726657 -1 -1 434 255 -1
+53 -24 -0.747504 -1 -1 478 270 315
+53 -24 -0.786219 -1 -1 462 270 228
+53 -24 -0.823445 -1 -1 421 260 228
+53 -24 -0.853226 -1 -1 397 270 224
+53 -24 -0.862161 -1 -1 365 270 217
+53 -24 -0.830891 -1 -1 397 270 232
+53 -24 -0.830891 -1 -1 512 265 228
+53 -24 -0.874073 -1 -1 462 245 228
+53 -25 -1.049781 -1 -1 408 260 213
+53 -25 -1.107854 -1 -1 375 265 221
+52 -24 -1.180818 -1 -1 397 276 217
+51 -23 -1.232935 -1 -1 375 260 221
+51 -23 -1.307387 -1 -1 408 265 217
+51 -23 -1.401198 -1 -1 386 260 217
+50 -22 -1.521811 -1 -1 365 241 217
+49 -19 -1.652847 -1 -1 386 265 224
+49 -12 -1.831533 -1 -1 365 245 210
+45 -14 -1.892584 -1 -1 375 250 224
+40 -22 -1.867271 -1 -1 397 338 221
+36 -26 -1.876205 -1 -1 347 434 210
+32 -30 -1.897051 -1 -1 375 512 210
+20 -39 -2.081694 -1 -1 397 245 224
+16 -39 -2.190394 -1 681 365 245 224
+11 -36 -2.528409 -1 714 365 250 232
+0 -41 -2.500117 -1 681 338 221 228
+-23 -59 -2.476292 -1 623 347 241 228
+-28 -63 -2.471825 -1 651 347 241 228
+-32 -65 -2.491182 -1 623 347 221 213
+-35 -65 -2.631153 -1 574 338 224 574
+-35 -65 -2.763678 -1 597 315 228 -1
+-28 -58 -3.101693 -1 494 288 241 -1
+-24 -56 -3.207416 -1 494 276 232 -1
+-17 -53 -3.356322 -1 478 232 224 -1
+-17 -49 -3.375679 -1 494 228 228 -1
+-17 -45 -3.395037 -1 478 221 232 -1
+-20 -41 -3.336964 714 494 224 228 -1
+-20 -37 -3.319096 -1 478 237 232 -1
+-20 -33 -3.293782 -1 447 338 228 -1
+-20 -29 -3.262512 -1 478 552 228 -1
+-20 -17 -3.228263 -1 478 408 237 408
+-5 -5 -3.582657 -1 447 347 260 447
+-2 -3 -3.654132 681 408 338 250 494
+-2 0 -3.676467 -1 408 338 276 386
+-5 2 -3.633285 623 408 301 276 421
+-6 2 -3.597548 -1 408 301 288 447
+-6 2 -3.466511 -1 478 307 315 347
+-8 2 -3.429285 -1 478 301 347 397
+-10 2 -3.415883 -1 512 294 338 375
+-11 2 -3.386102 -1 552 288 255 478
+0 0 -3.570745 -1 494 294 574 -1
+0 0 -3.677956 -1 386 294 386 -1
+0 0 -3.677956 -1 681 301 421 -1
+0 2 -3.864088 -1 -1 330 356 -1
+0 2 -3.840263 -1 -1 315 338 -1
+-5 6 -3.858131 -1 -1 365 330 -1
+-5 6 -3.878978 -1 -1 347 330 -1
+-5 6 -3.916204 -1 -1 356 338 -1
+-5 6 -3.968321 -1 -1 338 294 -1
+-5 6 -4.035328 -1 -1 338 322 -1
+-5 6 -4.127649 -1 -1 347 322 -1
+1 -1 -4.356964 -1 -1 347 307 -1
+0 0 -4.379299 -1 -1 330 307 -1
+0 0 -4.401635 -1 -1 365 307 -1
+-1 6 -4.358452 -1 -1 338 294 -1
+-2 11 -4.352496 -1 -1 347 294 -1
+-2 15 -4.349517 -1 -1 386 294 -1
+-2 21 -4.337605 -1 -1 408 288 -1
+-3 36 -4.428436 -1 -1 338 270 -1
+-3 36 -4.467151 -1 -1 347 270 -1
+-3 36 -4.496933 -1 -1 347 270 -1
+-3 36 -4.531181 -1 -1 347 270 -1
+-3 36 -4.596699 -1 714 338 260 -1
+-3 36 -4.681575 -1 -1 338 265 447
+-1 34 -4.767941 -1 -1 322 260 375
+2 25 -5.271239 -1 714 347 255 356
+5 39 -5.304000 -1 512 347 250 356
+5 42 -5.339737 -1 714 322 232 347
+5 42 -5.478219 -1 623 322 250 356
+5 42 -5.527358 -1 597 301 250 375
+4 41 -5.576496 -1 597 301 250 375
+2 39 -5.744759 -1 552 315 241 322
+0 34 -5.892174 -1 512 315 228 365
+0 34 -5.936845 651 494 315 241 356
+0 34 -5.936845 -1 462 301 241 330
+0 34 -5.936845 -1 512 307 241 356
+0 34 -5.936845 -1 512 301 228 356
+0 34 -5.936845 -1 478 315 241 330
+0 34 -5.936845 -1 494 301 241 356
+0 34 -5.936845 -1 512 301 241 347
+0 34 -5.936845 -1 494 315 241 365
+0 34 -5.936845 -1 512 301 241 356
+0 34 -5.936845 -1 494 294 241 375
+0 34 -5.936845 -1 494 301 241 356
+0 34 -5.936845 -1 478 288 224 356
+0 34 -5.936845 -1 447 315 241 365
+0 34 -5.936845 -1 494 315 241 347
+0 34 -5.936845 681 478 315 241 356
+0 34 -5.936845 -1 494 315 217 347
+0 34 -5.936845 -1 494 301 241 356
+0 34 -5.936845 -1 512 315 245 356
+0 34 -5.936845 -1 478 294 221 356
+0 34 -5.936845 -1 512 301 232 375
+0 34 -5.936845 -1 574 260 228 356
+0 34 -5.936845 -1 494 315 241 386
+0 34 -5.936845 -1 447 315 245 365
+0 34 -5.936845 -1 494 315 241 375
+0 34 -5.936845 -1 512 315 255 386
+0 34 -5.936845 -1 447 294 221 356
+0 34 -5.936845 -1 512 315 241 347
+0 34 -5.936845 -1 494 315 241 330
+0 34 -5.936845 -1 494 315 241 365
+0 34 -5.936845 -1 478 315 241 356
+0 34 -5.936845 -1 494 315 241 365
+0 34 -5.936845 -1 434 307 241 356
+2 35 -5.893663 -1 478 294 241 347
+2 35 -5.893663 -1 434 301 241 365
+2 35 -5.893663 -1 512 276 241 356
+2 35 -5.893663 -1 447 307 241 356
+2 35 -5.893663 -1 478 301 241 356
+2 35 -5.893663 -1 478 307 241 356
+2 35 -5.893663 -1 494 288 241 365
+2 35 -5.892174 -1 494 301 245 356
+2 35 -5.892174 751 447 301 237 356
+2 35 -5.892174 -1 494 307 232 356
+10 35 -5.722423 -1 552 228 241 447
+23 37 -5.756671 -1 462 228 250 375
+27 38 -5.753693 -1 434 260 232 397
+29 39 -5.767095 -1 421 315 245 386
+29 39 -5.796876 -1 421 386 250 386
+29 39 -5.826657 -1 397 434 250 397
+29 39 -5.854949 -1 434 386 232 397
+29 39 -5.905578 -1 434 478 241 397
+27 37 -5.933869 -1 397 408 245 397
+11 27 -6.228702 -1 408 315 270 478
+7 24 -6.329957 -1 408 294 276 447
+4 21 -6.413344 -1 447 288 288 447
+16 9 -6.303154 -1 408 260 330 623
+16 5 -6.300176 -1 478 260 330 512
+16 2 -6.301665 -1 447 260 322 751
+16 1 -6.306132 -1 462 260 338 714
+5 0 -6.648613 -1 714 237 408 -1
+9 -1 -6.636701 -1 714 221 597 -1
+11 -1 -6.623299 -1 -1 224 751 -1
+14 -1 -6.586072 -1 -1 228 681 -1
+18 -1 -6.533956 -1 -1 224 462 -1
+23 -1 -6.490773 -1 714 237 365 -1
+31 -1 -6.478860 -1 -1 228 356 -1
+33 -1 -6.492262 -1 -1 232 347 -1
+35 -1 -6.527999 -1 -1 217 338 -1
+35 -1 -6.648612 681 -1 224 294 -1
+33 0 -6.706685 -1 -1 221 288 -1
+30 0 -6.764758 -1 -1 217 276 -1
+27 0 -6.839210 -1 -1 217 270 -1
+25 0 -6.907706 408 -1 224 265 -1
+21 0 -6.979180 -1 -1 221 260 -1
+9 0 -7.163823 -1 -1 232 250 -1
+6 0 -7.245720 -1 -1 232 241 -1
+6 0 -7.268056 -1 -1 237 237 -1
+10 -5 -7.239765 -1 -1 232 228 -1
+13 -9 -7.265079 -1 -1 237 228 -1
+14 -14 -7.300816 -1 -1 213 217 -1
+14 -17 -7.323151 -1 -1 217 221 -1
+15 -19 -7.338041 -1 -1 217 207 -1
+15 -19 -7.349955 -1 -1 224 213 -1
+15 -19 -7.360378 -1 623 232 207 -1
+14 -18 -7.367824 714 -1 245 203 -1
+14 -18 -7.367824 597 -1 232 203 -1
+13 -17 -7.388670 512 -1 232 203 -1
+13 -18 -7.443765 623 -1 213 210 -1
+6 -8 -7.771357 -1 -1 221 191 -1
+6 -8 -7.807094 -1 -1 232 191 -1
+6 -17 -7.768378 -1 -1 232 186 -1
+6 -25 -7.741575 -1 -1 224 186 -1
+6 -33 -7.711794 228 -1 241 169 -1
+6 -41 -7.710305 478 -1 245 176 -1
+6 -47 -7.757955 597 -1 250 176 -1
+6 -51 -7.838363 365 -1 250 171 -1
+0 -52 -8.006625 307 -1 241 171 228
+0 -48 -8.079589 232 -1 232 173 228
+0 -35 -8.404202 255 -1 301 158 237
+-3 -32 -8.602244 386 -1 301 169 221
+-17 -49 -8.660317 -1 -1 294 176 224
+-21 -53 -8.721369 714 -1 294 164 224
+-23 -53 -8.822624 -1 -1 301 166 221
+-23 -53 -8.989398 -1 -1 294 171 224
+-52 -51 -9.165106 494 -1 -1 181 250
+-57 -49 -9.369104 751 -1 -1 191 237
+-54 -46 -9.422709 -1 -1 -1 197 237
+-50 -45 -9.482271 -1 -1 -1 197 241
+-48 -43 -9.555234 -1 -1 -1 197 217
+-51 -24 -10.001951 -1 -1 -1 228 217
+-55 -20 -10.021310 347 -1 -1 232 217
+-55 -16 -10.057047 -1 -1 -1 241 217
+-55 -12 -10.119588 -1 -1 -1 250 217
+-55 -10 -10.214888 -1 -1 -1 255 221
+-51 -10 -10.339968 478 -1 -1 270 194
+-47 -10 -10.485894 -1 623 -1 276 207
+-50 -1 -10.484405 -1 -1 -1 288 183
+-54 5 -10.471003 356 -1 -1 288 194
+-58 11 -10.454623 -1 -1 -1 322 186
+-59 15 -10.439733 -1 -1 -1 294 200
+-62 27 -10.481426 -1 -1 -1 356 250
+-62 27 -10.521631 -1 -1 -1 347 265
+-62 27 -10.555879 597 -1 -1 347 260
+-59 24 -10.645222 -1 -1 -1 408 276
+-55 20 -10.703294 478 -1 -1 447 288
+-52 16 -10.758389 -1 -1 -1 512 270
+-52 16 -10.758389 -1 -1 -1 -1 276
+-52 16 -10.758389 714 -1 -1 -1 270
+-52 16 -10.758389 -1 -1 -1 -1 260
+-52 16 -10.758389 375 -1 -1 -1 255
+-47 2 -10.975790 -1 -1 -1 -1 245
+-44 0 -11.042797 -1 -1 -1 -1 255
+-40 0 -11.077044 -1 -1 -1 -1 265
+-36 5 -11.026417 -1 -1 -1 -1 270
+-32 8 -11.005569 -1 -1 -1 574 265
+-29 15 -10.984720 -1 -1 -1 -1 294
+-27 15 -11.013013 -1 -1 -1 -1 301
+-25 15 -11.024925 -1 -1 -1 -1 315
+-25 15 -11.024925 -1 -1 -1 -1 375
+-25 13 -11.050240 -1 -1 -1 -1 494
+-25 13 -11.050240 -1 -1 -1 -1 -1
+-25 13 -11.050240 -1 -1 -1 -1 -1
+-24 11 -11.094911 -1 -1 -1 -1 -1
+-12 30 -11.111291 -1 -1 -1 -1 -1
+-8 32 -11.093422 -1 -1 -1 -1 -1
+0 33 -11.188722 -1 -1 -1 -1 -1
+0 33 -11.228926 -1 -1 -1 -1 -1
+0 33 -11.275085 -1 -1 -1 -1 -1
+0 33 -11.355494 -1 -1 -1 -1 -1
+0 30 -11.440371 -1 714 -1 -1 -1
+0 21 -11.839438 -1 714 -1 -1 315
+16 22 -12.204256 -1 338 -1 -1 294
+14 20 -12.327847 -1 597 -1 -1 301
+8 15 -12.594387 -1 623 -1 -1 301
Index: branches/scout/projects/mapping/matlab/input_obstacle_2.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input_obstacle_2.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input_obstacle_2.txt	(revision 1346)
@@ -0,0 +1,184 @@
+30 0 0.324613 -1 -1 512 200 -1
+30 0 0.324613 -1 -1 462 197 -1
+30 0 0.324613 -1 -1 478 200 -1
+30 0 0.324613 -1 -1 574 203 -1
+30 0 0.324613 -1 -1 478 203 -1
+30 0 0.324613 -1 -1 512 203 -1
+30 0 0.324613 -1 -1 494 203 -1
+30 0 0.324613 -1 -1 434 200 -1
+30 0 0.324613 -1 -1 447 203 -1
+30 0 0.323124 -1 -1 478 203 -1
+30 0 0.230803 681 -1 375 203 -1
+30 0 0.259095 -1 -1 386 210 -1
+33 0 0.323124 -1 -1 478 203 -1
+33 0 0.367796 -1 -1 597 207 -1
+33 0 0.388642 -1 -1 681 210 -1
+34 0 0.366307 -1 -1 574 207 -1
+38 0 0.351416 -1 -1 651 210 -1
+46 2 0.351416 -1 -1 494 213 -1
+51 2 0.352905 -1 -1 552 197 -1
+57 2 0.348438 -1 -1 597 213 -1
+68 4 0.354394 -1 -1 597 203 -1
+80 6 0.354394 -1 -1 651 221 -1
+94 10 0.351416 -1 -1 574 213 -1
+103 12 0.345460 -1 -1 512 228 -1
+107 12 0.329080 -1 -1 574 221 -1
+111 12 0.309722 574 -1 552 221 -1
+134 15 0.294832 338 -1 447 228 -1
+144 16 0.288876 307 -1 574 224 -1
+172 20 0.266540 276 -1 478 237 -1
+180 20 0.242715 241 -1 447 221 -1
+186 20 0.238248 478 -1 478 232 -1
+202 20 0.215912 -1 -1 408 241 -1
+208 20 0.204000 -1 -1 397 241 -1
+212 20 0.196554 597 -1 375 245 -1
+222 21 0.193576 -1 -1 434 250 -1
+234 22 0.196554 -1 -1 462 228 -1
+238 22 0.195065 -1 -1 375 245 -1
+246 22 0.192087 -1 -1 434 250 -1
+252 22 0.190598 -1 -1 397 245 -1
+262 23 0.186131 -1 -1 421 241 -1
+269 23 0.178686 -1 -1 386 237 -1
+283 24 0.180175 -1 -1 408 250 -1
+293 24 0.181664 -1 -1 408 288 -1
+301 24 0.171240 -1 -1 421 375 -1
+308 24 0.162306 -1 -1 408 386 -1
+329 24 0.135503 -1 -1 356 237 -1
+364 24 0.122102 -1 -1 375 232 -1
+398 24 0.163795 -1 623 386 232 245
+414 24 0.171240 -1 714 365 237 224
+427 24 0.187620 -1 552 315 232 221
+435 24 0.198043 -1 552 315 241 217
+445 24 0.224846 -1 623 237 241 217
+449 24 0.251649 -1 623 260 232 224
+453 24 0.285897 681 597 315 221 228
+455 24 0.330569 -1 623 -1 245 237
+459 24 0.363328 -1 597 751 250 250
+462 24 0.415445 -1 623 574 232 260
+466 24 0.488408 623 681 478 265 301
+468 24 0.559883 -1 623 434 265 386
+470 25 0.668584 -1 714 434 322 -1
+474 29 0.686452 -1 623 434 347 -1
+478 32 0.719211 -1 681 397 330 -1
+480 32 0.753460 -1 751 397 386 -1
+480 32 0.792175 -1 -1 408 397 -1
+481 34 0.820467 -1 -1 386 365 -1
+486 39 0.856204 -1 -1 397 421 -1
+496 51 0.988730 -1 751 365 322 -1
+496 53 1.060204 -1 447 375 -1 -1
+502 73 1.136145 -1 494 397 512 -1
+502 94 1.238889 -1 -1 408 478 -1
+502 99 1.261225 -1 -1 397 421 -1
+502 102 1.262714 -1 -1 365 462 -1
+502 104 1.270159 -1 -1 408 408 -1
+502 104 1.283561 -1 -1 397 434 -1
+502 104 1.291006 -1 -1 434 462 -1
+502 104 1.292495 -1 -1 434 462 -1
+502 104 1.292495 -1 -1 375 447 -1
+502 104 1.325254 -1 -1 421 397 -1
+502 108 1.389283 -1 -1 597 434 -1
+502 120 1.460757 -1 -1 478 397 -1
+502 133 1.499472 -1 -1 512 356 -1
+502 147 1.505429 -1 -1 421 397 -1
+502 152 1.511385 -1 -1 462 408 -1
+502 185 1.542655 -1 -1 322 408 -1
+489 245 1.579881 -1 681 512 347 237
+485 246 1.590304 -1 623 651 408 260
+481 251 1.596260 -1 681 -1 397 260
+477 258 1.596260 -1 714 -1 397 245
+473 264 1.597749 -1 651 -1 408 245
+469 269 1.608173 -1 651 -1 408 241
+457 287 1.618596 -1 574 751 386 228
+453 288 1.634975 -1 552 681 421 232
+451 288 1.633486 -1 623 681 421 237
+451 288 1.633486 -1 574 597 421 250
+451 288 1.633486 -1 574 623 408 224
+451 288 1.633486 -1 597 597 421 228
+451 288 1.633486 -1 552 623 375 237
+450 288 1.631997 -1 623 574 397 228
+450 288 1.631997 -1 552 623 397 228
+450 288 1.631997 -1 552 681 408 232
+447 288 1.649866 -1 552 574 421 237
+443 290 1.704961 -1 494 512 434 260
+439 292 1.760056 -1 574 447 408 245
+435 292 1.812173 -1 512 447 397 301
+431 292 1.858333 -1 681 421 447 356
+419 301 1.841954 -1 574 408 512 301
+399 302 1.897049 408 386 574 32375 6400
+391 309 1.876202 751 -1 397 386 -1
+387 310 1.891093 -1 -1 408 -1 -1
+383 311 1.917895 -1 -1 365 -1 -1
+375 313 1.932786 -1 -1 386 -1 -1
+371 315 1.941720 -1 -1 347 -1 -1
+367 316 1.958099 -1 -1 397 751 -1
+363 317 1.970012 -1 -1 386 681 -1
+359 320 1.975968 -1 -1 421 597 -1
+346 333 1.956610 -1 -1 397 623 751
+342 336 1.952143 681 -1 375 623 375
+330 343 1.971501 -1 -1 408 552 330
+325 348 1.970012 -1 -1 365 512 301
+308 368 1.981924 -1 375 397 494 245
+299 380 1.980435 -1 -1 386 447 241
+290 394 1.978946 -1 -1 397 462 228
+274 414 1.992347 330 681 397 386 217
+269 418 2.005749 -1 -1 397 434 221
+265 419 2.017662 -1 -1 408 421 224
+261 422 2.023618 -1 -1 397 447 228
+255 429 2.025107 -1 -1 408 421 224
+251 433 2.016173 -1 -1 434 421 213
+244 441 2.011706 -1 -1 408 408 217
+239 446 2.016173 -1 -1 408 408 217
+231 457 2.017662 -1 -1 478 408 213
+226 462 2.008728 -1 -1 434 408 330
+222 464 1.998304 -1 -1 408 408 552
+217 467 1.999793 -1 -1 434 397 651
+205 473 1.986392 -1 -1 552 356 494
+201 475 1.987881 -1 -1 512 386 322
+197 479 1.989370 -1 -1 478 386 356
+179 500 1.974480 -1 -1 651 386 365
+175 501 1.961078 -1 -1 597 330 408
+171 501 1.952144 -1 -1 751 356 597
+167 502 1.956611 -1 -1 651 386 574
+155 507 1.992348 623 -1 -1 408 651
+142 519 1.964056 -1 -1 -1 408 -1
+130 519 1.874714 -1 -1 597 434 714
+126 519 1.850889 -1 -1 -1 462 714
+121 519 1.833021 -1 -1 -1 494 714
+121 519 1.833021 -1 -1 -1 478 681
+121 519 1.833021 -1 -1 -1 462 552
+121 519 1.833021 623 -1 -1 512 260
+121 519 1.833021 -1 -1 -1 512 265
+121 519 1.833021 751 -1 -1 597 301
+121 519 1.833021 -1 -1 -1 574 301
+121 519 1.833021 -1 -1 -1 597 347
+121 519 1.833021 -1 -1 -1 574 338
+121 519 1.833021 -1 -1 -1 574 315
+121 519 1.833021 -1 -1 -1 651 347
+121 519 1.833021 -1 -1 -1 651 365
+121 519 1.833021 -1 -1 -1 -1 365
+121 519 1.833021 -1 -1 -1 651 338
+121 519 1.833021 -1 -1 -1 651 338
+121 519 1.833021 751 -1 -1 512 338
+118 518 1.871736 -1 -1 -1 714 434
+118 518 1.871736 -1 -1 -1 751 478
+117 518 1.873225 -1 -1 -1 714 408
+110 522 1.965546 -1 -1 -1 -1 -1
+106 526 1.990860 681 -1 -1 -1 -1
+100 534 1.993838 -1 751 -1 -1 -1
+84 547 2.111473 -1 -1 -1 -1 -1
+80 551 2.133809 -1 -1 -1 -1 -1
+76 555 2.156145 -1 -1 -1 -1 -1
+72 559 2.193371 -1 -1 -1 -1 -1
+67 563 2.224641 -1 -1 -1 -1 -1
+60 567 2.239532 -1 681 -1 -1 -1
+50 573 2.251444 -1 623 -1 -1 -1
+34 584 2.325897 -1 494 -1 -1 -1
+30 585 2.348233 -1 512 -1 -1 -1
+20 585 2.379503 -1 478 -1 -1 -1
+15 585 2.398861 -1 494 -1 -1 -1
+2 585 2.431620 -1 494 -1 -1 -1
+-16 590 2.488206 -1 375 -1 -1 -1
+-17 591 2.477782 -1 386 -1 -1 -1
+-17 591 2.458425 651 307 751 -1 -1
+-17 591 2.458425 -1 375 597 -1 -1
+-17 591 2.458425 -1 397 -1 -1 -1
Index: branches/scout/projects/mapping/matlab/input_none_0.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input_none_0.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input_none_0.txt	(revision 1346)
@@ -0,0 +1,307 @@
+0 0 0.000000 -1 -1 681 597 -1
+0 0 0.000000 -1 -1 751 681 -1
+0 0 0.000000 -1 -1 751 651 -1
+0 0 0.000000 -1 -1 651 597 -1
+0 0 0.000000 -1 -1 714 681 -1
+0 0 0.000000 -1 -1 -1 651 -1
+0 0 0.000000 -1 -1 -1 597 -1
+0 0 0.000000 -1 -1 751 651 -1
+0 0 0.000000 -1 -1 651 651 -1
+0 0 0.000000 -1 -1 714 651 -1
+0 0 0.000000 -1 -1 -1 597 -1
+0 0 0.000000 -1 -1 681 597 -1
+0 0 0.000000 -1 -1 681 651 140
+-23 0 -0.370774 -1 -1 -1 574 147
+-13 0 -0.358861 -1 -1 -1 714 164
+48 -8 -0.373752 -1 -1 751 623 173
+54 -9 -0.370774 -1 -1 681 597 173
+95 -19 -0.376730 -1 -1 -1 574 145
+125 -25 -0.388642 -1 -1 751 597 160
+133 -25 -0.391620 -1 -1 681 651 160
+185 -36 -0.413956 -1 -1 714 552 142
+193 -36 -0.424380 -1 -1 651 494 105
+217 -42 -0.449694 -1 -1 651 421 -1
+225 -46 -0.452672 -1 -1 597 347 -1
+261 -62 -0.469051 -1 -1 597 338 -1
+268 -65 -0.473518 -1 -1 574 338 -1
+288 -73 -0.470540 -1 -1 512 356 -1
+301 -79 -0.470540 -1 -1 552 338 -1
+312 -84 -0.476496 -1 -1 597 356 -1
+323 -90 -0.469051 -1 -1 494 356 -1
+367 -109 -0.458628 651 -1 651 347 -1
+388 -118 -0.457139 -1 -1 597 347 -1
+401 -124 -0.449693 -1 -1 681 338 -1
+409 -128 -0.439270 -1 -1 597 347 -1
+432 -139 -0.430336 -1 -1 681 375 -1
+440 -143 -0.412467 -1 -1 623 356 -1
+450 -147 -0.396088 -1 -1 574 365 -1
+459 -151 -0.388642 -1 -1 478 330 -1
+470 -156 -0.391620 -1 -1 494 330 -1
+481 -161 -0.396088 -1 -1 478 375 -1
+520 -178 -0.412467 -1 -1 434 330 -1
+528 -181 -0.403533 -1 -1 365 330 -1
+542 -182 -0.375241 681 -1 307 347 -1
+567 -182 -0.297810 -1 -1 597 365 -1
+590 -182 -0.196555 -1 -1 651 386 -1
+650 -179 0.034248 -1 -1 494 512 -1
+658 -175 0.086365 -1 -1 447 512 -1
+682 -163 0.214423 -1 681 434 386 -1
+690 -159 0.257606 -1 623 365 347 -1
+712 -147 0.382686 -1 494 408 -1 -1
+716 -143 0.410978 -1 -1 375 681 -1
+728 -131 0.558394 -1 -1 421 574 -1
+732 -125 0.597110 -1 -1 574 512 -1
+734 -121 0.631358 -1 751 408 552 -1
+734 -120 0.638803 -1 681 434 512 -1
+734 -120 0.638803 -1 -1 462 552 -1
+734 -118 0.635825 -1 -1 421 552 -1
+734 -118 0.635825 -1 -1 421 512 -1
+734 -114 0.652204 -1 -1 447 478 -1
+741 -102 0.698365 -1 -1 478 434 -1
+752 -84 0.753460 -1 681 408 478 -1
+756 -76 0.787708 -1 714 478 462 -1
+760 -68 0.820467 -1 751 408 434 -1
+764 -60 0.838336 -1 714 338 421 -1
+758 89 1.831531 -1 -1 397 512 -1
+754 93 1.856845 -1 -1 421 512 -1
+742 115 1.983414 -1 -1 462 397 -1
+736 123 2.023618 -1 -1 478 375 -1
+712 147 2.111473 -1 -1 597 365 -1
+688 166 2.229108 -1 -1 -1 365 -1
+679 172 2.235065 -1 -1 -1 330 -1
+650 198 2.257401 347 -1 -1 375 -1
+642 206 2.264846 -1 -1 -1 338 -1
+630 218 2.263357 -1 -1 -1 375 -1
+604 243 2.248467 -1 -1 -1 397 -1
+584 263 2.248467 -1 -1 -1 386 -1
+558 293 2.246978 -1 -1 -1 356 -1
+544 307 2.254423 751 -1 -1 386 -1
+518 333 2.263357 330 -1 -1 386 -1
+479 364 2.293139 -1 -1 -1 408 -1
+440 390 2.348234 -1 -1 -1 434 -1
+410 407 2.398862 -1 -1 -1 421 -1
+402 411 2.422687 -1 -1 -1 447 -1
+374 423 2.477783 -1 -1 -1 462 -1
+338 439 2.559681 -1 -1 -1 623 -1
+329 443 2.592440 -1 -1 -1 574 -1
+321 447 2.619243 -1 -1 -1 651 -1
+297 448 2.733900 478 -1 -1 -1 -1
+289 448 2.763681 -1 -1 623 -1 -1
+281 448 2.794951 -1 -1 462 -1 -1
+249 448 2.924499 -1 -1 -1 -1 -1
+237 448 2.949813 -1 -1 -1 597 -1
+225 448 2.969171 -1 -1 681 -1 -1
+213 448 2.987040 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+198 448 3.009376 -1 -1 -1 -1 -1
+192 448 3.045113 -1 623 -1 -1 -1
+187 448 3.057025 -1 -1 -1 -1 -1
+154 448 3.116588 -1 -1 -1 -1 -1
+142 447 3.153814 -1 -1 -1 -1 -1
+130 443 3.192529 -1 -1 -1 -1 -1
+120 439 3.228266 -1 -1 -1 -1 -1
+112 435 3.269960 -1 -1 -1 -1 -1
+70 415 3.535011 -1 -1 -1 -1 -1
+58 410 3.582661 -1 494 -1 -1 -1
+50 406 3.613931 -1 574 -1 -1 -1
+42 401 3.649668 -1 478 -1 -1 -1
+34 393 3.685405 -1 462 714 -1 -1
+-11 336 4.029377 -1 714 221 -1 -1
+-11 333 4.050223 213 -1 -1 32295 6400
+-11 333 4.050223 -1 -1 260 -1 -1
+-11 333 4.050223 -1 681 260 -1 -1
+-11 312 4.188705 -1 -1 338 -1 -1
+-13 302 4.197639 -1 -1 365 -1 -1
+-14 274 4.272092 -1 -1 347 -1 -1
+-17 262 4.298895 -1 -1 347 -1 -1
+-17 248 4.324209 -1 -1 347 -1 -1
+-17 240 4.337611 -1 -1 338 -1 -1
+-17 232 4.353991 -1 -1 338 -1 -1
+-17 224 4.376327 -1 -1 338 -1 -1
+-17 216 4.407597 -1 552 338 -1 -1
+-17 208 4.443335 -1 -1 347 -1 -1
+-17 199 4.465670 -1 -1 338 -1 -1
+-17 188 4.489495 -1 338 347 -1 -1
+-17 176 4.516298 -1 -1 356 651 -1
+-17 164 4.555013 -1 -1 338 260 -1
+-17 152 4.592239 -1 -1 322 315 -1
+-17 142 4.623510 -1 -1 397 347 -1
+-17 134 4.645845 -1 -1 397 330 -1
+-17 126 4.669671 -1 -1 386 330 -1
+-17 120 4.671160 -1 -1 408 330 -1
+-13 108 4.727744 -1 -1 434 330 -1
+-13 108 4.727744 -1 -1 421 322 -1
+-13 108 4.727744 -1 -1 434 330 -1
+-13 108 4.727744 -1 -1 462 330 -1
+-11 106 4.732211 -1 -1 434 307 -1
+-5 96 4.820065 -1 -1 651 330 -1
+0 50 4.952590 -1 -1 478 330 -1
+0 34 4.930254 -1 -1 434 330 -1
+0 -156 4.690515 -1 -1 478 330 -1
+0 -170 4.684558 -1 -1 478 338 -1
+0 -198 4.633930 -1 714 462 347 -1
+0 -206 4.622017 -1 714 434 347 -1
+0 -218 4.608615 -1 574 434 315 -1
+0 -274 4.498425 512 597 347 347 -1
+0 -282 4.483534 597 597 322 347 -1
+-1 -292 4.476089 651 512 338 338 -1
+-2 -314 4.488002 574 478 338 330 -1
+-2 -318 4.514805 512 447 315 322 -1
+-2 -323 4.572878 574 462 322 294 -1
+-2 -329 4.645842 623 397 255 288 -1
+-1 -333 4.748587 681 421 237 301 -1
+0 -24159 -0.000000 25601 15105 -255 -9473 126
+0 -24159 -0.000000 23297 13057 -255 16383 126
+0 -353 5.108937 408 434 301 294 -1
+0 -357 5.183390 -1 421 315 356 -1
+0 -361 5.254864 -1 494 301 365 -1
+0 -363 5.323359 -1 494 315 386 -1
+0 -364 5.388877 -1 597 294 347 -1
+0 -364 5.454395 -1 681 288 276 -1
+1 -365 5.524380 -1 512 301 270 -1
+22 -381 5.735826 -1 494 315 375 -1
+33 -381 5.881753 -1 -1 315 347 -1
+36 -381 5.947271 -1 -1 365 365 -1
+36 -381 5.997899 -1 -1 421 338 -1
+39 -381 6.047037 -1 -1 512 330 -1
+43 -381 6.103621 -1 -1 478 330 -1
+47 -381 6.140847 -1 -1 512 330 -1
+51 -381 6.182540 -1 -1 421 330 -1
+55 -381 6.206365 -1 -1 365 330 -1
+59 -381 6.239125 -1 -1 338 330 -1
+63 -381 6.251038 -1 -1 322 330 -1
+68 -381 6.243592 -1 -1 270 330 -1
+73 -381 6.243592 -1 -1 301 338 -1
+83 -381 6.239124 -1 -1 315 347 -1
+88 -381 6.243592 -1 -1 322 347 -1
+100 -381 6.237635 -1 -1 330 347 -1
+123 -381 6.210831 -1 -1 288 356 -1
+131 -381 6.209342 -1 -1 301 338 -1
+143 -381 6.210831 -1 -1 322 356 -1
+147 -381 6.198918 -1 -1 315 356 -1
+162 -381 6.152757 -1 751 301 356 -1
+167 -381 6.125954 -1 714 301 375 -1
+171 -381 6.108085 -1 651 276 386 -1
+175 -381 6.082771 -1 714 276 386 -1
+179 -381 6.044055 -1 681 301 375 -1
+183 -381 6.005340 -1 574 347 365 -1
+188 -381 5.977047 -1 623 365 375 -1
+206 -381 5.866858 -1 462 356 397 -1
+210 -381 5.828142 597 512 347 386 -1
+214 -381 5.802828 597 552 347 356 -1
+235 -381 5.636055 447 512 294 421 -1
+235 -381 5.597340 462 623 276 447 -1
+235 -381 5.589895 462 623 245 447 -1
+235 -381 5.582449 462 574 270 434 -1
+235 -381 5.575004 462 714 255 447 -1
+235 -381 5.575004 421 681 270 447 -1
+235 -381 5.575004 462 681 250 447 -1
+235 -381 5.575004 447 623 224 434 -1
+235 -381 5.575004 434 552 265 447 -1
+235 -381 5.575004 447 681 270 421 -1
+235 -381 5.575004 421 651 265 386 -1
+235 -381 5.575004 397 651 265 434 -1
+235 -381 5.575004 421 651 245 447 -1
+235 -381 5.575004 447 623 265 434 -1
+235 -381 5.575004 462 597 255 478 -1
+235 -381 5.575004 478 681 265 447 -1
+235 -381 5.575004 408 597 255 434 -1
+235 -381 5.575004 462 623 241 447 -1
+235 -381 5.575004 408 681 265 447 -1
+235 -381 5.575004 462 623 255 447 -1
+235 -381 5.575004 421 651 265 421 -1
+235 -381 5.575004 356 681 265 447 -1
+235 -381 5.575004 462 681 245 434 -1
+235 -381 5.548200 421 651 260 397 -1
+235 -381 5.522886 397 751 255 462 -1
+236 -381 5.573514 421 751 245 434 -1
+240 -385 5.650945 421 421 265 386 -1
+244 -387 5.738799 434 356 250 322 -1
+253 -387 5.972579 574 330 221 294 -1
+256 -387 6.039587 574 347 294 294 -1
+256 -387 6.088726 -1 338 552 288 -1
+256 -387 6.088726 512 347 512 294 -1
+256 -387 6.088726 -1 347 574 288 -1
+262 -387 6.239120 -1 347 315 276 -1
+274 -378 6.459500 -1 375 270 307 -1
+278 -374 6.545865 512 397 260 330 -1
+290 -362 6.806448 -1 552 260 322 -1
+294 -358 6.889834 -1 -1 260 751 -1
+296 -354 6.953863 -1 -1 270 447 -1
+300 -346 6.998535 -1 -1 288 330 -1
+304 -338 7.040227 -1 -1 276 356 -1
+308 -330 7.075965 -1 -1 276 330 -1
+312 -322 7.105747 -1 -1 301 315 -1
+316 -313 7.135528 -1 -1 294 315 -1
+321 -301 7.160842 -1 714 315 288 -1
+325 -290 7.177222 -1 -1 315 276 -1
+347 -250 7.211471 -1 -1 322 260 -1
+356 -235 7.220406 -1 -1 365 245 -1
+360 -223 7.233807 714 -1 347 255 -1
+364 -211 7.265077 -1 -1 375 255 -1
+368 -199 7.303792 -1 -1 434 255 -1
+372 -189 7.336552 574 -1 408 255 -1
+372 -185 7.341020 -1 -1 434 250 -1
+372 -184 7.336553 -1 -1 478 255 -1
+372 -184 7.336553 -1 -1 447 250 -1
+372 -184 7.336553 -1 -1 421 245 -1
+372 -183 7.333574 -1 -1 421 255 -1
+372 -182 7.345487 -1 -1 434 245 -1
+372 -178 7.376757 -1 -1 597 250 -1
+372 -173 7.430363 -1 -1 597 245 -1
+372 -167 7.478013 -1 -1 -1 255 -1
+372 -163 7.533108 -1 -1 -1 255 -1
+372 -156 7.595648 -1 -1 751 265 -1
+372 -149 7.661166 -1 -1 -1 255 -1
+372 -142 7.723705 -1 -1 -1 276 -1
+372 -136 7.781778 -1 -1 -1 276 -1
+372 -128 7.804114 -1 -1 -1 307 -1
+372 -119 7.798157 -1 -1 -1 322 -1
+372 -104 7.801136 -1 -1 -1 307 -1
+372 -92 7.783267 -1 -1 -1 330 -1
+372 -80 7.759442 -1 -1 -1 330 -1
+372 -65 7.749019 -1 -1 -1 356 -1
+372 -26 7.668610 -1 -1 -1 375 -1
+372 -14 7.655208 -1 -1 -1 386 -1
+372 -2 7.637340 -1 -1 -1 386 -1
+372 22 7.603091 447 -1 574 375 -1
+372 30 7.591178 -1 -1 -1 408 -1
+372 54 7.537572 512 -1 -1 421 -1
+372 62 7.521193 -1 -1 751 421 -1
+372 70 7.498857 552 -1 751 408 -1
+372 78 7.482478 -1 -1 -1 434 -1
+373 88 7.473543 -1 -1 681 447 -1
+373 96 7.452696 751 -1 -1 434 -1
+376 104 7.427382 -1 -1 -1 434 -1
+376 111 7.415470 -1 -1 -1 462 -1
+376 115 7.384199 552 -1 -1 434 -1
+376 119 7.352929 -1 -1 651 462 -1
+379 133 7.312724 -1 -1 -1 434 -1
+383 139 7.300812 -1 -1 -1 478 -1
+387 146 7.290388 -1 -1 -1 408 -1
+395 160 7.300812 -1 -1 -1 421 -1
+400 170 7.299323 -1 -1 -1 478 -1
+409 185 7.300812 -1 -1 -1 462 -1
+413 193 7.332082 494 -1 -1 494 -1
+417 201 7.373775 -1 -1 -1 462 -1
+421 209 7.415468 -1 -1 -1 462 -1
+425 217 7.446738 -1 574 -1 494 -1
+429 225 7.485454 462 -1 -1 462 -1
+432 233 7.518214 -1 -1 651 512 -1
+432 241 7.555440 -1 -1 -1 552 -1
+432 249 7.595644 -1 -1 -1 574 -1
+432 257 7.632870 -1 -1 -1 574 -1
+432 263 7.674564 -1 -1 -1 623 -1
+432 270 7.708812 623 -1 -1 751 -1
+432 286 7.807090 681 -1 -1 -1 -1
+431 294 7.868141 -1 -1 -1 -1 -1
+419 317 8.039382 -1 -1 -1 714 -1
+415 319 8.081075 -1 -1 -1 -1 -1
+414 319 8.085542 -1 -1 -1 -1 -1
+414 319 8.085542 -1 -1 -1 -1 -1
+412 319 8.081075 -1 -1 -1 -1 -1
Index: branches/scout/projects/mapping/matlab/input_none_1.txt
===================================================================
--- branches/scout/projects/mapping/matlab/input_none_1.txt	(nonexistent)
+++ branches/scout/projects/mapping/matlab/input_none_1.txt	(revision 1346)
@@ -0,0 +1,201 @@
+13 0 -1.246336 -1 -1 574 338 623
+13 0 -1.246336 -1 -1 714 375 552
+13 0 -1.246336 -1 -1 751 330 597
+13 0 -1.246336 -1 -1 751 356 494
+13 0 -1.264204 -1 -1 651 338 597
+13 0 -1.307387 -1 -1 751 330 478
+13 0 -1.338657 -1 -1 681 338 512
+13 0 -1.360992 -1 -1 714 338 681
+13 -6 -1.423532 -1 -1 -1 338 -1
+13 -10 -1.457780 -1 -1 -1 347 -1
+0 -44 -1.646888 -1 751 301 338 -1
+0 -50 -1.642421 -1 623 330 330 -1
+0 -60 -1.630509 651 651 462 338 -1
+0 -64 -1.602217 -1 714 651 330 -1
+0 -68 -1.576903 -1 651 -1 365 -1
+0 -79 -1.503940 -1 714 574 375 -1
+0 -79 -1.495006 -1 597 574 375 -1
+0 -79 -1.492028 -1 623 447 365 -1
+0 -79 -1.486072 -1 681 512 356 -1
+0 -86 -1.454802 -1 623 447 375 -1
+0 -87 -1.390773 -1 681 447 397 -1
+0 -87 -1.383328 -1 597 386 397 -1
+0 -87 -1.377372 -1 623 397 397 -1
+0 -87 -1.390773 -1 623 434 386 -1
+0 -89 -1.390773 -1 494 447 397 -1
+0 -92 -1.392262 -1 623 447 421 -1
+0 -97 -1.398218 -1 494 434 408 -1
+0 -102 -1.393751 -1 552 447 434 -1
+0 -107 -1.390773 -1 512 408 421 -1
+0 -110 -1.392262 -1 597 421 421 -1
+0 -114 -1.386306 -1 494 375 421 -1
+0 -119 -1.381839 -1 512 421 434 -1
+0 -127 -1.360992 -1 447 397 447 -1
+0 -127 -1.350569 -1 462 386 397 -1
+0 -134 -1.292496 -1 552 365 478 -1
+0 -138 -1.268672 -1 494 365 494 -1
+0 -142 -1.240380 -1 552 330 478 -1
+0 -146 -1.213577 -1 574 338 512 -1
+0 -150 -1.200176 -1 552 315 478 -1
+0 -151 -1.085519 -1 -1 338 301 512
+0 -151 -1.036381 -1 651 307 447 -1
+0 -151 -1.021490 -1 651 294 512 -1
+0 -151 -0.941081 -1 623 294 -1 -1
+0 -151 -0.917257 -1 623 307 714 -1
+0 -151 -0.894921 -1 494 315 623 -1
+0 -151 -0.877052 -1 512 315 574 -1
+0 -152 -0.851738 -1 512 315 552 -1
+0 -154 -0.832381 -1 462 307 512 -1
+2 -156 -0.833870 -1 447 301 462 -1
+5 -160 -0.827913 -1 356 301 512 -1
+6 -161 -0.821957 -1 434 301 478 -1
+7 -163 -0.818979 -1 408 294 462 -1
+10 -166 -0.814512 -1 408 294 434 -1
+12 -168 -0.808556 -1 307 276 462 -1
+12 -168 -0.805578 -1 375 270 462 -1
+13 -169 -0.775797 -1 356 276 421 -1
+13 -169 -0.768352 -1 356 265 421 -1
+13 -169 -0.762396 -1 434 270 408 -1
+14 -170 -0.738571 -1 651 276 386 -1
+14 -170 -0.728148 -1 714 265 386 -1
+14 -170 -0.719213 -1 -1 288 375 -1
+14 -170 -0.701345 -1 -1 276 356 -1
+14 -170 -0.679009 -1 -1 294 356 -1
+14 -170 -0.659651 -1 -1 276 347 -1
+14 -170 -0.635826 -1 -1 322 347 -1
+14 -170 -0.609023 -1 -1 276 330 -1
+14 -170 -0.573286 -1 -1 294 307 -1
+14 -170 -0.540527 -1 -1 301 315 -1
+41 -175 -0.410979 -1 751 347 276 -1
+57 -178 -0.408001 -1 574 365 288 -1
+62 -178 -0.406512 -1 623 356 265 -1
+68 -179 -0.405023 -1 751 330 276 -1
+84 -183 -0.416936 -1 623 365 276 -1
+84 -183 -0.416936 -1 651 347 276 -1
+84 -183 -0.416936 751 512 365 255 -1
+84 -183 -0.416936 -1 651 356 276 -1
+102 -185 -0.396089 -1 552 294 260 -1
+131 -191 -0.385665 -1 434 241 288 -1
+133 -191 -0.375242 -1 462 245 276 -1
+135 -191 -0.361841 -1 478 237 276 -1
+140 -191 -0.311213 -1 478 294 276 -1
+140 -191 -0.287388 -1 408 478 294 -1
+140 -191 -0.199534 -1 478 434 260 -1
+140 -191 -0.166775 -1 434 408 270 -1
+140 -191 -0.135505 -1 462 375 270 -1
+140 -191 -0.101257 -1 462 386 276 -1
+140 -191 -0.077432 -1 447 375 270 -1
+140 -191 -0.037227 -1 494 347 288 -1
+143 -191 -0.002979 494 494 322 288 -1
+147 -188 0.029780 -1 494 322 288 -1
+151 -184 0.055094 -1 478 338 322 -1
+163 -172 0.163794 -1 478 315 356 -1
+167 -168 0.203999 -1 623 294 365 -1
+168 -164 0.236758 -1 597 315 365 -1
+168 -160 0.266539 -1 681 315 356 -1
+168 -156 0.309721 -1 681 294 322 -1
+168 -148 0.387152 -1 -1 315 245 -1
+168 -148 0.387152 -1 -1 315 260 -1
+168 -148 0.387152 -1 -1 301 255 -1
+168 -148 0.387152 -1 -1 307 250 -1
+168 -148 0.387152 -1 -1 294 265 -1
+168 -142 0.430335 -1 -1 307 330 -1
+173 -130 0.504787 -1 714 315 681 -1
+178 -115 0.539035 -1 -1 301 447 -1
+179 -111 0.550948 315 462 -1 32378 6400
+185 -83 0.661137 -1 478 307 386 -1
+186 -79 0.674539 -1 494 338 386 -1
+189 -75 0.695385 -1 -1 338 365 -1
+193 -71 0.714743 -1 -1 338 397 -1
+196 -66 0.725166 -1 -1 322 356 -1
+200 -59 0.748991 -1 -1 338 322 -1
+206 -44 0.798130 -1 -1 347 315 -1
+206 -40 0.814509 -1 -1 365 307 -1
+206 -36 0.824933 -1 -1 386 307 -1
+206 -31 0.835356 -1 -1 397 294 -1
+206 -25 0.844290 -1 -1 375 307 -1
+209 -17 0.848757 -1 -1 434 307 -1
+213 -9 0.857692 -1 -1 397 270 -1
+215 -2 0.865137 -1 -1 386 315 -1
+217 0 0.853225 -1 -1 408 307 -1
+217 0 0.865137 -1 -1 397 294 -1
+217 0 0.890451 -1 597 408 294 -1
+217 0 0.917254 -1 -1 447 294 -1
+217 0 0.906830 -1 -1 434 301 -1
+217 0 0.906830 -1 -1 421 294 -1
+217 0 0.900874 -1 -1 478 294 -1
+217 0 0.891940 -1 -1 478 301 -1
+217 0 0.862159 -1 -1 386 294 -1
+217 0 0.854714 -1 -1 434 294 -1
+217 0 0.851736 -1 -1 434 294 -1
+217 0 0.851736 -1 -1 397 294 -1
+217 0 0.851736 -1 -1 397 294 -1
+217 0 0.851736 -1 -1 408 294 -1
+217 0 0.848758 -1 -1 397 294 -1
+217 0 0.850247 -1 -1 397 294 -1
+223 7 0.869604 -1 -1 462 288 -1
+234 22 0.888962 -1 -1 408 288 -1
+242 32 0.899385 -1 -1 447 288 -1
+245 36 0.905341 -1 -1 434 288 -1
+258 49 0.917254 -1 -1 397 288 -1
+271 63 0.958947 -1 -1 365 288 -1
+281 75 1.015531 574 -1 221 232 -1
+283 87 1.055735 -1 714 191 276 -1
+281 134 1.587323 -1 714 421 421 -1
+277 135 1.609659 -1 -1 434 356 -1
+268 135 1.645396 -1 714 408 294 -1
+268 135 1.645396 -1 -1 356 294 -1
+268 135 1.645396 -1 -1 421 288 -1
+266 135 1.652841 -1 -1 408 260 -1
+262 137 1.685600 -1 -1 408 232 -1
+258 144 1.710914 -1 -1 375 228 -1
+254 152 1.722826 -1 651 408 260 -1
+242 164 1.800257 -1 434 375 -1 -1
+238 168 1.834505 -1 375 447 -1 -1
+234 172 1.861307 -1 421 365 681 -1
+230 174 1.888110 -1 681 356 651 -1
+226 175 1.914913 -1 -1 338 651 -1
+222 178 1.941716 -1 -1 397 597 -1
+218 178 1.965540 -1 -1 397 574 -1
+214 178 1.989365 -1 -1 386 574 -1
+194 180 2.112957 -1 -1 434 421 -1
+190 184 2.130826 -1 -1 462 494 -1
+170 203 2.211235 -1 -1 386 434 -1
+165 207 2.227615 -1 -1 408 421 -1
+160 211 2.243995 -1 -1 462 462 -1
+156 214 2.263353 -1 751 386 356 -1
+152 214 2.282710 -1 -1 356 421 -1
+41 215 2.815792 -1 -1 462 462 -1
+37 215 2.848551 -1 -1 623 494 -1
+24 215 2.911092 -1 -1 574 512 -1
+1 215 2.951297 574 462 -1 32443 6400
+-15 215 2.991503 -1 512 478 307 -1
+-21 215 2.998948 -1 681 478 288 -1
+-25 215 3.009372 -1 681 462 276 -1
+-29 215 3.024262 -1 512 478 330 -1
+-33 215 3.037664 -1 714 478 462 -1
+-37 215 3.057022 -1 651 478 -1 -1
+-50 215 3.112117 -1 -1 512 -1 -1
+-54 215 3.129986 -1 -1 462 -1 -1
+-59 214 3.150833 -1 -1 462 751 -1
+-75 202 3.201461 -1 -1 434 651 -1
+-83 198 3.210396 -1 -1 447 574 -1
+-91 194 3.219330 -1 -1 574 552 -1
+-99 190 3.231243 -1 -1 512 574 -1
+-107 186 3.256557 -1 -1 512 574 -1
+-121 175 3.295272 -1 751 494 462 -1
+-121 175 3.295272 -1 -1 447 478 -1
+-121 175 3.295272 -1 -1 478 512 -1
+-122 169 3.304207 681 714 574 552 -1
+-142 164 3.305696 -1 -1 462 494 -1
+-180 144 3.432266 -1 597 375 434 -1
+-184 140 3.460558 -1 651 375 462 -1
+-189 135 3.488850 -1 714 338 462 -1
+-193 131 3.520120 -1 651 307 462 -1
+-197 127 3.548412 -1 623 301 462 -1
+-201 123 3.567770 623 597 478 494 -1
+-203 119 3.587128 -1 714 681 494 -1
+-203 117 3.582661 -1 651 651 478 -1
+-203 116 3.579683 -1 714 714 494 -1
+-203 115 3.575216 -1 714 681 462 -1
+-203 115 3.575216 -1 681 651 478 -1
Index: branches/scout/projects/mapping/matlab/map.m
===================================================================
--- branches/scout/projects/mapping/matlab/map.m	(nonexistent)
+++ branches/scout/projects/mapping/matlab/map.m	(revision 1346)
@@ -0,0 +1,69 @@
+%Function which creates a map of points seen by a robot
+
+%Input comes from file where each line contains 8 space-separated values
+%Each line contains: x, y, theta, IR1, IR2, IR3, IR4, IR5 in that order
+%Example line of input file:
+%17 23 .45 -1 42 -1 -1 -1
+%x and y are centimeters, theta is in radians
+%IR values are the values seen by the robot, where -1 means that nothing is seen
+
+%Output: graph of points seen by robot
+%All output measurements are in centimeters
+
+%TODO
+%find conversion factor between IR sensor values and centimeters (currently 1 is being used)
+function map()
+
+%Vectors from center of bot to IR sensors
+Bot_IR1 = [4.5,3.5];
+Bot_IR2 = [7.5,0];
+Bot_IR3 = [4.5,-3.5];
+Bot_IR4 = [-4,-3.5];
+Bot_IR5 = [-4,3.5];
+Bot_IR = [Bot_IR1; Bot_IR2; Bot_IR3; Bot_IR4; Bot_IR5];
+
+%Unit vectors with the same angle that the IR sensors are tilted at
+Angle_IR1 = [.78,.63];
+Angle_IR2 = [1,0];
+Angle_IR3 = [.78,-.63];
+Angle_IR4 = [0,-1];
+Angle_IR5 = [0,1];
+Angle_IR = [Angle_IR1; Angle_IR2; Angle_IR3; Angle_IR4; Angle_IR5];
+
+%For now, read input in from a file
+Data = dlmread('input.txt', ' ');
+
+points = [];
+%loop through each line of file
+for i=1:size(Data, 1)
+    row = Data(i, :);
+    x = row(1);
+    y = row(2);
+    theta = row(3);
+	%look at each IR sensor reading
+    for ir=1:5
+        if row(ir+3) ~= -1
+            %Find vector of object relative to center of bot
+            distance = row(ir+3) * 1; %TODO!!!!!!!!! replace 1 with a conversion factor to cm
+            ObjectVector = distance * Angle_IR(ir, :);
+            ObjectVector = ObjectVector + Bot_IR(ir, :);
+            
+            %rotate by theta
+            objR = sqrt(ObjectVector(1)^2 + ObjectVector(2)^2);
+            objTheta = atan2(ObjectVector(2), ObjectVector(1));
+            objTheta = objTheta + theta;
+            
+            %add absolute position
+            objX = (objR * cos(objTheta)) + x;
+            objY = (objR * sin(objTheta)) + y;
+            ObjectVector = [objX, objY];
+            
+            points = [points; ObjectVector];
+        end
+    end
+end
+
+%graph all the points
+figure;
+toGraph = points';
+plot(toGraph(1,:), toGraph(2,:), '*');
Index: branches/scout/projects/mapping/server/Makefile
===================================================================
--- branches/scout/projects/mapping/server/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/server/Makefile	(revision 1346)
@@ -0,0 +1,11 @@
+CC = gcc
+CFLAGS = -Wall -g
+
+all: test
+
+test: *.c ../../libwireless/lib/*.c 
+	$(CC) $(CFLAGS) *.c -L../../libwireless/lib -o test -DWL_DEBUG -lwireless -lpthread -lncurses -ggdb
+
+clean:
+	rm -f *.o test ../lib/*.o
+
Index: branches/scout/projects/mapping/server/test.c
===================================================================
--- branches/scout/projects/mapping/server/test.c	(nonexistent)
+++ branches/scout/projects/mapping/server/test.c	(revision 1346)
@@ -0,0 +1,139 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <curses.h> // you need to install the ncurses library
+#include "../../libwireless/lib/wireless.h"
+#include <unistd.h>
+
+#define CHAN 0xE
+
+#define MAP 1   // packet group for receiving points
+#define POINT_RAW 1 // packet type for map data points w/ raw encoder data
+#define POINT_ODO 2 // packet type for map data points w/ odometry data
+
+#define WL_CNTL_GROUP 4
+
+#define CNTL_FORWARD      0
+#define CNTL_BACK         1
+#define CNTL_LEFT         2
+#define CNTL_RIGHT        3
+#define CNTL_LEFT_CURVE   4
+#define CNTL_RIGHT_CURVE  5
+#define CNTL_STOP         6
+#define CNTL_VEL_UP       7
+#define CNTL_VEL_DOWN     8
+
+void send_packet (char type, int dst_robot);
+void packet_receive(char type, int source, unsigned char* packet, int length);
+
+PacketGroupHandler cntlHandler = {WL_CNTL_GROUP, NULL, NULL, NULL, NULL};
+PacketGroupHandler receiveHandler = {MAP, NULL, NULL, &packet_receive, NULL};
+
+FILE *file;
+int parent_running = 1;
+
+int main(int argc, char *argv[]) {
+    if (argc != 3) {
+        printf("Usage: ./test <robot #> <USB port #>\n");
+        return 1;
+    }
+    
+    char c;
+    int robot = atoi(argv[1]);
+    char port[14];	/* port that XBee is on */
+
+    /* USB port to use is second cmd-line argument */
+    strcpy(port, "/dev/ttyUSB");
+    strcat(port, argv[2]);
+
+    printf("Beginning: robot=%d\r\n", robot);
+    wl_set_com_port(port);
+    wl_init();
+    wl_set_channel(CHAN);
+    printf("Wireless initialized.\r\n");
+    wl_register_packet_group(&cntlHandler);
+    wl_register_packet_group(&receiveHandler);
+    printf("Packet groups initialized.\r\n");
+    fflush(stdout);
+    
+    file = fopen("input.txt", "w");
+    if (file == NULL) {
+	printf("fopen error\n");
+	return 1;
+    }
+
+    WINDOW* win = initscr();
+    nodelay(win, TRUE);
+    while (1) {
+	wl_do();
+	c = getch();
+	if(c != ERR) {
+	    printf("%c\r\n", c);
+	    fflush(stdout);
+	    if (c=='0')
+		break;
+	    switch (c) {
+		case 'w':
+		    send_packet(CNTL_FORWARD, robot);
+		    break;
+		case 's':
+		    send_packet(CNTL_BACK, robot);
+		    break;
+		case 'a':
+		    send_packet(CNTL_LEFT, robot);
+		    break;
+		case 'd':
+		    send_packet(CNTL_RIGHT, robot);
+		    break;
+		case 'q':
+		    send_packet(CNTL_LEFT_CURVE, robot);
+		    break;
+		case 'e':
+		    send_packet(CNTL_RIGHT_CURVE, robot);
+		    break;
+		case 'x':
+		    send_packet(CNTL_STOP, robot);
+		    break;
+		case ']':
+		    send_packet(CNTL_VEL_UP, robot);
+		    break;
+		case '[':
+		    send_packet(CNTL_VEL_DOWN, robot);
+		    break;
+		default:
+		    //send_packet(CNTL_STOP, robot);
+		    break;
+	    }
+	}
+    }
+    fclose(file);
+    delwin(win);
+    endwin();
+    refresh();
+    return 0;
+}
+
+void send_packet (char type, int dst_robot) {
+    wl_send_robot_to_robot_global_packet(WL_CNTL_GROUP, type,
+            NULL, 0, dst_robot, 0);
+}
+
+void packet_receive (char type, int source, unsigned char* packet, int length) {
+    short x,y,ir1,ir2,ir3,ir4,ir5;
+
+    /* convert received data from 2 chars to 1 short */
+    x = ((short)packet[1] << 8) | (short)packet[0];
+    y = ((short)packet[3] << 8) | (short)packet[2];
+    ir1 = ((short)packet[9] << 8) | (short)packet[8];
+    ir2 = ((short)packet[11] << 8) | (short)packet[10];
+    ir3 = ((short)packet[13] << 8) | (short)packet[12];
+    ir4 = ((short)packet[15] << 8) | (short)packet[14];
+    ir5 = ((short)packet[17] << 8) | (short)packet[16];
+
+    char tarr[] = {packet[4],packet[5],packet[6],packet[7]};
+    float *theta_ptr = (float *)tarr;
+    float theta = *theta_ptr;
+
+    fprintf(file, "%d %d %f %d %d %d %d %d\n", x, y, theta,
+	    ir1, ir2, ir3, ir4, ir5);
+}
Index: branches/scout/projects/mapping/auto/robot_main.c
===================================================================
--- branches/scout/projects/mapping/auto/robot_main.c	(nonexistent)
+++ branches/scout/projects/mapping/auto/robot_main.c	(revision 1346)
@@ -0,0 +1,62 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <encoders.h>
+#include "odometry.h"
+//#include "smart_run_around_fsm.h"
+
+#define POLLING_INTERVAL 50    //interval in ms to get sensor data
+#define MAP 1	// packet group for sending data points
+#define ODO 0	// packet type for sending data points
+
+char buf[100];
+
+int main(void)
+{
+    /* initialize components and join the token ring */
+    dragonfly_init(ALL_ON);
+    orb_init();
+    odometry_init();
+    run_around_init();
+    wl_init();
+    wl_set_channel(0xE);
+    
+    int x, y; // use when sending odometry data
+    double theta;
+
+    int store[9];
+    char *send;   // for transmission
+
+    while(1)
+    {
+		wl_do();
+
+		delay_ms(POLLING_INTERVAL);	/* until it's time to grab map data */
+
+		x = odometry_dx();	// data gathered
+		y = odometry_dy();
+		theta = odometry_angle();
+
+		store[0] = x;	// position
+		store[1] = y;
+		*((double*)(store + 2)) = theta;	// calculated angle (8 bytes)
+		store[4] = range_read_distance(IR1);	// IR1 range
+		store[5] = range_read_distance(IR2);	// IR2 range
+		store[6] = range_read_distance(IR3);	// IR3 range
+		store[7] = range_read_distance(IR4);	// IR4 range
+		store[8] = range_read_distance(IR5);	// IR5 range
+		sprintf(buf, "%d %d %f %d %d %d %d %d\n", store[0], store[1],
+			*((double *)(store+2)), store[4], store[5], store[6],
+			store[7], store[8]);
+		usb_puts(buf);	// send data to USB for debugging
+
+		send = (char*) store;	// convert to char for wireless
+
+		wl_send_global_packet(MAP, ODO, send, 18, 0);
+
+		run_around_FSM();
+    }
+
+    wl_terminate();
+    return 0;
+}
+
Index: branches/scout/projects/mapping/auto/smart_run_around_fsm.c
===================================================================
--- branches/scout/projects/mapping/auto/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/projects/mapping/auto/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,109 @@
+#include <dragonfly_lib.h>
+#include "smart_run_around_fsm.h"
+
+void run_around_init(void)
+{
+  range_init();
+  orb_init();
+ 
+  state = FORWARD;  // start out moving forward
+  // initialize rangefinder values to 0
+  d1 = 0, d2 = 0, d3 = 0, d4 = 0, d5 = 0;
+}
+
+/* evaluate rangefinder input and update state
+ * call this function as often as possible to avoid collisions
+ */
+void run_around_FSM(void)
+{
+    /* TODO: find a better way to handle rangefinder input
+     * robot should deal with -1s (obstacles too close or too far to detect)
+     * in a way that keeps it from crashing or driving in circles
+     */
+    // do not update distances when rangefinders return -1
+    // otherwise update distances with new rangefinder values
+    int16_t temp;
+
+    temp = range_read_distance(IR1);
+    d1 = (temp == -1) ? d1 : temp;
+
+    temp = range_read_distance(IR2);
+    d2 = (temp == -1) ? d2 : temp;
+
+    temp = range_read_distance(IR3);
+    d3 = (temp == -1) ? d3 : temp;
+
+    temp = range_read_distance(IR4);
+    d4 = (temp == -1) ? d4 : temp;
+
+    temp = range_read_distance(IR5);
+    d5 = (temp == -1) ? d5 : temp;
+
+    // update state based on rangefinder input
+    if (d2 < IR2_DANGER)    // avoid frontal collision by turning in place
+	state = SPIN;
+    /* nowhere to turn, so don't
+     * will probably need to turn around soon, but not yet
+     */
+    else if (d1 < IR13_DANGER && d3 < IR13_DANGER)
+	state = FORWARD;
+    // avoid left-side collision by turning right
+    else if (d1 < IR13_DANGER || d5 < IR45_DANGER)
+	state = RIGHT;
+    // avoid right-side collision by turning left
+    else if (d3 < IR13_DANGER || d4 < IR45_DANGER)
+	state = LEFT;
+    else if (d2 < IR2_INTEREST)	// should turn to avoid obstacle up ahead
+    {
+	if (d3 >= d1)	// more room on right
+	    state = RIGHT;
+	else	// more room on left
+	    state = LEFT;
+    }
+    else    // no obstacles close by, so keep going straight
+	state = FORWARD;
+
+    /* Debugging via USB output */
+    usb_puts("IR1: ");
+    usb_puti(d1);
+    usb_puts(" IR2: ");
+    usb_puti(d2);
+    usb_puts(" IR3: ");
+    usb_puti(d3);
+    usb_puts(" IR4: ");
+    usb_puti(d4);
+    usb_puts(" IR5: ");
+    usb_puti(d5);
+    usb_puts("\n\r");
+
+    evaluate_state();	// take action on updated state
+}
+
+// behave according to current state
+// TODO: adjust speeds after testing
+void evaluate_state(void)
+{
+    switch (state)
+    {
+	case FORWARD:
+	    orb_set_color(GREEN);
+	    move(FULL_SPD, 0);	// drive straight forward
+	    break;
+	case LEFT:
+	    orbs_set_color(GREEN, YELLOW);  // green on left side
+	    move(HALF_SPD, NRML_TURN);	// drive forward and to the left
+	    break;
+	case RIGHT:
+	    orbs_set_color(YELLOW, GREEN);  // green on right side
+	    move(HALF_SPD, -NRML_TURN);	// drive forward and to the right
+	    break;
+	case SPIN:
+	    orb_set_color(RED);
+	    move(0, NRML_TURN);	// spin CCW without traveling
+	    break;
+	default:    // should never reach this
+	    orb_set_color(PURPLE);
+	    move(0, 0);	// stop completely
+    }
+}
+
Index: branches/scout/projects/mapping/auto/Makefile
===================================================================
--- branches/scout/projects/mapping/auto/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/auto/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+#######Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = robot_main
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+CFLAGS += -v
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/mapping/auto/smart_run_around_fsm.h
===================================================================
--- branches/scout/projects/mapping/auto/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/projects/mapping/auto/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,40 @@
+// smart_run_around_fsm.h
+// required to run Smart Run Around functions
+// declare functions and global variables
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+// states (robot shall never move in reverse)
+// these constants may be changed (but can't overlap) without effect
+#define FORWARD 0   // drive straight forward
+#define LEFT 1	// drive forward and to the left
+#define RIGHT 2	// drive forward and to the right
+#define SPIN 3	// turn without traveling (last resort if otherwise stuck)
+
+/* conditions on rangefinders (in mm) informing state changes
+ * distances are 50 greater than in real life, cannot be smaller than 100
+ * naming format: SENSOR_URGENCY
+ * changing these constants affects robot operation
+ */
+#define IR2_DANGER 150	// 10 cm: dangerously close to front
+#define IR13_DANGER 200 // 15 cm: dangerously close to sides (looking ahead)
+#define IR2_INTEREST 300    // 25 cm: notably close to front
+#define IR45_DANGER 150	// dangerously close to side (looking sideways)
+
+uint8_t state;	// current state of FSM: FORWARD, LEFT, RIGHT, SPIN
+int16_t d1, d2, d3, d4, d5; // values returned by rangefinders
+
+// initialize rangefinders and global variables
+void run_around_init(void);
+
+/* evaluate rangefinder input and update state
+ * call this function as often as possible to avoid collisions
+ */
+void run_around_FSM(void);
+
+// behave according to current state
+void evaluate_state(void);
+
+#endif
+
Index: branches/scout/projects/mapping/auto/odometry.c
===================================================================
--- branches/scout/projects/mapping/auto/odometry.c	(nonexistent)
+++ branches/scout/projects/mapping/auto/odometry.c	(revision 1346)
@@ -0,0 +1 @@
+link ../odometry/odometry.c
\ No newline at end of file

Property changes on: branches/scout/projects/mapping/auto/odometry.c
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/mapping/auto/odometry.h
===================================================================
--- branches/scout/projects/mapping/auto/odometry.h	(nonexistent)
+++ branches/scout/projects/mapping/auto/odometry.h	(revision 1346)
@@ -0,0 +1 @@
+link ../odometry/odometry.h
\ No newline at end of file

Property changes on: branches/scout/projects/mapping/auto/odometry.h
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/mapping/auto/multi_robot_behavior.txt
===================================================================
--- branches/scout/projects/mapping/auto/multi_robot_behavior.txt	(nonexistent)
+++ branches/scout/projects/mapping/auto/multi_robot_behavior.txt	(revision 1346)
@@ -0,0 +1,58 @@
+/**
+
+Optimal Behavior for Mapping
+
+Desired Properties
+- Overlapping maps
+- Shared origin
+ * robots must know where they are in relation to each other
+
+
+
+Actual Behavior
+- make BOM contact with another robot
+ * estimated distance reading would help
+- try to follow another robot
+ * could parallel path but moved over slightly 
+   to give a wider view while also corroborating data
+ * then treat as leader/follower in actions
+ * get groups to link up with each other and then separate to 
+   establish meeting point between maps
+  
+  
+  
+  
+  
+Thoughts on improving overall efficiency
+----------------------------------------
+Robot:
+- use a shorter polling interval for rangefinders, 
+  then average readings between wireless polling intervals
+- if the rangefinder value = MAX, then mark it as -1
+  so the program doesn't draw that point
+- try bursts of data every second or farther apart
+  containing multiple data points
+ * this reduces stress on wireless timing and allows for 
+   overhead created by token ring
+- one solution to the 'master origin' problem for multiple robots
+  is to start each robot at the same point with the same orientation
+ * this isn't very useful and takes effort, but it works
+ * could also establish an initial offset in robots,
+   but accurate initial placement would still be an issue
+  
+Server:
+- if the rangefinder value = MAX or -1, don't use that point
+  or set it to infinity
+- if robots have linked as leader/follower pair, use
+  one point of origin for both robots
+- when two or more robots meet, set one robot as the 
+  master coordinates, and modify all other robots to use
+  those master coordinates
+ * easiest is to start a new map with one robot at the origin and
+   all others starting based off that robot
+ * backdating the coordinate change would be better
+ * using both approaches is likely most accurate
+
+
+  
+*/
\ No newline at end of file
Index: branches/scout/projects/mapping/auto/robotize_lib.sh
===================================================================
--- branches/scout/projects/mapping/auto/robotize_lib.sh	(nonexistent)
+++ branches/scout/projects/mapping/auto/robotize_lib.sh	(revision 1346)
@@ -0,0 +1,5 @@
+cd ../../libwireless/lib;
+make clean;
+make all;
+make publish;
+cd ../../slam/computer;
Index: branches/scout/projects/mapping/auto
===================================================================
--- branches/scout/projects/mapping/auto	(nonexistent)
+++ branches/scout/projects/mapping/auto	(revision 1346)

Property changes on: branches/scout/projects/mapping/auto
___________________________________________________________________
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: branches/scout/projects/mapping/new_run_around/smart_run_around_fsm.c
===================================================================
--- branches/scout/projects/mapping/new_run_around/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/projects/mapping/new_run_around/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,109 @@
+#include <dragonfly_lib.h>
+#include "smart_run_around_fsm.h"
+
+void run_around_init(void)
+{
+  range_init();
+  orb_init();
+ 
+  state = FORWARD;  // start out moving forward
+  // initialize rangefinder values to 0
+  d1 = 0, d2 = 0, d3 = 0, d4 = 0, d5 = 0;
+}
+
+/* evaluate rangefinder input and update state
+ * call this function as often as possible to avoid collisions
+ */
+void run_around_FSM(void)
+{
+    /* TODO: find a better way to handle rangefinder input
+     * robot should deal with -1s (obstacles too close or too far to detect)
+     * in a way that keeps it from crashing or driving in circles
+     */
+    // do not update distances when rangefinders return -1
+    // otherwise update distances with new rangefinder values
+    int16_t temp;
+
+    temp = range_read_distance(IR1);
+    d1 = (temp == -1) ? d1 : temp;
+
+    temp = range_read_distance(IR2);
+    d2 = (temp == -1) ? d2 : temp;
+
+    temp = range_read_distance(IR3);
+    d3 = (temp == -1) ? d3 : temp;
+
+    temp = range_read_distance(IR4);
+    d4 = (temp == -1) ? d4 : temp;
+
+    temp = range_read_distance(IR5);
+    d5 = (temp == -1) ? d5 : temp;
+
+    // update state based on rangefinder input
+    if (d2 < IR2_DANGER)    // avoid frontal collision by turning in place
+	state = SPIN;
+    /* nowhere to turn, so don't
+     * will probably need to turn around soon, but not yet
+     */
+    else if (d1 < IR13_DANGER && d3 < IR13_DANGER)
+	state = FORWARD;
+    // avoid left-side collision by turning right
+    else if (d1 < IR13_DANGER || d5 < IR45_DANGER)
+	state = RIGHT;
+    // avoid right-side collision by turning left
+    else if (d3 < IR13_DANGER || d4 < IR45_DANGER)
+	state = LEFT;
+    else if (d2 < IR2_INTEREST)	// should turn to avoid obstacle up ahead
+    {
+	if (d3 >= d1)	// more room on right
+	    state = RIGHT;
+	else	// more room on left
+	    state = LEFT;
+    }
+    else    // no obstacles close by, so keep going straight
+	state = FORWARD;
+
+    /* Debugging via USB output */
+    usb_puts("IR1: ");
+    usb_puti(d1);
+    usb_puts(" IR2: ");
+    usb_puti(d2);
+    usb_puts(" IR3: ");
+    usb_puti(d3);
+    usb_puts(" IR4: ");
+    usb_puti(d4);
+    usb_puts(" IR5: ");
+    usb_puti(d5);
+    usb_puts("\n\r");
+
+    evaluate_state();	// take action on updated state
+}
+
+// behave according to current state
+// TODO: adjust speeds after testing
+void evaluate_state(void)
+{
+    switch (state)
+    {
+	case FORWARD:
+	    orb_set_color(GREEN);
+	    move(FULL_SPD, 0);	// drive straight forward
+	    break;
+	case LEFT:
+	    orbs_set_color(GREEN, YELLOW);  // green on left side
+	    move(HALF_SPD, NRML_TURN);	// drive forward and to the left
+	    break;
+	case RIGHT:
+	    orbs_set_color(YELLOW, GREEN);  // green on right side
+	    move(HALF_SPD, -NRML_TURN);	// drive forward and to the right
+	    break;
+	case SPIN:
+	    orb_set_color(RED);
+	    move(0, NRML_TURN);	// spin CCW without traveling
+	    break;
+	default:    // should never reach this
+	    orb_set_color(PURPLE);
+	    move(0, 0);	// stop completely
+    }
+}
+
Index: branches/scout/projects/mapping/new_run_around/smart_run_around_fsm.h
===================================================================
--- branches/scout/projects/mapping/new_run_around/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/projects/mapping/new_run_around/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,40 @@
+// smart_run_around_fsm.h
+// required to run Smart Run Around functions
+// declare functions and global variables
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+// states (robot shall never move in reverse)
+// these constants may be changed (but can't overlap) without effect
+#define FORWARD 0   // drive straight forward
+#define LEFT 1	// drive forward and to the left
+#define RIGHT 2	// drive forward and to the right
+#define SPIN 3	// turn without traveling (last resort if otherwise stuck)
+
+/* conditions on rangefinders (in mm) informing state changes
+ * distances are 50 greater than in real life, cannot be smaller than 100
+ * naming format: SENSOR_URGENCY
+ * changing these constants affects robot operation
+ */
+#define IR2_DANGER 150	// 10 cm: dangerously close to front
+#define IR13_DANGER 200 // 15 cm: dangerously close to sides (looking ahead)
+#define IR2_INTEREST 300    // 25 cm: notably close to front
+#define IR45_DANGER 150	// dangerously close to side (looking sideways)
+
+uint8_t state;	// current state of FSM: FORWARD, LEFT, RIGHT, SPIN
+int16_t d1, d2, d3, d4, d5; // values returned by rangefinders
+
+// initialize rangefinders and global variables
+void run_around_init(void);
+
+/* evaluate rangefinder input and update state
+ * call this function as often as possible to avoid collisions
+ */
+void run_around_FSM(void);
+
+// behave according to current state
+void evaluate_state(void);
+
+#endif
+
Index: branches/scout/projects/mapping/new_run_around/main.c
===================================================================
--- branches/scout/projects/mapping/new_run_around/main.c	(nonexistent)
+++ branches/scout/projects/mapping/new_run_around/main.c	(revision 1346)
@@ -0,0 +1,13 @@
+#include <dragonfly_lib.h>
+#include "smart_run_around_fsm.h"
+
+int main(void) {
+    dragonfly_init(ALL_ON);
+    orb_init();
+    run_around_init();
+
+    while (1)
+        run_around_FSM();
+
+    return 0;
+}
Index: branches/scout/projects/mapping/new_run_around/Makefile
===================================================================
--- branches/scout/projects/mapping/new_run_around/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/new_run_around/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = robot_main
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s | grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu89
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+CFLAGS += -v
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/mapping/drive/robot_main.c
===================================================================
--- branches/scout/projects/mapping/drive/robot_main.c	(nonexistent)
+++ branches/scout/projects/mapping/drive/robot_main.c	(revision 1346)
@@ -0,0 +1,158 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <encoders.h>
+#include "odometry.h"
+
+#define POLLING_INTERVAL 50    //interval in ms to get sensor data
+#define MAP 1	// packet group for sending data points
+#define POINT_ODO 2
+
+#define WL_CNTL_GROUP 4
+
+#define CNTL_FORWARD 0
+#define CNTL_BACK    1
+#define CNTL_LEFT    2
+#define CNTL_RIGHT   3
+#define CNTL_LEFT_CURVE 4
+#define CNTL_RIGHT_CURVE 5
+#define CNTL_STOP    6
+#define CNTL_VEL_UP  7
+#define CNTL_VEL_DOWN 8
+
+int state;
+int velocity;
+char buf[100];
+
+void packet_receive (char type, int source, unsigned char* packet, int length);
+void set_motion (void);
+
+PacketGroupHandler packetHandler = {WL_CNTL_GROUP, NULL, NULL, &packet_receive, NULL};
+
+int main(void)
+{
+    /* initialize components and join the token ring */
+    dragonfly_init(ALL_ON);
+    odometry_init();
+    orb_init();
+    wl_init();
+    wl_set_channel(0xE);
+    wl_register_packet_group(&packetHandler);
+    
+    velocity = 190;
+    state = CNTL_STOP;
+
+    int x, y; // use when sending odometry data
+    double theta;
+
+    int store[9];
+    char *send;   // for transmission
+
+    while(1)
+    {
+	wl_do();
+	delay_ms(POLLING_INTERVAL);	/* until it's time to grab map data */
+	x = odometry_dx(); // use when sending odometry data
+	y = odometry_dy();
+	theta = odometry_angle();
+	store[0] = x;
+	store[1] = y;
+	*((double*)(store + 2)) = theta;
+	store[4] = range_read_distance(IR1);	// IR1 range
+	store[5] = range_read_distance(IR2);	// IR2 range
+	store[6] = range_read_distance(IR3);	// IR3 range
+	store[7] = range_read_distance(IR4);	// IR4 range
+	store[8] = range_read_distance(IR5);	// IR5 range
+	sprintf( buf, "%d %d %f %d %d %d %d %d\n", store[0], store[1],
+	    *((double *)(store+2)), store[4], store[5], store[6],
+	    store[7], store[8] );
+	usb_puts(buf);
+
+	send = (char*) store;
+
+	wl_send_global_packet(MAP, POINT_ODO, send, 18, 0);
+    }
+
+    wl_terminate();
+    return 0;
+}
+
+void packet_receive (char type, int source, unsigned char* packet, int length) {
+    sprintf(buf, "received packet: %d\n", type);
+    usb_puts(buf);
+    switch (type) {
+        case CNTL_FORWARD:
+            state = CNTL_FORWARD;
+            break;
+        case CNTL_BACK:
+            state = CNTL_BACK;
+            break;
+        case CNTL_LEFT:
+            state = CNTL_LEFT;
+            break;
+        case CNTL_RIGHT:
+            state = CNTL_RIGHT;
+            break;
+        case CNTL_LEFT_CURVE:
+            state = CNTL_LEFT_CURVE;
+            break;
+        case CNTL_RIGHT_CURVE:
+            state = CNTL_RIGHT_CURVE;
+            break;
+        case CNTL_STOP:
+            state = CNTL_STOP;
+            break;
+        case CNTL_VEL_UP:
+            if (velocity > 250)
+                velocity = 250;
+            else
+                velocity += 5;
+            break;
+        case CNTL_VEL_DOWN:
+            velocity -= 5;
+            if (velocity < 150)
+                velocity = 150;
+            break;
+        default:
+            state = CNTL_STOP;
+            break;
+    }
+    set_motion();
+}
+
+void set_motion (void) {
+    switch (state) {
+        case CNTL_FORWARD:
+            orb_set_color(GREEN);
+            move(velocity, 0);
+            break;
+        case CNTL_BACK:
+            orb_set_color(BLUE);
+            move(-velocity, 0);
+            break;
+        case CNTL_LEFT:
+            orb_set_color(ORANGE);
+            motor1_set(0, velocity);
+            motor2_set(1, velocity);
+            break;
+        case CNTL_RIGHT:
+            orb_set_color(YELLOW);
+            motor1_set(1, velocity);
+            motor2_set(0, velocity);
+            break;
+        case CNTL_LEFT_CURVE:
+            orb_set_color(MAGENTA);
+            motor1_set(1, 150);
+            motor2_set(1, velocity);
+            break;
+        case CNTL_RIGHT_CURVE:
+            orb_set_color(CYAN);
+            motor1_set(1, velocity);
+            motor2_set(1, 150);
+            break;
+        case CNTL_STOP:
+            orb_set_color(RED);
+            move(0, 0);
+            break;
+    }
+}
+
Index: branches/scout/projects/mapping/drive/odometry.c
===================================================================
--- branches/scout/projects/mapping/drive/odometry.c	(nonexistent)
+++ branches/scout/projects/mapping/drive/odometry.c	(revision 1346)
@@ -0,0 +1 @@
+link ../odometry/odometry.c
\ No newline at end of file

Property changes on: branches/scout/projects/mapping/drive/odometry.c
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/mapping/drive/odometry.h
===================================================================
--- branches/scout/projects/mapping/drive/odometry.h	(nonexistent)
+++ branches/scout/projects/mapping/drive/odometry.h	(revision 1346)
@@ -0,0 +1 @@
+link ../odometry/odometry.h
\ No newline at end of file

Property changes on: branches/scout/projects/mapping/drive/odometry.h
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/mapping/drive/multi_robot_behavior.txt
===================================================================
--- branches/scout/projects/mapping/drive/multi_robot_behavior.txt	(nonexistent)
+++ branches/scout/projects/mapping/drive/multi_robot_behavior.txt	(revision 1346)
@@ -0,0 +1,58 @@
+/**
+
+Optimal Behavior for Mapping
+
+Desired Properties
+- Overlapping maps
+- Shared origin
+ * robots must know where they are in relation to each other
+
+
+
+Actual Behavior
+- make BOM contact with another robot
+ * estimated distance reading would help
+- try to follow another robot
+ * could parallel path but moved over slightly 
+   to give a wider view while also corroborating data
+ * then treat as leader/follower in actions
+ * get groups to link up with each other and then separate to 
+   establish meeting point between maps
+  
+  
+  
+  
+  
+Thoughts on improving overall efficiency
+----------------------------------------
+Robot:
+- use a shorter polling interval for rangefinders, 
+  then average readings between wireless polling intervals
+- if the rangefinder value = MAX, then mark it as -1
+  so the program doesn't draw that point
+- try bursts of data every second or farther apart
+  containing multiple data points
+ * this reduces stress on wireless timing and allows for 
+   overhead created by token ring
+- one solution to the 'master origin' problem for multiple robots
+  is to start each robot at the same point with the same orientation
+ * this isn't very useful and takes effort, but it works
+ * could also establish an initial offset in robots,
+   but accurate initial placement would still be an issue
+  
+Server:
+- if the rangefinder value = MAX or -1, don't use that point
+  or set it to infinity
+- if robots have linked as leader/follower pair, use
+  one point of origin for both robots
+- when two or more robots meet, set one robot as the 
+  master coordinates, and modify all other robots to use
+  those master coordinates
+ * easiest is to start a new map with one robot at the origin and
+   all others starting based off that robot
+ * backdating the coordinate change would be better
+ * using both approaches is likely most accurate
+
+
+  
+*/
\ No newline at end of file
Index: branches/scout/projects/mapping/drive/Makefile
===================================================================
--- branches/scout/projects/mapping/drive/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/drive/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = robot_main
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/mapping/drive/smart_run_around_fsm.c
===================================================================
--- branches/scout/projects/mapping/drive/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/projects/mapping/drive/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,135 @@
+#include "dragonfly_lib.h"
+#include "smart_run_around_fsm.h"
+
+/*A simple behavior for navigating in an environment, i.e. avoiding walls and getting stuck.
+Could be better at not getting stuck.
+
+Latest revision only has two accessible states: move and reverse.
+*/
+
+
+void run_around_init(void)
+{
+/*  range_init();
+  analog_init(ADC_START);
+  motors_init();
+  orb_init();
+  orb_enable();
+  usb_init();
+*/ 
+  /*Start in the default state, MOVING*/ 
+  avoid_state=MOVING;
+  /*Set timers to their maximum values.*/
+  crazy_count=CRAZY_MAX;
+  backup_count=0; 
+  pControl=0;
+  
+  /*Initialize distances to zero.*/ 
+  d1=0; d2=0; d3=0; d4=0; d5=0;
+  
+  orb_set_color(GREEN);
+
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void run_around_FSM(void) {
+  /*Default to moving.*/ 
+  avoid_state=MOVING;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1=(temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /*If the crazy count is in it's >>3 range, it acts crazy.*/
+  if(crazy_count<=(CRAZY_MAX>>3))
+  {
+    avoid_state=CRAZY;
+    crazy_count--;
+    
+    if(crazy_count<0) crazy_count=CRAZY_MAX;
+    
+    evaluate_state();
+    return;
+  }
+  
+  //Checks the forward distance to see if it should back up, if so...state backwards.
+  if((d2!=-1)&&(d2 >150)){
+      backup_count=BACKUP_MAX;
+      avoid_state=BACKWARDS;
+      evaluate_state();
+      return;
+  }
+ 
+  if(backup_count<BACKUP_MAX){
+    avoid_state=BACKWARDS; 
+    if(backup_count<0)
+      backup_count=BACKUP_MAX;
+    evaluate_state();
+    return;
+  }
+  
+  /*Should evaluate an expression from -255 to 255 to pass to move.*/
+  pControl= ((d3-d1) + (d4-d5)) >> TURN_CONSTANT;
+  
+  if(pControl>PCONTROL_CRAZY_LIMIT || pControl<-PCONTROL_CRAZY_LIMIT) crazy_count--;
+  /*i.e. if you really want to turn for an extended period of time...you're probably stuck.*/
+
+  /*Debug stuff:*/
+  /*usb_puts("pControl evaluating: ");
+  usb_puti(pControl);
+  usb_puts("\n\r");
+  usb_puts("IR1: ");
+  usb_puti(d1);
+  usb_puts(" IR2: ");
+  usb_puti(d2);
+  usb_puts(" IR3: ");
+  usb_puti(d3);
+  usb_puts(" IR4: ");
+  usb_puti(d4);
+  usb_puts(" IR5: ");
+  usb_puti(d5);
+  usb_puts("\n\r");*/
+  
+  evaluate_state();
+}
+
+
+//Acts on state change.
+void evaluate_state(){
+    switch(avoid_state){
+    case(MOVING): orb_set_color(GREEN);
+      move(STRAIT_SPEED,pControl);
+      break;
+    
+    case(BACKWARDS): orb_set_color(ORANGE);
+      move(-STRAIT_SPEED,0);
+      break;
+      
+    case(CRAZY): orb_set_color(RED);
+      /*TODO: Implement a crazy state.*/
+      move(STRAIT_SPEED,pControl);
+      break;
+      
+    default:
+      /*Should never get here, go strait.*/
+      move(100,0); orb_set_color(BLUE);
+      break;
+  }
+}
+
+
Index: branches/scout/projects/mapping/drive/data_response.c
===================================================================
--- branches/scout/projects/mapping/drive/data_response.c	(nonexistent)
+++ branches/scout/projects/mapping/drive/data_response.c	(revision 1346)
@@ -0,0 +1,98 @@
+#include "dragonfly_lib.h"
+#include "data_response.h"
+#include "wl_token_ring.h"
+#include "wireless.h"
+#include "serial.h"
+
+PacketGroupHandler pgh;
+
+void handle_receive(char type, int source, unsigned char* packet, int length);
+int generate_bom_packet(char** buf);
+int generate_IR_packet(char** buf);
+
+
+/** 
+* @brief The only function that should be called by user code.
+  Prepares the robot to receive and respond to data requests.
+*/
+void data_response_init(void){
+  //usb_init();
+  //usb_puts("USB initialized!\n\r");
+  range_init();
+  pgh.groupCode=DATA_REQUEST_GROUP; 
+  pgh.timeout_handler = NULL;
+  pgh.handle_response = NULL;
+  pgh.handle_receive = handle_receive;
+  pgh.unregister = NULL;
+  wl_register_packet_group(&pgh);
+  //usb_puts("Packet Group Registered!\n\r");
+}
+
+
+void handle_receive(char type, int source, unsigned char* packet, int length){
+  
+  char buf[MAX_PACKET_LENGTH]; 
+  int size;
+  int i=0;
+  short int robot_id, ir_value; 
+  char ranges[] = {IR1,IR2,IR3,IR4,IR5}; 
+  
+  switch(type){
+  case BOM_TYPE:
+    
+    wl_token_iterator_begin();
+    while(wl_token_iterator_has_next() && i<=96){
+      robot_id = wl_token_iterator_next();
+      buf[i++] = (char)((robot_id>>8) & 255);
+      buf[i++] = (char)(robot_id & 255);
+      buf[i++] = (char)(wl_token_get_my_sensor_reading(robot_id));
+    }
+    
+    //i is one greater than the index of the last byte... the size.
+    wl_send_robot_to_robot_global_packet(DATA_REQUEST_GROUP,BOM_TYPE,buf,i,source,0);
+    break;
+  
+  case IR_TYPE:
+
+    for(i=0;i<5;i++){
+      ir_value = (short)range_read_distance(ranges[i]);
+      buf[2*i] = (char)((ir_value>>8)&255);   
+      buf[2*i+1] = (ir_value&255);   
+    }
+    size = 10;
+
+    //usb_puts("Packet Contents: ");
+    /*for(i = 0; i<size;i++){
+        //usb_puti(buf[i]);
+        usb_putc(' ');
+    }*/
+    wl_send_robot_to_robot_global_packet(DATA_REQUEST_GROUP,IR_TYPE,buf,size,source,0);
+  
+    break; 
+  
+  case ENCODER_TYPE:
+    break; 
+    //Not yet supported.
+  
+  case ALL_TYPE:
+    for(i=0;i<5;i++){
+      ir_value = (short)range_read_distance(ranges[i]);
+      buf[2*i] = (char)((ir_value>>8)&255);   
+      buf[2*i+1] = (ir_value&255);   
+    } //Buf 0...9 filled.
+
+    //Tack on the Encoder data... 
+    //Then BOM: 
+    wl_token_iterator_begin();
+    while(wl_token_iterator_has_next() && i<=96){
+      robot_id = wl_token_iterator_next();
+      buf[i++] = (char)((robot_id>>8) & 255);
+      buf[i++] = (char)(robot_id & 255);
+      buf[i++] = (char)(wl_token_get_my_sensor_reading(robot_id));
+    }
+    wl_send_robot_to_robot_global_packet(DATA_REQUEST_GROUP,ALL_TYPE,buf,size,source,0);
+    break;
+  }
+}
+
+
Index: branches/scout/projects/mapping/drive/data_response.h
===================================================================
--- branches/scout/projects/mapping/drive/data_response.h	(nonexistent)
+++ branches/scout/projects/mapping/drive/data_response.h	(revision 1346)
@@ -0,0 +1,16 @@
+#ifndef _DATA_RESPONSE_H
+#define _DATA_REQUESTS_H
+
+#define DATA_REQUEST_GROUP 7
+#define BOM_TYPE 0
+#define IR_TYPE 1
+#define ENCODER_TYPE 2
+#define ALL_TYPE 3
+
+#define MAX_PACKET_LENGTH 100
+
+/* This requires the wireless library
+and the token ring to already be initialized.*/
+void data_response_init(void);
+
+#endif
Index: branches/scout/projects/mapping/drive/robotize_lib.sh
===================================================================
--- branches/scout/projects/mapping/drive/robotize_lib.sh	(nonexistent)
+++ branches/scout/projects/mapping/drive/robotize_lib.sh	(revision 1346)
@@ -0,0 +1,5 @@
+cd ../../libwireless/lib;
+make clean;
+make all;
+make publish;
+cd ../../slam/computer;
Index: branches/scout/projects/mapping/drive/smart_run_around_fsm.h
===================================================================
--- branches/scout/projects/mapping/drive/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/projects/mapping/drive/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,33 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+//The States: 
+#define MOVING 12           //Move strait.
+#define BACKWARDS 15        //Move backwards. (Front close to wall.)
+#define STOP 16             //Stop.  The default state, (Something broke).
+#define CRAZY 40            //Erratic behavior that occurs more often when the robot is frequently trying to turn. (i.e. may be stuck.)
+
+#define LEFT 37             //Left
+#define RIGHT 39            //Right
+
+#define BACKUP_MAX 15
+#define CRAZY_MAX 200       //The number of counts between "crazy moments"
+#define STRAIT_SPEED 200    //The speed when going strait or backing up.
+#define TURN_CONSTANT 2
+#define PCONTROL_CRAZY_LIMIT 80
+
+int avoid_state;    /*State machine variable.*/
+int crazy_count;    /*Counter for a 'get unstuck' behavior.*/
+
+int backup_count;	/*Counter for backup duration.*/
+int pControl;		/*Proportional control variable, determines turn direction.*/
+int d1,d2,d3,d4,d5;	/*The five distances taken in by IR.*/
+
+void run_around_init(void);
+void run_around_FSM(void);
+void evaluate_state(void);
+
+#endif
Index: branches/scout/projects/mapping/drive
===================================================================
--- branches/scout/projects/mapping/drive	(nonexistent)
+++ branches/scout/projects/mapping/drive	(revision 1346)

Property changes on: branches/scout/projects/mapping/drive
___________________________________________________________________
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: branches/scout/projects/mapping/test/Makefile
===================================================================
--- branches/scout/projects/mapping/test/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/test/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/cu.usbserial-A4001hAA
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/mapping/test/monitor_test.c
===================================================================
--- branches/scout/projects/mapping/test/monitor_test.c	(nonexistent)
+++ branches/scout/projects/mapping/test/monitor_test.c	(revision 1346)
@@ -0,0 +1,7 @@
+#include <dragonfly_lib.h>
+void main(void){
+  usb_init(); 
+  while(1){
+    usb_puts("hey bro\n");
+  }
+}
Index: branches/scout/projects/mapping/odometry/odometry.c
===================================================================
--- branches/scout/projects/mapping/odometry/odometry.c	(nonexistent)
+++ branches/scout/projects/mapping/odometry/odometry.c	(revision 1346)
@@ -0,0 +1,175 @@
+#include "odometry.h"
+#include <encoders.h>
+#include <move.h>
+#include <math.h>
+#include <avr/interrupt.h>
+#include <dragonfly_lib.h>
+
+void modify_velocity(void);
+
+
+long lround(double d);
+
+char control_velocity = 0;
+int encoder_ltm1, encoder_rtm1, move_speed, move_angle;
+
+//Measure mm displacement in x and y from starting position. (+x:theta=0 +y:theta=M_PI/2)
+long diff_x,diff_y, velocity, target_velocity, target_angular_velocity;
+
+//Measures radian angle displacement from starting position. (initially 0)
+double angle;
+
+/**
+ * Retrieve the estimated x position. [mm]
+ */
+long odometry_dx(void){
+	return diff_x;
+}
+
+/**
+ * Retrieve the estimated y position. [mm]
+ */
+long odometry_dy(void){
+	return diff_y;
+}
+
+/**
+ * Retrieve the estimated angle [radians]
+ */
+double odometry_angle(void){
+	return angle;
+}
+/**
+ * Retrieve the estimated velocity [mm / s]
+ */
+long odometry_velocity(void){
+	return velocity;
+}
+
+void odometry_set_velocity(long t_velocity, double t_angular_velocity, int start_speed, int start_angle){
+	target_velocity = t_velocity;	
+	target_angular_velocity = t_angular_velocity;
+	move_angle = start_angle;
+	move_speed = start_speed;
+	control_velocity = 1;
+}
+
+/**
+ * Initializes odometry to run on timer 2.
+ * Also resets all values so that the center of the robot is 
+ * considered to be at the origin facing the x direction.
+ */
+void odometry_init(void){
+	
+	encoders_init();
+	
+	delay_ms(100);
+
+	odometry_reset();
+
+	
+	//CTC Mode. CLK / 1024
+	TCCR2 = 0; // (Fully disconnected)
+	TCCR2 = _BV(WGM21) | _BV(CS22) | _BV(CS20); //CLK/1024 , CTC Mode.
+
+	TIMSK |= _BV(OCIE2);
+
+	OCR2 = ODOMETRY_CLK;
+}
+/**
+ * Resets all values so that the center of the robot is 
+ * considered to be at the origin facing the x direction.
+ */
+void odometry_reset(void){
+	diff_x = 0;
+	diff_y = 0;
+	encoder_ltm1 = encoder_read(LEFT);
+	encoder_rtm1 = encoder_read(RIGHT);
+	angle = 0.0;
+}
+
+
+void odometry_run(void){
+	//Angle swept through in a time step CCW-
+	double theta, rl, dc;
+	long dr,dl;
+	char buf[100];
+	
+	//Get the change in wheel positions
+	{	
+		int encoder_right = encoder_read(RIGHT);	
+		int encoder_left = encoder_read(LEFT);	
+	
+		dl = encoder_left - encoder_ltm1;
+		dr = encoder_right - encoder_rtm1;
+		
+		//No motion.
+		if(dl == 0 && dr == 0){ 
+			if(control_velocity) modify_velocity();
+			return;
+		}
+
+		encoder_ltm1 = encoder_left;
+		encoder_rtm1 = encoder_right;
+	
+		// Try to avoid over/underflow.
+		dl = dl > 512 ? dl - 1024 :dl;
+		dl = dl < -512 ? dl + 1024 :dl;
+		dr = dr > 512 ? dr - 1024 :dr;
+		dr = dr < -512 ? dr + 1024 :dr;
+	
+		//Convert "clicks" to um
+		dl *= CLICK_DISTANCE_UM; //um
+		dr *= CLICK_DISTANCE_UM;
+	}
+	
+
+	if(dl == dr){
+		diff_x += lround(dl*cos(angle)/1000.0); //mm
+		diff_y += lround(dl*sin(angle)/1000.0); //mm
+		velocity = lround((dl * 1000.0)/(ODOMETRY_CLK*TIME_SCALE)); //um / ms = mm/s
+		if(control_velocity) modify_velocity();
+		return;
+	}
+	
+	//Call the left wheel 0, clockwise positive.
+	rl = ((double)(ROBOT_WIDTH_UM*dl))/((double)(dl - dr)); //um
+	theta = ((double)(dl - dr))/((double)ROBOT_WIDTH_UM);   //rad
+	
+	//Distance the center has traveled.
+	dc = (theta * (rl - ROBOT_WIDTH_UM)) / 2.0; //um
+	velocity = lround( dc * 1000 /(ODOMETRY_CLK*TIME_SCALE));
+	
+	//angle is necessarily CCW+, so subtract.
+	angle -= ANGLE_SCALE * theta; 
+	
+	//Change state variables. Probably lose all measurements less then a mm.
+	diff_x += lround((DISTANCE_SCALE * dc * cos(angle))/1000.0); //mm
+	diff_y += lround((DISTANCE_SCALE * dc * sin(angle))/1000.0); //mm
+
+	if(control_velocity) modify_velocity();
+}
+
+void modify_velocity(){
+	usb_puts("modify_velocity\n");
+    int diff = target_velocity - velocity;
+	if(diff > 0){
+		move_speed++;
+		move(move_speed,move_angle);
+	}
+	else if(diff < 0){
+		move_speed--;
+		move(move_speed,move_angle);
+	}
+}
+
+ISR(TIMER2_COMP_vect){
+	odometry_run(); 
+}
+
+long lround(double d){
+	double f = floor(d);
+	return (long)(d - f > 0.5 ? f + 1 : f);
+}
+
+
Index: branches/scout/projects/mapping/odometry/main.c
===================================================================
--- branches/scout/projects/mapping/odometry/main.c	(nonexistent)
+++ branches/scout/projects/mapping/odometry/main.c	(revision 1346)
@@ -0,0 +1,21 @@
+#include <dragonfly_lib.h>
+#include "odometry.h"
+#include <math.h>
+
+int main(void)
+{
+	dragonfly_init(ALL_ON);
+	odometry_init();
+	char buf[100];
+	move(180,0);
+	odometry_set_velocity(50,180,0);
+	while(1){
+		sprintf(buf,"X: %ld mm, Y: %ld mm, Theta: %lf rad Velocity: %ld mm/s\n\r", 
+				odometry_dx(), odometry_dy(), odometry_angle(), odometry_velocity());
+		usb_puts(buf);
+		delay_ms(500);
+	}
+	return 0;
+}
+
+
Index: branches/scout/projects/mapping/odometry/odometry.h
===================================================================
--- branches/scout/projects/mapping/odometry/odometry.h	(nonexistent)
+++ branches/scout/projects/mapping/odometry/odometry.h	(revision 1346)
@@ -0,0 +1,59 @@
+
+/**
+ * @file odometry.h
+ * @brief Code for estimating the robots pose.
+ * 
+ * Offers simple position and orientation information.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef __ODOMETRY_C__
+#define __ODOMETRY_C__
+
+/**
+ * @addtogroup odometry 
+ * @{
+ **/
+
+//Odometry resolution, *64 microseconds.
+#define ODOMETRY_CLK 255u 
+#define TIME_SCALE 64
+
+//Wheel = 2.613 in.  
+//Circumference = 208.508133 mm
+//Distance per encoder click (circumference / 1024)  = 203.621224 um.
+//Robot width = 5.3745 in. = 136.5123 mm
+
+#define ROBOT_WIDTH_UM 137000  //um
+#define CLICK_DISTANCE_UM 204 //um
+
+#define DISTANCE_SCALE 2.10526316 //Magic constant.
+#define ANGLE_SCALE 1.12823207 //Magic constant.
+
+/** @brief Retrieve the robots estimated x position*/
+long odometry_dx(void);
+
+/** @brief Retrieve the robots estimated y position*/
+long odometry_dy(void);
+
+/** @brief Retrieve the robots estimated orientation*/
+double odometry_angle(void);
+
+/** @brief Initialize odometry. MUST be called before 
+ * the other functions work.**/
+void odometry_init(void);
+
+/** @brief Reset position and orientation to the origin facing
+ * the x axis.*/
+void odometry_reset(void);
+
+/** @brief Report estimated velocity [mm/s].*/
+long odometry_velocity(void);
+
+void odometry_set_velocity(long velocity, double angular_velocity, 
+	int start_speed, int start_angle);
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/projects/mapping/odometry/Makefile
===================================================================
--- branches/scout/projects/mapping/odometry/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/odometry/Makefile	(revision 1346)
@@ -0,0 +1,519 @@
+########Update This Section########
+#
+#
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = main
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB =-lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+ifdef USE_WIRELESS
+LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@  
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/mapping/python/map.py
===================================================================
--- branches/scout/projects/mapping/python/map.py	(nonexistent)
+++ branches/scout/projects/mapping/python/map.py	(revision 1346)
@@ -0,0 +1,260 @@
+#!/usr/bin/env python
+
+from scipy import linalg, array
+from gtk import *
+from socket import *
+from struct import *
+import gobject
+import sys, pickle, pygtk, gtk, string, cairo, gobject, math, weakref
+from random import random
+
+#mine
+from model import model
+
+pi = 3.1415927
+
+#stolen from emily
+BOT_IR = [[4.5, 3.5], [7.5, 0], [4.5, -3.5], [-4, -3.5], [-4, 3.5]]
+ANGLE_IR = [[.78, .63], [1, 0], [0.78, -.63], [0, -1], [0,1]]
+
+#endmine
+
+class map_model(model):
+    def __init__(self):
+        self.eqn = []
+
+    def __setattr__(self,name,value):
+        self.__dict__[name] = value
+        self.changed()
+
+    def add_eqn(self, eqn):
+        self.eqn = [eqn] + self.eqn
+
+hostname = 'localhost'
+
+class Screen(gtk.DrawingArea):
+    __gsignals__ = { "expose-event" : "override" }
+    
+    def __init__ (self, socket):
+        gtk.DrawingArea.__init__(self)
+
+        self.xres, self.yres = (800,800)
+
+        self.set_size_request(self.xres, self.yres)
+
+        self.socket = socket
+        self.bots = [i for i in xrange(16)]
+        self.ir_pts = []
+
+        self.draw = map_model()
+        self.draw.bot = [[1,1,pi/2],0] # x y theta
+        self.draw.add_dependent(self.redraw)
+
+        self.scale_const = 50
+        self.xdisp = 400
+        self.ydisp = 400
+        self.nticks = 21
+        self.units = 10
+
+    def add_scale_button_ref(self, scale_button):
+        self.scale_button = scale_button
+
+
+    def redraw(self, eqn):
+        self.ir_scale = self.scale_button.get_value()
+        self.clear_area()
+        self.draw_bot()
+        self.draw_grid()
+        self.draw_ir_pts()
+        
+    def do_expose_event(self, event):
+        self.redraw(None)
+
+    def clear_area(self):
+        self.ctx = self.window.cairo_create()
+        self.ctx.rectangle(0,0,1000,1000)
+        self.ctx.set_source_rgb(1,1,1)
+        self.ctx.fill()
+        
+    def draw_ir_pts(self):
+        self.ctx = self.window.cairo_create()
+        self.ctx.new_path()
+        self.ctx.set_source_rgb(0,0,1)
+
+        for pt in self.ir_pts:
+            x,y = pt
+            self.ctx.move_to(x * self.ir_scale, y * self.ir_scale)
+            self.ctx.rel_line_to(2,2)
+            self.ctx.stroke()
+            
+
+    def draw_bot(self):
+        self.ctx = self.window.cairo_create()
+        self.ctx.new_path()
+        
+        tbot = self.draw.bot
+        print tbot
+        x, y, theta = tbot[:3]
+        y = -y #because we don't want to draw down more units
+        
+        #draw blob
+        self.ctx.set_source_rgb(0,1,0)
+        xscl = (self.xres - self.xdisp) / self.units
+        yscl = (self.yres - self.ydisp) / self.units
+
+        cx = x * xscl + self.xdisp
+        cy = y * yscl + self.ydisp
+        self.ctx.arc(cx, cy, 20, 0, 2*pi)
+        self.ctx.fill()
+
+        #draw "arrow"
+        self.ctx.set_source_rgb(0,0,1)
+        self.ctx.arc(cx,cy, 5, 0, 2*pi)
+        self.ctx.fill()
+        
+        self.ctx.move_to(cx,cy)
+        dx = 20 * math.cos(theta + 0.05)
+        dy = -20 * math.sin(theta + 0.05)
+        dx = int(dx)
+        dy = int(dy)
+        
+        self.ctx.rel_line_to(dx, dy)
+        self.ctx.stroke()
+
+    def draw_grid(self):
+
+        self.ctx.set_source_rgb(0,0,0)
+        self.ctx.new_path()
+        
+        #vertical
+        self.ctx.move_to(400,0)
+        self.ctx.rel_line_to(0,800)
+        self.ctx.stroke()
+
+        #vticks
+        self.ctx.move_to(400,0)
+        for i in range( self.nticks + 1 ):
+            self.ctx.rel_line_to(5,0)
+            self.ctx.stroke()
+            self.ctx.move_to(400, i * 800 / self.nticks)
+        
+        #horiz
+        self.ctx.move_to(0,400)
+        self.ctx.rel_line_to(800,0)
+        self.ctx.stroke()
+        
+        #hticks
+        self.ctx.move_to(0,400)
+        for i in range(self.nticks + 1):
+            self.ctx.rel_line_to(0,-5)
+            self.ctx.stroke()
+            self.ctx.move_to(i * 800 / self.nticks, 400)
+
+    def draw_graph(self, equations, n):
+        self.ctx = self.window.cairo_create()
+        self.ctx.set_source_rgb(0,0,0)
+        self.ctx.new_path()
+        
+        for equn in equations:
+            xmin, xmax = equn[-2],equn[-1]
+            eqn = equn[:-2]
+            dx = float(xmax - xmin) / n
+            x = xmin
+            y = 0
+            for i in range(len(eqn)):
+                y += eqn[-1 * i - 1] * ( x ** i)
+
+            self.ctx.move_to(self.x_disp + x * self.scale_const,400 - y * self.scale_const)
+            
+            for diffel in range(1,n+1):
+                x = xmin + diffel * dx
+                y = 0
+                for i in range(len(eqn)):
+                    y += eqn[-1 * i - 1] * ( x ** i)
+                self.ctx.line_to(self.x_disp + int(x * self.scale_const),400 - int(y * self.scale_const))
+                self.ctx.stroke()
+                self.ctx.move_to(self.x_disp + int(x * self.scale_const),400 - int(y * self.scale_const))
+
+    def receive_info(self):
+        
+        buf = self.socket.recv(100)
+        if (buf):
+            items = unpack('4c2hf5h',buf)
+            src = ord(items[0])
+            old = self.draw.bot #the info of bot src at prev iter
+            newx = items[4] / 30.0
+            newy = items[5] / 30.0
+            new = [newx, newy] + [items[i] for i in range(6,12)]     
+            
+            for ir_ind in range(5):
+                ir_reading = items[ir_ind + 7]
+                if ir_reading  != -1:
+                    vec = map(lambda y: ir_reading * y, ANGLE_IR[ir_ind])
+                    vec = map(lambda x,y: x+y, vec, BOT_IR[ir_ind])
+
+                    R = math.sqrt(vec[0]**2 + vec[1] ** 2)
+                    ttheta = math.atan2(vec[1], vec[0])
+                    ttheta += items[6]
+                    
+                    reading_x = (R * math.cos(ttheta)) + newx
+                    reading_y = (R * math.sin(ttheta)) + newy
+
+                    self.ir_pts.append([reading_x, reading_y])
+       
+
+            self.draw.bot = new
+        
+        return True
+
+
+def solve(lisvals):
+    p0y, p1y, m0y, m1y, x0, x1 = lisvals
+    A = array([[x0**3 , x0**2 , x0 , 1],
+               [x1**3 , x1**2 , x1 , 1],
+               [3 * x0**2 , 2 * x0 , 1 , 0],
+               [3 * x1**2 , 2 * x1 , 1 , 0]])
+    
+    B = array([p0y, p1y, m0y, m1y])
+    tarr = linalg.solve(A,B)
+    lis = []
+    for i in range(4):
+        lis.append(tarr[i])
+    return lis + [0,1]
+
+def main():
+    
+    window = gtk.Window()
+    window.connect("delete-event", gtk.main_quit)
+
+    sock = socket()
+    sock.connect((hostname, int(sys.argv[1])))
+    
+    mywidg = Screen(sock)
+
+    bigbox = gtk.HBox()
+    bigbox.pack_start(mywidg, True, True, 0)
+
+    buttonbox = gtk.VBox()
+    bigbox.pack_end(buttonbox, False, False, 0)
+
+    IRScale = gtk.ScaleButton(10, 0, 100, 10)
+    buttonbox.pack_start(IRScale, False, False, 0)
+
+    mywidg.add_scale_button_ref(IRScale)
+    
+    window.add(bigbox)
+    bigbox.show()
+    mywidg.show()
+    buttonbox.show()
+    IRScale.show()
+    window.show()
+
+    gobject.idle_add(mywidg.receive_info)
+    gtk.main()
+
+if __name__=='__main__':
+    if (len(sys.argv) < 2): #or not str.isdecimal(sys.argv[1])):
+        print("Usage: %s <portno>" % sys.argv[0])
+        sys.exit()
+
+    main()

Property changes on: branches/scout/projects/mapping/python/map.py
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/mapping/python/server.c
===================================================================
--- branches/scout/projects/mapping/python/server.c	(nonexistent)
+++ branches/scout/projects/mapping/python/server.c	(revision 1346)
@@ -0,0 +1,41 @@
+/* A simple server in the internet domain using TCP
+   The port number is passed as an argument */
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h> 
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include "netserv.h"
+#include "robots.h"
+#include "wireless.h"
+
+
+
+int main(int argc, char *argv[])
+{
+     if (argc < 2) {
+	  fprintf(stderr,"usage: %s <port number>\n", argv[0]);
+	  exit(1);
+     }
+     newsockfd = make_sock(atoi(argv[1]));
+     printf("Made socket\n");
+     make_listener();
+     printf("Robot listener created.\n");
+     
+     while (1)
+     {
+	  wl_do();
+     }
+     return 0; 
+}
+
+void error(char *msg)
+{
+     printf(msg);
+     exit(1);
+}
+
Index: branches/scout/projects/mapping/python/robots.c
===================================================================
--- branches/scout/projects/mapping/python/robots.c	(nonexistent)
+++ branches/scout/projects/mapping/python/robots.c	(revision 1346)
@@ -0,0 +1,61 @@
+#include <stdlib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "robots.h"
+
+#define CHANNEL 0xE
+#define GROUP 1
+
+void do_nothing(void);
+void packet_receive(char type, int source, unsigned char* packet, int length);
+
+void make_listener()
+{ 
+     PacketGroupHandler *receiver;
+     printf("wl_init() returned %d\n", wl_init());
+     wl_set_channel(CHANNEL);
+     receiver = malloc(sizeof(PacketGroupHandler));
+     receiver->groupCode = GROUP;
+     receiver->handle_response = do_nothing;
+     receiver->timeout_handler = do_nothing;
+     receiver->handle_receive = packet_receive;
+     wl_register_packet_group(receiver);
+}
+
+void packet_receive(char type, int source, unsigned char* packet, int length)
+{
+     /* stolen from cmar */
+     char buffer[22];
+     short x,y,ir1,ir2,ir3,ir4,ir5, n;
+     x = ((short)packet[1] << 8) | (short)packet[0];
+     y = ((short)packet[3] << 8) | (short)packet[2];
+     ir1 = ((short)packet[9] << 8) | (short)packet[8];
+     ir2 = ((short)packet[11] << 8) | (short)packet[10];
+     ir3 = ((short)packet[13] << 8) | (short)packet[12];
+     ir4 = ((short)packet[15] << 8) | (short)packet[14];
+     ir5 = ((short)packet[17] << 8) | (short)packet[16];
+
+     char tarr[] = {packet[4],packet[5],packet[6],packet[7]};
+     float *theta_ptr = (float *)tarr;
+     float theta = *theta_ptr;
+     
+     printf( "%d %d %f %d %d %d %d %d\n", x, y, theta,
+	    ir1, ir2, ir3, ir4, ir5);
+     buffer[0] = (char) source;
+     buffer[1] = (char) length;
+     buffer[2] = type;
+     buffer[3] = 0;
+     memcpy ( buffer+4, packet, length);
+     
+     n = write(newsockfd, buffer, 22);
+     bzero(buffer, 22);
+     
+}
+
+void do_nothing()
+{
+     return;
+}
Index: branches/scout/projects/mapping/python/robots.h
===================================================================
--- branches/scout/projects/mapping/python/robots.h	(nonexistent)
+++ branches/scout/projects/mapping/python/robots.h	(revision 1346)
@@ -0,0 +1,8 @@
+#ifndef ROBOTS
+#define ROBOTS
+
+
+void make_listener();
+int newsockfd;
+
+#endif
Index: branches/scout/projects/mapping/python/Makefile
===================================================================
--- branches/scout/projects/mapping/python/Makefile	(nonexistent)
+++ branches/scout/projects/mapping/python/Makefile	(revision 1346)
@@ -0,0 +1,12 @@
+CC=gcc
+CFLAGS=-W -Wall -lpthread
+INCS=-I../../libwireless/lib
+COMPS=../../libwireless/lib
+DEFS=-DWL_DEBUG -DXBEE_SPECIAL
+
+
+server : clean
+	$(CC) $(CFLAGS) $(INCS) $(DEFS) ../../libwireless/lib/*.c server.c netserv.c robots.c -o server
+
+clean :
+	rm -f server
\ No newline at end of file
Index: branches/scout/projects/mapping/python/model.py
===================================================================
--- branches/scout/projects/mapping/python/model.py	(nonexistent)
+++ branches/scout/projects/mapping/python/model.py	(revision 1346)
@@ -0,0 +1,58 @@
+import weakref
+
+_model_dependents=weakref.WeakKeyDictionary()
+def prchanged(what=None):
+    print "Changed:",what
+
+class model(object):
+    """
+    >>> def prchanged(what=None):
+    ...     print "Changed",what
+    ...
+    >>> m=model()
+    >>> m.add_dependent(prchanged)
+    >>> m.changed('foo')
+    Changed foo
+    >>> def prchanged2(what=None):
+    ...     print "Changed2",what
+    ... 
+    >>> m.add_dependent(prchanged2)
+    >>> m.changed('foo')
+    Changed foo
+    Changed2 foo
+    >>> m.remove_dependent(prchanged)
+    >>> m.changed('foo')
+    Changed2 foo
+
+    """
+    
+    def __init__(self):
+        "No need to call"
+        pass
+    def dependents(self, create=0):
+        "Return a list of my dependents"
+        if not _model_dependents.has_key(self): # k in WeakDictionary broken in 2.2.3
+            if create:
+                _model_dependents[self]=[]
+            else:
+                return ()
+        # If this fails, check self==self to see if compare works
+        return _model_dependents[self]
+    
+    def changed(self,what=None):
+        "Indicate that my data has changed, inform dependents"
+        for x in self.dependents(0):
+            x(what)
+            
+    def add_dependent(self,x):
+        "Add a function to call with one argument (what) when I change"
+        self.dependents(1).append(x)
+
+    def remove_dependent(self,x):
+        "Remove the function"
+        self.dependents(1).remove(x)
+
+    def clear_dependents(self):
+        dep=self.dependents(0)
+        if dep:
+            dep[:]=[]
Index: branches/scout/projects/mapping/python/colony.py
===================================================================
--- branches/scout/projects/mapping/python/colony.py	(nonexistent)
+++ branches/scout/projects/mapping/python/colony.py	(revision 1346)
@@ -0,0 +1,48 @@
+#!/usr/bin/env python3.0
+import sys, time
+from socket import *
+from struct import *
+
+hostname='localhost'
+
+def inp(str):
+    return input(str).encode('ascii')
+
+def main():
+
+    funcs = {1 : 'print_range_info'}
+
+    buf = []
+    sock = socket()
+    sock.connect((hostname, int(sys.argv[1])))
+    
+    while (True):
+        buf = sock.recv(100)
+        
+        if (buf):
+            type = buf[2]
+            if type in funcs.keys():
+                globals()[funcs[type]](buf)
+
+        
+def print_range_info(packet):
+    print ('Info from %d' % packet[0])
+
+    src = packet[0]
+
+    packet_length = packet[1]
+
+    data = packet[3 : 3+packet_length]
+    print("data length: %d" % len(data))
+    ranges = unpack('hhhhhhh',data)
+
+    print(ranges)
+
+
+if __name__=='__main__':
+
+    if len(sys.argv) < 2 or not str.isdecimal(sys.argv[1]):
+        print("Usage: %s <portno>" % sys.argv[0])
+        sys.exit()
+
+    main()

Property changes on: branches/scout/projects/mapping/python/colony.py
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/mapping/python/netserv.c
===================================================================
--- branches/scout/projects/mapping/python/netserv.c	(nonexistent)
+++ branches/scout/projects/mapping/python/netserv.c	(revision 1346)
@@ -0,0 +1,35 @@
+#include "netserv.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h> 
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+int make_sock(int portno)
+{
+  
+  int sockfd, newsockfd, clilen;
+  struct sockaddr_in serv_addr, cli_addr;
+  
+  sockfd = socket(AF_INET, SOCK_STREAM, 0);
+  if (sockfd < 0)
+    error("ERROR opening socket");
+  bzero((char *) &serv_addr, sizeof(serv_addr));
+  serv_addr.sin_family = AF_INET;
+  serv_addr.sin_addr.s_addr = INADDR_ANY;
+  serv_addr.sin_port = htons(portno);
+  if (bind(sockfd, (struct sockaddr *) &serv_addr,
+	   sizeof(serv_addr)) < 0) 
+    error("ERROR on binding");
+  listen(sockfd,5);
+  clilen = sizeof(cli_addr);
+  newsockfd = accept(sockfd, 
+		     (struct sockaddr *) &cli_addr, 
+		     (socklen_t *) &clilen);
+  if (newsockfd < 0) 
+    error("ERROR on accept");
+  return newsockfd;
+}
Index: branches/scout/projects/mapping/python/netserv.h
===================================================================
--- branches/scout/projects/mapping/python/netserv.h	(nonexistent)
+++ branches/scout/projects/mapping/python/netserv.h	(revision 1346)
@@ -0,0 +1,7 @@
+#ifndef NETSERV
+#define NETSERV
+
+int make_sock(int portno);
+void error(char *);
+
+#endif
Index: branches/scout/projects/mapping/python/script.sh
===================================================================
--- branches/scout/projects/mapping/python/script.sh	(nonexistent)
+++ branches/scout/projects/mapping/python/script.sh	(revision 1346)
@@ -0,0 +1,5 @@
+cd src/
+
+gcc -c *.c -I/usr/include/python2.5/ -I../../colony-wireless/code/lib/include/libwireless/ *.c
+
+gcc -shared  *.o -o wireless.so
\ No newline at end of file

Property changes on: branches/scout/projects/mapping/python/script.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/libdragonfly/serial.c
===================================================================
--- branches/scout/projects/libdragonfly/serial.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/serial.c	(revision 1346)
@@ -0,0 +1,343 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file serial.c
+ * @brief Serial Input and Output
+ *
+ * Implementation of functions for serial input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+FILE *usb_fd;  //For use with fprintf() and related stdio functions
+FILE *xbee_fd;  //For use with fprintf() and related stdio functions
+
+/**
+ * Initializes communication over the USB serial port.
+ * This must be called before any other usb function
+ * may be used.
+ **/
+void usb_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+#if (USB_BAUD == 115200)
+  UBRR0H = 0x00;
+  UBRR0L = 8;
+  UCSR0A |= _BV(U2X0);
+#elif (USB_BAUD == 9600)
+  UBRR0H = 0x00;
+  UBRR0L = 103;
+  UCSR0A |= _BV(U2X0);
+#else //Baud rate is defined in the header file, we should not get here
+  return;
+#endif
+
+  /*Enable receiver and transmitter */
+  UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+  /* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+  UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+  
+  // if we have enabled the stdio stuff, then we init it here
+#ifdef USE_STDIO
+  /* Open the stdio stream corresponding to this port */
+  usb_fd = fdevopen(usb_putc, usb_getc);
+#endif
+}
+
+/**
+ * Initializes communication over the XBee.
+ * This must be called before any other xbee function
+ * may be used.
+ **/
+void xbee_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+#if (XBEE_BAUD == 115200)
+  UBRR1H = 0x00;
+  UBRR1L = 8;
+  UCSR1A |= _BV(U2X1);
+#elif (XBEE_BAUD == 9600)
+  UBRR1H = 0x00;
+  UBRR1L = 103;
+  UCSR1A |= _BV(U2X1);
+#else //Baud rate is defined in the header file, we should not get here
+  return;
+#endif
+
+  //Enable receiver and transmitter
+  UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+  // Set frame format: 8data, 1stop bit, asynchronous normal mode
+  UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  // if we have enabled the stdio stuff, then we init it here
+#ifdef USE_STDIO
+  /* Open the stdio stream corresponding to this port */
+  xbee_fd = fdevopen(xbee_putc, xbee_getc);
+#endif
+}
+
+/**
+ * Sends a character over USB.
+ *
+ * @param c the character to send
+ * @return 0 for success, nonzero for failure
+ **/
+int usb_putc(char c) {
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR0A, UDRE0);
+	
+  // Load buffer with your character
+  UDR0 = c;
+  return 0;
+}
+
+/**
+ * Sends a character to the XBee.
+ *
+ * @param c the character to send
+ * @return 0 for success, nonzero for failure
+ **/
+int xbee_putc(char c) {
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR1A, UDRE1);
+	
+  // Load buffer with your character
+  UDR1 = c;
+  return 0;
+}
+
+/**
+ * Sends a sequence of characters over USB.
+ *
+ * @param s the string to send
+ * @return 0 for success, nonzero for failure
+ **/
+int usb_puts(char *s) {
+  char *t = s;
+  while (*t != 0) {
+    usb_putc(*t);
+    t++;
+  }
+  return 0;
+}
+
+/**
+ * Sends a sequence of characters from program space over USB.
+ *
+ * @param s the string to send
+ **/
+void usb_puts_P (PGM_P s) {
+    char buf;
+	
+    while (memcpy_P (&buf, s, sizeof (char)), buf!=0) {
+        usb_putc (buf);
+        s++;
+    }
+}
+
+
+
+/**
+ * Returns the first character in the buffer received from USB.
+ * This function blocks execution until a character has been received.
+ * xbee_init must be called before this function may be used.
+ * 
+ * @return the first character in the usb buffer
+ *
+ * @see usb_init, usb_getc_nb
+ **/
+int usb_getc(void) {
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+  // Read the receive buffer
+  return UDR0;
+}
+
+/**
+ * Returns the first character in the buffer received from USB.
+ * This function blocks execution until a character has been
+ * received. xbee_init must be called before this function
+ * may be used.
+ * 
+ * @return the first character in the xbee buffer
+ * 
+ * @see xbee_init, xbee_getc_nb
+ **/
+int xbee_getc(void) {
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR1A, RXC1);
+	
+  // Read the receive buffer
+  return UDR1;
+}
+
+/**
+ * Non blocking version of usb_getc. If a character is present in the buffer,
+ * it is returned, otherwise -1 is returned immediately. usb_init must be
+ * called before this function can be used.
+ *
+ * @param c the received character. This will be set if a character has
+ * been received.
+ * 
+ * @return -1 if no character is available, 0 otherwise
+ * 
+ * @see usb_init, usb_getc
+ **/
+int usb_getc_nb(char *c) {
+  // check if the receive buffer is filled
+  if (UCSR0A & _BV(RXC0)) {
+    // Read the receive buffer
+    (*c) = UDR0;
+    return 0;
+  } else {
+    // Return empty
+    return -1;
+  }
+}
+
+/**
+ * Non blocking version of xbee_getc. If a character is present in the buffer,
+ * it is returned, otherwise -1 is returned immediately. xbee_init
+ * must be called before this function can be used.
+ *
+ * @param c the received character. This will be set if a character has
+ * been received.
+ * 
+ * @return -1 if no character is available, 0 otherwise
+ *
+ * @see xbee_init, xbee_getc
+ **/
+int xbee_getc_nb(char *c) {
+  // check if the receive buffer is filled
+  if (UCSR1A & _BV(RXC1)) {
+    // Read the receive buffer
+    (*c) = UDR1;
+    return 0;
+  } else {
+    // Return empty
+    return -1;
+  }
+}
+
+
+/*
+  prints an int to serial
+
+  code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+  uses usb_putc
+*/
+/**
+ * Prints an integer, converted to ASCII, to usb. usb_init must be called
+ * before this function can be used.
+ *
+ * @param value the integer to print
+ * 
+ * @return 0 if successful, nonzero otherwise
+ *
+ * @see usb_init, usb_putc
+ **/
+int usb_puti(int value ) {
+  unsigned char usb_data[6]={'0','0','0','0','0','0' }, position=sizeof(usb_data), radix=10; 
+
+  /* convert int to ascii  */ 
+  if(value<0) { 
+    usb_putc('-'); 
+    value=-value; 
+  }    
+  do { 
+    position--; 
+    *(usb_data+position)=(value%radix)+'0'; 
+    value/=radix;  
+  } while(value); 
+
+    
+  /* start displaying the number */
+  for(;position<=(sizeof(usb_data)-1);position++) {
+            
+    usb_putc(usb_data[position]);
+  }
+
+  return 0;
+}
+
+/**
+ * Determines a hexadecimal digit in ASCII code.
+ *
+ * @param value the value of the digit (0<=value<=15)
+ * 
+ * @return the hexadecimal digit in ASCII code, or '?'
+ * if the input is invalid.
+ **/
+uint8_t hex_digit (uint8_t value)
+{
+    if (value>15) return '?';
+    // Postcondition: 0<=x<=15
+
+    return "0123456789ABCDEF"[value];
+}
+
+/**
+ * Prints a fixed width hexadecimal representation of an unsigned
+ * 16 bit integer in ASCII code to USB.
+ * usb_init must be called before this function can be used.
+ *
+ * @param value the value to print
+ * 
+ * @see usb_init, usb_puti, usb_puts, usb_puth8, hex_digit
+ **/
+void usb_puth16 (uint16_t value)
+{
+    usb_putc (hex_digit((value >>12)&0xF));
+    usb_putc (hex_digit((value >>8 )&0xF));
+    usb_putc (hex_digit((value >>4 )&0xF));
+    usb_putc (hex_digit( value      &0xF));
+}
+
+/**
+ * Prints a fixed width hexadecimal representation of an unsigned
+ * 8 bit integer in ASCII code to USB.
+ * usb_init must be called before this function can be used.
+ *
+ * @param value the value to print
+ * 
+ * @see usb_init, usb_puti, usb_puts, usb_puth16, hex_digit
+ **/
+void usb_puth8(uint8_t value)
+{
+    usb_putc (hex_digit ((value)>>4 &0xF));
+    usb_putc (hex_digit ( value     &0xF));
+}
+
Index: branches/scout/projects/libdragonfly/serial.h
===================================================================
--- branches/scout/projects/libdragonfly/serial.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/serial.h	(revision 1346)
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file serial.h
+ * @brief Contains declarations for serial input and output
+ *
+ * Contains definitions for serial input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ *
+ **/
+
+/*
+  serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+  usb_*() -> UART0
+  xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+  #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+  #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+  #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+#include <inttypes.h>
+#include <avr/pgmspace.h>
+
+/**
+ * @defgroup usb USB Input / Output
+ * @brief Functions for USB input / output
+ *
+ * Low level functions for USB input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+/** @brief the USB baud rate **/
+#define USB_BAUD 115200
+#endif
+
+/** @brief Initialize the USB **/
+void usb_init(void);
+/** @brief Print a character to USB **/
+int usb_putc(char c);
+/** @brief Read a character from USB **/
+int usb_getc(void);
+/** @brief Read a character from USB without blocking **/
+int usb_getc_nb(char *c);
+/** @brief Print a string to USB **/
+int usb_puts(char *s);
+/** @brief Print a string from program space to USB **/
+void usb_puts_P (PGM_P s);
+/** @brief Print an integer to USB **/
+int usb_puti(int value);
+/** @brief Determine a hexadecimal digit **/
+uint8_t hex_digit (uint8_t value);
+/** @brief Print a fixed width hexadecimal representation to USB **/
+void usb_puth16 (uint16_t value);
+/** @brief Print a fixed width hexadecimal representation to USB **/
+void usb_puth8(uint8_t value);
+/** @brief Alias for usb_puth16 **/
+static inline void usb_puth (uint16_t value) { usb_puth16 (value); };
+
+
+/** @} **/ //end addtogroup
+
+/**
+ * @defgroup xbee XBee Input / Output
+ * @brief Functions for XBee input / output
+ *
+ * Low level functions for XBee input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+/** @brief the XBee baud rate **/
+#define XBEE_BAUD 9600
+#endif
+
+/** @brief Initialize the XBee **/
+void xbee_init(void);
+/** @brief Print a character to the XBee **/
+int xbee_putc(char c);
+/** @brief Read a character from the XBee **/
+int xbee_getc(void);
+/** @brief Read a character from the XBee without blocking **/
+int xbee_getc_nb(char *c);
+
+
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/projects/libdragonfly/lights.h
===================================================================
--- branches/scout/projects/libdragonfly/lights.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/lights.h	(revision 1346)
@@ -0,0 +1,222 @@
+// FIXME remove
+typedef unsigned char uint8_t;
+
+
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file lights.h
+ * @brief Contains declarations for managing the orbs.
+ *
+ * Contains declarations for using the orbs and PWM.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Firefly Library, by Tom Lauwers and Steven Shamlian
+ **/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+/**
+ * @addtogroup orbs
+ * @{
+ **/
+
+/**
+ * Quick start: call orb_init_pwm or orb_init_binary, depending on which mode you want to use. Call orb*set or
+ * orb*set_color to set the orbs.
+ * 
+ * The orbs have two modes of operation: PWM mode and binary mode. In PWM mode, a pwm signal is generated by a hardware
+ * timer and the orbs can be set to a value of 0 through 255. In binary mode, the orbs can only be turned on or off and
+ * a value of 0 means "off" and any other value means "on". The mode can be chosen on initialization and can be changed
+ * at runtime using the orb_set_mode function.
+ *
+ * Operation (PWM mode): On timer overflow, all LEDs with a value>0 are turned on and the output compare value for the
+ * first LED is loaded. On compare match, the corresponding LED is turned off and the next output compare value is
+ * loaded. All masks are precomputed and sorted by time when setting the values.
+ *
+ * The data structure (pwm_t) containing the PWM times and masks is triple buffered. This is because the buffer the ISR
+ * is reading from may only be modified on timer overflow before the next PWM sequence is started, because otherwise the
+ * next OCR value might be sed to a value smaller than the current timer value, resulting in the remaining channels not
+ * being turned off in that PWM period (flash to on). When using two buffers, the page flip can only occur on a timer
+ * overflow for the same reason. So after writing a buffer and marking it for page flip, neither of the buffers could be
+ * modified because the front buffer is read by the ISR and the back buffer could be switched at any time. So the
+ * calling thread would have to be delayed by up to one full PWM period (8ms in the current implementation, but
+ * 20ms-50ms would be a reasonable value to expect here). To avoid this, triple buffering is used.
+ *
+ * The code for applying the orbs is fairly optimized. See the apply_orbs function for some time measurements and
+ * further nodes.
+ *
+ * The PWM frequency is 120Hz (8ms period time). The next lower frequency (determined by the prescaler) is 30 Hz which
+ * is too slow (orbs flicker).
+ *
+ * The orbs code is thread safe, which means that the functions may be called from another interrupt handler. If there
+ * are multiple concurrent calls to the orb*set* functions, one of them is ignored and the orbs are never left in an
+ * inconsistent state. For example, if the orbs are set to green by the main thread and to red by an interrupt handler,
+ * the resulting color will be either red or green, but never yellow.
+ * Thread safety is achieved by grabbing a lock at the beginning of all functions that modify the orb code and releasing
+ * the lock at the end. If the lock is already taken, the function just returns doing nothing.
+ *
+ * Some performance measurements:
+ *   - Time for setting new orb values (PWM mode):       35us-72us (depending on the degree to which the array is
+ *                                                                  already in the correct order)
+ *   - Time for setting new orb values (binary mode):        5.5us
+ *
+ *   - Interrupt time (PWM mode only):                         8us (overflow)
+ *                                                            10us (output compare)
+ *                                                             6us (last output compare)
+ *                                                            30us (output compare, all value equal)
+ *
+ *   - Maximum total interrupt time per period:               64us
+ *   - Maximum CPU usage for interrupts (PWM mode only):     <0.8%
+ *
+ *   - Maximum contiguous synchronized block:                 30us (output compare interrupt, all values equal)
+ *
+ * There are some potential optimizations left. See the source code for more information.
+ *
+ * A note on robustness: if the output compare interrupt is disabled for too long, either due to a long ISR or a long
+ * synchronized code block, the orbs will flicker to brighter values for being turned off too late. With software PWM,
+ * there's nothing at all to be done about that. The problem can be alleviated by using a lower PWM frequency, but then
+ * the orbs will start flickering all the time due to the low update frequency.
+ * Some measurements: with 100us synchronized blocks, the flickering is accepptably low. Longer synchronized blocks
+ * mean more flickering. At 1ms synchronized blocks, the flickering is quite bad, especially for low orb values. Note
+ * that orb value 0 never flickers at all because the corresponding channels are not turned on at all.
+ * Test code (note the _delay_us restrictions!)
+ *   orb_set (1,1,1); while (1) { SYNC { for (uint8_t m=0; m<10; ++m) { _delay_us(10); } } }
+ **/
+
+/** @} **/ //end addtogroup
+
+/**
+ * @addtogroup orbs
+ * @{
+ **/
+
+// ***** Predefined colors *****
+/** @brief Red **/
+#define RED       0xE0
+/** @brief Orange **/
+#define ORANGE    0xE4
+/** @brief Yellow **/
+#define YELLOW    0xE8
+/** @brief Lime **/
+#define LIME      0x68
+/** @brief Green **/
+#define GREEN     0x1C
+/** @brief Cyan **/
+#define CYAN      0x1F
+/** @brief Blue **/
+#define BLUE      0x03
+/** @brief Pink **/
+#define PINK      0xA6 
+/** @brief Purple **/
+#define PURPLE    0x41
+/** @brief Magenta **/
+#define MAGENTA   0xE3
+/** @brief White **/
+#define WHITE     0xFE
+/** @brief Turn the orb off **/
+#define ORB_OFF   0x00
+
+
+
+// ***** Initialization *****
+
+/** @brief Enables the orbs in default mode **/
+void orb_init(void);
+
+/** @brief Enables the orbs in binary mode **/
+void orb_init_binary (void);
+
+/** @brief Enables the orbs in PWM mode **/
+void orb_init_pwm (void);
+
+
+
+// ***** Mode setting *****
+
+/** Specification of the orb mode **/
+typedef uint8_t orb_mode_t;
+
+/** @brief PWM mode **/
+#define orb_mode_pwm 0
+
+/** @brief Binary mode **/
+#define orb_mode_binary 1
+
+
+/** @brief Switches the orbs to the specified mode **/
+void orb_set_mode (orb_mode_t mode);
+
+/** @brief Disables the orb timer, but does not change the mode **/
+void orb_disable_timer (void);
+
+/** @brief Enables the orb timer, but does not change the mode **/
+void orb_enable_timer (void);
+
+
+
+// ***** Setting RGB colors *****
+
+/** @brief set the specified orb to a specified color **/
+void orb_n_set (uint8_t num, uint8_t red, uint8_t green, uint8_t blue);
+
+/** @brief Set both orbs to a specified color **/
+void orb_set(uint8_t red, uint8_t green, uint8_t blue);
+
+/** @brief Set orb1 to a specified color **/
+void orb1_set(uint8_t red_led, uint8_t green_led, uint8_t blue_led); 
+
+/** @brief Set orb2 to a specified color **/
+void orb2_set(uint8_t red_led, uint8_t green_led, uint8_t blue_led);
+
+void orbs_set (uint8_t red1, uint8_t green1, uint8_t blue1, uint8_t red2, uint8_t green2, uint8_t blue2);
+
+
+
+// ***** Settings predefined colors *****
+
+/** @brief set the specified orb to the specified color **/
+void orb_n_set_color(uint8_t num, uint8_t col);
+
+/** @brief Set orb1 to a specified color **/
+void orb1_set_color(uint8_t col);
+
+/** @brief Set orb2 to a specified color **/
+void orb2_set_color(uint8_t col);
+
+/** @brief set the orbs to specified colors **/
+void orbs_set_color(uint8_t col1, uint8_t col2);
+
+/** @brief Set both orbs to a specified color **/
+void orb_set_color(uint8_t col);
+
+
+
+/** @} **/ //end addtogroup
+
+#endif
Index: branches/scout/projects/libdragonfly/Makefile
===================================================================
--- branches/scout/projects/libdragonfly/Makefile	(nonexistent)
+++ branches/scout/projects/libdragonfly/Makefile	(revision 1346)
@@ -0,0 +1,210 @@
+############################
+### Update this Section ####
+############################
+
+COLONYROOT = ../../..
+
+# Target file name (without extension).
+TARGET = libdragonfly
+
+############################
+
+CDEFS = 
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+# dwarf-2
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+
+# Place -I options here
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+AR = avr-ar
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+DOXYGEN = doxygen
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_COMPILING = Compiling:
+MSG_CLEANING = Cleaning project:
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = rcs
+
+# Default target.
+all: begin build end
+
+dist: all publish
+
+publish:
+	$(COPY) $(TARGET).a $(COLONYROOT)/code/lib/bin
+	$(COPY) *.h $(COLONYROOT)/code/lib/include/$(TARGET)
+
+.PHONY: docs
+docs:
+	$(DOXYGEN)
+	$(COPY) docs/html/* $(COLONYROOT)/docs/$(TARGET)
+
+
+build: $(OBJ)
+	$(AR) $(ALL_ASFLAGS) $(TARGET).a $(OBJ)
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).a
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
Index: branches/scout/projects/libdragonfly/lights.c
===================================================================
--- branches/scout/projects/libdragonfly/lights.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/lights.c	(revision 1346)
@@ -0,0 +1,757 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file ligths.c
+ * @brief Orbs
+ *
+ * Implemenation for the orbs (tri-colored LEDs)
+ *
+ * @author Colony Project, CMU Robotics Club
+ * @bug Unfinished
+ **/
+
+/*
+lights.c
+Controls orb1 and orb2. Can be extended for a software PWM that may be used for servos in the future (although maybe
+using a different timer might be preferable).
+
+author: CMU Robotics Club, Colony Project
+
+Change Log:
+3/31/2009 - Martin
+    Rewritten from scratch. Fixes code duplication, long ISRs, bugs, unnecessary synchronized code, memory waste
+*/
+
+
+
+/*
+ * Test cases:
+ *   - The following code has to work without flickering:
+ *     orb_init_pwm(); while(1) { orbs_set(1,1,1,254,254,254); }
+ */
+
+/*
+ * Possible optimizations:
+ *   - Use pointers instead of indicies for current_pwm_channel
+ *   - Optimize output_compare()
+ *   - Use a different sorting algorithm (see sort_orbs_buffer for further comments on this issue)
+ *   - Use pointers in fill_orbs_buffer
+ *   - Optimized orb_set (use the knowledge that there are only 3 distinct values, don't use a loop but unroll the
+ *     sorting, which is no problem for 3 values)
+ *   - Use a lower update frequency. The next higher prescaler value leads to a frequency of 30Hz which is too low (the
+ *     orbs are flickering). So the timer would have to be reloaded manually after 127 to generate 60Hz. This would
+ *     decrease the resolution from 8 to 7 bit, but 128 steps should still be enough.
+ *   - On setting the orbs, combine channels with the same time. This would reduce the all-values-equal OC interrupt
+ *     (30us) to the time of one regular OC interrupt (6us/10us). Also, it would reduce the total cpu usage whenever
+ *     some of the values are equal.
+ *
+ * When code is changed, the performance measurements above should be redone.
+ */
+
+
+
+#include "lights.h"
+
+#include <avr/interrupt.h>
+
+#include "dragonfly_lib.h"
+
+
+// ***************
+// ** Constants **
+// ***************
+
+#define NUM_ORBS 2   // Number or orbs
+#define NUM_COLORS 3 // Number of colors per orb
+#define num_pwm_channels NUM_ORBS*NUM_COLORS
+
+
+// *********
+// ** I/O **
+// *********
+
+// Orb port
+#define ORBPORT PORTC
+#define ORBDDR  DDRC
+
+// Orb pins
+#define ORB1_RED   0
+#define ORB1_GREEN 1
+#define ORB1_BLUE  2
+#define ORB2_RED   4
+#define ORB2_GREEN 5
+#define ORB2_BLUE  6
+
+
+// ***************
+// ** Debugging **
+// ***************
+
+//#define LIGHTS_DEBUG
+#undef LIGHTS_DEBUG
+
+#define LIGHTS_DEBUG_INIT                             DDRF=6;
+#define LIGHTS_DEBUG_OVERFLOW_INTERRUPT_START         PORTF|=4;
+#define LIGHTS_DEBUG_OVERFLOW_INTERRUPT_END           PORTF&=~4;
+#define LIGHTS_DEBUG_OUTPUT_COMPARE_INTERRUPT_START   PORTF|=2;
+#define LIGHTS_DEBUG_OUTPUT_COMPARE_INTERRUPT_END     PORTF&=~2;
+#define LIGHTS_DEBUG_APPLY_START                      //PORTF|=2;
+#define LIGHTS_DEBUG_APPLY_END                        //PORTF&=~2;
+
+
+// ***********
+// ** Masks **
+// ***********
+
+// Some useful bit masks. All of them are are calculated from the I/O definitions above. The calculations should be done
+// at compile time (even if they are not, they are only executed once at startup).
+
+// Masks for the individual LEDs
+#define orb1_red_mask    _BV (ORB1_RED  )
+#define orb1_green_mask  _BV (ORB1_GREEN)
+#define orb1_blue_mask   _BV (ORB1_BLUE )
+#define orb2_red_mask    _BV (ORB2_RED  )
+#define orb2_green_mask  _BV (ORB2_GREEN)
+#define orb2_blue_mask   _BV (ORB2_BLUE )
+
+// Mask for all LEDs
+#define all_orbs_mask \
+    orb1_red_mask | orb1_green_mask | orb1_blue_mask | \
+    orb2_red_mask | orb2_green_mask | orb2_blue_mask;
+
+// Mask for the individual LEDs, organized as an array for programmatic access. The layout of this array is
+// orb_mask[orb_num, color_num]
+const uint8_t orb_mask[NUM_ORBS][NUM_COLORS]={
+    { orb1_red_mask, orb1_green_mask, orb1_blue_mask },
+    { orb2_red_mask, orb2_green_mask, orb2_blue_mask }
+};
+
+// ***********
+// ** Types **
+// ***********
+
+struct pwm_channel_t { // 2 bytes
+    uint8_t time;
+    uint8_t mask;
+};
+
+struct pwm_t { // 13 bytes
+    uint8_t init_mask;
+    struct pwm_channel_t channel[num_pwm_channels];
+};
+
+
+// ***************
+// ** Variables **
+// ***************
+
+// Whether to use PWM (true) or binary (false) orb mode. Not volatile because it's only read once per function.
+bool enable_orb_pwm=true;
+
+// The PWM channels and the buffer pointers. This data structure is triple buffered, see above for the reasons. Not
+// volatile because they are not modified asynchronously (the read buffer is never written to asynchronously).
+struct pwm_t pwm_buffer[3];
+
+// The front buffer the ISR reads from. Other threads may not touch this pointer or the buffer it points to. Not
+// volatile because it may only be modified by the ISR.
+struct pwm_t *pwm_read_buffer =&pwm_buffer[0];
+
+// The back buffer we can write to. The ISR may not touch this pointer or the buffer it points to. Not volatile because
+// it may only be modified by the caller.
+struct pwm_t *pwm_write_buffer=&pwm_buffer[1]; 
+
+// The middle buffer to flip the write or read buffer with. Not volatile because it is only read once per function.
+struct pwm_t *pwm_free_buffer =&pwm_buffer[2]; 
+
+// Whether to perform a page flip on the beginning of the next PWM cycle. Not volatile because it is only read once
+// per function.
+bool pwm_page_flip=false; // Whether to do a page flip on the next overflow
+
+// The orb value array. Orb values are written here to be sorted into pwm_channels. Not volatile because all accesses
+// are from guarded (thread safe) functions.
+uint8_t orb_values[NUM_ORBS][NUM_COLORS];
+
+
+// ****************
+// ** Timer ISRs **
+// ****************
+
+// Not volatile because it is only accessed in the interrupt handler.
+uint8_t current_pwm_channel=0;
+
+
+static void output_compare (void) {
+	// This function is called when an output compare condition may have occured.
+	
+    // If the OC interrupt is executed without delay, TCNT0==time+1 (where time==OCR0), because the interrupt flag is
+	// queued at the next timer clock cycle after an output compare.
+
+    // What may happen here is that the interrupt is delayed for more than one timer clock cycle (33 us). In that case,
+	// the timer has already counted on and TCNT0 is bigger than current_channel_timer. Also, while during the ISR no
+	// other interrupts will occur, the timer may still count on. Thus, we have to check the following channel as well.
+
+	// Some optimization is possible in this function.
+
+    while (1) {
+		// The timer value at which the output compare interrupt should occur (one timer clock cycle after the output
+		// compare condition is detected).
+		uint8_t current_channel_time=pwm_read_buffer->channel[current_pwm_channel].time+1;
+		
+		// If the counter is not at this time yet, we don't have to do anything right now.
+		if (current_channel_time>TCNT0) return;
+		
+		// We have an output compare condition for the current channel.
+		
+        // Turn the current channel off
+        ORBPORT|=pwm_read_buffer->channel[current_pwm_channel].mask;
+
+		// If this was the last channel, exit
+		if (current_pwm_channel==num_pwm_channels-1) return;
+
+        // Increment the channel index
+        current_pwm_channel++;
+
+        // There is a next channel, load its OCR value
+        if (pwm_read_buffer->channel[current_pwm_channel].time<255)
+            OCR0=pwm_read_buffer->channel[current_pwm_channel].time;
+    }
+}
+
+SIGNAL (SIG_OVERFLOW0) {
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_OVERFLOW_INTERRUPT_START
+#endif
+
+    if (pwm_page_flip) {
+        // Flip the read buffer with the free buffer. We are in an ISR (and we didn't re-enable interrupts), so we don't
+        // have to synchronize explicitly.
+        struct pwm_t *temp = pwm_read_buffer;
+        pwm_read_buffer    = pwm_free_buffer;
+        pwm_free_buffer    = temp;
+        pwm_page_flip=false;
+    }
+
+    // Turn only the appropriate PWM channels on. Do this directly on the orb port because at this point all orbs should
+    // be off anyway.
+    ORBPORT|=all_orbs_mask;
+    ORBPORT&=pwm_read_buffer->init_mask;
+    
+    // Start at the first channel
+    current_pwm_channel=0;
+    
+    // Load the first OCR
+    OCR0=pwm_read_buffer->channel[current_pwm_channel].time;
+
+	// If this interrupt was delayed, we might already have an output compare condition.
+	output_compare ();
+
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_OVERFLOW_INTERRUPT_END
+#endif
+}
+
+SIGNAL(SIG_OUTPUT_COMPARE0) {
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_OUTPUT_COMPARE_INTERRUPT_START
+#endif
+
+	// We have an output compare condition.
+	output_compare ();
+    
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_OUTPUT_COMPARE_INTERRUPT_END
+#endif
+}
+
+
+
+// ************************************
+// ** Internal orb setting functions **
+// ************************************
+
+static void sort_orbs_buffer (void) {
+    // This function applies a bubble sort to sort the elements of the pwm_write_buffer->channel array by the time
+    // field.
+    // This implementation is heavily optimized. Note that due to the low (and constant) number of elements to be
+    // sorted, the runtime complexity (O(n^2) for bubble sort) is not relevant here. In fact, a more advanced algorithm
+    // like quick sort or merge sort might even be slower due to higher overhead.
+    // That said, it is possible that selection sort (which is also in O(n^2)) would be faster that bubble sort because
+    // it only has to do a maximum of (n-1) swapping steps (as opposed to n*(n-1)/2 for bubble sort). However, the check
+    // if the elements are already in the correct order would either have to be left out (doing the full search every
+    // time, even if the array is already sorted) or done explicitly, so selection sort might actually be slower than
+    // bubble sort, especially if the array is already sorted or almost sorted.
+    
+    // This implementation uses macros to make the algorithm more clear because the loop is rolled out and the function
+    // would become quite long without macros.
+    
+    // Macro to swap two values of any type. Requires a variable of the appropriate type called swap_temp.
+    #define swap(a,b) { swap_temp=a; a=b; b=swap_temp; }
+
+    // Macro to do one bubble sorting step (compare & swap)
+    #define bubble \
+        if(a->time > b->time) \
+        { \
+            swap (a->time, b->time); \
+            swap (a->mask, b->mask); \
+            done=false; \
+        }
+    
+    // Macro to move to the next bubble sort pair
+    #define next { a++; b++; }
+
+    // Whether no change was made during the last run, which means that all values are already in correct order.
+    bool done;
+    
+    // A temporary variable for swapping.
+    uint8_t swap_temp;
+    
+    // Precompute the first PWM channel (tested faster).
+    struct pwm_channel_t *first=&(pwm_write_buffer->channel[0]);
+
+    // Pointers to the two PWM channels under inspection
+    struct pwm_channel_t *a, *b;
+
+    // The actual sorting
+    a=first; b=a+1; done=true;
+    bubble next bubble next bubble next bubble next bubble
+    if (done) return;
+
+    a=first; b=a+1; done=true;
+    bubble next bubble next bubble next bubble
+    if (done) return;
+
+    a=first; b=a+1; done=true;
+    bubble next bubble next bubble
+    if (done) return;
+
+    a=first; b=a+1; done=true;
+    bubble next bubble
+    if (done) return;
+
+    a=first; b=a+1; done=true;
+    bubble
+    if (done) return;
+
+    // Undefine the macros so they do not disturb some other function.
+    #undef next
+    #undef bubble
+    #undef swap
+}
+
+static void fill_orbs_buffer (void) {
+    // We do not use a loop here because it introduces 27us overhead, which is quite much, given the total time for
+    // optimized copying and sorting of 34us (elements already in correct order) to 71 us (elements in reverse order).
+    
+    #define copy_value(orb, color) \
+        index=NUM_COLORS*orb+color; \
+        time=orb_values[orb][color]; \
+        mask=orb_mask[orb][color]; \
+        \
+        pwm_write_buffer->channel[index].time=time-1; \
+        pwm_write_buffer->channel[index].mask=mask; \
+        \
+        if (time!=0) \
+            pwm_write_buffer->init_mask &= ~mask; \
+
+    uint8_t index, time, mask;
+    copy_value(0,0); copy_value(0,1); copy_value(0,2);
+    copy_value(1,0); copy_value(1,1); copy_value(1,2);
+    
+    #undef copy_value
+}
+
+static void apply_orbs (void) {
+	/*
+	 * Some timing tests: Time for apply_orbs with interrupts disabled, in us:
+     *             Values in:     Correct order      Reverse order
+     * Naive bubble sort:         148                217
+     * Aborting bubble sort:       71                232
+     * Only count to top:          73                189
+     *
+     * Loops rolled out:           61                120
+     * Using pointers:             62                 98
+     * Copy loop also rolled out:  35                 72
+	 *
+	 * Note that rolling out both loops and using pointers saves 52%/62% of time! 27us were spent on loop overhead,
+	 * which is quite much, considering an optimized total time for copying and sorting or 35us.
+	 */
+
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_APPLY_START
+#endif
+
+    if (enable_orb_pwm) {
+        // PWM mode
+        
+        pwm_write_buffer->init_mask=~0;
+    
+        // 1. Write the orb values and corresponding masks to the pwm channels
+        // array unsorted.
+        fill_orbs_buffer ();
+
+        // 2. sort the buffer.
+        sort_orbs_buffer ();
+
+        // Flip the write buffer with the free buffer.
+        SYNC {
+            struct pwm_t *temp = pwm_write_buffer;
+            pwm_write_buffer   = pwm_free_buffer;
+            pwm_free_buffer    = temp;
+        }
+        
+        // On the next overflow, flip the read buffer with the free buffer.
+        pwm_page_flip=true;
+    }
+    else {
+        // Binary mode.
+        // The outputs are inverted.
+        uint8_t on=0;
+        
+        if (orb_values[0][0]) on |= orb_mask[0][0];
+        if (orb_values[0][1]) on |= orb_mask[0][1];
+        if (orb_values[0][2]) on |= orb_mask[0][2];
+        if (orb_values[1][0]) on |= orb_mask[1][0];
+        if (orb_values[1][1]) on |= orb_mask[1][1];
+        if (orb_values[1][2]) on |= orb_mask[1][2];
+    
+        // Write the new orb states to the output port. Synchronized because it is a RMW operation.
+        SYNC {
+            uint8_t value=ORBPORT;
+            value |= all_orbs_mask; // All orbs off
+            value &= ~on; // Selected orbs on
+            ORBPORT=value;
+        }
+    }
+            
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_APPLY_END
+#endif
+}
+
+static void set_orb_values (uint8_t num, uint8_t red, uint8_t green, uint8_t blue) {
+    // Write the values to the array, but do not sort them yet, as we might want to write the other orb values first so
+    // we don't have to sort twice.
+    // Any function calling this function will probably want to call apply_orbs() afterwards.
+    orb_values[num][0]=red;
+    orb_values[num][1]=green;
+    orb_values[num][2]=blue;
+}
+
+
+// ***********************
+// ** RGB color setting **
+// ***********************
+
+// All of these functions use set_orb_values to set the actual values, and then call apply_orbs() to apply the changes.
+// set_orb_values should be used (even though it would be faster to set the array directly) because the binary/pwm mode
+// has to be handled.
+// All of these functions must be 
+
+uint8_t orb_lock=0;
+
+/**
+ * Sets the specified orb to the specified color. The orbs must be initialized before this function may be used.
+ * Note that, when setting both orbs, using orbs_set is faster then setting the orbs individually because the values are
+ * only sorted once.
+ *
+ * @param num the number of the orb to set (0 or 1)
+ * @param red the red value for the specified orb
+ * @param green the green value for the specified orb
+ * @param blue the blue value for the specified orb
+ * @see 
+ */
+void orb_n_set (uint8_t num, uint8_t red, uint8_t green, uint8_t blue) {
+	REQUIRE_LOCK_OR_RETURN(orb_lock);
+	
+    set_orb_values (num, red, green, blue);
+    apply_orbs ();
+	
+	RELEASE_LOCK(orb_lock);
+}
+
+/**
+ * Set orb1 to the color specified. The orbs must be initialized before this function may be used. Note that, when
+ * setting both orbs, using orbs_set is faster then setting the orbs individually because the values are only sorted
+ * once.
+ *
+ * @param red the red component of the color
+ * @param green the green component of the color
+ * @param blue the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb1_set (uint8_t red, uint8_t green, uint8_t blue) {
+	REQUIRE_LOCK_OR_RETURN(orb_lock);
+	
+    set_orb_values (0, red, green, blue);
+    apply_orbs ();
+
+	RELEASE_LOCK(orb_lock);
+}
+
+/**
+ * Set orb2 to the color specified. The orbs must be initialized before this function may be used. Note that, when
+ * setting both orbs, using orbs_set is faster then setting the orbs individually because the values are only sorted
+ * once.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb2_set (uint8_t red, uint8_t green, uint8_t blue) {
+	REQUIRE_LOCK_OR_RETURN(orb_lock);
+	
+    set_orb_values (1, red, green, blue);
+    apply_orbs ();
+
+	RELEASE_LOCK(orb_lock);
+}
+
+/**
+ * Set both orbs to the color specified. The orbs must be initialized before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init, orb1_set, orb2_set
+ **/
+void orb_set (uint8_t red, uint8_t green, uint8_t blue) {
+	REQUIRE_LOCK_OR_RETURN(orb_lock);
+	
+    set_orb_values (0, red, green, blue);
+    set_orb_values (1, red, green, blue);
+    apply_orbs ();
+
+	RELEASE_LOCK(orb_lock);
+}
+
+/**
+ * Set the orbs to the respective values. The orbs must be initialized before this function may be used. Note that, when
+ * setting both orbs, this function is faster than calling orb1_set and orb2_set (or orb_n_set) because the values are
+ * only sorted once.
+ *
+ * @param red1
+ * @param green1
+ * @param blue1
+ * @param red2
+ * @param green2
+ * @param blue2
+ * @see orb1_set
+ * @see orb2_set
+ * @see orb_n_set
+ **/
+void orbs_set (
+    uint8_t red1, uint8_t green1, uint8_t blue1,
+    uint8_t red2, uint8_t green2, uint8_t blue2) {
+
+	REQUIRE_LOCK_OR_RETURN(orb_lock);
+
+    set_orb_values (0, red1, green1, blue1);
+    set_orb_values (1, red2, green2, blue2);
+    apply_orbs ();
+
+	RELEASE_LOCK(orb_lock);
+}
+
+
+// ******************************
+// ** Predefined color setting **
+// ******************************
+
+// This functions just call the corresponding orb*_set functions. If the orbs array is accessed in any other way, it
+// must be synchronized on orb_lock (REQUIRE_LOCK_OR_RETURN and RELEASE_LOCK)! Note that one synchronized function
+// cannot call another one with this lock implementation.
+
+// Macros for extracting a color.
+#define C_RED(col)   (((col & 0xE0) >> 5) * 36)
+#define C_GREEN(col) (((col & 0x1C) >> 2) * 36)
+#define C_BLUE(col)  (((col & 0x03)     ) * 85)
+
+/**
+ * Set the specified orb to the specified color. This function is intended to be used with the predefined colors.
+ *
+ * @param num the number of the orb to set (0 or 1)
+ * @param col the color to set the orbs to
+ **/
+void orb_n_set_color(uint8_t num, uint8_t col) {
+    orb_n_set(num, C_RED(col), C_GREEN(col), C_BLUE(col));
+}
+
+/**
+ * Set orb1 to the specified color. This function is intended to be used with the predefined colors.
+ *
+ * @param col the color to set the orbs to
+ **/
+void orb1_set_color(uint8_t col) {
+    orb1_set (C_RED(col), C_GREEN(col), C_BLUE(col));
+}
+
+/**
+ * Set orb2 to the specified color. This function is intended to be used with the predefined colors.
+ *
+ * @param col the color to set the orbs to
+ **/
+void orb2_set_color(uint8_t col) {
+    orb2_set(C_RED(col), C_GREEN(col), C_BLUE(col));
+}
+
+/**
+ * Set both orbs to the specified color. This function is intended to be used with the predefined colors.
+ *
+ * @param col the color to set the orbs to
+ **/
+void orb_set_color(uint8_t col) {
+    orb_set (C_RED(col), C_GREEN(col), C_BLUE(col));
+}
+
+/**
+ * Set the orbs to the respective color. This function is intended to be used with the predefined colors.
+ *
+ * @param col1 the color to set orb 1 to
+ * @param col2 the color to set orb 2 to
+ **/
+void orbs_set_color(uint8_t col1, uint8_t col2) {
+    orbs_set (C_RED(col1), C_GREEN(col1), C_BLUE(col1), C_RED(col2), C_GREEN(col2), C_BLUE(col2));
+}
+
+#undef C_BLUE
+#undef C_GREEN
+#undef C_RED2
+
+
+// ******************
+// ** Mode setting **
+// ******************
+
+/**
+ * Enables the orb timer. Note that you usually don't want to use this function directly. Instead, use orb_set_mode.
+ * @see orb_set_mode
+ **/
+void orb_enable_timer (void) {
+    // Use 8 bit TC0.
+    //
+    // Timer mode: We cannot use CTC mode because it can only clear on OCR0 (in contrast to the 16 bit timers which can
+    // also use the ICR for that) and OCR0 is already used for generating output compare interrupts. We also need
+    // immediate (non double buffered) update of OCR0, so the only mode left is "Normal".
+    //
+    // Note that for a timer counting from 0 to 255, there are 256 states and thus 257 output possibilities
+    // (0/256...256/256)! However, there are only 256 values in the byte used to specify the PWM value. Possible ways
+    // to deal with that:
+    //   1. use a 16 bit variable for the PWM value (memory waste, overhead)
+    //   2. use an additional flag for the 257th value (inconvenient)
+    //   3. use 1/256...256/256 (skip 0, never complete off)
+    //   4. use 0/256...256/256 (skip 256, never complete on)
+    //   5. skip a value somewhere in the middle
+    //   6. reload the timer after 254
+    // For this implementation, variant 4 was chosen.
+    //
+    // Using an 8 bit timer has the added advantage that all the comparisons are faster.
+    
+    // Normal mode, Compare match output off, Prescaler
+    TCCR0=_BV(CS02) | _BV(CS01); // 256, 120 Hz
+
+    // Enable the interrupts
+    TIMSK|= _BV(OCIE0) | _BV(TOIE0);
+}
+
+/**
+ * Disables the orb timer. Note that you usually don't want to use this function directly. Instead, use orb_set_mode.
+ * @see orb_set_mode
+ **/
+void orb_disable_timer (void) {
+    // Disable the interrupts
+    TIMSK&=~( _BV(OCIE0) | _BV(TOIE0));
+}
+
+
+void orb_set_mode (orb_mode_t mode) {
+    // Set enable_orb_pwm to the appropriate value and disable or enable the timer.
+    if (mode==orb_mode_binary) {
+        orb_disable_timer ();
+
+        enable_orb_pwm=false;
+        apply_orbs ();
+    }
+    else { // orb_mode_pwm
+        enable_orb_pwm=true;
+        apply_orbs ();
+
+        orb_enable_timer ();
+    }
+}
+
+
+// ********************
+// ** Initialization **
+// ********************
+
+// Orb initialization code common to all modes.
+static void orb_init_common (void) {
+    // Enable the output ports and turn off the LEDs
+    ORBPORT |=  all_orbs_mask;
+    ORBDDR  |=  all_orbs_mask;
+
+    // Set all orbs to "off"
+    orb_set (0, 0, 0);
+    
+#ifdef LIGHTS_DEBUG
+    LIGHTS_DEBUG_INIT
+#endif
+}
+
+/**
+ * Initializes the orbs in PWM mode. One of the orb_init* functions must be called before the orbs can be used.
+ * 
+ * @see orb_init_pwm
+ **/
+void orb_init_binary (void) {
+    orb_init_common ();
+    orb_set_mode (orb_mode_binary);
+}
+
+/**
+ * Initializes the orbs in PWM mode. One of the orb_init* functions must be called before the orbs can be used.
+ * 
+ * @see orb_init_binary
+ **/
+void orb_init_pwm (void) {
+    orb_init_common ();
+    orb_set_mode (orb_mode_pwm);
+}
+
+/**
+ * Initializes the orbs in default mode. One of the orb_init* functions must be called before the orbs can be used. Use
+ * the orb_init_binary or orb_init_pwm function if you want one specific mode.
+ *
+ * @see orb_init_pwm
+ * @see orb_init_binary
+ **/
+void orb_init () {
+    orb_init_pwm ();
+}
Index: branches/scout/projects/libdragonfly/dragonfly_lib.h
===================================================================
--- branches/scout/projects/libdragonfly/dragonfly_lib.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/dragonfly_lib.h	(revision 1346)
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file dragonfly_lib.h
+ * @brief Contains other include files
+ * 
+ * Include this file for all the functionality of libdragonfly.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+/**
+ * @addtogroup dragonfly
+ * @{
+ **/
+
+// Configuration definitions
+/** @brief Initialize analog **/
+#define ANALOG 0x01
+/** @brief Initialize serial communications **/
+#define SERIAL 0x02
+/** @brief Initialize USB communications **/
+#define USB    0x02
+/** @brief Initialize communications **/
+#define COMM   0x02
+/** @brief Initialize the orb **/
+#define ORB    0x04
+/** @brief Initialize the motors **/
+#define MOTORS 0x08
+/** @brief Initialize I2C **/
+#define I2C    0x20
+/** @brief Initialize the buzzer **/
+#define BUZZER 0x40
+/** @brief Initialize the LCD screen **/
+#define LCD    0x80
+/** @brief Initialize the rangefinders **/
+#define RANGE  0x0100
+/** @brief Initialize the BOM **/
+#define BOM  0x0200
+/** @brief Initialize everything  **/
+#define ALL_ON 0x03FF
+
+/** @brief Initialize the board **/
+void dragonfly_init(int config);
+
+/** @} **/ //end addtogroup
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+// This file is included from the libdragonfly directory because it seems to be
+// missing from the AVR libc distribution.
+#include "atomic.h"
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+#include <reset.h>
+#include <math.h>
+#include <eeprom.h>
+#include <stdbool.h>
+
+/** @brief shortcut for ATOMIC_BLOCK(ATOMIC_RESTORESTATE) **/
+#define SYNC ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+
+/** @brief atomically grab a lock if it is free, return otherwise **/
+#define REQUIRE_LOCK_OR_RETURN(LOCK) do { SYNC { if (LOCK) return; LOCK=1; } } while (0)
+
+/** @brief atomically release a lock **/
+#define RELEASE_LOCK(LOCK) do { LOCK=0; } while (0)
+
+
+
+#endif
+
Index: branches/scout/projects/libdragonfly/eeprom.h
===================================================================
--- branches/scout/projects/libdragonfly/eeprom.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/eeprom.h	(revision 1346)
@@ -0,0 +1,49 @@
+/**
+ * @file eeprom.h
+ * @brief handles eeprom storage for persistent data
+ *
+ * Contains functions and definitions for reading and writing to eeprom
+ *
+ * @author Colony Project, Brad Neuman
+ */
+ 
+ #ifndef _EEPROM_H_
+ #define _EEPROM_H_
+ 
+ #include <bom.h>
+ 
+ #define EEPROM_ROBOT_ID_ADDR 0x10
+ #define EEPROM_BOM_TYPE_ADDR 0x14
+ 
+ /** @brief store a byte to eeproem
+  *  @return 0 if success, nonzero on failure
+  */
+ int eeprom_put_byte(unsigned int addr, unsigned char byte);
+ 
+ /** @brief reads a byte from eeprom
+  *
+  *  Pass it thge address and a pointer to a byte where the byte at the
+  *  address will be stored
+  *
+  *  @return 0 if successful (byte is set to the eeprom value at addr), 
+  *  nonzero if there was a problem
+   */
+ int eeprom_get_byte(unsigned int addr, unsigned char *byte);
+ 
+ /** @brief get stored robot ID
+  *
+  *  checks that EEPROM has been programed with an ID and returns it
+  *
+  *  @return the robot id, if it is stored. If it returns 0xFF it is probably invalid
+  */
+ unsigned char get_robotid(void);
+  
+   /** @brief get stored robot ID
+  *
+  * checks that EEPROM has been programed with an BOM type and returns it
+  *
+  *  @return the robot bom type as defined in bom.h, if it is stored. If it returns 0xFF it is probably invalid
+  */
+ unsigned char get_bom_type(void);
+ 
+ #endif
Index: branches/scout/projects/libdragonfly/atomic.h
===================================================================
--- branches/scout/projects/libdragonfly/atomic.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/atomic.h	(revision 1346)
@@ -0,0 +1,309 @@
+/* This file is in the dragonfly library directory because it seems to be
+   missing from the AVR libc distribution */
+   
+/* Copyright (c) 2007 Dean Camera
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* $Id: atomic.h,v 1.3 2007/12/20 14:17:56 joerg_wunsch Exp $ */
+
+#ifndef _UTIL_ATOMIC_H_
+#define _UTIL_ATOMIC_H_ 1
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#if !defined(__DOXYGEN__)
+/* Internal helper functions. */
+static __inline__ uint8_t __iSeiRetVal(void)
+{
+    sei();
+    return 1;
+}
+
+static __inline__ uint8_t __iCliRetVal(void)
+{
+    cli();
+    return 1;
+}
+
+static __inline__ void __iSeiParam(const uint8_t *__s)
+{
+    sei();
+    __asm__ volatile ("" ::: "memory");
+    (void)__s;
+}
+
+static __inline__ void __iCliParam(const uint8_t *__s)
+{
+    cli();
+    __asm__ volatile ("" ::: "memory");
+    (void)__s;
+}
+
+static __inline__ void __iRestore(const  uint8_t *__s)
+{
+    SREG = *__s;
+    __asm__ volatile ("" ::: "memory");
+}
+#endif	/* !__DOXYGEN__ */
+
+/** \file */
+/** \defgroup util_atomic <util/atomic.h> Atomically and Non-Atomically Executed Code Blocks
+
+    \code
+    #include <util/atomic.h>
+    \endcode
+
+    \note The macros in this header file require the ISO/IEC 9899:1999
+    ("ISO C99") feature of for loop variables that are declared inside
+    the for loop itself.  For that reason, this header file can only
+    be used if the standard level of the compiler (option --std=) is
+    set to either \c c99 or \c gnu99.
+
+    The macros in this header file deal with code blocks that are
+    guaranteed to be excuted Atomically or Non-Atmomically.  The term
+    "Atomic" in this context refers to the unability of the respective
+    code to be interrupted.
+
+    These macros operate via automatic manipulation of the Global
+    Interrupt Status (I) bit of the SREG register. Exit paths from
+    both block types are all managed automatically without the need
+    for special considerations, i. e. the interrupt status will be
+    restored to the same value it has been when entering the
+    respective block.
+
+    A typical example that requires atomic access is a 16 (or more)
+    bit variable that is shared between the main execution path and an
+    ISR.  While declaring such a variable as volatile ensures that the
+    compiler will not optimize accesses to it away, it does not
+    guarantee atomic access to it.  Assuming the following example:
+
+    \code
+#include <inttypes.h>
+#include <avr/interrupt.h>
+#include <avr/io.h>
+
+volatile uint16_t ctr;
+
+ISR(TIMER1_OVF_vect)
+{
+  ctr--;
+}
+
+...
+int
+main(void)
+{
+   ...
+   ctr = 0x200;
+   start_timer();
+   while (ctr != 0)
+     // wait
+       ;
+   ...
+}
+    \endcode
+
+    There is a chance where the main context will exit its wait loop
+    when the variable \c ctr just reached the value 0xFF.  This happens
+    because the compiler cannot natively access a 16-bit variable
+    atomically in an 8-bit CPU.  So the variable is for example at
+    0x100, the compiler then tests the low byte for 0, which succeeds.
+    It then proceeds to test the high byte, but that moment the ISR
+    triggers, and the main context is interrupted.  The ISR will
+    decrement the variable from 0x100 to 0xFF, and the main context
+    proceeds.  It now tests the high byte of the variable which is
+    (now) also 0, so it concludes the variable has reached 0, and
+    terminates the loop.
+
+    Using the macros from this header file, the above code can be
+    rewritten like:
+
+    \code
+#include <inttypes.h>
+#include <avr/interrupt.h>
+#include <avr/io.h>
+#include <util/atomic.h>
+
+volatile uint16_t ctr;
+
+ISR(TIMER1_OVF_vect)
+{
+  ctr--;
+}
+
+...
+int
+main(void)
+{
+   ...
+   ctr = 0x200;
+   start_timer();
+   sei();
+   uint16_t ctr_copy;
+   do
+   {
+     ATOMIC_BLOCK(ATOMIC_FORCEON)
+     {
+       ctr_copy = ctr;
+     }
+   }
+   while (ctr_copy != 0);
+   ...
+}
+    \endcode
+
+    This will install the appropriate interrupt protection before
+    accessing variable \c ctr, so it is guaranteed to be consistently
+    tested.  If the global interrupt state were uncertain before
+    entering the ATOMIC_BLOCK, it should be executed with the
+    parameter ATOMIC_RESTORESTATE rather than ATOMIC_FORCEON.
+
+*/
+
+/** \def ATOMIC_BLOCK(type)
+    \ingroup util_atomic
+
+    Creates a block of code that is guaranteed to be executed
+    atomically. Upon entering the block the Global Interrupt Status
+    flag in SREG is disabled, and re-enabled upon exiting the block
+    from any exit path.
+
+    Two possible macro parameters are permitted, ATOMIC_RESTORESTATE
+    and ATOMIC_FORCEON.
+*/
+#if defined(__DOXYGEN__)
+#define ATOMIC_BLOCK(type)
+#else
+#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
+	                       __ToDo ; __ToDo = 0 )
+#endif	/* __DOXYGEN__ */
+
+/** \def NONATOMIC_BLOCK(type)
+    \ingroup util_atomic
+
+    Creates a block of code that is executed non-atomically. Upon
+    entering the block the Global Interrupt Status flag in SREG is
+    enabled, and disabled upon exiting the block from any exit
+    path. This is useful when nested inside ATOMIC_BLOCK sections,
+    allowing for non-atomic execution of small blocks of code while
+    maintaining the atomic access of the other sections of the parent
+    ATOMIC_BLOCK.
+
+    Two possible macro parameters are permitted,
+    NONATOMIC_RESTORESTATE and NONATOMIC_FORCEOFF.
+*/
+#if defined(__DOXYGEN__)
+#define NONATOMIC_BLOCK(type)
+#else
+#define NONATOMIC_BLOCK(type) for ( type, __ToDo = __iSeiRetVal(); \
+	                          __ToDo ;  __ToDo = 0 )
+#endif	/* __DOXYGEN__ */
+
+/** \def ATOMIC_RESTORESTATE
+    \ingroup util_atomic
+
+    This is a possible parameter for ATOMIC_BLOCK. When used, it will
+    cause the ATOMIC_BLOCK to restore the previous state of the SREG
+    register, saved before the Global Interrupt Status flag bit was
+    disabled. The net effect of this is to make the ATOMIC_BLOCK's
+    contents guaranteed atomic, without changing the state of the
+    Global Interrupt Status flag when execution of the block
+    completes.
+*/
+#if defined(__DOXYGEN__)
+#define ATOMIC_RESTORESTATE
+#else
+#define ATOMIC_RESTORESTATE uint8_t sreg_save \
+	__attribute__((__cleanup__(__iRestore))) = SREG
+#endif	/* __DOXYGEN__ */
+
+/** \def ATOMIC_FORCEON
+    \ingroup util_atomic
+
+    This is a possible parameter for ATOMIC_BLOCK. When used, it will
+    cause the ATOMIC_BLOCK to force the state of the SREG register on
+    exit, enabling the Global Interrupt Status flag bit. This saves on
+    flash space as the previous value of the SREG register does not
+    need to be saved at the start of the block.
+
+    Care should be taken that ATOMIC_FORCEON is only used when it is
+    known that interrupts are enabled before the block's execution or
+    when the side effects of enabling global interrupts at the block's
+    completion are known and understood.
+*/
+#if defined(__DOXYGEN__)
+#define ATOMIC_FORCEON
+#else
+#define ATOMIC_FORCEON uint8_t sreg_save \
+	__attribute__((__cleanup__(__iSeiParam))) = 0
+#endif	/* __DOXYGEN__ */
+
+/** \def NONATOMIC_RESTORESTATE
+    \ingroup util_atomic
+
+    This is a possible parameter for NONATOMIC_BLOCK. When used, it
+    will cause the NONATOMIC_BLOCK to restore the previous state of
+    the SREG register, saved before the Global Interrupt Status flag
+    bit was enabled. The net effect of this is to make the
+    NONATOMIC_BLOCK's contents guaranteed non-atomic, without changing
+    the state of the Global Interrupt Status flag when execution of
+    the block completes.
+*/
+#if defined(__DOXYGEN__)
+#define NONATOMIC_RESTORESTATE
+#else
+#define NONATOMIC_RESTORESTATE uint8_t sreg_save \
+	__attribute__((__cleanup__(__iRestore))) = SREG
+#endif	/* __DOXYGEN__ */
+
+/** \def NONATOMIC_FORCEOFF
+    \ingroup util_atomic
+
+    This is a possible parameter for NONATOMIC_BLOCK. When used, it
+    will cause the NONATOMIC_BLOCK to force the state of the SREG
+    register on exit, disabling the Global Interrupt Status flag
+    bit. This saves on flash space as the previous value of the SREG
+    register does not need to be saved at the start of the block.
+
+    Care should be taken that NONATOMIC_FORCEOFF is only used when it
+    is known that interrupts are disabled before the block's execution
+    or when the side effects of disabling global interrupts at the
+    block's completion are known and understood.
+*/
+#if defined(__DOXYGEN__)
+#define NONATOMIC_FORCEOFF
+#else
+#define NONATOMIC_FORCEOFF uint8_t sreg_save \
+	__attribute__((__cleanup__(__iCliParam))) = 0
+#endif	/* __DOXYGEN__ */
+
+#endif
Index: branches/scout/projects/libdragonfly/bom.c
===================================================================
--- branches/scout/projects/libdragonfly/bom.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/bom.c	(revision 1346)
@@ -0,0 +1,339 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file bom.c
+ * @brief Implementation for using the BOM
+ *
+ * Contains functions for using the Bearing and Orientation Module (BOM)
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#include <dragonfly_lib.h>
+#include "bom.h"
+#include "dio.h"
+#include "serial.h"
+#include "analog.h"
+
+//On the original BOM1.0, the emmitter angular order does not match the analog mux order
+//so you need to iterate through the mux index in the following order if you want to get
+//the detector readings in order:
+static const char lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+// internal function prototypes
+static void bom_select(char which);
+
+/*
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+*/
+
+
+/*
+the analog pin definitions from dio.h DO NOT work here,
+so we must use PF0 from avrgcc (as opposed to _PIN_F0).
+BUT the dio pin definitions from dio.h must be used (no PE...).
+
+also, _PIN_E2 is initialized to high for some reason,
+which turns the BOM on when the robot is turned on.
+WORK-AROUND: call digital_output(_PIN_E2,0) at some point.
+
+*/
+
+#define MONKI PF0         //analog (yellow)
+//------------------------//
+#define MONKL _PIN_E2     //green
+#define MONK1 _PIN_E3     //blue
+#define MONK0 _PIN_E4     //white
+//------------------------//
+#define MONK3 _PIN_E6     //blue
+#define MONK2 _PIN_E7     //white
+
+#define BOM_VALUE_THRESHOLD 200
+#define NUM_BOM_LEDS 16
+
+/*
+  *The following pin definitions are for the BOM v1.5
+  */
+
+#define BOM_MODE	_PIN_E2	//dio0
+#define BOM_STROBE	_PIN_E3	//dio1
+
+#define BOM_DATA	_PIN_A0 //servo0
+#define BOM_CLOCK	_PIN_A1	//servo1
+
+#define BOM_S0		_PIN_E5	//dio3
+#define BOM_S1		_PIN_E4	//dio2
+#define BOM_S2		_PIN_E7	//dio4
+#define BOM_S3		_PIN_E6	//dio5
+#define BOM_OUT		PF0		//analog(yellow)
+
+/**
+ * @defgroup bom BOM (Bearing and Orientation Module)
+ * @brief Functions for dealing with the BOM.
+ *
+ * The Bearing and Orientation Module / Barrel of Monkeys / BOM
+ * is a custom sensor designed and built by the Colony Project.
+ * It consists of a ring of 16 IR emitters and 16 IR detectors.
+ * The BOM is most often use to determine the direction of other
+ * robots. This module contains functions for controlling the BOM.
+ *
+ * Include bom.h to access these functions.
+ *
+ * @{
+ **/
+
+static unsigned int bom_val[NUM_BOM_LEDS];
+static volatile char bom_type = BOM;
+static int select_pins[4];
+static int analog_pin;
+
+/**
+ * Initializes the BOM.
+ * Call bom_init before reading bom values or turning bom leds.
+ *
+ * @bugs INCOMPLETE - No utilization of BOM1.5 RSSI capability. Probably leave this out
+ * until Cornell and Pras return
+ * 
+ * @see bom_refresh, bom_leds_on, bom_leds_off
+ **/
+void bom_init(char type) {
+    bom_type = type;
+    
+    switch(bom_type) {
+    case BOM10:
+		select_pins[0] = MONK0; 
+		select_pins[1] = MONK1;
+		select_pins[2] = MONK2;
+		select_pins[3] = MONK3;
+		analog_pin = MONKI;
+        break;
+    case BOM15:
+        //Sets BOM1.5 to normal [BOM] mode
+        digital_output(BOM_MODE, 0);
+		select_pins[0] = BOM_S0; 
+		select_pins[1] = BOM_S1;
+		select_pins[2] = BOM_S2;
+		select_pins[3] = BOM_S3;
+		bom_set_leds(BOM_ALL);
+		analog_pin = BOM_OUT;
+        break;
+    case RBOM:
+        break;
+    //default:
+    }
+}
+
+/**
+ * Iterates through each bit in the bit_field. For each set bit, sets the corresponding bom select bits
+ *    and updates the corresponding bom value with an analog_get8 reading.  analog_init and bom_init
+ *    must be called for this to work.
+ *
+ *
+ * @param bit_field specifies which elements in bom_val[] should be updated. Use BOM_ALL to refresh all values.
+ *    Ex. if 0x0003 is passed, bom_val[0] and bom_val[1] will be updated.
+ *
+ * @see bom_get
+ **/
+void bom_refresh(int bit_field) {
+    int i;
+    
+    analog_stop_loop();
+    
+    for(i = 0; i < NUM_BOM_LEDS; i++) {
+        if(bit_field & 0x1) {
+            bom_select(i);
+            bom_val[i] = analog_get8(analog_pin);
+        }
+        bit_field = bit_field >> 1;
+    }
+    
+    analog_start_loop();
+}
+
+/**
+ * Gets the bom reading from bom_val[which].  Call bom_refresh beforehand to read new bom values.
+ *
+ * @param which which bom value to return
+ *
+ * @return the bom value
+ *
+ * see bom_refresh
+ **/
+int bom_get(int which) {
+    return bom_val[which];
+}
+
+/** 
+ * Compares all the values in bom_val[] and returns the index to the lowest (max) value element.
+ *
+ * @return index to the lowest (max) bom value element.  -1 if no value is lower than
+ *    BOM_VALUE_THRESHOLD
+ **/
+int bom_get_max(void) {
+    int i, lowest_val, lowest_i;
+    lowest_i = -1;
+    lowest_val = 255;
+    for(i = 0; i < NUM_BOM_LEDS; i++) {
+        if(bom_val[i] < lowest_val) {
+            lowest_val = bom_val[i];
+            lowest_i = i;
+        }
+    }
+    
+    if(lowest_val < BOM_VALUE_THRESHOLD)
+        return lowest_i;
+    else
+        return -1;
+}
+
+/**
+ * Iterates through each bit in the bit_field. If the bit is set, the corresponding emitter will
+ *    be enabled to turn on when bom_on() is called.
+ *    bom_init must be called for this to work. Does nothing if a BOM1.0 is installed
+ *
+ * @param bit_field specifies which leds should be turned on when bom_on is called.  Use BOM_ALL to turn on all bom leds.
+ *    Ex. if 0x0005 is passed, leds 0 and 2 will be turned on.
+ **/
+void bom_set_leds(int bit_field) {
+    int i;
+	unsigned int mask = 1<<(NUM_BOM_LEDS-1);
+	switch(bom_type) {
+    case BOM10:
+        //TODO: put an assert here to alert the user that this should not be called
+        break;
+		
+    case BOM15:
+	    for(i=NUM_BOM_LEDS; i>0; i--)
+	    {
+		    //set the current bit, sending MSB first
+		    digital_output(BOM_DATA, bit_field&mask);
+		    //then pulse the clock
+		    digital_output(BOM_CLOCK, 1);
+		    digital_output(BOM_CLOCK, 0);
+			mask = mask>>1;
+	    }
+        break;
+		
+    case RBOM:
+        //add rbom code here
+        break;
+    }
+}
+
+
+/**
+ * (DEPRECATED) Returns the direction of the maximum BOM reading,
+ * as an integer in the range 0-15. 0 indicates to the
+ * robot's right, while the rest of the sensors are
+ * numbered counterclockwise. This is useful for determining
+ * the direction of a robot flashing its BOM, of only one
+ * robot is currently doing so. analog_init must be called
+ * before this function can be used.
+ *
+ * @return the direction of the maximum BOM reading
+ *
+ * @see analog_init
+ **/
+int get_max_bom(void) {
+    bom_refresh(BOM_ALL);
+    return bom_get_max();
+}
+
+/**
+ * Flashes the BOM.  If using a BOM1.5, only the emitters that have been enabled using
+ * bom_set_leds will turn on.
+ * 
+ * @see bom_off, bom_set_leds
+ **/
+void bom_on(void)
+{
+  switch(bom_type) {
+  case BOM10:
+	digital_output(MONKL, 1);
+	break;
+  case BOM15:
+	digital_output(BOM_STROBE, 1);
+	break;
+  case RBOM:
+	break;
+  }
+}
+
+/**
+ * Turns off all bom leds.
+ * 
+ * @see bom_on
+ **/
+void bom_off(void)
+{
+  switch(bom_type) {
+  case BOM10:
+	digital_output(MONKL, 0);
+	break;
+  case BOM15:
+	digital_output(BOM_STROBE, 0);
+	break;
+  case RBOM:
+	break;
+  }
+}
+
+/** @} **/ //end group
+
+//select a detector to read
+static void bom_select(char which) {
+	if(bom_type == BOM10)
+	  which = lookup[(int)which];
+	
+    if (which&8)
+      digital_output(select_pins[3], 1);
+    else
+      digital_output(select_pins[3], 0);
+
+    if (which&4)
+      digital_output(select_pins[2], 1);
+    else
+      digital_output(select_pins[2], 0);
+
+    if (which&2)
+      digital_output(select_pins[1], 1);
+    else
+      digital_output(select_pins[1], 0);
+
+    if (which&1)
+      digital_output(select_pins[0], 1);
+    else
+      digital_output(select_pins[0], 0);
+	
+}
Index: branches/scout/projects/libdragonfly/odometry.c
===================================================================
--- branches/scout/projects/libdragonfly/odometry.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/odometry.c	(revision 1346)
@@ -0,0 +1,146 @@
+#include "odometry.h"
+#include <encoders.h>
+#include <math.h>
+#include <avr/interrupt.h>
+#include <dragonfly_lib.h>
+
+long lround(double d);
+
+
+int encoder_ltm1, encoder_rtm1;
+
+//Measure mm displacement in x and y from starting position. (+x:theta=0 +y:theta=M_PI/2)
+long diff_x,diff_y, velocity;
+
+//Measures radian angle displacement from starting position. (initially 0)
+double angle;
+
+/**
+ * Retrieve the estimated x position. [millimeters]
+ */
+long odometry_dx(void){
+	return diff_x;
+}
+
+/**
+ * Retrieve the estimated y position. [millimeters]
+ */
+long odometry_dy(void){
+	return diff_y;
+}
+
+/**
+ * Retrieve the estimated angle [radians]
+ */
+double odometry_angle(void){
+	return angle;
+}
+
+long odometry_velocity(void){
+	return velocity;
+}
+
+/**
+ * Initializes odometry to run on timer 2.
+ * Also resets all values so that the center of the robot is 
+ * considered to be at the origin facing the x direction.
+ */
+void odometry_init(void){
+	
+	encoders_init();
+	
+	delay_ms(100);
+
+	odometry_reset();
+
+	
+	//CTC Mode. CLK / 1024
+	TCCR2 = 0; // (Fully disconnected)
+	TCCR2 = _BV(WGM21) | _BV(CS22) | _BV(CS20); //CLK/1024 , CTC Mode.
+
+	TIMSK |= _BV(OCIE2);
+
+	OCR2 = ODOMETRY_CLK;
+}
+/**
+ * Resets all values so that the center of the robot is 
+ * considered to be at the origin facing the x direction.
+ */
+void odometry_reset(void){
+	diff_x = 0;
+	diff_y = 0;
+	encoder_ltm1 = encoder_read(LEFT);
+	encoder_rtm1 = encoder_read(RIGHT);
+	angle = 0.0;
+}
+
+
+void odometry_run(void){
+	//Angle swept through in a time step CCW-
+	double theta, rl, dc;
+	long dr,dl;
+	char buf[100];
+	
+	//Get the change in wheel positions
+	{	
+		int encoder_right = encoder_read(RIGHT);	
+		int encoder_left = encoder_read(LEFT);	
+	
+		dl = encoder_left - encoder_ltm1;
+		dr = encoder_right - encoder_rtm1;
+		
+		//No motion.
+		if(dl == 0 && dr == 0) return;
+
+		encoder_ltm1 = encoder_left;
+		encoder_rtm1 = encoder_right;
+	
+		// Try to avoid over/underflow.
+		dl = dl > 512 ? dl - 1024 :dl;
+		dl = dl < -512 ? dl + 1024 :dl;
+		dr = dr > 512 ? dr - 1024 :dr;
+		dr = dr < -512 ? dr + 1024 :dr;
+	
+		//Convert "clicks" to um
+		dl *= CLICK_DISTANCE_UM; //um
+		dr *= CLICK_DISTANCE_UM;
+	}
+	
+
+	if(dl == dr){
+		diff_x += lround(dl*cos(angle)/1000.0); //mm
+		diff_y += lround(dl*sin(angle)/1000.0); //mm
+		velocity = lround((dl * 1000.0)/(ODOMETRY_CLK*TIME_SCALE)); //um / ms = mm/s
+		sprintf(buf,"dc: %ld, velocity: %ld\r\n mm/s",dl,velocity);
+		usb_puts(buf);
+		return;
+	}
+	
+	//Call the left wheel 0, clockwise positive.
+	rl = ((double)(ROBOT_WIDTH_UM*dl))/((double)(dl - dr)); //um
+	theta = ((double)(dl - dr))/((double)ROBOT_WIDTH_UM);   //rad
+	
+	//Distance the center has traveled.
+	dc = (theta * (rl - ROBOT_WIDTH_UM)) / 2.0; //um
+	velocity = lround( dc * 1000 /(ODOMETRY_CLK*TIME_SCALE));
+	sprintf(buf,"dc: %lfum, velocity: %ld\r\n mm/s",dc,velocity);
+	usb_puts(buf);
+	
+	//angle is necessarily CCW+, so subtract.
+	angle -= ANGLE_SCALE * theta; 
+	
+	//Change state variables. Probably lose all measurements less then a mm.
+	diff_x += lround((DISTANCE_SCALE * dc * cos(angle))/1000.0); //mm
+	diff_y += lround((DISTANCE_SCALE * dc * sin(angle))/1000.0); //mm
+}
+
+ISR(TIMER2_COMP_vect){
+	odometry_run(); 
+}
+
+long lround(double d){
+	double f = floor(d);
+	return (long)(d - f > 0.5 ? f + 1 : f);
+}
+
+
Index: branches/scout/projects/libdragonfly/odometry.h
===================================================================
--- branches/scout/projects/libdragonfly/odometry.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/odometry.h	(revision 1346)
@@ -0,0 +1,56 @@
+
+/**
+ * @file odometry.h
+ * @brief Code for estimating the robots pose.
+ * 
+ * Offers simple position and orientation information.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef __ODOMETRY_C__
+#define __ODOMETRY_C__
+
+/**
+ * @addtogroup odometry 
+ * @{
+ **/
+
+//Odometry resolution, *64 microseconds.
+#define ODOMETRY_CLK 255u 
+#define TIME_SCALE 64
+
+//Wheel = 2.613 in.  
+//Circumference = 208.508133 mm
+//Distance per encoder click (circumference / 1024)  = 203.621224 um.
+//Robot width = 5.3745 in. = 136.5123 mm
+
+#define ROBOT_WIDTH_UM 137000  //um
+#define CLICK_DISTANCE_UM 204 //um
+
+#define DISTANCE_SCALE 2.10526316 //Magic constant.
+#define ANGLE_SCALE 1.12823207 //Magic constant.
+
+/** @brief Retrieve the robots estimated x position*/
+long odometry_dx(void);
+
+/** @brief Retrieve the robots estimated y position*/
+long odometry_dy(void);
+
+/** @brief Retrieve the robots estimated orientation*/
+double odometry_angle(void);
+
+/** @brief Initialize odometry. MUST be called before 
+ * the other functions work.**/
+void odometry_init(void);
+
+/** @brief Reset position and orientation to the origin facing
+ * the x axis.*/
+void odometry_reset(void);
+
+/** @brief Report estimated velocity [mm/s].*/
+long odometry_velocity(void);
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/projects/libdragonfly/dragonfly_lib.c
===================================================================
--- branches/scout/projects/libdragonfly/dragonfly_lib.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/dragonfly_lib.c	(revision 1346)
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file dragonfly_lib.c
+ * @brief Dragonfly initialization
+ *
+ * Contains implementation of dragonfly_init.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#include <dragonfly_lib.h>
+
+/* init_dragonfly - Initializes functions based on configuration parameters
+   examples:
+
+   init_dragonfly (0, 0, 0); - just initialize the digital IO (buttons, potentiometer)
+
+   init_dragonfly (ANALOG | SERIAL | BUZZER, C0_C1_ANALOG, BAUD115200); 
+   Initialize ADC and set C0 and C1 as analog inputs.  Initialize serial and set baud rate
+   to 115200 bps.  Initialize the buzzer.
+   
+   init_dragonfly (MOTORS | ORB, 0, 0);
+   Initialize motor driving and the color fading abilities of the ORB. */
+
+/**
+ * @defgroup dragonfly Dragonfly
+ * @brief General Dragonfly Functions
+ * General functions for the dragonfly. Include
+ * dragonfly_lib.h to access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the components specified by config.
+ * 
+ * @see analog_init, usb_init, xbee_init, buzzer_init,
+ * bom_init, orb_init, motors_init, lcd_init
+ **/
+ 
+void flash_red(void);
+
+void dragonfly_init(int config) 
+{
+    sei();
+    // Set directionality of various IO pins
+    DDRG &= ~(_BV(PING0)|_BV(PING1));
+    PORTG |= _BV(PING0)|_BV(PING1);
+    
+    if(config & ANALOG)
+        analog_init(ADC_START);
+    
+    if(config & COMM)
+    {
+        //Defaults to 115200. Check serial.h for more information.
+        usb_init();
+        xbee_init();
+    }
+    
+    if(config & BUZZER)
+    {
+        sei();
+        buzzer_init();
+    }
+    
+    if(config & ORB)
+    {
+        sei();
+        orb_init();
+    }
+    
+    if(config & MOTORS)
+        motors_init();
+
+    if(config & LCD)
+        lcd_init();
+    
+    if(config & RANGE)
+        range_init();
+        
+    if(config & BOM)
+    {
+        unsigned char bom_read = get_bom_type();
+        if(bom_read == 0xFF)
+            //warn that bom initialization failed
+            flash_red();
+        else
+            bom_init(bom_read);
+    }
+    // delay a bit for stability
+    _delay_ms(1);
+}
+
+//flash lights red three times and restore ports
+void flash_red(void)
+{
+    cli();
+    char dd = DDRC;
+    char po = PORTC;
+    char i;
+    DDRC = 0x77;
+    for(i = 0; i<3; i++)
+    {
+        PORTC = 0x77;
+        delay_ms(300);
+        PORTC = 0x66;
+        delay_ms(300);
+    }
+    
+    DDRC = dd;
+    PORTC = po;
+    sei();
+}
+/** @} **/ //end defgroup
+
Index: branches/scout/projects/libdragonfly/eeprom.c
===================================================================
--- branches/scout/projects/libdragonfly/eeprom.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/eeprom.c	(revision 1346)
@@ -0,0 +1,55 @@
+#include <avr/io.h>
+#include "eeprom.h"
+
+int eeprom_put_byte(unsigned int uiAddress, unsigned char ucData) {
+    /* Wait for completion of previous write */
+    while(EECR & (1<<EEWE));
+    /* Set up address and data registers */
+    EEAR = uiAddress;
+    EEDR = ucData;
+    /* Write logical one to EEMWE */
+    EECR |= (1<<EEMWE);
+    /* Start eeprom write by setting EEWE */
+    EECR |= (1<<EEWE);
+    
+    return 0;
+}
+
+int eeprom_get_byte(unsigned int uiAddress, unsigned char *byte) {
+    /* Wait for completion of previous write */
+    while(EECR & (1<<EEWE));
+    /* Set up address register */
+    EEAR = uiAddress;
+    /* Start eeprom read by writing EERE */
+    EECR |= (1<<EERE);
+    /* get data from data register */
+    *byte=EEDR;
+    
+    return 0;
+}
+
+
+unsigned char get_robotid(void) {
+    unsigned char c0, c1, c2;
+    
+    eeprom_get_byte(EEPROM_ROBOT_ID_ADDR, &c0);
+    eeprom_get_byte(EEPROM_ROBOT_ID_ADDR+1, &c1);
+    eeprom_get_byte(EEPROM_ROBOT_ID_ADDR+2, &c2);
+    if(c0 == 'I' && c1 == 'D')
+        return c2;
+    else
+        return 0xFF;
+}
+
+unsigned char get_bom_type(void) {
+    unsigned char c0, c1, c2, c3;
+    
+    eeprom_get_byte(EEPROM_BOM_TYPE_ADDR, &c0);
+    eeprom_get_byte(EEPROM_BOM_TYPE_ADDR+1, &c1);
+    eeprom_get_byte(EEPROM_BOM_TYPE_ADDR+2, &c2);
+    eeprom_get_byte(EEPROM_BOM_TYPE_ADDR+3, &c3);
+    if(c0 == 'B' && c1 == 'O' && c2 == 'M')
+        return c3;
+    else
+        return 0xFF;
+}
Index: branches/scout/projects/libdragonfly/bom.h
===================================================================
--- branches/scout/projects/libdragonfly/bom.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/bom.h	(revision 1346)
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file bom.h
+ * @brief Definitions for using the BOM
+ * 
+ * This file contains definitions for using the Bearing and 
+ * Orientation Module (BOM).
+ *
+ * @author Colony Project, CMU Robotics Club
+ *
+ **/
+
+#ifndef _BOM_H
+#define _BOM_H
+
+/**
+ * @addtogroup bom
+ * @{
+ **/
+ 
+/** @brief Include all elements in the 16-bit bitfield **/
+#define BOM_ALL 0xFFFF
+
+/** @brief Original BOM - No Range, No Individual LED control **/
+#define BOM10     0
+
+/** @brief BOM 1.5 - No Range, Individual LED control **/
+#define BOM15   1
+
+/** @brief RBOM - Range, Individual LED control **/
+#define RBOM    2
+
+
+/** @brief Initialize the bom according to bom type **/
+void bom_init(char type);
+
+/** @brief Refresh bom_val[] with new values from analog8.  analog_init and bom_init must be called for this to work. **/
+void bom_refresh(int bit_field);
+
+/** @brief Gets the bom reading from bom_val[which].  Call bom_refresh beforehand to read new bom values. **/
+int bom_get(int which);
+
+/** @brief Compares all the values in bom_val[] and returns the index to the highest value element. **/
+int bom_get_max(void);
+
+/** @brief Enables the selected bom leds on a BOM1.5 **/
+void bom_set_leds(int bit_field);
+
+/** @brief (DEPRECATED) Gets and compares all bom values.  Returns the index to the highest value element. **/
+int get_max_bom(void);
+
+/** @brief Turns on all BOM leds, or turns on enabled leds on a BOM1.5. **/
+void bom_on(void);
+
+/** @brief Turns off all bom leds. **/
+void bom_off(void);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/projects/libdragonfly/encoders.c
===================================================================
--- branches/scout/projects/libdragonfly/encoders.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/encoders.c	(revision 1346)
@@ -0,0 +1,291 @@
+#include "encoders.h"
+#include "spi.h"
+#include "dragonfly_lib.h"
+#include "ring_buffer.h"
+
+unsigned int left_data_buf;
+unsigned int right_data_buf;
+char encoder_buf_index;
+
+unsigned int left_data;
+unsigned int right_data;
+
+unsigned int left_data_array[BUFFER_SIZE];
+unsigned int right_data_array[BUFFER_SIZE];
+int left_data_idx;
+int right_data_idx;
+
+int left_dx;
+int right_dx;
+long int timecount;
+
+int left_v;
+int right_v;
+
+
+volatile short int data_ready;
+
+void encoder_recv(char data);
+
+//Helper Function Prototypes
+inline void left_data_array_put(unsigned short int value);
+inline unsigned int left_data_array_top(void);
+inline unsigned int left_data_array_prev(void);
+inline unsigned int left_data_array_bottom(void);
+
+inline void right_data_array_put(unsigned short int value);
+inline unsigned int right_data_array_top(void);
+inline unsigned int right_data_array_prev(void);
+inline unsigned int right_data_array_bottom(void);
+
+
+void encoder_recv_complete(void){
+  	encoder_buf_index = 0;
+	data_ready++;
+  
+   	spi_transfer(5);
+}
+
+/** 
+* @brief Initializes encoder variables and the hardware interface.
+*/
+void encoders_init(void){
+	int i;
+	
+	data_ready=0;
+
+	spi_init(encoder_recv, encoder_recv_complete);
+	encoder_buf_index = 0;
+	left_data_buf = 0;
+	right_data_buf= 0;
+	left_data = -1;
+	right_data = -1;
+	
+	
+	left_v=0;
+	right_v=0;
+	
+	//RING_BUFFER_INIT(enc_buffer,BUFFER_SIZE);
+	left_data_idx = 0;
+	right_data_idx = 0;
+	for(i = 0; i < BUFFER_SIZE; i++) {
+		left_data_array[i] = 0;
+	}
+	for(i = 0; i < BUFFER_SIZE; i++) {
+		right_data_array[i] = 0;
+	}
+	spi_transfer(5);
+}
+
+/**
+ * @brief Returns the specified encoders value
+ *
+ * @param encoder this is the encoder that you want to read. Valid arguments
+ *          are LEFT and RIGHT
+ *
+ * @return the value of the specified encoder
+ **/
+int encoder_read(char encoder){
+	
+	if(encoder==LEFT) return left_data;
+	else if(encoder==RIGHT) return right_data;
+	else return -1;
+}
+
+/**
+ * Gets the total distance covered by the specified encoder (in encoder clicks)
+ *
+ * @param encoder the encoder that you want to read, use LEFT or RIGHT
+ *
+ * @return The distance covered by the specified encoder.
+ **/
+int encoder_get_dx(char encoder) {
+	
+	if(encoder==LEFT) return left_dx;
+	else if(encoder==RIGHT) return right_dx;
+	else return -1;
+}
+
+/**
+ * Resets the distance accumulator for the specified
+ *  encoder.
+ *
+ * @param encoder the encoder that you want to reset distance for
+ **/
+void encoder_rst_dx(char encoder) {
+	
+	if(encoder==LEFT) left_dx = 0;
+	else if(encoder==RIGHT) right_dx = 0;
+}
+
+/** 
+* @brief Returns the number of encoder reads that have occurred.
+* 
+* @return The time count.
+*/
+int encoder_get_tc(void) {
+	return timecount;
+}
+
+/** 
+* @brief Resets the encoder read counter.
+*/
+void encoder_rst_tc(void) {
+	timecount = 0;
+}
+
+/** 
+* @brief Waits until n encoder reads have occurred.
+* Counter is reset on functions exit.
+* 
+* @param n 
+*/
+void encoder_wait(int n){
+	while(data_ready<n);
+	data_ready=0;
+}
+
+
+//Full reads occur every 40 microseconds. This function should be called
+//every 8 microseconds.
+void encoder_recv(char data){
+	short int dx;
+	
+	//Parse the encoder data, comes in over 5 bytes 16 bits per encoder,
+	// second is offset by 1 bit.
+	switch(encoder_buf_index){	
+	case 0: 
+		right_data_buf |= ((short)data)<<8 & 0xff00;
+		break;
+	case 1:
+		right_data_buf |= ((short)data) & 0xff;
+		break;
+	case 2:
+		left_data_buf |= (((short)data) << 9) & (0x7F << 9);
+		break;
+	case 3:
+		left_data_buf |= (((short)data) << 1) & (0xFF<<1);
+		break;
+	case 4: left_data_buf |= (((short)data)>>7) & 0x1;
+	}	
+		
+	encoder_buf_index = (encoder_buf_index + 1) % 5;
+
+	if(encoder_buf_index==0) {
+		
+		/*Error handling for the left encoder*/ 
+		if(!(left_data_buf & OCF)) 
+			left_data = ENCODER_DATA_NOT_READY; 
+		if(left_data_buf & (COF | LIN))  
+			left_data = ENCODER_MISALIGNED;
+		else if((left_data_buf & MagINCn) && (left_data_buf & MagDECn)) 
+			left_data = ENCODER_MAGNET_FAILURE;
+		else left_data = (left_data_buf>>5) & 1023;
+			
+		/*Error handling for the right encoder*/ 
+	 	if(!(right_data_buf & OCF))
+			right_data = ENCODER_DATA_NOT_READY;	
+		if(right_data_buf & (COF | LIN)) 
+			right_data = ENCODER_MISALIGNED;
+		else if ((right_data_buf & MagINCn)  && (right_data_buf & MagDECn)) 
+			right_data = ENCODER_MAGNET_FAILURE;
+		else right_data = (right_data_buf>>5) & 1023;
+			
+  		left_data_buf = 0;
+		right_data_buf = 0;
+
+		/*Note: Above 1023 is invalid data*/	
+		if(!(left_data > 1023)) {
+			//Reverse the left wheel since encoders are necessarily mounted backwards.
+			left_data = 1023 - left_data;
+			left_data_array_put(left_data);
+
+			//Adjust left accumulator
+			dx = left_data - left_data_array_prev();
+			
+			//Adjust velocity: save last dx
+			left_v = left_dx;
+			
+			if(left_data_array_prev()==0)  dx=0;
+
+			if(dx > 512) left_dx += dx - 1023; //Underflow
+			else if(dx < -512) left_dx += dx + 1023; //Overflow
+			else left_dx += dx;
+			
+			//Adjust velocity: update
+			left_v = left_dx - left_v;
+		}
+
+		/*Above 1023 is invalid data*/	
+		if(!(right_data > 1023)) {
+			right_data_array_put(right_data);
+
+			//Adjust right accumulator
+			dx = right_data - right_data_array_prev();
+
+			if(right_data_array_prev()==0) dx=0;
+			  
+			if(dx > 512) right_dx += dx - 1023; //underflow
+			else if(dx < -512) right_dx += dx + 1023; //overflow 
+			else right_dx += dx;
+		}
+	}
+
+	//Increment timecount accumulator
+	timecount++;
+}
+
+
+//Helper Functions
+inline void left_data_array_put(unsigned short int value) {
+	if(left_data_idx == BUFFER_SIZE-1)
+		left_data_idx = 0;
+	else
+		left_data_idx++;
+	left_data_array[left_data_idx] = value;
+}
+
+inline unsigned int left_data_array_top(void) {
+	return left_data_array[left_data_idx];
+}
+
+inline unsigned int left_data_array_prev(void) {
+	if(left_data_idx == 0)
+		return left_data_array[BUFFER_SIZE-1];
+	else
+		return left_data_array[left_data_idx - 1];
+}
+
+inline unsigned int left_data_array_bottom(void) {
+	if(left_data_idx == BUFFER_SIZE-1)
+		return left_data_array[0];
+	else
+		return left_data_array[left_data_idx + 1];
+}
+
+inline void right_data_array_put(unsigned short int value) {
+	if(right_data_idx == BUFFER_SIZE-1)
+		right_data_idx = 0;
+	else
+		right_data_idx++;
+	right_data_array[right_data_idx] = value;
+}
+
+inline unsigned int right_data_array_top(void) {
+	return right_data_array[right_data_idx];
+}
+
+inline unsigned int right_data_array_prev(void) {
+	if(right_data_idx == 0)
+		return right_data_array[BUFFER_SIZE-1];
+	else
+		return right_data_array[right_data_idx - 1];
+}
+
+inline unsigned int right_data_array_bottom(void) {
+	if(right_data_idx == BUFFER_SIZE-1)
+		return right_data_array[0];
+	else
+		return right_data_array[right_data_idx + 1];
+}
+
Index: branches/scout/projects/libdragonfly/spi.c
===================================================================
--- branches/scout/projects/libdragonfly/spi.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/spi.c	(revision 1346)
@@ -0,0 +1,74 @@
+/**
+ * @file spi.c
+ * @brief Basic SPI module to handle encoders
+ * @author Colony Project, CMU Robotics Club
+ *	Need to move spi.h include into dragonfly_lib.h when stable
+ **/
+
+#include <avr/interrupt.h>
+#include <dragonfly_lib.h>
+#include "spi.h"
+
+
+static volatile char spi_bytes; /* number of bytes to read */
+static spi_fun_recv_t spi_recv_func; /* byte handler */
+static spi_fun_recv_complete_t spi_recv_complete_func; /*transmission completion handler */
+
+/** 
+* @brief Initialize SPI hardware for communication.
+* 
+* @param recv_func The function to be called for each byte of data received.
+* @param recv_complete_func  The function to be called at the end of a complete transmission.
+*/
+void spi_init (spi_fun_recv_t recv_func, spi_fun_recv_complete_t recv_complete_func)
+{
+    /*  Enable Interrupt, Enable SPI Module, MSB First, Master Mode, Clock div = 64 */
+    SPCR = _BV(SPE) | _BV(SPIE) /*| _BV(DORD)*/ | _BV(MSTR) | _BV(SPR1) | _BV(SPR0);
+    SPSR = _BV(SPI2X); 
+
+    /* Set SCLK, SS, MOSI as outputs. MISO as input */
+    DDRB |= MOSI | SCLK | SS;
+    DDRB &= ~MISO;
+    
+    /* Keep SS high until transmit */
+    PORTB |= SS;
+
+    /* set function to be executed when we receive a byte */
+    spi_recv_func = recv_func;
+    spi_recv_complete_func = recv_complete_func;
+    spi_bytes = 0;
+    //usb_puts("\tspi.c Debug: SPI INITIALIZED\n");
+}
+
+/** 
+* @brief Transfer a given byte to slave and receive a byte 
+* 
+* @param bytes The number of bytes to be transferred.
+**/
+void spi_transfer(char bytes)
+{
+    spi_bytes = bytes;
+    PORTB &= ~SS; /* Set SS low to initiate transmission */
+    SPDR = 0xff; /* Initiate data transmision */
+}
+
+ISR(SIG_SPI) 
+{
+	//usb_puts("Interrupt");
+    /* only handle intterupt when we are expecting data */
+    if(spi_bytes > 0){
+	/* process byte */
+	spi_recv_func(SPDR);
+	/* if we've read all the bytes, set SS high to end transmission,
+	 * otherwise get the next byte  */
+	if(--spi_bytes == 0){
+		//usb_puts("Read all bytes\r\n");
+		PORTB |= SS;
+		if(spi_recv_complete_func)
+			spi_recv_complete_func();
+	}else {
+		//usb_puts("There are this many bytes left: "); usb_puti(spi_bytes);usb_puts("\r\n");
+		SPDR = 0xff;
+	}
+    }
+}		
Index: branches/scout/projects/libdragonfly/spi.h
===================================================================
--- branches/scout/projects/libdragonfly/spi.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/spi.h	(revision 1346)
@@ -0,0 +1,46 @@
+/**
+ * @file spi.h
+ * @brief Definitions for SPI
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @addtogroup spi
+ * @{
+ **/
+
+#ifndef __SPI_H__
+#define __SPI_H__
+
+#define DOUBLE_SCK 1
+#define SPR0_BIT 1
+
+#define MASTER 1
+#define SLAVE 0
+
+#define MOSI _BV(PB2)
+#define MISO _BV(PB3)
+#define SS   _BV(PB0)
+#define SCLK _BV(PB1)
+
+typedef void (*spi_fun_recv_t)(char);
+typedef void (*spi_fun_recv_complete_t)(void);
+
+/** 
+* @brief Initialize SPI
+* 
+* @param spi_fun_recv_t The function that handles SPI data, byte for byte.
+* @param spi_fun_recv_complete_t  Called on a completed transmission - typically for cleaning up.
+*/
+void spi_init (spi_fun_recv_t, spi_fun_recv_complete_t);
+
+/** 
+* @brief Initialize SPI transfer.
+* 
+* @param char The number of bytes to transfer.
+*/
+void spi_transfer (char);
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/projects/libdragonfly/encoders.h
===================================================================
--- branches/scout/projects/libdragonfly/encoders.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/encoders.h	(revision 1346)
@@ -0,0 +1,73 @@
+/**
+ * 
+ * @file encoders.h
+ * @brief Contains functions for reading encoder values.
+ *
+ * Contains high and low level functions for reading encoders
+ * including reading out total distance covered, and 
+ * eventually velocity.
+ *	
+ * @author Colony Project, CMU Robotics Club
+*/
+
+/**
+ * @addtogroup encoders
+ * @{
+ **/
+
+#ifndef __ENCODERS_H__
+#define __ENCODERS_H__
+
+
+#ifndef LEFT
+	#define LEFT 0
+#endif
+#ifndef RIGHT
+	#define RIGHT 1
+#endif
+
+/** @brief Magnet misaligned - likely distance from encoder problem. **/
+#define ENCODER_MAGNET_FAILURE 1025
+/** @brief Encoder misaligned - likely on XY plane. **/
+#define ENCODER_MISALIGNED 1027
+/** @brief Not enough time has passed - encoders not initialized in hardware. **/
+#define ENCODER_DATA_NOT_READY 1026
+
+//delay_ms argument after a full read is complete
+#define ENCODER_DELAY 20
+
+#define MIN_V (-100)
+#define MAX_V 100
+
+//Data invalid flags (hardware failure):
+#define OCF _BV(4)
+#define COF _BV(3)
+
+//Data invalid alarm (May be invalid):
+#define LIN _BV(2)
+
+#define MagINCn _BV(1)
+#define MagDECn _BV(0)
+
+#define BUFFER_SIZE 23
+
+/** @brief Initialize encoders. **/
+void encoders_init(void);
+/** @brief Read instantaneous encoder value. **/
+int encoder_read(char encoder);
+
+/** @brief Get total distance traveled. **/
+int encoder_get_dx(char encoder);
+/** @brief Reset distance counter. **/
+void encoder_rst_dx(char encoder);
+/** @brief Get time count: The number of encoder reads that have occurred. **/
+int encoder_get_tc(void);
+/** @brief Reset the time count. **/
+void encoder_rst_tc(void);
+
+/** @brief Waits for the next n encoder reading, then returns. **/
+void encoder_wait( int nReadings );
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/projects/libdragonfly/analog.c
===================================================================
--- branches/scout/projects/libdragonfly/analog.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/analog.c	(revision 1346)
@@ -0,0 +1,346 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file analog.c
+ * @brief Analog input and output
+ *
+ * Contains functions for manipulating the ADC on the Dragonfly board.
+ * 
+ * @author Colony Project, CMU Robotics Club
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ **/
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+#include "serial.h"
+// Internal Function Prototypes
+void set_adc_mux(int which);
+
+/**
+ * @defgroup analog Analog
+ * Functions for manipulation the ADC on the dragonfly board.
+ * All definitions may be found in analog.h.
+ *
+ * @{
+ **/
+
+int adc_loop_running = 0;
+int adc_current_port = 0;
+adc_t an_val[11];
+
+/**
+ * Initializes the ADC.
+ * Call analog_init before reading from the analog ports.
+ *
+ * @see analog8, analog10, analog_get8, analog_get10
+ **/
+void analog_init(int start_conversion) {
+	for (int i = 0; i < 11; i++) {
+		an_val[i].adc10 = 0;
+		an_val[i].adc8 = 0;
+	}
+
+	// ADMUX register
+	// Bit 7,6 - Set voltage reference to AVcc (0b01)
+	// Bit 5 - ADLAR set to simplify moving from register
+	// Bit 4 - X
+	// Bit 3:0 - Sets the current channel
+	// Initializes to read from AN1 first (AN0 is reservered for the BOM)
+	ADMUX = 0;
+	ADMUX |= ADMUX_OPT | _BV(MUX0);
+
+	// ADC Status Register A
+	// Bit 7 - ADEN is set (enables analog)
+	// Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+	// Bit 5 - Enable Auto Trigger (for free running mode) NOT DOING THIS RIGHT NOW
+	// Bit 4 - ADC interrupt flag, 0
+	// Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+	// Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 8,000,000/64 = 125kHz
+	ADCSRA = 0;
+	ADCSRA |= _BV(ADEN) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
+	
+	// Set external mux lines to outputs
+	DDRG |= 0x1C;
+	
+	// Set up first port for conversions
+	set_adc_mux(0x00);
+	adc_current_port = AN1;
+
+	//Start the conversion if requested
+	if (start_conversion)
+		analog_start_loop();
+	else
+		analog_stop_loop();
+}	
+
+/**
+ * Returns the 8-bit analog conversion of which from
+ * the lookup table. If the requested port is the BOM_PORT
+ * you will get an automatic 0 since the BOM_PORT is not
+ * read in the loop and not stored. If you need that port
+ * you should use the functions in bom.c. There is an analog_get8
+ * function which for instant lookups but should be avoided unless
+ * you know what you're doing.
+ *
+ * @param which the port that you want to read
+ *
+ * @bug may cause a seg fault if which is a larger value
+ * than exists in an_val table. Not sure if we should fix
+ * this or not since it would add overhead.
+ *
+ * @return 8-bit analog value for the which port requested
+ *
+ * @see analog10, analog_get8, analog_get10
+ **/
+unsigned int analog8(int which) {
+	if (which == BOM_PORT) {
+		return 0;
+	} else {
+		return an_val[which - 1].adc8;
+	}
+}
+
+/**
+ * Returns the 10-bit analog conversion of which from
+ * the lookup table. If the requested port is the BOM_PORT
+ * you will get an automatic 0 since the BOM_PORT is not
+ * read in the loop and not stored. If you need that port
+ * you should use the functions in bom.c. There is an analog_get10
+ * function which for instant lookups but should be avoided unless
+ * you know what you are doing.
+ *
+ * @param which the port that you want to read
+ *
+ * @bug may cause a seg fault if which is a larger value
+ * than exists in an_val table. Not sure if we should fix
+ * this or not since it would add overhead.
+ *
+ * @return 10-bit analog value for the which port requested
+ *
+ * @see analog8, analog_get8, analog_get10
+ **/
+unsigned int analog10(int which) {
+	if (which == BOM_PORT) {
+		return 0;
+	} else {
+		return an_val[which - 1].adc10;
+	}
+}
+
+/**
+ * Starts the analog update loop. Will continue to run
+ * until analog_stop_loop is called.
+ *
+ * @see analog_stop_loop
+ **/
+void analog_start_loop(void) {
+	//Start the conversion
+	ADCSRA |= _BV(ADSC);
+	adc_loop_running = 0x1;
+}
+
+/**
+ * Stops the analog update loop. If there is a current
+ * read, it will finish up and be stored before the loop
+ * is interrupted. No further updates will be made until
+ * the loop is started again.
+ *
+ * @see analog_start_loop
+ **/
+void analog_stop_loop(void) {
+	//Stop the conversion
+	adc_loop_running = 0x0;
+}
+/**
+ * Reads an 8-bit number from an analog port.
+ * analog_init must be called before using this function.
+ * The analog loop must also be stopped before using this
+ * function or you will mess up the lookup table. You
+ * must also reenabled the loop when you are done unless
+ * you are doing more instant reads. See analog_stop_loop
+ * and analog_start_loop for more information about the loop.
+ * 
+ * @param which the analog port to read from. One of
+ * the constants AN0 - AN7.
+ *
+ * @return the 8-bit input to the specified port
+ *
+ * @see analog_init, analog_get10, analog8, analog_stop_loop,
+ * analog_start_loop
+ **/
+unsigned int analog_get8(int which) {	
+	// Let any previous conversion finish
+	while (ADCSRA & _BV(ADSC));
+	
+	if(which < EXT_MUX) {
+		ADMUX = ADMUX_OPT + which;
+	} else {
+		ADMUX = ADMUX_OPT + EXT_MUX;
+		set_adc_mux(which - 8);
+	}
+	
+	// Start the conversion
+	ADCSRA |= _BV(ADSC);
+
+	// Wait for the conversion to finish
+	while (ADCSRA & _BV(ADSC));
+
+	return ADCH; //since we left aligned the data, ADCH is the 8 MSB.
+}
+
+/**
+ * Reads an 10-bit number from an analog port.
+ * analog_init must be called before using this function.
+ * The analog loop must also be stopped before using this
+ * function or you will mess up the lookup table. You
+ * must also reenabled the loop when you are done unless
+ * you are doing more instant reads. See analog_stop_loop
+ * and analog_start_loop for more information about the loop.
+ * 
+ *
+ * @param which the analog port to read from. Typically
+ * a constant, one of AN0 - AN7.
+ *
+ * @return the 10-bit number input to the specified port
+ * 
+ * @see analog_init, analog_get8, analog10, analog_stop_loop,
+ * analog_start_loop
+ **/
+unsigned int analog_get10(int which) {
+	int adc_h;
+	int adc_l;
+	
+	// Let any previous conversion finish
+	while (ADCSRA & _BV(ADSC));
+
+	if(which < EXT_MUX) {
+		ADMUX = ADMUX_OPT + which;
+	} else {
+		ADMUX = ADMUX_OPT + EXT_MUX;
+		set_adc_mux(which - 8);
+	}
+	
+	// Start the conversion
+	ADCSRA |= _BV(ADSC);
+
+	// Wait for the conversion to finish
+	while (ADCSRA & _BV(ADSC));
+	
+	adc_l = ADCL;
+	adc_h = ADCH;
+
+	return ((adc_h << 2) | (adc_l >> 6));
+}
+
+/**
+ * Returns the current position of the wheel, as an integer
+ * in the range 0 - 255.
+ * analog_init must be called before using this function.
+ *
+ * @return the orientation of the wheel, as an integer in
+ * the range 0 - 255.
+ *
+ * @see analog_init
+ **/
+int wheel(void) {
+	return analog8(WHEEL_PORT);
+}
+
+
+/**
+ * Sets the value of the external analog mux. Values are read
+ * 	on AN7 physical port. (AN8 - AN15 are "virtual" ports).
+ *
+ * @param which which analog mux port (0-7) which corresponds
+ * 		  to AN8-AN15.
+ *
+ * @bug FIX THIS IN THE NEXT BOARD REVISION:
+ *		ADDR2 ADDR1 ADDR0
+ *		G2.G4.G3 set mux to port 0-7 via vinary selection
+ *		math would be much cleaner if it was G4.G3.G2
+ *
+ * @see analog_init
+ **/
+void set_adc_mux(int which) {  
+  // mask so only proper bits are possible.  
+  PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04);
+}
+
+/**@}**/ //end defgroup
+
+
+ISR(ADC_vect) {
+	static volatile int adc_prev_loop_running = 0; 
+	int adc_h = 0;
+	int adc_l = 0;
+
+	//Store the value only if this read isn't for the BOM
+	if (ADMUX != BOM_PORT) {
+		adc_l = ADCL;
+		adc_h = ADCH;
+	
+		an_val[adc_current_port - 1].adc10 = (adc_h << 2) | (adc_l >> 6);
+		an_val[adc_current_port - 1].adc8 = adc_h;
+	}
+	
+	//Save the result only if we just turned off the loop
+	if (!adc_loop_running && !adc_prev_loop_running)
+		return;
+	
+	adc_prev_loop_running = adc_loop_running;
+	
+	//Skip AN7 because it is not a real port
+	if (adc_current_port == AN6) {
+		ADMUX = ADMUX_OPT | EXT_MUX;
+		set_adc_mux(AN8 - 8);
+		adc_current_port = AN8;
+	//Wrap around
+	} else if (adc_current_port == AN11) {
+		adc_current_port = AN1;
+		ADMUX = ADMUX_OPT | adc_current_port;
+	//Normal increment
+	} else {
+		adc_current_port++;
+	
+		if(adc_current_port < EXT_MUX) {
+			ADMUX = ADMUX_OPT | adc_current_port;
+		} else {
+			ADMUX = ADMUX_OPT | EXT_MUX;
+			set_adc_mux(adc_current_port - 8);
+		}
+	}
+
+	//Initiate next conversion only if we are running a loop
+	if (!adc_loop_running) {
+		return;
+    } else {
+    	ADCSRA |= _BV(ADSC);
+	}
+		
+	return;
+}
+
Index: branches/scout/projects/libdragonfly/analog.h
===================================================================
--- branches/scout/projects/libdragonfly/analog.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/analog.h	(revision 1346)
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * 
+ * @file analog.h
+ * @brief Contains functions and definitions for using the ADC
+ * 
+ * Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7.
+ * AN6 and AN7 are used for the wheel and battery.
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog.
+	
+ * @author Colony Project, CMU Robotics Club, based on firefly
+ * code by Tom Lauwers
+ */
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#include <inttypes.h>
+
+/**
+ * @addtogroup analog
+ * @{
+ **/
+
+/** @brief Analog port 0 **/
+#define AN0 0x00
+/** @brief Analog port 1 **/
+#define AN1 0x01
+/** @brief Analog port 2 **/
+#define AN2 0x02
+/** @brief Analog port 3 **/
+#define AN3 0x03
+/** @brief Analog port 4 **/
+#define AN4 0x04
+/** @brief Analog port 5 **/
+#define AN5 0x05
+/** @brief Analog port 6 **/
+#define AN6 0x06
+/** @brief Analog port 7 **/
+#define AN7 0x07
+/** @brief Analog port 8 **/
+#define AN8 0x08
+/** @brief Analog port 9 **/
+#define AN9 0x09
+/** @brief Analog port 10 **/
+#define AN10 0x0A
+/** @brief Analog port 11 **/
+#define AN11 0x0B
+/** @brief Analog port 12 **/
+#define AN12 0x0C
+/** @brief Analog port 13 **/
+#define AN13 0x0D
+/** @brief Analog port 14 **/
+#define AN14 0x0E
+/** @brief Analog port 15 **/
+#define AN15 0x0F
+
+/** @brief BOM_PORT analog port for BOM **/
+#define BOM_PORT AN0
+/** @brief EXT_MUX analog port **/
+#define EXT_MUX AN7
+/** @brief Analog port for the wheel **/
+#define WHEEL_PORT AN10
+/** @brief Analog port for the battery voltage detector **/
+#define BATT_PORT  AN11
+
+#define ADC_START 1
+#define ADC_STOP 0
+
+#define ADMUX_OPT 0x60
+
+/** @brief Struct to hold the value of a particular analog port **/
+typedef struct {
+  uint8_t adc8;
+  uint16_t adc10;
+} adc_t;
+
+
+/** @brief Initialize analog ports. Will start running a loop
+    if start_conversion is ADC_START.**/
+void analog_init(int start_conversion);
+/** @brief starts the analog loop. Doesn't do anything if the loop is already running. **/
+void analog_start_loop(void);
+/** @brief Stops the analog loop. Doesn't do anything if the loop is already stopped. **/
+void analog_stop_loop(void);
+/** @brief Returns an 8-bit analog value from the look up table. Use this instead of analog_get8. **/
+unsigned int analog8(int which);
+/** @brief Returns an 10-bit analog value from the look up table. Use this instead of analog_get10. **/
+unsigned int analog10(int which);
+/** @brief Read the position of the wheel. **/
+int wheel(void);
+/** @brief Read an 8-bit number from an analog port. Loop must be stopped for this to work. **/
+unsigned int analog_get8(int which);
+/** @brief Read a 10-bit number from an analog port. Loop must be stopped for this to work. **/
+unsigned int analog_get10(int which);
+
+
+/**@}**/ //end group
+
+#endif
+
Index: branches/scout/projects/libdragonfly/Doxyfile
===================================================================
--- branches/scout/projects/libdragonfly/Doxyfile	(nonexistent)
+++ branches/scout/projects/libdragonfly/Doxyfile	(revision 1346)
@@ -0,0 +1,1252 @@
+# Doxyfile 1.4.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = libdragonfly
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 1.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a caller dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable caller graphs for selected 
+# functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that a graph may be further truncated if the graph's 
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
Index: branches/scout/projects/libdragonfly/time.c
===================================================================
--- branches/scout/projects/libdragonfly/time.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/time.c	(revision 1346)
@@ -0,0 +1,201 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file time.c
+ * @brief Timer code
+ *
+ * Implementation of functions for timers.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+/*
+  time.c
+  anything that requires a delay
+  mostly delay_ms
+
+  author: Robotics Club, Colony Project
+
+  Change Log:
+  2.5.07 - Kevin
+  Aaron fixed the orb/servo code and made them use timer3 but compare registers B and C. He hard set the prescaler
+  to 8 so the RTC broke. Changed it so that we use a 8 prescaler which sets the compare match at 1/16th of a second.
+  You now count how many 16ths of a second you want until you trigger your actual interrupt. Works. Changed defines
+  for time so you can still call rtc_init with a scale but now it is defined in terms of actual time like second, quarter_second
+  etc. Read that section in the time.h file for more information. Tested and works, though the clock drifts more than
+  it used to
+  1.30.07 - Kevin
+  Modified the clock to run on timer3 on the Dragonfly. Works with decent accuracy. Using a prescaler of 256
+  the timer counts up to a precomputer value which will trigger an interrupt and reset the timer. Multiples of
+  256 change it by that multiple. Refer to the time.h file for all possible prescalers.
+  The interrupt will call a specified function _rtc_func every pulse.
+  All of it has been tested and it works.
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <serial.h>
+
+/* Calculate how many cycles to delay for to get 1 ms. Based on F_CPU which should be defined by the makefile */
+#ifdef F_CPU
+#define WAIT_CYCLES ((F_CPU / 1000) / 10)
+#else
+#define WAIT_CYCLES (8000 / 10)
+#endif
+
+static volatile int _rtc_val = 0;
+static volatile int _rtc_pulse = 0;
+static volatile int _rtc_scale = 32;	//Defaults to 1 Second per pulse
+static void (*_rtc_f)(void) = 0;
+
+
+
+/**
+ * @defgroup time Time
+ * @brief Time functions
+ * 
+ * Functions dealing with time.
+ * 
+ * @{
+ **/
+
+/**
+ * Delays for the specified number of milliseconds.
+ * It depends on F_CPU to be defined in order to calculate how many cycles
+ * it should delay. If it is not defined, a default clock of 8MHz is assumed.
+ * 
+ * We use _delay_loop_2 which will run assembly instructions that should be
+ * 4 cycles long. Optimizations must be enabled for this to be true.
+ * That function is called to ensure around 1ms per execution. To generate
+ * multiple ms we run a for loop of how many milliseconds are desired.
+ *
+ * The error should be just the skew on the oscillator as the formula to 
+ * calculate delay cycles should always be a whole number. The is some skew
+ * in practice though it is unavoidable. Delaying for less than 1s should make
+ * the error negligable.
+ *
+ * @param ms the number of milliseconds to delay for
+ **/
+void delay_ms(int ms) {
+    for (; ms > 0; ms--) {
+        _delay_loop_2(WAIT_CYCLES);
+    }
+}
+
+
+/* 	Prescales defined in time.h. SECOND will give you 1 second.
+	More scales are defined in the time.h file.
+	rtc_func is the address to a function that you want called every clock tick. */
+/**
+ * Initializes the real time clock. Prescales are defined in time.h.
+ * For example, SECOND will give 1 second. The specified function is
+ * called every clock tick. For the real time clock to activate,
+ * interrupts must be enabled. (through sei() )
+ *
+ * @param prescale_opt the period with which the timer is triggered
+ * @param rtc_func the function called when the timer is triggered
+ *
+ * @see rtc_get, rtc_reset
+ *
+ **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void)) {
+	
+  //Clear timer register for Timer 3
+  TCNT3 = 0;
+	
+  /* 	This sets the Waveform Generation Module to CTC (Clear Timer on Compare) Mode (100)
+	See page135 in Atmega128 Docs for more modes and explanations */
+  TCCR3B |= _BV(WGM32);
+	
+  /* 	This sets the prescaler for the system clock (8MHz) ie: divides the clock by some number.
+	Currently set to a prescaler of 8 because that is what the orb and servos use (they are on this timer as well)
+	See page137 in Atemga128 Docs for all the available prescalers */
+  TCCR3B |= _BV(CS31);
+	
+  /* 	Sets the two regsiters that we compare against. So the timer counts up to this number and
+	then resets back to 0 and calls the compare match interrupt.
+	8x10^6 / 8 = 1/16 Second. All values are based off of this number. Do not change it unless you
+	are l337*/
+		
+  OCR3A = 0xF424;	
+
+  /* 	Enable Output Compare A Interrupt. When OCR3A is met by the timer TCNT3 this interrupt will be
+	triggerd. (See page140 in Atmega128 Docs for more information */
+  ETIMSK |= _BV(OCIE3A);
+	
+  /*	Store the pointer to the function to be used in the interrupt */
+  _rtc_f = rtc_func;
+	
+  /*	Store how many 1/16ths of a second you want to let by before triggering an interrupt */
+  _rtc_scale = prescale_opt;
+}
+
+/**
+ * Returns the time elapsed in seconds since the last call to
+ * rtc_init or rtc_reset.
+ *
+ * @return the number of seconds since the last call to rtc_init or rtc_reset
+ *
+ * @see rtc_init, rtc_reset
+ **/
+int rtc_get(void) {
+  return _rtc_val;
+}
+
+/**
+ * Resets the real time clock counter to 0.
+ *
+ * @see rtc_init, rtc_get
+ **/
+void rtc_reset(void) {
+  _rtc_val = 0;
+}
+
+/** @} **/ //end defgroup
+
+/*	Called every pulse. Function in _rtc_f is called every _rtc_scale and also the counter is updated.
+	Bascially, since the pulse is hard set at 1/16s  you want to count how many 16ths of a second have passed
+	and when it reaches the amount of time you want, execute the code. */
+SIGNAL(TIMER3_COMPA_vect) {
+
+  if (_rtc_pulse ==  _rtc_scale) {
+    //Increment the real time clock counter
+    _rtc_val++;
+		
+    //Calls the function tied to the real time clock if defined
+    if(_rtc_f != 0)
+      _rtc_f();
+		
+    //Resets the pulse until the next scale is matched
+    _rtc_pulse = 0;
+  }	
+	
+  //Updates the amount of pulses seen since the last scale match
+  _rtc_pulse++;
+	
+}
Index: branches/scout/projects/libdragonfly/motor.c
===================================================================
--- branches/scout/projects/libdragonfly/motor.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/motor.c	(revision 1346)
@@ -0,0 +1,147 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file motor.c
+ * @brief Motors
+ *
+ * Implementation of functions for controlling the motors.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Much of this is taken from FWR's library, author: Tom Lauwers
+ **/
+
+#include "motor.h"
+
+/**
+ * @defgroup motors Motors
+ * @brief Functions for controlling the motors.
+ * Functions for controlling the motors. Found in motor.h.
+ * @{
+ **/
+
+/**
+ * Initializes both motors so that they can be used with future
+ * calls to motor1_set and motor2_set.
+ *
+ * @see motors_off, motor1_set, motor2_set
+ **/
+void motors_init( void ) {
+  // Configure counter such that we use phase correct
+  // PWM with 8-bit resolution
+  PORTA &= 0x0F;
+  DDRA |= 0xF0;
+  DDRB |= 0x60;
+
+  //timer 1A and 1B
+  TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
+  TCCR1B = _BV(WGM12) | _BV(CS10);
+  //	TCCR1A = 0xA1;
+  //	TCCR1B = 0x04;
+  OCR1AH=0;
+  OCR1AL=0;
+  OCR1BH=0;
+  OCR1BL=0;
+}
+
+/**
+ * Sets the speed and direction of motor1.
+ * motors_init must be called before this function can be used.
+ *
+ * @param direction Either FORWARD or BACKWARD to set the direction of rotation.
+ * @param speed The speed the motor will run at, in the range 0-255.
+ * 
+ * @see motor2_set, motors_init
+ **/
+void motor1_set(int direction, int speed) {
+
+  if(direction == 0) {
+    // turn off PWM first if switching directions
+    if((PORTA & 0x30) != 0x10) {
+      OCR1A = 0;
+    }	
+    PORTA = (PORTA & 0xCF) | 0x10;
+    //		PORTD |= 0x10;
+    //		PORTD &= 0xBF;
+  } else {
+    // turn off PWM first if switching directions
+    if((PORTA & 0x30) != 0x20) {
+      OCR1A = 0;
+    }
+    PORTA = (PORTA & 0xCF) | 0x20;
+    //		PORTD |= 0x40;
+    //		PORTD &= 0xEF;
+  }
+	
+  // Set the timer to count up to speed, an 8-bit value
+  OCR1AL = speed;
+}
+
+/**
+ * Sets the speed and direction of motor2.
+ * motors_init must be called before this function can be used.
+ *
+ * @param direction Either FORWARD or BACKWARD to set the direction of rotation.
+ * @param speed The speed the motor will run at, in the range 0-255.
+ *
+ * @see motor1_set, motors_init
+ **/
+void motor2_set(int direction, int speed) {
+  if(direction == 0) {
+    //		PORTD |= 0x20;
+    //		PORTD &= 0x7F;
+    // turn off PWM first if switching directions
+    if((PORTA & 0xC0) != 0x80) {
+      OCR1B = 0;
+    }		
+		
+    PORTA = (PORTA & 0x3F) | 0x80;
+  } else {
+    //		PORTD |= 0x80;
+    //		PORTD &= 0xDF;
+
+    // turn off PWM first if switching directions
+    if((PORTA & 0xC0) != 0x40) {
+      OCR1B = 0;
+    }		
+		
+    PORTA = (PORTA & 0x3F) | 0x40;
+  }
+  OCR1BL = speed;
+}
+
+/**
+ * Turns off both motors.
+ *
+ * @see motors_init
+ **/
+void motors_off( void ) {
+  OCR1AL = 0x0;
+  OCR1BL = 0x0;
+}
+
+/**@}**///end defgroup
+
Index: branches/scout/projects/libdragonfly/move.c
===================================================================
--- branches/scout/projects/libdragonfly/move.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/move.c	(revision 1346)
@@ -0,0 +1,190 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file move.c
+ * @brief Functions for moving
+ *
+ * Implementation of functions for moving the robot.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#include "dragonfly_lib.h"
+
+#include "move.h"
+#include "rangefinder.h"
+
+
+// Internal prototypes
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr);
+
+// global varaibles for move_avoid
+int d1, d2, d3, d4, d5; 
+/**
+ * @defgroup move Movement
+ * @brief Functions fo controlling robot motion
+ * Higher level functions to control the movement of robots.
+ * 
+ * @{
+ **/
+
+
+/**
+ * Causes the robot to move with the given translation and rotational velocities.
+ * motors_init must be called before this function can be used.
+ *
+ * @param velocity the translational velocity of the robot, in the range -255 to 255.
+ * A positive value indicates forward motion, while a negative value indicates
+ * backwards motion.
+ * 
+ * @param omega the rotational velocity of the robot, in the range -255 to 255.
+ * A positive value indicates a counterclockwise velocity, while a negative
+ * value indicates a clockwise velocity.
+ *
+ * @see motors_init, motor1_set, motor2_set
+ **/
+void move (int velocity, int omega) {
+  int vl = 0;
+  int vr = 0;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  //
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+
+/**
+ * Moves the robot with the given translational and angular velocities
+ * while avoiding obstacles. To be effective, this function must be
+ * called repeatedly throughout the motion. It relies on the IR
+ * rangefinders to detect obstacles. Before calling this function,
+ * motors_init and range_init must be called.
+ *
+ * @param velocity the translational velocity of the robot, in the
+ * range -255 to 255. A positive value indicates forward motion.
+ *
+ * @param omega the rotational velocity of the robot, in the range
+ * -255 to 255. A positive value indicates a counterclockwise velocity.
+ *
+ * @param strength the strength of the avoid behavior, in the range
+ * 0 to 100.
+ *
+ * @see motors_init, range_init, move
+ **/
+void move_avoid(int velocity, int omega, int strength) {
+  int pControl;
+  int vl = 0;
+  int vr = 0;
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1 = (temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /* Avoid obstacles ahead
+     if(d2>170)
+     v*=-1;
+    
+     Naturally slow down if there is something in the way.
+     if(d2>150 || d1>180 || d3>180){
+     v>>=1;
+  */
+  
+  //pControl= (((d3-d1) + (d4-d5))*strength)/100;
+  pControl= (((d5-d4))*strength)/100;
+  omega = (omega*(100-strength))/100 + pControl;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+/**@}**///end the motion group
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr) {
+  //omega: angle measure, positive couter-clockwise from front.
+  // -180 <= omega <= 180
+  //velocity: -255 <= velocity <= 255
+  
+  long int vltemp, vrtemp;
+  
+  //make sure values are in bounds
+  if (velocity < -255 || velocity >255 || omega < -255 || omega > 255) return;
+	
+  //compute
+  vrtemp = velocity + omega * 3;
+  vltemp = velocity - omega * 3;
+	
+  //check to see if max linear velocities have been exceeded.
+  if (vrtemp > 255) {
+    vltemp = 255 * vltemp / vrtemp;
+    vrtemp = 255;
+  }
+  if (vltemp > 255) {	   
+    vrtemp = 255 * vrtemp / vltemp;    
+    vltemp = 255;  
+  }
+  if (vrtemp < -255) {
+    vltemp = -255 * vltemp / vrtemp;
+    vrtemp = -255;
+  }
+  if (vltemp < -255) {
+    vrtemp = -255 * vrtemp / vltemp;
+    vltemp = -255;
+  }
+  
+  *vr = (int)vrtemp;
+  *vl = (int)vltemp;
+}
Index: branches/scout/projects/libdragonfly/reset.c
===================================================================
--- branches/scout/projects/libdragonfly/reset.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/reset.c	(revision 1346)
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file reset
+ * @brief Reset the Robot
+ *
+ * Implementation of a function to reset the robot.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <reset.h>
+
+/**
+ * @defgroup reset Reset
+ * Functions for manipulation the ADC on the dragonfly board.
+ * All definitions may be found in analog.h.
+ *
+ * @{
+ **/
+
+/**
+ * Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+ * to reset the AVR.  The reset clears all memory and resets all registers
+ * with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+ * and Status Register (MCUCSR).
+ **/
+void reset(void) {
+  WDTCR &= 0xF8;
+  WDTCR |= 0x08;
+  _delay_ms(15);
+}
+
+/**@}**/ //end defgroup
+
Index: branches/scout/projects/libdragonfly/rangefinder.c
===================================================================
--- branches/scout/projects/libdragonfly/rangefinder.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/rangefinder.c	(revision 1346)
@@ -0,0 +1,149 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file rangefinder.c
+ * @brief Rangefinders
+ *
+ * Implementation of functions for rangefinder use.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+/*
+  Authors: James Kong and Greg Tress
+
+  Last Modified: 4/30/06 by James
+  -Started log_distance conversion function !!!NOT COMPLETE!!!
+  -Cleaning up comments
+
+  -----------------
+  rangefinder.c
+  Using Sharp GP2D02 IR Rangefinder
+
+  Vin is the input to the rangefinder, designated RANGE_CTRL.
+  Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+  Expected Initial Conditions:
+  Vin is high and Vout should read high.
+
+  Usage:
+  1.) Set Vin low. Vout should read low.
+  2.) Wait for high on Vout.
+  3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+  4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "dragonfly_lib.h"
+#include "rangefinder.h"
+
+/*
+  read_distance returns the 8-bit reading from the rangefinder
+  parameters:
+  range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+  NOTE:
+  The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+  So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.  Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+  At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+// constants
+/* Nasty IR approximation table
+   I'm using this for the heck of it.  We can do whatever.
+
+   Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+   Gives distance in mm.
+
+   excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+
+   This is only valid for the GP2D12, with objects directly ahead and more than
+   10cm from the detector.  See the datasheet for more information.
+*/
+
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+static int IR_dist_conversion[114] = {
+  800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+  ,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+  ,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+  ,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+  ,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+  ,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+  ,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+  ,102,101
+};
+
+int linearize_distance(int value);
+
+/**
+ * @defgroup rangefinder Rangefinder
+ * @brief Functions for using the IR rangefinders
+ * 
+ * Functions for using the IR rangefinders.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the rangefinders. This must be called before
+ * range_read_distance.
+ *
+ * @see range_read_distance
+ **/
+void range_init(void)
+{
+  digital_output(_PIN_B4,0);
+}
+
+/**
+ * Reads the distance measured by one of the rangefinders.
+ * This distance is in arbitrary units.
+ *
+ * @param range_id the rangefinder to use. This should be one
+ * of the constants IR1 - IR5.
+ *
+ * @return the distance measured by the rangefinder
+ *
+ * @see range_init
+ **/
+int range_read_distance (int range_id) {
+  return linearize_distance(analog8(range_id));
+}
+
+/** @} **/ //end defgroup
+
+int linearize_distance(int value) {
+  if(value < MIN_IR_ADC8) {
+    return -1;
+  } else if(value > MAX_IR_ADC8) {
+    return -1;
+  } else {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
Index: branches/scout/projects/libdragonfly/reset.h
===================================================================
--- branches/scout/projects/libdragonfly/reset.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/reset.h	(revision 1346)
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * 
+ * @file reset.h
+ * @brief Contains function(s) for resetting the robots
+ * 
+ * @author Colony Project, CMU Robotics Club, James Kong
+ */
+
+#ifndef _RESET_H_
+#define _RESET_H_
+
+/**
+ * @addtogroup reset
+ * @{
+ **/
+ 
+/** @brief Reset the robot **/
+void reset(void);
+
+/**@}**/ //end group
+
+#endif
+
Index: branches/scout/projects/libdragonfly/dio.h
===================================================================
--- branches/scout/projects/libdragonfly/dio.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/dio.h	(revision 1346)
@@ -0,0 +1,348 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file dio.h
+ * @brief Definitions for digital input / output
+ *
+ * This file contains definitions and functions for dealing
+ * with digital input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+  these are ALL the pins
+  don't use unless you know what you're doing
+*/
+
+/*
+  DIO pins on new dragonfly boards are shown below:
+  -----------------------------------------------
+  | _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+  -----------------------------------------------
+  | _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+  -----------------------------------------------
+*/
+
+/** @brief Port A **/
+#define _PORT_A 1
+/** @brief Port B **/
+#define _PORT_B 2
+/** @brief Port C **/
+#define _PORT_C 3
+/** @brief Port D **/
+#define _PORT_D 4
+/** @brief Port E **/
+#define _PORT_E 5
+/** @brief Port F **/
+#define _PORT_F 6
+/** @brief Port G **/
+#define _PORT_G 7
+
+/** @brief Pin A0 **/
+#define _PIN_A0 8
+/** @brief Pin A1 **/
+#define _PIN_A1 9
+/** @brief Pin A2 **/
+#define _PIN_A2 10
+/** @brief Pin A3 **/
+#define _PIN_A3 11
+/** @brief Pin A4 **/
+#define _PIN_A4 12
+/** @brief Pin A5 **/
+#define _PIN_A5 13
+/** @brief Pin A6 **/
+#define _PIN_A6 14 
+/** @brief Pin A7 **/
+#define _PIN_A7 15
+
+/** @brief Pin B0 **/
+#define _PIN_B0 16
+/** @brief Pin B1 **/
+#define _PIN_B1 17
+/** @brief Pin B2 **/
+#define _PIN_B2 18
+/** @brief Pin B3 **/
+#define _PIN_B3 19
+/** @brief Pin B4 **/
+#define _PIN_B4 20
+/** @brief Pin B5 **/
+#define _PIN_B5 21
+/** @brief Pin B6 **/
+#define _PIN_B6 22
+/** @brief Pin B7 **/
+#define _PIN_B7 23
+
+/** @brief Pin C0 **/
+#define _PIN_C0 24
+/** @brief Pin C1 **/
+#define _PIN_C1 25
+/** @brief Pin C2 **/
+#define _PIN_C2 26
+/** @brief Pin C3 **/
+#define _PIN_C3 27
+/** @brief Pin C4 **/
+#define _PIN_C4 28
+/** @brief Pin C5 **/
+#define _PIN_C5 29
+/** @brief Pin C6 **/
+#define _PIN_C6 30
+/** @brief Pin C7 **/
+#define _PIN_C7 31
+
+/** @brief Pin D0 **/
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+/** @brief Pin D1 **/
+#define _PIN_D1 33  // pin DIO7
+/** @brief Pin D2 **/
+#define _PIN_D2 34
+/** @brief Pin D3 **/
+#define _PIN_D3 35
+/** @brief Pin D4 **/
+#define _PIN_D4 36
+/** @brief Pin D5 **/
+#define _PIN_D5 37
+/** @brief Pin D6 **/
+#define _PIN_D6 38
+/** @brief Pin D7 **/
+#define _PIN_D7 39
+
+/** @brief Pin E0 **/
+#define _PIN_E0 40
+/** @brief Pin E1 **/
+#define _PIN_E1 41
+/** @brief Pin E2 **/
+#define _PIN_E2 42  // pin DIO0
+/** @brief Pin E3 **/
+#define _PIN_E3 43  // pin DIO1
+/** @brief Pin E4 **/
+#define _PIN_E4 44  // pin DIO2
+/** @brief Pin E5 **/
+#define _PIN_E5 45  // pin DIO3
+/** @brief Pin E6 **/
+#define _PIN_E6 46  // pin DIO4
+/** @brief Pin E7 **/
+#define _PIN_E7 47  // pin DIO5
+
+/** @brief Pin F0 **/
+#define _PIN_F0 48
+/** @brief Pin F1 **/
+#define _PIN_F1 49
+/** @brief Pin F2 **/
+#define _PIN_F2 50
+/** @brief Pin F3 **/
+#define _PIN_F3 51
+/** @brief Pin F4 **/
+#define _PIN_F4 52
+/** @brief Pin F5 **/
+#define _PIN_F5 53
+/** @brief Pin F6 **/
+#define _PIN_F6 54
+/** @brief Pin F7 **/
+#define _PIN_F7 55
+
+/** @brief Pin G0 **/
+#define _PIN_G0 56
+/** @brief Pin WR **/
+#define _PIN_WR 56
+/** @brief Pin G1 **/
+#define _PIN_G1 57
+/** @brief Pin RD **/
+#define _PIN_RD 57
+/** @brief Pin G2 **/
+#define _PIN_G2 58
+/** @brief Pin ALE **/
+#define _PIN_ALE 58
+/** @brief Pin G3 **/
+#define _PIN_G3 59
+/** @brief Pin TOSC2 **/
+#define _PIN_TOSC2 59
+/** @brief Pin G4 **/
+#define _PIN_G4 60
+/** @brief Pin TOSC1 **/
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+  These are the header pins (the ones you can connect things to)
+  Feel free to use these
+*/
+
+/**
+ * @addtogroup dio
+ * @{
+ **/
+/** @brief Pin A0 **/
+#define PIN_A0 8
+/** @brief Pin A1 **/
+#define PIN_A1 9
+/** @brief Pin A2 **/
+#define PIN_A2 10
+/** @brief Pin A3 **/
+#define PIN_A3 11
+/** @brief Pin A4 **/
+#define PIN_A4 12
+/** @brief Pin A5 **/
+#define PIN_A5 13
+/** @brief Pin A6 **/
+#define PIN_A6 14 
+/** @brief Pin A7 **/
+#define PIN_A7 15
+
+/** @brief Pin SS **/
+#define PIN_SS 16
+/** @brief Pin SCK **/
+#define PIN_SCK 17
+/** @brief Pin MOSI **/
+#define PIN_MOSI 18
+/** @brief Pin MISO **/
+#define PIN_MISO 19
+/** @brief LCD Command Pin **/
+#define PIN_LCD_COMMAND 20
+
+/** @brief Pin C0 **/
+#define PIN_C0 24
+/** @brief Pin C1 **/
+#define PIN_C1 25
+/** @brief Pin C2 **/
+#define PIN_C2 26
+/** @brief Pin C3 **/
+#define PIN_C3 27
+/** @brief Pin C4 **/
+#define PIN_C4 28
+/** @brief Pin C5 **/
+#define PIN_C5 29
+/** @brief Pin C6 **/
+#define PIN_C6 30
+/** @brief Pin C7 **/
+#define PIN_C7 31
+
+/** @brief Pin SCL **/
+#define PIN_SCL 32
+/** @brief Pin SDA **/
+#define PIN_SDA 33
+
+/** @brief Pin RX0 **/
+#define PIN_RX0 40
+/** @brief Pin TX0 **/
+#define PIN_TX0 41
+/** @brief LCD Reset Pin **/
+#define PIN_LCD_RESET 42
+/** @brief Pin E6 **/
+#define PIN_E6 46
+/** @brief Pin EXT_DIO1 **/
+#define PIN_EXT_DIO1 46
+/** @brief Pin E7 **/
+#define PIN_E7 47
+/** @brief Pin EXT_DIO2 **/
+#define PIN_EXT_DIO2 48
+
+/** @brief Pin AN0 **/
+#define PIN_AN0 48
+/** @brief Pin ADC0 **/
+#define PIN_ADC0 48
+/** @brief Pin AN1 **/
+#define PIN_AN1 49
+/** @brief Pin ADC1 **/
+#define PIN_ADC1 49
+/** @brief Pin AN2 **/
+#define PIN_AN2 50
+/** @brief Pin ADC2 **/
+#define PIN_ADC2 50
+/** @brief Pin AN3 **/
+#define PIN_AN3 51
+/** @brief Pin ADC3 **/
+#define PIN_ADC3 51
+/** @brief Pin AN4 **/
+#define PIN_AN4 52
+/** @brief Pin ADC4 **/
+#define PIN_ADC4 52
+/** @brief Pin AN5 **/
+#define PIN_AN5 53
+/** @brief Pin ADC5 **/
+#define PIN_ADC5 53
+/** @brief Pin AN6 **/
+#define PIN_AN6 54
+/** @brief Pin ADC6 **/
+#define PIN_ADC6 54
+/** @brief Pin AN7 **/
+#define PIN_AN7 55
+/** @brief Pin ADC7 **/
+#define PIN_ADC7 55
+
+/** @brief Wheel Pin **/
+#define PIN_WHEEL 54
+/** @brief Battery Voltage Monitor Pin **/
+#define PIN_BATT 55
+
+/** @brief button1 Pin **/
+#define PIN_BTN1 56
+/** @brief button2 Pin **/
+#define PIN_BTN2 57
+
+/** @brief LED1 Pin **/
+#define PIN_LED1 58
+
+/* Buttons */
+/** @brief Button Pin **/
+#define PIN_BTN PING
+/** @brief button2 Pin **/
+#define BTN2 PING1
+/** @brief button1 Pin **/
+#define BTN1 PING0
+
+/** @brief Read a portpin. **/
+int digital_input(int);
+/** @brief Output to a portpin. **/
+void digital_output(int bit, int val);
+/** @brief Pullup a portpin. **/
+void digital_pull_up(int);
+
+/** @brief Check if button1 is pressed. **/
+int button1_read( void );
+/** @brief Check if button1 is clicked. **/
+int button1_click( void );
+/** @brief Wait until button1 is pressed. **/
+void button1_wait( void );
+
+/** @brief Check if button2 is pressed. **/
+int button2_read( void );
+/** @brief Check if button2 is clicked. **/
+int button2_click( void );
+/** @brief Wait until button2 is pressed. **/
+void button2_wait( void );
+
+/** @} **/ // end addtogroup
+
+#endif
+
Index: branches/scout/projects/libdragonfly/lcd.c
===================================================================
--- branches/scout/projects/libdragonfly/lcd.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/lcd.c	(revision 1346)
@@ -0,0 +1,308 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file lcd.c
+ * @brief LCD
+ *
+ * Implementation of functions for using the LCD.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+//LCD defines
+#define RST _BV(4)  // pd4 (GPIO)
+#define SCE _BV(0)  // pb0 (~SS)
+#define D_C _BV(5)  // pd5 (GPIO?)
+#define SDI _BV(2)  // pb2 (MOSI)
+#define SCK _BV(1) // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTD
+#define LCDRESETDDR DDRD
+
+void lcd_putbyte(unsigned char b);
+
+
+//**************************************Old shit below!*****************
+/*
+  FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+  {
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+  };
+
+
+/**
+ * @defgroup lcd LCD
+ * @brief Functions for the LCD
+ * Functions for writing to the LCD.
+ * All functions may be found in lcd.h.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the LCD. Must be called before any other
+ * LCD functions.
+ **/
+void lcd_init(void) {
+  LCDDDR |= (SCE | SDI | SCK);
+  LCDRESETDDR |= (RST|D_C);
+
+  LCDPORT &= ~( SCE | SDI | SCK);
+  LCDRESETPORT &=~(D_C);
+  
+  SPCR |= 0x50;//0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+  SPSR |= 0x01;       // a continuation of the above
+
+  LCDRESETPORT |= RST;
+  delay_ms(10);
+  LCDRESETPORT &= (~RST);
+  delay_ms(100);
+  LCDRESETPORT |= RST;
+	
+  lcd_putbyte( 0x21 );  // LCD Extended Commands.
+  lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+  lcd_putbyte( 0x06 );  // Set Temp coefficent.
+  lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+  lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+  lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+  LCDRESETPORT |= D_C;		//put it in init instead of main
+	
+  lcd_clear_screen();
+}
+
+/**
+ * Clears the LCD screen. lcd_init must be called first.
+ * 
+ * @see lcd_init
+ **/
+void lcd_clear_screen( void ) {
+  int i;
+  for (i = 0; i < 504; i++)
+    lcd_putbyte(0x0);
+	
+  lcd_gotoxy(0,0);
+}
+
+/**
+ * Prints a character on the LCD screen. lcd_init
+ * must be called before this function may be used.
+ *
+ * @param c the character to print
+ *
+ * @see lcd_init
+ **/
+void lcd_putc(char c) {
+  int i;
+	
+  for (i = 0; i < 5; i++)
+    lcd_putbyte(FontLookup[c-32][i]);
+  lcd_putbyte(0);
+}
+
+/*
+  print an entire string to the lcd
+*/
+void lcd_puts(char *s) {
+  char *t = s;
+  while (*t != 0) {
+    lcd_putc(*t);
+    t++;
+  }
+}
+
+/*
+  go to coordinate x, y
+  y: vertically - 1 char
+  x: horizontally - 1 pixel
+
+  multiply x by 6 if want to move 1 entire character
+
+  origin (0,0) is at top left corner of lcd screen
+*/
+
+/**
+ * Move the current cursor position to the one specified.
+ * lcd_init must be called before this function may be used.
+ * 
+ * @param x The x coordinate of the new position
+ * @param y The y coordinate of the new position
+ *
+ * @see lcd_init
+ **/
+void lcd_gotoxy(int x, int y) {
+  LCDRESETPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDRESETPORT |= D_C;
+}
+
+/*
+  prints an int to the lcd
+
+  code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+
+/**
+ * Print an integer to the LCD screen.
+ * lcd_init must be called before this function may be used.
+ * 
+ * @param value the integer to print
+ *
+ * @see lcd_init
+ **/
+void lcd_puti(int value ) {
+  unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+  /* convert int to ascii  */ 
+  if(value<0) { 
+    lcd_putc('-'); 
+    value=-value; 
+  }    
+  do { 
+    position--; 
+    *(lcd_data+position)=(value%radix)+'0'; 
+    value/=radix;  
+  } while(value); 
+
+    
+  /* start displaying the number */
+  for(;position<=(sizeof(lcd_data)-1);position++)
+    lcd_putc(lcd_data[position]);
+
+  return;
+}
+
+/** @} **/ //end defgroup
+
+void lcd_putbyte(unsigned char b) {
+  SPDR = b;
+  while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+}
Index: branches/scout/projects/libdragonfly/dio.c
===================================================================
--- branches/scout/projects/libdragonfly/dio.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/dio.c	(revision 1346)
@@ -0,0 +1,318 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file dio.c
+ * @brief Digital Input and Output
+ *
+ * Implementation of functions for digital input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/**
+ * @defgroup dio Digital Input / Output
+ * @brief Controls digital input and output
+ * 
+ * A general note on how port / pin numbers work:<br>
+ * The portpin is used to select both the bank and which pin is selected.
+ * 6 bits are used (lower 6, ex: 0b00abcdef).
+ * The first 3 (abc in this example) are used to select the bank.<br>
+ * A = 001<br>
+ * B = 010<br>
+ * C = 011<br>
+ * D = 100<br>
+ * E = 101<br>
+ * F = 110<br>
+ * G = 111<br><br>
+ * 		
+ * The bank can be found by doing portpin >> 3. <br>
+ * 		
+ * The next three (def in this example) are used to select the pin number.
+ * These three bits are just the binary representation of the pin number.<br>
+ * <br>
+ * The pin number can be found by doing portpin & 0b111.<br><br>
+ *
+ * Include dio.h to access these functions.
+ **/
+
+/**
+ * Reads the selected portpin.
+ * 
+ * @param portpin The portpin to be read. See the general description
+ * for a description of portpins.
+ *
+ * @return 1 or 0, depending on the value of the portpin.
+ **/
+int digital_input(int portpin) {
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3) {
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4) {
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/**
+ * Enables pullup on a pin. If it is an output pin, the pin will output
+ * 1.
+ *
+ * @param portpin the pin to enable pullup on. See the general description
+ * for a discussion of portpins.
+ **/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/**
+ * Sets portpin to the given value.
+ * 
+ * @param portpin the portpin to output to. See the general
+ * description for a discussion of portpins.
+ *
+ * @param val the value to set the portpin to. 0 for off,
+ * nonzero for on.
+ **/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  } else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+/**
+ * Checks if button1 is currently pressed.
+ * 
+ * @return 1 if button1 is pressed, 0 otherwise
+ *
+ * @see button1_wait, button1_click
+ **/
+int button1_read( void ) {
+  int pin_val;
+  DDRG &= ~_BV(PING0);
+  PORTG|= _BV(PING0);
+  pin_val = PING;
+  return !((pin_val & _BV(PING0)));
+}
+
+/**
+ * Delays execution until button1 is pressed.
+ *
+ * @see button1_read, button1_click
+ **/
+void button1_wait( void ) {
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/**
+ * If button1 is pressed, waits until it is released before returning.
+ * Otherwise, the function returns immediately.
+ *
+ * @return 1 if button1 has been pressed, 0 otherwise
+ *
+ * @see button1_read, button1_wait
+ **/
+int button1_click() {
+  if(button1_read()) {
+    while(button1_read());
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+/**
+ * Checks if button2 is currently pressed.
+ * 
+ * @return 1 if button2 is pressed, 0 otherwise
+ *
+ * @see button2_wait, button2_click
+ **/
+int button2_read( void ) {
+  int pin_val;
+  DDRG &= ~_BV(PING1);
+  PORTG|= _BV(PING1);
+  pin_val = PING;
+  return !((pin_val & _BV(PING1)));
+}
+
+/**
+ * Delays execution until button2 is pressed.
+ *
+ * @see button2_read, button2_click
+ **/
+void button2_wait( void ) {
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+/**
+ * If button2 is pressed, waits until it is released before returning.
+ * Otherwise, the function returns immediately.
+ *
+ * @return 1 if button2 has been pressed, 0 otherwise
+ *
+ * @see button2_read, button2_wait
+ **/
+int button2_click() {
+  if(button2_read()) {
+    while(button2_read());
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+/** @} **/ //end defgroup
+
Index: branches/scout/projects/libdragonfly/battery.c
===================================================================
--- branches/scout/projects/libdragonfly/battery.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/battery.c	(revision 1346)
@@ -0,0 +1,156 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file battery.c
+ * @brief Implementation for reading battery level
+ *
+ * Contains functions for reading the battery level.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#include "battery.h"
+#include "analog.h"
+
+//Constants for Battery
+//Constants determined experimentally 2/9/2007 - James Kong
+//See Battery8_data.xls for experiment data
+#define BATTERY_NEXT_READ_PRESCALAR 5
+#define MAX_LOW_COUNT 5
+
+//global variables
+int battery_low_count;
+
+/**
+ * @defgroup battery Battery
+ * @brief Functions for reading battery voltage.
+ * 
+ * Contains functions for checking the current
+ * voltage of the battery. Include battery.h to
+ * access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Returns the voltage of the battery as an analog8
+ * reading. 128 is approximately 5 volts. analog_init
+ * must be called before using this function.
+ *
+ * @return the voltage of the battery as an analog8
+ * reading
+ *
+ * @see analog_init, battery, analog8
+ **/
+int battery8(void)
+{
+  return analog8(BATT_PORT);
+}
+
+/**
+ * Returns the voltage of the battery in deciVolts.
+ * analog_init must be called before using this function.
+ *
+ * @return the voltage of the battery in deciVolts.
+ *
+ * @see analog_init, battery8
+ **/
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+        return analog8(BATT_PORT) * 500 >>7;
+}
+
+
+/**
+ * Checks if the battery is low. analog_init must be called before
+ * this function can be used. This function waits for several low
+ * battery readings in a row to avoid false positives.
+ *
+ * @return 1 if the battery is low, 0 otherwise
+ *
+ * @see analog_init
+ **/
+char battery_low(void)
+{
+  static char next_read = 0;
+  static char ret = 0;
+  
+  int batt_reading = battery8();
+
+  if(next_read == 0) 
+  {
+    if(batt_reading > BATTERY_LOWV)
+    {
+        ret = 0;
+        battery_low_count = 0;
+    }
+    else
+    {
+        battery_low_count++;
+        if( battery_low_count >= MAX_LOW_COUNT )
+        {
+            ret = 1;
+            battery_low_count = 0;
+        }
+    }
+    
+    next_read = BATTERY_NEXT_READ_PRESCALAR;
+  }
+  else next_read--;
+  
+  return ret;
+}
+
+/**
+ * Averages n_samples battery8 readings. This function may
+ * take a while to complete, and is only made available
+ * for convenience. analog_init must be called before this
+ * function may be used.
+ *
+ * @param n_samples the number of times to sample the battery voltage
+ *
+ * @return the average reading for the battery voltage, where 128
+ * is approximately 5 Volts.
+ *
+ * @see analog_init, battery
+ **/
+int battery8_avg(int n_samples)
+{
+  int i;
+  long int sum = 0;
+  
+  for(i = 0; i < n_samples; i++) 
+  {
+    sum += battery8();
+  }
+  
+  return (int)(sum / n_samples);
+}
+
+/** @} **/ //end defgroup
+
Index: branches/scout/projects/libdragonfly/move.h
===================================================================
--- branches/scout/projects/libdragonfly/move.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/move.h	(revision 1346)
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file move.h
+ * @brief Contains definitions for controlling robot motion
+ * 
+ * This file offers higher-level functions for robot motion.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+/**
+ * @addtogroup move
+ * @{
+ **/
+
+/** @brief Move forwards **/
+#define FWD 0
+/** @brief Move backwards **/
+#define BCK 1
+
+/** @brief A slow speed **/
+#define SLOW_SPD 96
+/** @brief Half of the full speed **/
+#define HALF_SPD 128
+/** @brief A normal speed **/
+#define NRML_SPD 160
+/** @brief A fast speed **/
+#define FAST_SPD 192
+/** @brief The maximum speed **/
+#define FULL_SPD 255
+
+/** @brief A slow turning speed **/
+#define SLOW_TURN 64
+/** @brief A medium turning speed **/
+#define NRML_TURN 96
+/** @brief A high turning speed **/
+#define FAST_TURN 128
+
+/** @brief Move the robot at the specified velocity **/
+void move(int velocity, int omega);
+/** @brief Move the robot while avoiding obstacles **/
+void move_avoid(int velocity, int omega, int strength);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/projects/libdragonfly/motor.h
===================================================================
--- branches/scout/projects/libdragonfly/motor.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/motor.h	(revision 1346)
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file motor.h
+ * @brief Contains definitions for controlling the motors
+ *
+ * Contains definitions and functions for controlling
+ * the motors.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+/**
+ * @addtogroup motors
+ * @{
+ **/
+
+/** @brief make the motors go forwards **/
+#define FORWARD 1
+/** @brief make the motors go backwards **/
+#define BACKWARD 0
+
+/** @brief Initialize the motors **/
+void motors_init(void);
+/** @brief Set speed and direction of motor1 **/
+void motor1_set(int direction, int speed);
+/** @brief Set speed and direction of motor2 **/
+void motor2_set(int direction, int speed);
+/** @brief Turn the motors off **/
+void motors_off(void);
+
+/**@}**/ // end addtogroup
+
+#endif
+
Index: branches/scout/projects/libdragonfly/i2c.c
===================================================================
--- branches/scout/projects/libdragonfly/i2c.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/i2c.c	(revision 1346)
@@ -0,0 +1,345 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file i2c.c
+ * @brief Implemenation of I2C communications protocol
+ * 
+ * In the case where you have master sends and then a master request to the same
+ * address, you will not give up control of the line because the send and
+ * request addresses are seen as different addresses. In between it will send a
+ * restart but will not give up the line.
+ *
+ * @author CMU Robotics Club, Kevin Woo, Sursh Nidhiry
+ * @bug Not tested.
+ */
+
+#include <avr/interrupt.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+#include "ring_buffer.h"
+
+/**
+ * @defgroup i2c I2C 
+ *
+ * @brief Provides Inter-Interconnected-Communications (I2C)
+ * 
+ * Initiates I2C functions on an ATMega128 which has a fully hardware Two Wire 
+ * Interface (TWI) module. Any Atmel chip with this hardware should be able to
+ * use the software.
+ *
+ * This code will operate in a multi-master enviornment and can be either a
+ * slave or a master at any time (as long as they are not one or the other at
+ * the moment. You can queue up multiple transmission modes in the buffer up to 
+ * the buffer size. The buffer is implemented as a ring buffer.
+ *
+ * It is implemented using callback functions. Whenever you want to send a packet
+ * you can call the built in send function (as a master) and it will send an array
+ * of bytes. Master recieve and slave send/receive are all handled by the call back
+ * functions. It is up to the end user to create functions that will handle the
+ * receiving of packets. Their functions will be called with every byte recieved
+ * so you must either buffer the inputs or handle each one separately.
+ *
+ * On errors we will simply flush the entire buffer.
+ * 
+ * For information on how I2C operates, read the wikipedia article
+ * http://en.wikipedia.org/wiki/I2c
+ * for a good explanation of how it works.
+ * @{
+ */
+
+/** 
+ * @brief Set bit rate 12 = 100kbit/s (max speed setting is 10 for an
+ *  8 MHz clock). It is a divider, so the lower the number the faster the speed.
+ */
+#define I2C_BIT_RATE_DIVIDER 0x0C
+
+static int start_flag;
+
+static fun_mrecv_t master_recv_function;
+static fun_srecv_t slave_recv_function;
+static fun_send_t slave_send_function;
+
+RING_BUFFER_NEW(i2c_buffer, 128, char, i2c_write_buff, i2c_addr_buff);
+
+
+/**
+ * @brief Initializes the i2c module.
+ *
+ * Initializes the I2C module to start listening on the i2c lines. If the callback functions
+ * are not set to null they will be called when that transmission mode is called. The address
+ * is your address that you will listen to when you are not the master.
+ *
+ * @param addr 			Your address on the I2C bus.
+ * @param master_recv 	The address of the function to call when you receive a byte when you are a
+ *                    	master.
+ * @param slave_recv 	The address of the function to call when you are a slave you receive data
+ *								from the master
+ * @param slave_send		The address of the function to call when you are a slave and the master
+ *								requests data from you.
+ *
+ * @return 0 for success, nonzero for failure
+ **/
+int i2c_init(char addr, fun_mrecv_t master_recv, fun_srecv_t slave_recv, fun_send_t slave_send) {
+    master_recv_function = master_recv;
+    slave_recv_function = slave_recv;
+    slave_send_function = slave_send;
+
+    RING_BUFFER_CLEAR(i2c_write_buff);
+    RING_BUFFER_CLEAR(i2c_addr_buff);
+  
+    /* enables twi interrupt, automatic ack sending, and all twi hardware */
+    TWCR =  (_BV(TWEA) | _BV(TWEN) | _BV(TWIE));
+
+    /* sets the bit rate of data transmission */
+    TWBR = I2C_BIT_RATE_DIVIDER;
+
+    /* sets the address (it is stored in the 7 most significant bits) and allows
+     * global messages to be accepted */
+    TWAR = (addr << 1) | 1;
+  
+    return 0;
+}
+
+/**
+ * @brief Sends a byte array over I2C as a master
+ *
+ * Will perform a send over I2C to the destination from data for the ammount of
+ * bytes that bytes is.
+ *
+ * @param dest		Destination address of the data on the I2C bus.
+ * @param data 	The pointer to the byte array of data
+ * @param bytes	The amount of bytes long that the byte array is. This is how
+ *						many bytes from the array that the function will send.
+ *
+ * @return zero for success, nonzero for failure
+ **/
+int i2c_send(char dest, char *data, size_t bytes) {
+    int i;
+
+    /* adding data to be sent to ring buffers is not atomic,
+     * so disable interrupts */
+    cli();
+    for(i = 0; i < bytes; i++) {
+        if(RING_BUFFER_FULL(i2c_write_buff)) {
+            sei();
+            return -1;
+        }
+
+        RING_BUFFER_ADD(i2c_write_buff, data[i]);
+        RING_BUFFER_ADD(i2c_addr_buff, dest << 1);
+    }
+    
+    /* re-enable the interrupts */
+    sei();
+    
+    /* send the start bit, only if this device is not currently master */
+    if(!start_flag) {
+        start_flag = 1;
+        TWCR |= _BV(TWSTA);
+        TWCR |= _BV(TWINT);
+    }
+  
+    return 0;
+}
+ 
+/**
+ * @brief Send a master request to the destination
+ *
+ * Sends a request of data from the target address and calls
+ * the callback function to handle data as it comes in. This function will
+ * not work if the slave has not informationt to send or has nothing implemented
+ * to send it.
+ *
+ * @param dest		The destination that we want to receive information from.
+ *
+ * @return 0 for success, nonzero for failure
+ **/ 
+int i2c_request(char dest) {
+    if(RING_BUFFER_FULL(i2c_write_buff))
+        return -1;
+  
+    RING_BUFFER_ADD(i2c_write_buff, 0);
+    RING_BUFFER_ADD(i2c_addr_buff, (dest << 1) | 1);
+  
+    if(!start_flag) {
+        start_flag = 1;
+        TWCR |= _BV(TWSTA);
+        TWCR |= _BV(TWINT);
+    }
+  
+    return 0;
+}
+
+/** @} **/
+ 
+/**
+ * @brief Interrupt to handle I2C interrupts from the I2C hardware.
+ * 
+ * Uses the status codes from the I2C register to handle the events
+ * needed to advance in I2C stages. For instance, you will get a bit for
+ * receiving a start ack, then a address ack, then a data ack, etc.
+ * The events are handled in each switch case. The status codes are defined
+ * by avr-gcc in /util/twi.h but are the same codes as the Atmel documentation.
+ *
+ * Bytes are sent by popping off the ring buffer. It also will keep track
+ * of what modes the send is in.
+ *
+ * Errors are handled here as well.
+ **/ 
+ISR(TWI_vect) {
+	static char data_to_send;
+	static char addr_to_send = -1;
+	char addr, statusCode;
+  
+	//Get status code (only upper 5 bits)
+	statusCode = (TWSR & 0xF8);
+
+    switch (statusCode) {
+        //Start sent successfully
+        case TW_START:
+        case TW_REP_START:
+            /* Send address and write
+             * ring_buffer will not be empty */
+            RING_BUFFER_REMOVE(i2c_addr_buff, addr_to_send);
+            RING_BUFFER_REMOVE(i2c_write_buff, data_to_send);
+            
+            /* first send the address */
+            TWDR = addr_to_send; 
+            
+            //Turn off start bits
+            TWCR &= ~_BV(TWSTA);
+            break;
+
+        //Master Transmit - Address sent succesfully
+        case TW_MT_SLA_ACK:
+        //Send byte
+            TWDR = data_to_send;
+            PORTG &= ~_BV(PG2);
+            break;
+	 
+        //Master Transmit - Data sent succesfully
+        case TW_MT_DATA_ACK:    
+            //If there is still data to send
+            if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+                RING_BUFFER_PEEK(i2c_addr_buff, addr);
+        
+                //Still data for this address
+                if (addr == addr_to_send) {
+                    RING_BUFFER_REMOVE(i2c_addr_buff, addr);
+                    RING_BUFFER_REMOVE(i2c_write_buff, TWDR);
+                    break;
+                //No more data for this address, data for another address -> resend start
+                } else {
+                    TWCR |= _BV(TWSTA);
+                    break;
+                }
+            }
+            /* there are no bytes to send */
+            TWCR |= _BV(TWSTO);
+            start_flag = 0;
+            break; 
+            
+        //Master Transmit - Slave sends a nack, transmit is done
+        case TW_MT_DATA_NACK:
+            PORTG |= _BV(PG2);
+            TWCR |= _BV(TWSTO);
+            start_flag = 0;
+            break;
+    
+        //Master Receive - Address sent succesfully
+        case TW_MR_SLA_ACK:
+            PORTG |= _BV(PG2);
+            break;
+            
+        //Master Receive - Data received succesfully
+        case TW_MR_DATA_ACK:
+            if(master_recv_function) {
+                if(!master_recv_function(TWDR)) {
+                    TWCR &= ~_BV(TWEA);
+                }
+            }
+            break;
+            
+        //Master Receive - Slave sends a nack, transmission is done    
+        case TW_MR_DATA_NACK:
+            TWCR |= _BV(TWEA);
+      
+            //If there is still data to send
+            if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+                TWCR |= _BV(TWSTA);
+                break;
+            }
+      
+            /* there are no bytes to send */
+            TWCR |= _BV(TWSTO);
+            start_flag = 0;  
+            break;
+    
+        //Slave Transmit - Address received
+        case TW_ST_SLA_ACK:
+            break;
+    
+        //Slave Transmit - Nack received, no data requsted
+        case TW_ST_DATA_NACK:
+            break;
+        
+        //Slave Transmit - Data requested, ack received
+        case TW_ST_DATA_ACK:
+            if (slave_send_function) {
+                TWDR = slave_send_function();
+            }
+            break;
+    
+        //Slave Receive - Address received  
+        case TW_SR_SLA_ACK:
+            break;
+    
+        //Slave Receive - Data received, ack returned
+        case TW_SR_DATA_ACK:
+            if(slave_recv_function) {
+                slave_recv_function(TWDR);
+            }
+            
+            break;
+      
+        //Stop sent  
+        case TW_SR_STOP:
+            break;
+	
+        //Problem on the bus, reset everything
+        default:
+            TWCR |= _BV(TWSTO);
+            start_flag = 0;
+            RING_BUFFER_CLEAR(i2c_write_buff);
+            RING_BUFFER_CLEAR(i2c_addr_buff);  	
+    }
+  
+  /* Toggle TWINT so that it resets and executes the commands */
+  TWCR |= _BV(TWINT);
+}
+
Index: branches/scout/projects/libdragonfly/buzzer.c
===================================================================
--- branches/scout/projects/libdragonfly/buzzer.c	(nonexistent)
+++ branches/scout/projects/libdragonfly/buzzer.c	(revision 1346)
@@ -0,0 +1,137 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file buzzer
+ * @brief Functions for using the buzzer
+ *
+ * Contains functions for using the buzzer.
+ *
+ * @author Colony Project, CMU Robotics Club
+ *
+ * much taken from FWR's firefly library (author: Tom Lauwers)
+ **/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/**
+ * @defgroup buzzer Buzzer
+ * @brief Functions for controlling the buzzer.
+ * Functions for controlling the buzzer. Include
+ * buzzer.h to access these functions.
+ * @{
+ **/
+
+/**
+ * Initializes the buzzer. Must be called before any other buzzer
+ * function may be used.
+ **/
+void buzzer_init( void )
+{
+	//NOTE: This is mostly handled by buzzer_Set_val for now
+	// Set pin B7 to output - B7 is buzzer pin
+	//DDRB |= _BV(DDB7);
+	//Fast PWM Mode, Clear OCR0 on compare match and set at bottom, clock/64
+	//TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+}
+
+/**
+ * Sets the value of the buzzer's pitch.
+ * Higher values are lower frequencies.
+ *
+ * @param buzz_value the value to set the buzzer's frequency too,
+ * in the range 0-255
+ *
+ * @see buzzer_init, buzzer_set_freq, buzzer_off
+ **/
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+	DDRB |= _BV(DDB7);
+	OCR2 = buzz_value;
+}
+
+/**
+ * Sets the buzzer frequency. Usage of constants such as C4
+ * is highly recommended as input to this function.
+ * buzzer_init must be called before this function may
+ * be used.
+ *
+ * @param buzz_freq the frequency to set the buzzer to
+ *
+ * @see buzzer_init, buzzer_set_val, buzzer_off
+ **/
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+/**
+ * Plays the specified frequency for the specified
+ * amount of time. This function blocks execution
+ * until the time is completed. buzzer_init must be
+ * called before this function can be used.
+ *
+ * @param ms the time in milliseconds to play the frequency
+ * @param buzz_freq the frequency to play
+ *
+ * @see buzzer_init, buzzer_set_freq
+ **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+/**
+ * Turns off the buzzer by disabling the timer0 clock.
+ *
+ * @see buzzer_init
+ **/
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;//0b11111000;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0xBF;//0b10111111;
+}
+
+/** @} **/ // end buzzer group
+
Index: branches/scout/projects/libdragonfly/i2c.h
===================================================================
--- branches/scout/projects/libdragonfly/i2c.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/i2c.h	(revision 1346)
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/** @file i2c.h
+ *  @brief Header file for I2C
+ *
+ *  Contains functions for I2C.
+ *
+ *  @author Kevin Woo and Suresh Nidhiry, Colony Project, CMU Robotics Club
+ **/
+
+
+#ifndef _I2C_H_
+#define _I2C_H_
+
+#include <stddef.h>
+
+/** @brief Address of slave receive handler function **/
+typedef void (*fun_srecv_t)(char);
+
+/** @brief Address of master receive handler function**/
+typedef int (*fun_mrecv_t)(char);
+
+/** @brief Address of slave send handler function**/
+typedef char (*fun_send_t)(void);
+
+int i2c_init(char addr, fun_mrecv_t master_recv, fun_srecv_t slave_recv, fun_send_t slave_send);
+int i2c_send(char dest, char* data, size_t bytes);
+int i2c_request(char dest);
+
+void i2c_packet_rec (char i2c_byte);
+void i2c_packet_sniff(char data);
+#endif
+
Index: branches/scout/projects/libdragonfly/buzzer.h
===================================================================
--- branches/scout/projects/libdragonfly/buzzer.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/buzzer.h	(revision 1346)
@@ -0,0 +1,88 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file buzzer.h
+ * @brief Contains definitions for using the buzzer.
+ *
+ * Contains definitions for using the buzzer built into
+ * the colony robots.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+/**
+ * @addtogroup buzzer
+ * @{
+ **/
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+/** @brief Middle C **/
+#define	C4	260 //Middle C
+/** @brief C# **/
+#define	C4s	277 //C sharp
+/** @brief D **/
+#define	D4	294
+/** @brief D# **/
+#define	D4s	311
+/** @brief E **/
+#define	E4	330
+/** @brief F **/
+#define	F4	349
+/** @brief F# **/
+#define	F4s	370
+/** @brief G **/
+#define	G4	392
+/** @brief G# **/
+#define	G4s	415
+/** @brief A **/
+#define	A4	440
+/** @brief A# **/
+#define	A4s	466
+/** @brief B **/
+#define	B4	494
+/** @brief C **/
+#define	C5	523
+
+/** @brief Initialize the buzzer. **/
+void buzzer_init(void);
+/** @brief Set the value the buzzer plays. **/
+void buzzer_set_val(unsigned int buzz_value);
+/** @brief Set the frequency the buzzer plays. **/
+void buzzer_set_freq(unsigned int buzz_freq);
+/** @brief Play a frequency for a specified time. **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+/** @brief Turn the buzzer off. **/
+void buzzer_off(void); 
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/projects/libdragonfly/time.h
===================================================================
--- branches/scout/projects/libdragonfly/time.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/time.h	(revision 1346)
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file time.h
+ * @brief Contains time-related functions and definitions
+ *
+ * Contains functions and definitions for dealing with time,
+ * namely delay_ms and the realtime clock.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+/**
+ * @addtogroup time
+ * @{
+ **/
+/** @brief A sixteenth of a second **/
+#define SIXTEENTH_SECOND 1
+/** @brief An eighth of a second **/
+#define EIGTH_SECOND 2
+/** @brief A quarter of a second **/
+#define QUARTER_SECOND 4
+/** @brief Half of a second **/
+#define HALF_SECOND	8
+/** @brief One second **/
+#define SECOND 16
+/** @brief Two seconds **/
+#define TWO_SECOND 32
+/** @brief Four seconds **/
+#define FOUR_SECOND 64
+
+/** @brief Delay execution for the specified time **/
+void delay_ms(int ms) ;
+/** @brief Enable the realtime clock **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/** @brief Reset the counter of the realtime clock **/
+void rtc_reset(void);
+/** @brief Get the value of the realtime clock. **/
+int rtc_get(void);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/projects/libdragonfly/lcd.h
===================================================================
--- branches/scout/projects/libdragonfly/lcd.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/lcd.h	(revision 1346)
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file lcd.h
+ * @brief Contains definitions for dealing with the LCD screen.
+ * 
+ * Contains definitions and functions for dealing with the 
+ * LCD screen.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _LCD_H_
+#define _LCD_H_
+
+/**
+ * @addtogroup lcd
+ * @{
+ **/
+
+/** @brief Initialize the LCD screen **/
+void lcd_init(void);
+/** @brief Clear the LCD screen **/
+void lcd_clear_screen( void );
+/** @brief Print a char to the LCD screen **/
+void lcd_putc(char c);
+/** @brief Print a string to the LCD screen **/
+void lcd_puts(char *s);
+/** @brief Print an int to the LCD screen **/
+void lcd_puti(int value);
+/** @brief Set the current cursor position **/
+void lcd_gotoxy(int x, int y);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/projects/libdragonfly/battery.h
===================================================================
--- branches/scout/projects/libdragonfly/battery.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/battery.h	(revision 1346)
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file battery.h
+ * @brief Definitions for checking battery voltage.
+ * 
+ * Contains definitions for checking the voltage of the 
+ * battery.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BATTERY_H_
+#define _BATTERY_H_
+
+/**
+ * @addtogroup battery
+ * @{
+ **/
+
+/** @brief Normal battery voltage. (6 V) **/
+#define BATTERY_NORMALV 154
+/** @brief Charging battery voltage. (7 V) **/
+#define BATTERY_CHARINGV 179
+/** @brief Low battery voltage. ( < 6 V) **/
+#define BATTERY_LOWV 152
+
+/** @brief Read the battery voltage. **/
+int battery8(void);
+/** @brief Read the battery voltage in deciVolts. **/
+int battery(void);
+/** @brief Check if the battery is low. **/
+char battery_low(void);
+/** @brief Get an average battery voltage reading. **/
+int battery8_avg(int n_samples);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/projects/libdragonfly/rangefinder.h
===================================================================
--- branches/scout/projects/libdragonfly/rangefinder.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/rangefinder.h	(revision 1346)
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file rangefinder.h
+ * @brief Contains rangefinder declarations and functions
+ * 
+ * Contains functions and definitions for the use of
+ * IR rangefinders.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+/**
+ * @addtogroup rangefinder
+ * @{
+ **/
+
+/** @brief IR Rangefinder 1 **/
+#define IR1 6
+/** @brief IR Rangefinder 2 **/
+#define IR2 5
+/** @brief IR Rangefinder 3 **/
+#define IR3 4
+/** @brief IR Rangefinder 4 **/
+#define IR4 3
+/** @brief IR Rangefinder 5 **/
+#define IR5 2
+
+/** @brief Initialize the rangefinders **/
+void range_init(void);
+/** @brief Read the distance from a rangefinder **/
+int range_read_distance(int range_id);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/projects/libdragonfly/ring_buffer.h
===================================================================
--- branches/scout/projects/libdragonfly/ring_buffer.h	(nonexistent)
+++ branches/scout/projects/libdragonfly/ring_buffer.h	(revision 1346)
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/** @file ring_buffer.h
+ * @brief Ring Buffer
+ *
+ * Include macros to create a ring buffer. Originally written for 15-410.
+ * Modified for use in ATMega128 serial driver
+ *
+ * @author Cornell Wright (cgwright)
+ * @author Jason P. Winters (jpwinter)
+ *
+ **/
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+		uint8_t buffer_size;			\
+	} __VA_ARGS__
+
+
+/** @brief Initializes the ring buffer, setting its size to the correct value
+ *
+ *	@param buf The ring buffer to initialize.
+ *
+ *  @param size The size of the ring buffer (in array elements)
+ */
+#define RING_BUFFER_INIT(buf, size) 			\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % (buf).buffer_size == (buf).start)
+
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % (buf).buffer_size;	\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % (buf).buffer_size;	\
+	} while (0)
+
+/** @brief Checks the value at the head of the ring buffer without removing it
+ *  and puts it into val_ret. Note that val_ret must be the same type used in
+ *  creating the ring buffer to prevent the compiler from spewing confusing
+ *  errors. Also, this assumes that the ring buffer is not empty.
+ *
+ *  @param buf The ring buffer to check from
+ *  @param val_ret where to put the value checked from the head of the ring
+ */
+ #define RING_BUFFER_PEEK(buf, val_ret)  \
+  do { \
+    (val_ret) = (buf).queue[(buf).start]; \
+  } while(0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/scout/projects/template/Makefile
===================================================================
--- branches/scout/projects/template/Makefile	(nonexistent)
+++ branches/scout/projects/template/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/template/main.c
===================================================================
--- branches/scout/projects/template/main.c	(nonexistent)
+++ branches/scout/projects/template/main.c	(revision 1346)
@@ -0,0 +1,38 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <encoders.h>
+
+#define CHAN 0xE	/* channel to use for wireless communication */
+#define TEST 1		/* group and type numbers for sending test packets */
+
+void packet_receive(char type, int source, unsigned char* packet, int length);
+
+int main(void)
+{
+	/* initialize components, set wireless channel */
+	dragonfly_init(ALL_ON);
+	wl_init();
+	wl_set_channel(CHAN);
+	orb_enable();
+
+	/* set up a packet group (or something) to receive packets */
+	wl_register_packet_group(&packet_receive);
+
+	while (1)
+	{
+		wl_do();
+
+		/* send a packet with no usefull info for testing */
+		wl_send_global_packet(TEST, TEST, NULL, 0, 0);
+	}
+
+	wl_terminate();
+
+	return 0;
+}
+
+void packet_receive(char type, int source, unsigned char* packet, int length)
+{
+	orb_set_color(type);
+}
+
Index: branches/scout/projects/libwireless/jni/test/CWirelessTest.java
===================================================================
--- branches/scout/projects/libwireless/jni/test/CWirelessTest.java	(nonexistent)
+++ branches/scout/projects/libwireless/jni/test/CWirelessTest.java	(revision 1346)
@@ -0,0 +1,191 @@
+import org.roboticsclub.colony.*;
+import java.util.Scanner;
+import java.util.Arrays;
+
+public class CWirelessTest
+{
+
+private static final byte TEST_PACKET_GROUP_ID = 15;
+
+public static void main(String[] args) throws Exception
+{
+  if (args.length!=1)
+  {
+    System.err.println("Usage: java CWirelessTest <port name>");
+    System.exit(1);
+  }
+
+  try {
+    CWirelessTest ctest = new CWirelessTest(args[0]);
+  } catch (Exception e) {
+    e.printStackTrace();
+    System.exit(1);
+  }
+
+  Scanner in = new Scanner(System.in);
+
+  while(true)
+  {
+    String command = in.nextLine();
+
+    if (command.charAt(0)=='\\')
+    {
+      //command mode
+      switch(command.charAt(1))
+      {
+        case 'i':
+          System.out.println("XBee IDs: " + Arrays.toString(get_xbee_ids()));
+          break;
+        case 'n':
+          System.out.println("Number of robots: " + get_num_robots());
+          break;
+        case 'm':
+          SensorReading[][] matrix = get_sensor_matrix();
+          System.out.println("BOM Matrix:");
+          for (int i = 0; i < matrix.length; i++)
+          {
+            System.out.println("  From robot " + matrix[i][0].botid + ":");
+            for (int j = 0; j < matrix.length; j++)
+            {
+              System.out.print("    " + matrix[i][j].target + ": " + matrix[i][j].reading);
+            }
+          }
+          break;
+        case 's':
+          char dest = command.charAt(2);
+          String message = command.substring(3);
+
+          test_wl_send((short)dest, (short)1, command.getBytes());
+          break;
+        default:
+          System.out.println("Command not recognized");
+          break;
+      }
+    }
+    else
+    {
+      //send message
+      test_wl_send((short)-1, (short)1, command.getBytes());
+    }
+  }
+}
+
+public CWirelessTest(String wl_port) throws Exception
+{
+  Wireless.wl_set_com_port(wl_port);
+
+  System.out.println("Calling wl_init(" + wl_port + ")...");
+  if (Wireless.wl_init() != 0) {
+    throw new Exception("wl_init failed.\n");
+  }
+  
+  Wireless.wl_set_channel(0xF);
+
+  TokenRing.wl_token_ring_register();
+
+  System.out.println("Joining token ring...");
+  if (TokenRing.wl_token_ring_join() != 0) {
+    throw new Exception("Failed to join token ring.");
+  }
+  System.out.println("Joined token ring.");
+
+  System.out.println("Spawning listener thread...");
+
+  Wireless.PacketGroupHandler pgh = new TestPacketGroupHandler();
+  Wireless.wl_register_packet_group(pgh);
+
+  Wireless.startWirelessThread(1);
+}
+
+public static void test_wl_send(short dest, short msg_type, byte[] data) throws Exception
+{
+  System.out.println("test_wl_send: dest:" + dest + ", msg_type:" + msg_type + ", data:" + new String(data));
+
+  if (dest < 0) {
+    System.out.println("sending to global dest");
+    int ret = Wireless.wl_send_global_packet(TEST_PACKET_GROUP_ID, (byte)msg_type, data, (byte)0);
+    if (ret != 0) {
+      throw new Exception("test_wl_send: wl_send_global_packet failed.");
+    }
+  } else {
+    System.out.println("sending to specific robot: " + dest);
+    int ret = Wireless.wl_send_robot_to_robot_global_packet(TEST_PACKET_GROUP_ID, (byte)msg_type, data, dest, (byte)0);
+    if (ret != 0) {
+      throw new Exception("test_wl_send: wl_send_robot_to_robot_global_packet failed.");
+    }
+  }
+}
+
+public static int get_num_robots() {
+  return TokenRing.wl_token_get_num_robots();
+}
+
+public static int[] get_xbee_ids() {
+  int num_robots = TokenRing.wl_token_get_num_robots();
+  int[] ids = new int[num_robots];
+
+  TokenRing.wl_token_iterator_begin();
+
+  int i = 0;
+  while (TokenRing.wl_token_iterator_has_next()!=0) {
+    ids[i] = TokenRing.wl_token_iterator_next();
+    i++;
+  }
+
+  return ids;
+}
+
+public static class SensorReading
+{
+  public int botid;
+  public int target;
+  public int reading;
+
+  public SensorReading(int botid, int target, int reading)
+  {
+    this.botid = botid;
+    this.target = target;
+    this.reading = reading;
+  }
+}
+
+public static SensorReading[][] get_sensor_matrix() {
+  int[] ids = get_xbee_ids();
+  int num_robots = ids.length;
+
+  SensorReading[][] m = new SensorReading[num_robots][num_robots];
+
+  for (int i = 0; i < num_robots; i++) {
+    for (int j = 0; j < num_robots; j++) {
+      m[i][j] = new SensorReading(ids[i], ids[j], TokenRing.wl_token_get_sensor_reading(ids[i], ids[j]) );
+    }
+  }
+
+  return m;
+}
+
+public static class TestPacketGroupHandler implements Wireless.PacketGroupHandler
+{
+  public int getGroupCode() {
+    return TEST_PACKET_GROUP_ID;
+  }
+
+  public void timeout_handler() {
+    System.err.println("wireless - timeout!");
+  }
+
+  public void handle_response(int frame, int received) {
+  }
+
+  public void handle_received(byte type, int source_robot, byte[] data) {
+    System.out.println("***Got packet from robot***");
+
+    System.out.println("Received message " + type + " from " + source_robot + ": " + new String(data));
+  }
+
+  public void unregister() {
+    System.out.println("unregister");
+  }
+}
+
+}
Index: branches/scout/projects/libwireless/jni/test/Makefile
===================================================================
--- branches/scout/projects/libwireless/jni/test/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/jni/test/Makefile	(revision 1346)
@@ -0,0 +1,8 @@
+all :
+	javac -cp .:../lib/colonywireless.jar CWirelessTest.java
+
+run :
+	java -cp .:../lib/colonywireless.jar -Djava.library.path=../lib CWirelessTest /dev/ttyUSB0
+
+clean :
+	rm *.class
Index: branches/scout/projects/libwireless/jni/robot_test/main.c
===================================================================
--- branches/scout/projects/libwireless/jni/robot_test/main.c	(nonexistent)
+++ branches/scout/projects/libwireless/jni/robot_test/main.c	(revision 1346)
@@ -0,0 +1,37 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <xbee.h>
+
+#define TEST_PACKET_GROUP_ID 15
+
+void handle_receive(char type, int source, unsigned char* packet, int length)
+{
+  wl_send_robot_to_robot_global_packet(TEST_PACKET_GROUP_ID, type, (char *)packet, length, source, 0);
+}
+
+int main(void)
+{
+	//usb_puts("Turned on.\n");
+	dragonfly_init(ALL_ON);
+	usb_puts("Dragonfly initialized.\n");
+
+	wl_init();
+	usb_puts("Wireless initialized.\n");
+	
+	PacketGroupHandler pgh = { TEST_PACKET_GROUP_ID, NULL, NULL, handle_receive, NULL };
+	wl_register_packet_group(&pgh);
+
+	wl_set_channel(0xF);
+	usb_puts("Wireless channel set.\n");
+	wl_token_ring_register();
+	usb_puts("Token ring initialized.\n");
+	wl_token_ring_join();
+	usb_puts("Token ring joined.\n");
+	
+	while (1)
+	{
+		wl_do();
+	}
+}
+
Index: branches/scout/projects/libwireless/jni/robot_test/Makefile
===================================================================
--- branches/scout/projects/libwireless/jni/robot_test/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/jni/robot_test/Makefile	(revision 1346)
@@ -0,0 +1,523 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = main
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+
+
+# Place -I options here
+CINCS = -I../../lib -I../../../libdragonfly -L../../lib -L../../../libdragonfly
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+CFLAGS += -DROBOT
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+LDFLAGS += -lwireless -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+AVRDUDE_FLAGS += -D
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/libwireless/jni/lib/handlers.c
===================================================================
--- branches/scout/projects/libwireless/jni/lib/handlers.c	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/handlers.c	(revision 1346)
@@ -0,0 +1,47 @@
+void callUnregister(int num);
+void callHandleReceived(int num, char type, int source, unsigned char *packet, int length);
+void callHandleResponse(int num, int frame, int received);
+void callTimeout(int num);
+
+#define HANDLER(num) void jni_timeout_handler##num() \
+{ \
+    callTimeout(num); \
+} \
+void jni_handle_response##num(int frame, int received) \
+{ \
+    callHandleResponse(num, frame, received); \
+} \
+void jni_handle_receive##num(char type, int source, unsigned char* packet, int length) \
+{ \
+    callHandleReceived(num, type, source, packet, length); \
+} \
+void jni_unregister##num() \
+{ \
+    callUnregister(num); \
+}
+
+HANDLER(0)
+HANDLER(1)
+HANDLER(2)
+HANDLER(3)
+HANDLER(4)
+HANDLER(5)
+HANDLER(6)
+HANDLER(7)
+HANDLER(8)
+HANDLER(9)
+HANDLER(10)
+HANDLER(11)
+HANDLER(12)
+HANDLER(13)
+HANDLER(14)
+HANDLER(15)
+
+#define DEC_HANDLER(num) {num, jni_timeout_handler##num, jni_handle_response##num, jni_handle_receive##num, jni_unregister##num }
+
+PacketGroupHandler packet_groups[WL_MAX_PACKET_GROUPS] = {
+DEC_HANDLER(0), DEC_HANDLER(1), DEC_HANDLER(2), DEC_HANDLER(3),
+DEC_HANDLER(4), DEC_HANDLER(5), DEC_HANDLER(6), DEC_HANDLER(7),
+DEC_HANDLER(8), DEC_HANDLER(9), DEC_HANDLER(10),DEC_HANDLER(11),
+DEC_HANDLER(12),DEC_HANDLER(13),DEC_HANDLER(14),DEC_HANDLER(15)
+};
Index: branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_Wireless.c
===================================================================
--- branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_Wireless.c	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_Wireless.c	(revision 1346)
@@ -0,0 +1,353 @@
+#include "org_roboticsclub_colony_Wireless.h"
+#include "wireless.h"
+#include <string.h>
+
+/* Memory used to hold XBee port name */
+char xbeeport[128];
+
+/* Flag to track whether wl has been initialized */
+static int _init = 0;
+
+JavaVM *jvm;
+
+#include "handlers.c"
+jobject handlers[WL_MAX_PACKET_GROUPS] = {0};
+
+void callTimeout(int num)
+{
+    jobject pgh = handlers[num];
+    JNIEnv *env;
+    int bAttached = 0;
+
+    if (jvm==NULL) /* JVM wasn't set - there was an error */
+        return;
+
+    if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_1))
+    {
+        /* Aren't attached to a JVM, so try to attach */
+        if ((*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL))
+            return; /* Error getting JNI Environment, can't continue */
+        else
+            bAttached = 1;
+    }
+
+    jclass cls = (*env)->GetObjectClass(env, pgh);
+    jmethodID mid = (*env)->GetMethodID(env, cls, "timeout_handler", "()V");
+    if (mid == NULL)
+        return; /* method not found */
+    (*env)->CallVoidMethod(env, pgh, mid);
+
+    if (bAttached)
+        (*jvm)->DetachCurrentThread(jvm);
+}
+void callHandleResponse(int num, int frame, int received)
+{
+    jobject pgh = handlers[num];
+    JNIEnv *env;
+    int bAttached = 0;
+
+    if (jvm==NULL) /* JVM wasn't set - there was an error */
+        return;
+
+    if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_1))
+    {
+        /* Aren't attached to a JVM, so try to attach */
+        if ((*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL))
+            return; /* Error getting JNI Environment, can't continue */
+        else
+            bAttached = 1;
+    }
+
+    jclass cls = (*env)->GetObjectClass(env, pgh);
+    jmethodID mid = (*env)->GetMethodID(env, cls, "handle_response", "(II)V");
+    if (mid == NULL)
+        return; /* method not found */
+    (*env)->CallVoidMethod(env, pgh, mid, (jint)frame, (jint)received);
+
+    if (bAttached)
+        (*jvm)->DetachCurrentThread(jvm);
+}
+void callHandleReceived(int num, char type, int source, unsigned char *packet, int length)
+{
+    jobject pgh = handlers[num];
+    JNIEnv *env;
+    int bAttached = 0;
+
+    if (jvm==NULL) /* JVM wasn't set - there was an error */
+        return;
+
+    if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_1))
+    {
+        /* Aren't attached to a JVM, so try to attach */
+        if ((*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL))
+            return; /* Error getting JNI Environment, can't continue */
+        else
+            bAttached = 1;
+    }
+
+    jclass cls = (*env)->GetObjectClass(env, pgh);
+    jmethodID mid = (*env)->GetMethodID(env, cls, "handle_received", "(BI[B)V");
+    if (mid == NULL)
+        return; /* method not found */
+
+    jbyteArray arr = (*env)->NewByteArray(env, length);
+    (*env)->SetByteArrayRegion(env, arr, 0, length, (jbyte *)packet);
+
+    (*env)->CallVoidMethod(env, pgh, mid, (jbyte)type, (jint)source, packet);
+
+    if (bAttached)
+        (*jvm)->DetachCurrentThread(jvm);
+}
+void callUnregister(int num)
+{
+    jobject pgh = handlers[num];
+    JNIEnv *env;
+    int bAttached = 0;
+
+    if (jvm==NULL) /* JVM wasn't set - there was an error */
+        return;
+
+    if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_1))
+    {
+        /* Aren't attached to a JVM, so try to attach */
+        if ((*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL))
+            return; /* Error getting JNI Environment, can't continue */
+        else
+            bAttached = 1;
+    }
+
+    jclass cls = (*env)->GetObjectClass(env, pgh);
+    jmethodID mid = (*env)->GetMethodID(env, cls, "unregister", "()V");
+    if (mid == NULL)
+        return; /* method not found */
+    (*env)->CallVoidMethod(env, pgh, mid);
+
+    (*env)->DeleteGlobalRef(env, pgh);
+
+    if (bAttached)
+        (*jvm)->DetachCurrentThread(jvm);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_init
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1init
+  (JNIEnv *env, jclass class)
+{
+    int ret;
+
+    //init_pga();
+
+    (*env)->GetJavaVM(env, &jvm);
+
+    ret = wl_init();
+    
+    if (!ret)
+      _init = 1;
+    
+    return ret;
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_terminate
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1terminate
+  (JNIEnv *env, jclass class)
+{
+    if (_init)
+        wl_terminate();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_do
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1do
+  (JNIEnv *env, jclass class)
+{
+    wl_do();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_register_packet_group
+ * Signature: (Lorg/roboticsclub/colony/Wireless/PacketGroupHandler;)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1register_1packet_1group
+  (JNIEnv *env, jclass class, jobject pgh)
+{
+    jint groupId;
+    jobject gPgh;
+
+    jclass cls = (*env)->GetObjectClass(env, pgh);
+    jmethodID mid = (*env)->GetMethodID(env, cls, "getGroupCode", "()I");
+    if (mid == NULL)
+        return; /* method not found */
+    groupId = (*env)->CallIntMethod(env, pgh, mid);
+
+    if (groupId > 15 || groupId < 0)
+        return;
+
+    gPgh = (*env)->NewGlobalRef(env, pgh);
+    handlers[groupId] = gPgh;
+
+    wl_register_packet_group(&packet_groups[groupId]);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_unregister_packet_group
+ * Signature: (Lorg/roboticsclub/colony/Wireless/PacketGroupHandler;)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1unregister_1packet_1group
+  (JNIEnv *env, jclass class, jobject pgh)
+{
+    jint groupId;
+
+    jclass cls = (*env)->GetObjectClass(env, pgh);
+    jmethodID mid = (*env)->GetMethodID(env, cls, "getGroupCode", "()I");
+    if (mid == NULL)
+        return; /* method not found */
+    groupId = (*env)->CallIntMethod(env, pgh, mid);
+
+    if (groupId < 0 || groupId > 15)
+        return;
+
+    wl_unregister_packet_group(&packet_groups[groupId]);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_robot_to_robot_global_packet
+ * Signature: (BB[BIB)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1robot_1to_1robot_1global_1packet
+  (JNIEnv *env, jclass class, jbyte group, jbyte type, jbyteArray data, jint dest, jbyte frame)
+{
+    jbyte buf[256];
+    jsize length = (*env)->GetArrayLength(env, data);
+    (*env)->GetByteArrayRegion(env, data, 0, 256, buf);
+    return wl_send_robot_to_robot_global_packet(group, type, (char *)buf, length, (int)dest, frame);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_robot_to_robot_packet
+ * Signature: (BB[BIB)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1robot_1to_1robot_1packet
+  (JNIEnv *env, jclass class, jbyte group, jbyte type, jbyteArray data, jint dest, jbyte frame)
+{
+    jbyte buf[256];
+    jsize length = (*env)->GetArrayLength(env, data);
+    (*env)->GetByteArrayRegion(env, data, 0, 256, buf);
+    return wl_send_robot_to_robot_packet(group, type, (char *)buf, length, (int)dest, frame);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_global_packet
+ * Signature: (BB[BB)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1global_1packet
+  (JNIEnv *env, jclass class, jbyte group, jbyte type, jbyteArray data, jbyte frame)
+{
+    jbyte buf[256];
+    jsize length = (*env)->GetArrayLength(env, data);
+    (*env)->GetByteArrayRegion(env, data, 0, 256, buf);
+    return wl_send_global_packet(group, type, (char *)buf, length, frame);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_pan_packet
+ * Signature: (BB[BB)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1pan_1packet
+  (JNIEnv *env, jclass class, jbyte group, jbyte type, jbyteArray data, jbyte frame)
+{
+    jbyte buf[256];
+    jsize length = (*env)->GetArrayLength(env, data);
+    (*env)->GetByteArrayRegion(env, data, 0, 256, buf);
+    wl_send_pan_packet(group, type, (char *)buf, length, frame);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_set_pan
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1set_1pan
+  (JNIEnv *env, jclass class, jint pan)
+{
+    return wl_set_pan((int)pan);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_get_pan
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1get_1pan
+  (JNIEnv *env, jclass class)
+{
+    return wl_get_pan();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_set_channel
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1set_1channel
+  (JNIEnv *env, jclass class, jint channel)
+{
+    return wl_set_channel((int)channel);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_get_channel
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1get_1channel
+  (JNIEnv *env, jclass class)
+{
+    return wl_get_channel();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_get_xbee_id
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1get_1xbee_1id
+  (JNIEnv *env, jclass class)
+{
+    return wl_get_xbee_id();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_set_com_port
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1set_1com_1port
+  (JNIEnv *env, jclass class, jstring port)
+{
+    const jbyte *str = (*env)->GetStringUTFChars(env, port, NULL);
+    if (str == NULL)
+        return; /* OutOfMemoryError already thrown */
+
+    strcpy(xbeeport, (const char *)str);
+
+    (*env)->ReleaseStringUTFChars(env, port, str);
+
+    wl_set_com_port(xbeeport);
+}
+
Index: branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_TokenRing.c
===================================================================
--- branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_TokenRing.c	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_TokenRing.c	(revision 1346)
@@ -0,0 +1,146 @@
+#include "org_roboticsclub_colony_TokenRing.h"
+#include "wl_token_ring.h"
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_register
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1register
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_ring_register();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_unregister
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1unregister
+  (JNIEnv *env, jclass class)
+{
+    wl_token_ring_register();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_join
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1join
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_ring_join();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_leave
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1leave
+  (JNIEnv *env, jclass class)
+{
+    wl_token_ring_leave();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_robots_in_ring
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1robots_1in_1ring
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_get_robots_in_ring();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_is_robot_in_ring
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1is_1robot_1in_1ring
+  (JNIEnv *env, jclass class, jint robot)
+{
+    return wl_token_is_robot_in_ring((int)robot);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_iterator_begin
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1iterator_1begin
+  (JNIEnv *env, jclass class)
+{
+    wl_token_iterator_begin();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_iterator_has_next
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1iterator_1has_1next
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_iterator_has_next();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_iterator_next
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1iterator_1next
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_iterator_next();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_sensor_reading
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1sensor_1reading
+  (JNIEnv *env, jclass class, jint source, jint dest)
+{
+    return wl_token_get_sensor_reading((int)source, (int)dest);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_my_sensor_reading
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1my_1sensor_1reading
+  (JNIEnv *env, jclass class, jint dest)
+{
+    return wl_token_get_my_sensor_reading(dest);
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_num_robots
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1num_1robots
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_get_num_robots();
+}
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_matrix_size
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1matrix_1size
+  (JNIEnv *env, jclass class)
+{
+    return wl_token_get_matrix_size();
+}
+
Index: branches/scout/projects/libwireless/jni/lib/org/roboticsclub/colony/TokenRing.java
===================================================================
--- branches/scout/projects/libwireless/jni/lib/org/roboticsclub/colony/TokenRing.java	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/org/roboticsclub/colony/TokenRing.java	(revision 1346)
@@ -0,0 +1,18 @@
+package org.roboticsclub.colony;
+
+public class TokenRing
+{
+    public static native int  wl_token_ring_register();
+    public static native void wl_token_ring_unregister();
+    public static native int  wl_token_ring_join();
+    public static native void wl_token_ring_leave();
+    public static native int  wl_token_get_robots_in_ring();
+    public static native int  wl_token_is_robot_in_ring(int robot);
+    public static native void wl_token_iterator_begin();
+    public static native int  wl_token_iterator_has_next();
+    public static native int  wl_token_iterator_next();
+    public static native int  wl_token_get_sensor_reading(int source, int dest);
+    public static native int  wl_token_get_my_sensor_reading(int dest);
+    public static native int  wl_token_get_num_robots();
+    public static native int  wl_token_get_matrix_size();
+}
Index: branches/scout/projects/libwireless/jni/lib/org/roboticsclub/colony/Wireless.java
===================================================================
--- branches/scout/projects/libwireless/jni/lib/org/roboticsclub/colony/Wireless.java	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/org/roboticsclub/colony/Wireless.java	(revision 1346)
@@ -0,0 +1,65 @@
+package org.roboticsclub.colony;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class Wireless
+{
+    public static native int  wl_init();
+    public static native void wl_terminate();
+    public static native void wl_do();
+    public static native void wl_register_packet_group(PacketGroupHandler pgh);
+    public static native void wl_unregister_packet_group(PacketGroupHandler pgh);
+    public static native int  wl_send_robot_to_robot_global_packet(byte group, byte type, byte[] data, int dest, byte frame);
+    public static native int  wl_send_robot_to_robot_packet(byte group, byte type, byte[] data, int dest, byte frame);
+    public static native int  wl_send_global_packet(byte group, byte type, byte[] data, byte frame);
+    public static native void wl_send_pan_packet(byte group, byte type, byte[] data, byte frame);
+    public static native int  wl_set_pan(int pan);
+    public static native int  wl_get_pan();
+    public static native int  wl_set_channel(int channel);
+    public static native int  wl_get_channel();
+    public static native int  wl_get_xbee_id();
+    public static native void wl_set_com_port(String port);
+
+    public static TimerTask wireless_thread;
+
+    public static void startWirelessThread(int rate)
+    {
+        if (wireless_thread==null)
+        {
+            wireless_thread = new TimerTask() {
+                    public void run()
+                    {
+                        wl_do();
+                    }
+                };
+        }
+
+        new Timer("Colony Wireless Monitor", true).scheduleAtFixedRate(wireless_thread, 0, rate);
+    }
+
+    static
+    {
+        Runtime.getRuntime().addShutdownHook(new Thread() {
+                public void run()
+                {
+                    wl_terminate();
+                    System.out.println("Wireless terminated");
+                }
+            });
+    }
+
+    static
+    {
+        System.loadLibrary("jniwireless");
+    }
+
+    public static interface PacketGroupHandler
+    {
+        public abstract int  getGroupCode();
+        public abstract void timeout_handler();
+        public abstract void handle_response(int frame, int received);
+        public abstract void handle_received(byte type, int source, byte[] packet);
+        public abstract void unregister();
+    }
+}
Index: branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_Wireless.h
===================================================================
--- branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_Wireless.h	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_Wireless.h	(revision 1346)
@@ -0,0 +1,133 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_roboticsclub_colony_Wireless */
+
+#ifndef _Included_org_roboticsclub_colony_Wireless
+#define _Included_org_roboticsclub_colony_Wireless
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_init
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1init
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_terminate
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1terminate
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_do
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1do
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_register_packet_group
+ * Signature: (Lorg/roboticsclub/colony/Wireless/PacketGroupHandler;)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1register_1packet_1group
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_unregister_packet_group
+ * Signature: (Lorg/roboticsclub/colony/Wireless/PacketGroupHandler;)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1unregister_1packet_1group
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_robot_to_robot_global_packet
+ * Signature: (BB[BIB)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1robot_1to_1robot_1global_1packet
+  (JNIEnv *, jclass, jbyte, jbyte, jbyteArray, jint, jbyte);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_robot_to_robot_packet
+ * Signature: (BB[BIB)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1robot_1to_1robot_1packet
+  (JNIEnv *, jclass, jbyte, jbyte, jbyteArray, jint, jbyte);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_global_packet
+ * Signature: (BB[BB)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1global_1packet
+  (JNIEnv *, jclass, jbyte, jbyte, jbyteArray, jbyte);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_send_pan_packet
+ * Signature: (BB[BB)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1send_1pan_1packet
+  (JNIEnv *, jclass, jbyte, jbyte, jbyteArray, jbyte);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_set_pan
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1set_1pan
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_get_pan
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1get_1pan
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_set_channel
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1set_1channel
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_get_channel
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1get_1channel
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_get_xbee_id
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_Wireless_wl_1get_1xbee_1id
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_Wireless
+ * Method:    wl_set_com_port
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_Wireless_wl_1set_1com_1port
+  (JNIEnv *, jclass, jstring);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Index: branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_TokenRing.h
===================================================================
--- branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_TokenRing.h	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/org_roboticsclub_colony_TokenRing.h	(revision 1346)
@@ -0,0 +1,117 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_roboticsclub_colony_TokenRing */
+
+#ifndef _Included_org_roboticsclub_colony_TokenRing
+#define _Included_org_roboticsclub_colony_TokenRing
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_register
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1register
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_unregister
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1unregister
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_join
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1join
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_ring_leave
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1ring_1leave
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_robots_in_ring
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1robots_1in_1ring
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_is_robot_in_ring
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1is_1robot_1in_1ring
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_iterator_begin
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1iterator_1begin
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_iterator_has_next
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1iterator_1has_1next
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_iterator_next
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1iterator_1next
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_sensor_reading
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1sensor_1reading
+  (JNIEnv *, jclass, jint, jint);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_my_sensor_reading
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1my_1sensor_1reading
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_num_robots
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1num_1robots
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     org_roboticsclub_colony_TokenRing
+ * Method:    wl_token_get_matrix_size
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_org_roboticsclub_colony_TokenRing_wl_1token_1get_1matrix_1size
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Index: branches/scout/projects/libwireless/jni/lib/Makefile
===================================================================
--- branches/scout/projects/libwireless/jni/lib/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/jni/lib/Makefile	(revision 1346)
@@ -0,0 +1,56 @@
+# JNI Wireless makefile
+
+COLONYROOT = ../../../../..
+
+CC = gcc
+CFLAGS = -Wall -Wextra -g 
+LFLAGS = -shared -static -Wl,-soname,$(TARGET)
+
+WLIB_DIR = $(COLONYROOT)/code/projects/libwireless/lib
+JAVA_HOME = /usr/lib/jvm/java-6-sun-1.6.0.07
+JAVA_PACKAGE = org/roboticsclub/colony
+
+JAVA_FILES = $(JAVA_PACKAGE)/Wireless.java $(JAVA_PACKAGE)/TokenRing.java
+FILES = org_roboticsclub_colony_Wireless.c org_roboticsclub_colony_TokenRing.c
+WLIB_FILES = sensor_matrix.c wireless.c wl_error_group.c wl_token_ring.c xbee.c
+
+WLIB_SOURCE = $(patsubst %,$(WLIB_DIR)/%, $(WLIB_FILES))
+OBJECTS = $(FILES:.c=.o)
+WLIB_OBJECTS = $(WLIB_SOURCE:.c=.o)
+
+INCLUDE_DIRS = $(WLIB_DIR) $(JAVA_HOME)/include $(JAVA_HOME)/include/linux
+LIBRARY_DIRS = 
+
+#this takes the include directory and puts a -I in front of each directory name before being used in a gcc statement
+INCLUDE_DIRS_FOR_GCC = $(patsubst %,-I%, $(INCLUDE_DIRS))
+#this takes the library directory and puts a -L in front of each directory name so it can be used in a gcc statement
+LIBRARY_DIRS_FOR_GCC = $(patsubst %,-L%, $(LIBRARY_DIRS))
+
+.PHONY : all clean run
+
+all: libjniwireless.so java
+
+libjniwireless.so: $(FILES) $(WLIB_SOURCE)
+	@echo "-----------------------"
+	@echo "---begin compiling native library---"
+	$(CC) $(CFLAGS) $(LFLAGS) $(INCLUDE_DIRS_FOR_GCC) $(FILES) $(WLIB_SOURCE) $(LIBRARY_DIRS_FOR_GCC) -o $@
+	@echo "---finish compiling native library---"
+	@echo "-----------------------"
+
+java : $(JAVA_FILES)
+	@echo "----------------------"
+	@echo "---begin compiling java library---"
+	@echo ""
+	@echo "-----compiling java files-----"
+	javac $(JAVA_FILES)
+	@echo "-----finish compiling java files-----"
+	@echo ""
+	@echo "-----creating jar file-----"
+	jar cf colonywireless.jar org/
+	@echo "-----finish creating jar file-----"
+	@echo ""
+	@echo "--finish compiling java library---"
+
+clean:
+	rm -rf *.o libjniwireless.so *~
+	rm $(JAVA_PACKAGE)/*.class colonywireless.jar
Index: branches/scout/projects/libwireless/lib/xbee.c
===================================================================
--- branches/scout/projects/libwireless/lib/xbee.c	(nonexistent)
+++ branches/scout/projects/libwireless/lib/xbee.c	(revision 1346)
@@ -0,0 +1,1017 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file xbee.c
+ * @brief XBee Interface
+ *
+ * Implementation of low level communication with the XBee in API mode.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include "xbee.h"
+#include "wl_defs.h"
+
+#ifndef ROBOT
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <errno.h>
+#include <termios.h>
+
+#else
+
+#include <serial.h>
+#include <avr/interrupt.h>
+
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define XBEE_FRAME_START 0x7E
+#define XBEE_GET_PACKET_TIMEOUT 1000
+
+/*Frame Types*/
+#define XBEE_FRAME_STATUS 0x8A
+#define XBEE_FRAME_AT_COMMAND 0x08
+#define XBEE_FRAME_AT_COMMAND_RESPONSE 0x88
+#define XBEE_FRAME_TX_REQUEST_64 0x00
+#define XBEE_FRAME_TX_REQUEST_16 0x01
+#define XBEE_FRAME_TX_STATUS XBEE_TX_STATUS
+#define XBEE_FRAME_RX_64 0x80
+#define XBEE_FRAME_RX_16 XBEE_RX
+
+/*Internal Function Prototypes*/
+
+/*I/O Functions*/
+static int xbee_send(char* buf, int size);
+static int xbee_send_string(char* c);
+
+#ifndef ROBOT
+static int xbee_read(char* buf, int size);
+#endif
+
+/*Command Mode Functions
+ * Called during initialization.
+ */
+static int xbee_enter_command_mode(void);
+static int xbee_exit_command_mode(void);
+static int xbee_enter_api_mode(void);
+static int xbee_wait_for_string(char* s, int len);
+static int xbee_wait_for_ok(void);
+
+/*API Mode Functions*/
+
+static int xbee_handle_packet(char* packet, int len);
+static void xbee_handle_at_command_response(char* command, char result, char* extra, int extraLen);
+static void xbee_handle_status(char status);
+static int xbee_verify_checksum(char* packet, int len);
+static char xbee_compute_checksum(char* packet, int len);
+static int xbee_send_frame(char* buf, int len);
+static int xbee_send_read_at_command(char* command);
+static int xbee_send_modify_at_command(char* command, char* value);
+
+/*Global Variables*/
+
+#ifndef ROBOT
+static char* xbee_com_port = XBEE_PORT_DEFAULT;
+static int xbee_stream;
+static pthread_t* xbee_listen_thread;
+#endif
+
+// TODO: is this a good size?
+#define XBEE_BUFFER_SIZE	128
+#define PACKET_BUFFER_SIZE	108
+// a buffer for data received from the XBee
+char arrival_buf[XBEE_BUFFER_SIZE];
+// location of last unread byte in buffer
+volatile int buffer_last = 0;
+// first unread byte in buffer
+volatile int buffer_first = 0;
+
+
+//used to store packets as they are read
+static char xbee_buf[PACKET_BUFFER_SIZE];
+static int currentBufPos = 0;
+
+//XBee status
+static unsigned int xbee_panID = XBEE_PAN_DEFAULT;
+static unsigned int xbee_pending_panID = XBEE_PAN_DEFAULT;
+static int xbee_channel = XBEE_CHANNEL_DEFAULT;
+static int xbee_pending_channel = XBEE_CHANNEL_DEFAULT;
+static volatile unsigned int xbee_address = 0;
+
+/*Function Implementations*/
+
+#ifdef ROBOT
+
+/**
+ * Interrupt for the robot. Adds bytes received from the xbee
+ * to the buffer.
+ **/
+#ifndef FIREFLY
+ISR(USART1_RX_vect)
+{
+	char c = UDR1;
+	arrival_buf[buffer_last] = c;
+	int t = buffer_last + 1;
+	if (t == XBEE_BUFFER_SIZE)
+		t = 0;
+	if (t == buffer_first)
+	{
+		WL_DEBUG_PRINT("\nOut of space in buffer.\n");
+	}
+	buffer_last = t;
+}
+#else
+SIGNAL(SIG_USART0_RECV)
+{
+	char c = UDR0;
+	arrival_buf[buffer_last] = c;
+	int t = buffer_last + 1;
+	if (t == XBEE_BUFFER_SIZE)
+		t = 0;
+	if (t == buffer_first)
+	{
+		WL_DEBUG_PRINT("Out of space in buffer.\n");
+	}
+	buffer_last = t;
+}
+#endif
+
+#else
+
+// Computer code
+
+/**
+ * Thread that listens to the xbee.
+ **/
+static void* listen_to_xbee(void* x)
+{
+	char c;
+	while (1)
+	{
+		if (xbee_read(&c, 1) != 0) {
+			WL_DEBUG_PRINT("xbee_read failed.\n");
+			return NULL;
+		}
+
+		arrival_buf[buffer_last] = c;
+		int t = buffer_last + 1;
+		if (t == XBEE_BUFFER_SIZE)
+			t = 0;
+		if (t == buffer_first)
+		{
+			WL_DEBUG_PRINT("Out of space in buffer.\n");
+		}
+		buffer_last = t;
+
+		usleep(1000);
+	}
+
+	return NULL;
+}
+
+#endif
+
+/**
+ * Initializes the XBee library so that other functions may be used.
+ **/
+int xbee_lib_init()
+{
+	WL_DEBUG_PRINT("in xbee_init\n");
+#ifdef ROBOT
+
+	//enable the receiving interrupt
+#ifdef FIREFLY
+	UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+#else
+#ifdef BAYBOARD
+	UCSR1B |= _BV(RXCIE1);
+#else
+	UCSR1B |= _BV(RXCIE);
+#endif
+#endif
+	sei();
+#else
+	xbee_stream = open(xbee_com_port, O_RDWR);
+	if (xbee_stream == -1/* || lockf(xbee_stream, F_TEST, 0) != 0*/)
+	{
+		WL_DEBUG_PRINT("Failed to open connection to XBee on port ");
+		WL_DEBUG_PRINT_INT(xbee_com_port);
+		WL_DEBUG_PRINT(".\n");
+		return -1;
+	} else {
+	  WL_DEBUG_PRINT("Successfully opened connection to XBee on port ");
+		WL_DEBUG_PRINT_INT(xbee_com_port);
+		WL_DEBUG_PRINT(".\n");
+	}
+
+	// set baud rate, etc. correctly
+	struct termios options;
+
+	tcgetattr(xbee_stream, &options);
+	cfsetispeed(&options, B9600);
+	cfsetospeed(&options, B9600);
+	options.c_iflag &= ~ICRNL;
+	options.c_oflag &= ~OCRNL;
+	options.c_cflag |= (CLOCAL | CREAD);
+	options.c_cflag &= ~PARENB;
+	options.c_cflag &= ~CSTOPB;
+	options.c_cflag &= ~CSIZE;
+	options.c_cflag |= CS8;
+	options.c_lflag &= ~ICANON;
+	options.c_cc[VMIN] = 1;
+	options.c_cc[VTIME] = 50;
+
+	if (tcsetattr(xbee_stream, TCSANOW, &options))
+	{
+		WL_DEBUG_PRINT("Error setting attributes.\n");
+		return -1;
+	}
+
+	xbee_listen_thread = (pthread_t*)malloc(sizeof(pthread_t));
+	if (xbee_listen_thread == NULL)
+	{
+		WL_DEBUG_PRINT("Malloc failed.\n");
+		return -1;
+	}
+
+	int ret = pthread_create(xbee_listen_thread, NULL, listen_to_xbee, NULL);
+	if (ret)
+	{
+		WL_DEBUG_PRINT("Failed to create listener thread.\n");
+		return -1;
+	}
+#endif
+
+	WL_DEBUG_PRINT("Entering command mode.\n");
+
+	if (xbee_enter_command_mode() != 0) {
+		return -1;
+	}
+
+	WL_DEBUG_PRINT("Entered command mode.\n");
+
+	if (xbee_enter_api_mode() != 0) {
+		return -1;
+	}
+
+	WL_DEBUG_PRINT("Entered api mode.\n");
+
+	if (xbee_exit_command_mode() != 0) {
+	     return -1;
+	}
+	
+	WL_DEBUG_PRINT("Left command mode.\n");
+
+	if (xbee_send_read_at_command("MY")) {
+		return -1;
+	}
+	WL_DEBUG_PRINT("Getting ATMY address.\n");
+
+#ifndef ROBOT
+	int i;
+	for (i = 0; xbee_address == 0 && i < XBEE_GET_PACKET_TIMEOUT; i++) {
+	  ret = xbee_get_packet(NULL);
+
+	  usleep(1000);
+	  
+/* 	  if (ret == -1) { */
+/* 	    WL_DEBUG_PRINT("xbee_get_packet(NULL) failed.\n"); */
+/* 	    return -1; */
+/* 	  } */
+	}
+#else
+	//wait to return until the address is set
+  //TODO: this shouldn't wait indefinitely.  There should be some sort of reasonable timeout
+  // so if the address is never set right, an error can be returned instead of having the
+  // robot hang forever
+	while (xbee_address == 0) {
+	  xbee_get_packet(NULL);
+	}
+#endif
+	WL_DEBUG_PRINT("Got ATMY address.\n");
+
+#ifndef ROBOT
+	if (i == XBEE_GET_PACKET_TIMEOUT) { // We timed-out.
+
+	  WL_DEBUG_PRINT("xbee_get_packet timed out.\n");
+	  return -1;
+	} else {
+	  return 0;
+	}
+#else
+	return 0;
+#endif
+}
+
+/**
+ * Call when finished using the XBee library. This releases
+ * all sued resources.
+ **/
+void xbee_terminate()
+{
+	#ifndef ROBOT
+	pthread_cancel(*xbee_listen_thread);
+	free(xbee_listen_thread);
+	lockf(xbee_stream, F_ULOCK, 0);
+	close(xbee_stream);
+	#endif
+}
+
+/**
+ * Send a buffer buf of size bytes to the XBee.
+ *
+ * @param buf the buffer of data to send
+ * @param size the number of bytes to send
+ **/
+static int xbee_send(char* buf, int size)
+{
+#ifdef ROBOT
+	int i;
+	for (i = 0; i < size; i++) {
+		xbee_putc(buf[i]);
+	}
+
+	return 0;
+
+#else
+
+	int ret = write(xbee_stream, buf, size);
+	//success
+	if (ret == size)
+		return 0;
+	if (ret == -1)
+	{
+		//interrupted by system signal, probably timer interrupt.
+		//just try again
+		if (errno == 4)
+		{
+			return xbee_send(buf, size);
+		}
+		WL_DEBUG_PRINT("Failed to write to xbee\r\n");
+		return -1;
+	}
+
+	//write was interrupted after writing ret bytes
+	return xbee_send(buf + ret, size - ret);
+#endif
+}
+
+/**
+ * Sends a string to the XBee.
+ *
+ * @param c the string to send to the XBEE
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+static int xbee_send_string(char* c)
+{
+	return xbee_send(c, strlen(c));
+}
+
+#ifndef ROBOT
+static int xbee_read(char* buf, int size)
+{
+	if (read(xbee_stream, buf, size) == -1) {
+		WL_DEBUG_PRINT("Failed to read from xbee.\r\n");
+		return -1;
+	}
+
+	return 0;
+}
+#endif
+
+/**
+ * Enter into command mode.
+ **/
+static int xbee_enter_command_mode()
+{
+	if (xbee_send_string("+++") != 0) {
+		return -1;
+	}
+
+	if (xbee_wait_for_ok() != 0) {
+	  return -1;
+	}
+	  return 0;
+}
+
+/**
+ * Exit from command mode.
+ **/
+static int xbee_exit_command_mode()
+{
+	if (xbee_send_string("ATCN\r") != 0) {
+		return -1;
+	}
+
+	xbee_wait_for_ok();
+
+	return 0;
+}
+
+/**
+ * Enter API mode.
+ **/
+static int xbee_enter_api_mode()
+{
+	if (xbee_send_string("ATAP 1\r") != 0) {
+		return -1;
+	}
+	xbee_wait_for_ok();
+
+	return 0;
+}
+
+/**
+ * Wait until the string "OK\r" is received from the XBee.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+static int xbee_wait_for_ok()
+{
+	return xbee_wait_for_string("OK\r", 3);
+}
+
+/**
+ * Delay until the specified string is received from
+ * the XBee. Discards all other XBee data.
+ *
+ * @param s the string to receive
+ * @param len the length of the string
+ **/
+static int xbee_wait_for_string(char* s, int len)
+{
+	char* curr = s;
+	while (curr - s < len) {
+		// check if buffer is empty
+		if (buffer_last != buffer_first) {
+			char c = arrival_buf[buffer_first++];
+			if (buffer_first == XBEE_BUFFER_SIZE) {
+				buffer_first = 0;
+			}
+
+			if (c == *curr) {
+				curr++;
+			} else {
+#ifndef ROBOT
+			  //return -1; // Computer is less forgiving.
+			  curr = s;
+#else
+			  curr = s;
+#endif
+			}
+		} // else buffer is empty.
+
+#ifndef ROBOT
+		usleep(100);
+#endif
+	}
+
+	return 0;
+}
+
+/**
+ * Verifies that the packets checksum is correct.
+ * (If the checksum is correct, the sum of the bytes
+ * is 0xFF.)
+ *
+ * @param packet the packet received. This includes the first
+ * three bytes, which are header information from the XBee.
+ *
+ * @param len The length of the packet received from the XBee
+ *
+ * @return 0 if the checksum is incorrect, nonzero
+ * otherwise
+ **/
+int xbee_verify_checksum(char* packet, int len)
+{
+	unsigned char sum = 0;
+	int i;
+	for (i = 3; i < len; i++)
+		sum += (unsigned char)packet[i];
+	return sum == 0xFF;
+}
+
+/**
+ * Returns the checksum of the given packet.
+ *
+ * @param buf the data for the packet to send
+ * @param len the length of the packet in bytes
+ *
+ * @return the checksum of the packet, which will
+ * become the last byte sent in the packet
+ **/
+char xbee_compute_checksum(char* buf, int len)
+{
+	int i;
+	unsigned char sum = 0;
+	for (i = 0; i < len; i++)
+		sum += (unsigned char)buf[i];
+	return 0xFF - sum;
+}
+
+/**
+ * Adds header information and checksum to the given
+ * packet and sends it. Header information includes
+ * XBEE_FRAME_START and the packet length, as two bytes.
+ *
+ * @param buf the packet data
+ * @param len the size in bytes of the packet data
+ *
+ **/
+static int xbee_send_frame(char* buf, int len)
+{
+	char prefix[3];
+	prefix[0] = XBEE_FRAME_START;
+	prefix[1] = (len & 0xFF00) >> 8;
+	prefix[2] = len & 0xFF;
+	char checksum = xbee_compute_checksum(buf, len);
+
+	if (xbee_send(prefix, 3) != 0) {
+		return -1;
+	}
+
+	if (xbee_send(buf, len) != 0) {
+		return -1;
+	}
+
+	if (xbee_send(&checksum, 1) != 0) {
+		return -1;
+	}
+
+	return 0;
+}
+
+/**
+ * Sends an AT command to read a parameter.
+ *
+ * @param command the AT command to send. For exmaple,
+ * use ID to read the PAN ID and MY to return the XBee ID.
+ * See the XBee reference guide for a complete listing.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+static int xbee_send_read_at_command(char* command)
+{
+	return xbee_send_modify_at_command(command, NULL);
+}
+
+/**
+ * Sends the given AT command.
+ *
+ * @param command the AT command to send (e.g., MY, ID)
+ * @param value the value to pass as a parameter
+ * (or NULL if there is no parameter)
+ **/
+static int xbee_send_modify_at_command(char* command, char* value)
+{
+	char buf[16];
+	int i;
+
+	buf[0] = XBEE_FRAME_AT_COMMAND;
+	buf[1] = 1;
+	buf[2] = command[0];
+	buf[3] = command[1];
+	int valueLen = 0;
+	if (value != NULL)
+	{
+		valueLen = strlen(value);
+		if (valueLen > 8)
+		{
+			WL_DEBUG_PRINT("AT Command too large.\r\n");
+			return -1;
+		}
+
+		for (i = 0; i < valueLen; i++) {
+			buf[4 + i] = value[i];
+		}
+	}
+
+	return xbee_send_frame(buf, 4 + valueLen);
+}
+
+/**
+ * Send the specified packet.
+ *
+ * @param packet the packet data to send
+ * @param len the number of bytes in the packet
+ *
+ * @param dest the ID of the XBee to send the packet to,
+ * or XBEE_BROADCAST to send the message to all robots
+ * in the PAN.
+ *
+ * @param options a combination of the flags
+ * XBEE_OPTIONS_NONE, XBEE_OPTIONS_DISABLE_RESPONSE and
+ * XBEE_OPTIONS_BROADCAST_ALL_PANS
+ *
+ * @param frame the frame number to associate this packet
+ * with. This will be used to identify the response when
+ * the XBee alerts us as to whether or not our message
+ * was received.
+ **/
+int xbee_send_packet(char* packet, int len, int dest, char options, char frame)
+{
+	char buf[5];
+	char prefix[3];
+	int i;
+	unsigned char checksum = 0;
+
+	if (len > 100)
+	{
+		WL_DEBUG_PRINT("Packet is too large.\r\n");
+		return -1;
+	}
+
+	//data for sending request
+	buf[0] = XBEE_FRAME_TX_REQUEST_16;
+	buf[1] = frame;
+	buf[2] = (dest >> 8) & 0xFF;
+	buf[3] = dest & 0xFF;
+	buf[4] = options;
+
+	//packet prefix, do this here so we don't need an extra buffer
+	prefix[0] = XBEE_FRAME_START;
+	prefix[1] = ((5 + len) & 0xFF00) >> 8;
+	prefix[2] = (5 + len) & 0xFF;
+
+	for (i = 0; i < 5; i++)
+		checksum += (unsigned char)buf[i];
+	for (i = 0; i < len; i++)
+		checksum += (unsigned char)packet[i];
+	checksum = 0xFF - checksum;
+
+	if (xbee_send(prefix, 3) != 0) {
+		return -1;
+	}
+
+	if (xbee_send(buf, 5) != 0) {
+		return -1;
+	}
+
+	if (xbee_send(packet, len) != 0) {
+		return -1;
+	}
+
+	if (xbee_send((char*)&checksum, 1) != 0) {
+		return -1;
+	}
+
+	return 0;
+}
+
+/**
+ * Reads a packet received from the XBee. This function
+ * is non-blocking. The resulting packet is stored in dest.
+ * Only returns transmission response packets and
+ * received packets. The returned packet does not include
+ * header information or the checksum. This method also
+ * handles special packets dealt with by the XBee library,
+ * and so should be called frequently while the XBee is in
+ * use.<br><br>
+ *
+ * The first byte of the packet will be either
+ * XBEE_TX_STATUS or XBEE_RX to indicated
+ * a response to a sent message or a received message,
+ * respectively.<br><br>
+ *
+ * For a status response packet:<br>
+ * The first byte will be XBEE_TX_STATUS.<br>
+ * The second byte will be the frame number.<br>
+ * The third byte will be the result. 0 indicates success,
+ * and nonzero indicates that an error ocurred in
+ * transmitting the packet.<br><br>
+ *
+ * For a received packet:<br>
+ * The first byte will be XBEE_RX.<br>
+ * The second and third bytes will be the 16-bit
+ * address of the packet's sender.<br>
+ * The fourth byte is the signal strength.<br>
+ * The fifth byte is 1 if the packet were sent to
+ * a specific address, and 2 if it is a broadcast packet.<br><br>
+ *
+ * @param dest set to the packet data
+ * @return the length of the packet, or -1 if no packet
+ * is available
+ **/
+int xbee_get_packet(unsigned char* dest)
+{
+     int ret;
+	//start reading a packet with XBEE_FRAME_START
+	if (currentBufPos == 0)
+	{
+		do
+		{
+			if (buffer_first == XBEE_BUFFER_SIZE)
+				buffer_first = 0;
+			// check if buffer is empty
+			if (buffer_first == buffer_last) {
+				return -1;
+			}
+		} while (arrival_buf[buffer_first++] != XBEE_FRAME_START);
+
+		if (buffer_first == XBEE_BUFFER_SIZE) {
+			buffer_first = 0;
+		}
+		xbee_buf[0] = XBEE_FRAME_START;
+		currentBufPos++;
+	}
+
+	int len = -1;
+	if (currentBufPos >= 3) {
+		len = (int)xbee_buf[2] + ((int)xbee_buf[1] << 8);
+	}
+
+	while (len == -1 //packet length has not been read yet
+		|| currentBufPos < len + 4)
+	{
+		if (currentBufPos == 3)
+		{
+			len = (int)xbee_buf[2] + ((int)xbee_buf[1] << 8);
+			if (len > 120)
+			{
+				WL_DEBUG_PRINT("Packet too large. Probably error in XBee transmission.\n");
+				currentBufPos = 0;
+				return -1;
+			}
+		}
+
+		// check if buffer is empty
+		if (buffer_first == buffer_last) {
+			return -1;
+		}
+		xbee_buf[currentBufPos++] = arrival_buf[buffer_first++];
+		if (buffer_first == XBEE_BUFFER_SIZE) {
+			buffer_first = 0;
+		}
+	}
+
+	currentBufPos = 0;
+
+	if (!xbee_verify_checksum(xbee_buf, len + 4))
+	{
+		WL_DEBUG_PRINT("XBee checksum failed.\r\n");
+		return -1;
+	}
+
+	//we will take care of the packet
+	
+	ret = xbee_handle_packet(xbee_buf+3, len);
+	if (ret == 1) {
+		return 3;
+	}
+	
+	if (dest == NULL) {
+		return -1;
+	}
+
+	int i;
+	for (i = 3; i < len + 3; i++) {
+		dest[i - 3] = xbee_buf[i];
+	}
+	return len;
+}
+
+/**
+ * Handles modem status packets.
+ *
+ * @param status the type of status packet received.
+ **/
+void xbee_handle_status(char status)
+{
+	switch (status)
+	{
+		case 0:
+			WL_DEBUG_PRINT("XBee hardware reset.\r\n");
+			break;
+		case 1:
+			WL_DEBUG_PRINT("Watchdog timer reset.\r\n");
+			break;
+		case 2:
+			WL_DEBUG_PRINT("Associated.\r\n");
+			break;
+		case 3:
+			WL_DEBUG_PRINT("Disassociated.\r\n");
+			break;
+		case 4:
+			WL_DEBUG_PRINT("Synchronization lost.\r\n");
+			break;
+		case 5:
+			WL_DEBUG_PRINT("Coordinator realignment.\r\n");
+			break;
+		case 6:
+			WL_DEBUG_PRINT("Coordinator started.\r\n");
+			break;
+	}
+}
+
+/**
+ * Handles AT command response packets.
+ * @param command the two character AT command, e.g. MY or ID
+ * @param result 0 for success, 1 for an error
+ * @param extra the hex value of the requested register
+ * @param extraLen the length in bytes of extra
+ **/
+static void xbee_handle_at_command_response(char* command, char result, char* extra, int extraLen)
+{
+	if (result == 1)
+	{
+		WL_DEBUG_PRINT("Error with AT");
+		WL_DEBUG_PRINT(command);
+		WL_DEBUG_PRINT(" packet.\r\n");
+	}
+	WL_DEBUG_PRINT("AT");
+	WL_DEBUG_PRINT(command);
+	WL_DEBUG_PRINT(" command was successful.\r\n");
+
+	if (command[0] == 'I' && command[1] == 'D')
+	{
+		xbee_panID = xbee_pending_panID;
+		WL_DEBUG_PRINT("PAN ID set to ");
+		WL_DEBUG_PRINT_INT(xbee_panID);
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+
+	if (command[0] == 'C' && command[1] == 'H')
+	{
+		xbee_channel = xbee_pending_channel;
+		WL_DEBUG_PRINT("Channel set to ");
+		WL_DEBUG_PRINT_INT(xbee_channel);
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+
+	if (command[0] == 'M' && command[1] == 'Y' && extraLen != 0)
+	{
+		xbee_address = 0;
+		int i;
+		for (i = 0; i < extraLen; i++) {
+			xbee_address = (xbee_address << 8) + extra[i];
+		}
+
+		WL_DEBUG_PRINT("XBee address is ");
+		WL_DEBUG_PRINT_INT(xbee_address);
+		WL_DEBUG_PRINT(".\r\n");
+
+		if (xbee_address == 0)
+		{
+			WL_DEBUG_PRINT("XBee 16-bit address must be set using ATMY.\r\n");
+			#ifndef ROBOT
+			exit(0);
+			#endif
+		}
+	}
+}
+
+/**
+ * Attempts to handle the packet if it is dealt with
+ * by the library.
+ * We will handle the following packet types:
+ *    Modem Status
+ *    AT Command Response
+ *
+ * @param packet the packet to handle
+ * @param len the length of the packet
+ *
+ * @return 1 if we have handled the packet, 0 otherwise
+ */
+static int xbee_handle_packet(char* packet, int len)
+{
+
+	char command[3] = {1, 2, 3};
+	if (len <= 0) //this should not happend
+	{
+		WL_DEBUG_PRINT("Non-positive packet length.\r\n");
+		return 0;
+	}
+
+	switch ((unsigned char)packet[0]) //packet type
+	{
+		case XBEE_FRAME_STATUS:
+			xbee_handle_status(packet[1]);
+			return 1;
+		case XBEE_FRAME_AT_COMMAND_RESPONSE:
+			command[0] = packet[2];
+			command[1] = packet[3];
+			command[2] = 0;
+			xbee_handle_at_command_response(command, packet[4], packet + 5, len - 5);
+			return 1;
+	}
+	return 0;
+}
+
+/**
+ * Sets the personal area network id.
+ *
+ * @param id the new personal area network (PAN) id
+ **/
+int xbee_set_pan_id(int id)
+{
+	char s[3];
+	s[0] = (id >> 8) & 0xFF;
+	s[1] = id & 0xFF;
+	s[2] = 0;
+	xbee_pending_panID = id;
+	return xbee_send_modify_at_command("ID", s);
+}
+
+/**
+ * Get the PAN ID for the XBee.
+ *
+ * @return the personal area network id, or
+ * XBEE_PAN_DEFAULT if it has not yet been set.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+unsigned int xbee_get_pan_id()
+{
+	return xbee_panID;
+}
+
+/**
+ * Set the channel the XBee is using.
+ *
+ * @param channel the channel the XBee will not use,
+ * between 0x0B and 0x1A
+ *
+ * @see xbee_get_channel
+ **/
+int xbee_set_channel(int channel)
+{
+	if (channel < 0x0B || channel > 0x1A)
+	{
+		WL_DEBUG_PRINT("Channel out of range.\r\n");
+		return -1;
+	}
+
+	char s[3];
+	s[0] = channel & 0xFF;
+	s[1] = 0;
+	xbee_pending_channel = channel;
+
+	return xbee_send_modify_at_command("CH", s);
+}
+
+/**
+ * Returns the channel which the XBee is currently using.
+ *
+ * @return the channel the XBee is using
+ *
+ * @see xbee_set_channel
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int xbee_get_channel(void)
+{
+	return xbee_channel;
+}
+
+/**
+ * Get the 16-bit address of the XBee.
+ * This is used to specify who to send messages to
+ * and who messages are from.
+ *
+ * @return the 16-bit address of the XBee.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+unsigned int xbee_get_address()
+{
+	return xbee_address;
+}
+
+#ifndef ROBOT
+void xbee_set_com_port(char* port)
+{
+	xbee_com_port = port;
+}
+#endif
Index: branches/scout/projects/libwireless/lib/wireless.c
===================================================================
--- branches/scout/projects/libwireless/lib/wireless.c	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wireless.c	(revision 1346)
@@ -0,0 +1,478 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wireless.c
+ * @brief Wireless Library Implementation
+ *
+ * Implementation of the wireless library.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include "wireless.h"
+#include "xbee.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "wl_defs.h"
+
+#ifndef ROBOT
+	#include <sys/time.h>
+	#include <signal.h>
+#else
+	#include <time.h>
+	#include <bom.h>
+#endif
+
+/*Function Prototypes*/
+
+static void wl_do_timeout(void);
+
+//Note: the actual frame sent has group as the first four bits and
+//frame as the last four.
+static int wl_send_packet(char group, char type, char* data, int len, int dest, char options, char frame);
+
+/*Data Members*/
+
+//used to store incoming and outgoing packets
+//TODO: does this need to be 128?  can it be smaller to save memory?
+//TODO: this shouldn't be hardcoded as 128.  it should be a define.
+static unsigned char wl_buf[128];
+//1 if we have timed out since we last checked, 0 otherwise.
+static int wl_timeout = 0;
+
+static PacketGroupHandler* wl_packet_groups[WL_MAX_PACKET_GROUPS];
+
+#ifndef ROBOT
+
+//called when we time out, or receive interrupt
+static void sig_handler(int signo)
+{
+	switch (signo)
+	{
+		case SIGALRM:
+			wl_timeout = 1;
+			break;
+		case SIGINT:
+			wl_terminate();
+			exit(1);
+			break;
+	}
+	return;
+}
+#else
+
+//called when the timer ticks
+static void timer_handler(void)
+{
+	wl_timeout = 1;
+}
+
+#endif
+
+/**
+ * Initializes the wireless library. Must be called before any
+ * other function.
+ *
+ * @param wl_port File descriptor for wireless port, or NULL for default.
+ **/
+int wl_init()
+{
+	int i;
+  //TODO: using memset here instead of this loop, *might* be less instructions and *might* reduce code size but not sure
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		wl_packet_groups[i] = NULL;
+
+	if (xbee_lib_init() == -1) {
+		return -1;
+	}
+
+	//begin timeout timer
+#ifdef ROBOT
+#ifdef FIREFLY
+	rtc_init(PRESCALE_DIV_256, 32, &timer_handler);
+#else
+	//TODO: FIX THIS
+	#ifdef BAYBOARD
+	rtc_init(10 * HALF_SECOND, &timer_handler);
+	#else
+	rtc_init(HALF_SECOND, &timer_handler);
+	#endif
+#endif
+#else
+
+	//create our timer
+	struct itimerval timer_val;
+	struct timeval interval;
+	interval.tv_sec = 0;
+	interval.tv_usec = 500000;
+	struct timeval first_time;
+	first_time.tv_sec = 0;
+	first_time.tv_usec = 500000;
+	timer_val.it_interval = interval;
+	timer_val.it_value = first_time;
+	if(setitimer(ITIMER_REAL,&timer_val,NULL)==-1)
+	{
+		WL_DEBUG_PRINT("Error creating a timer.\r\n");
+		perror("Failure's cause");
+		exit(1);
+	}
+
+	//create signal handler
+	struct sigaction wl_sig_act;
+	wl_sig_act.sa_handler = sig_handler;
+	wl_sig_act.sa_flags = 0;
+	sigemptyset(&wl_sig_act.sa_mask);
+	sigaction(SIGALRM, &wl_sig_act, 0);
+	sigaction(SIGINT, &wl_sig_act, 0);
+#endif
+
+	return 0;
+}
+
+/**
+ * Uninitializes the wireless library.
+ **/
+void wl_terminate()
+{
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++) {
+		if (wl_packet_groups[i] != NULL &&
+			wl_packet_groups[i]->unregister != NULL) {
+			wl_packet_groups[i]->unregister();
+		}
+	}
+
+	xbee_terminate();
+}
+
+/**
+ * Set the PAN for the XBee to join.
+ *
+ * @param pan the new PAN
+ *
+ * @see wl_get_pan
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_set_pan(int pan)
+{
+	return xbee_set_pan_id(pan);
+}
+
+/**
+ * Get the PAN the XBee is currently part of.
+ *
+ * @return the PAN of the XBee
+ *
+ * @see wl_set_pan
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_get_pan(void)
+{
+	return xbee_get_pan_id();
+}
+
+/**
+ * Set the channel the XBee is listening to.
+ *
+ * @param channel the new channel to join
+ *
+ * @see wl_get_channel
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_set_channel(int channel)
+{
+	return xbee_set_channel(channel);
+}
+
+/**
+ * Get the channel the XBee is part of.
+ *
+ * @return the channel the XBee is part of
+ *
+ * @see wl_set_channel
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_get_channel(void)
+{
+	return xbee_get_channel();
+}
+
+/**
+ * Returns the 16-bit address of the XBee module.
+ *
+ * @return the 16-bit address of the XBee module.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_get_xbee_id()
+{
+	return xbee_get_address();
+}
+
+/**
+ * Send a packet to a specific XBee without specifying a PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the 16-bit address of the XBee to send the packet to
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_send_robot_to_robot_global_packet(char group, char type, char* data, int len, int dest, char frame)
+{
+	return wl_send_packet(group, type, data, len, dest, XBEE_OPTIONS_BROADCAST_ALL_PANS, frame);
+}
+
+/**
+ * Send a packet to a specific XBee in the same PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the 16-bit address of the XBee to send the packet to
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_send_robot_to_robot_packet(char group, char type, char* data, int len, int dest, char frame)
+{
+	return wl_send_packet(group, type, data, len, dest, XBEE_OPTIONS_NONE, frame);
+}
+
+/**
+ * Send a packet to all XBees in all PANs.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_send_global_packet(char group, char type, char* data, int len, char frame)
+{
+	return wl_send_packet(group, type, data, len, XBEE_BROADCAST, XBEE_OPTIONS_BROADCAST_ALL_PANS, frame);
+}
+
+/**
+ * Send a packet to all XBee's in the same PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_send_pan_packet(char group, char type, char* data, int len, char frame)
+{
+	wl_send_packet(group, type, data, len, XBEE_BROADCAST,
+			XBEE_OPTIONS_NONE, frame);
+}
+
+/**
+ * Send a packet.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the destination of the packet
+ * @param options the options for sending the packet
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+int wl_send_packet(char group, char type, char* data, int len, int dest, char options, char frame)
+{
+  //TODO: does this need to be 128?  can it be smaller to save memory?
+  //TODO: this shouldn't be hardcoded as 128.  it should be a define.
+	char buf[128];
+	int i;
+	if (frame != 0)
+		frame = (frame & 0x0F) | ((group & 0x0F) << 4);
+
+	buf[0] = group;
+	buf[1] = type;
+	for (i = 0; i < len; i++)
+		buf[2 + i] = data[i];
+
+	return xbee_send_packet(buf, len + 2, dest, options, frame);
+}
+
+/**
+ * Register a packet group with the wireless library. The event
+ * handlers in the packet group will be called whenever an
+ * event dealing with the packet group's group code occurs.
+ *
+ * @param h the PacketGroupHandler to register
+ **/
+void wl_register_packet_group(PacketGroupHandler* h)
+{
+	if (h->groupCode >= WL_MAX_PACKET_GROUPS)
+	{
+		WL_DEBUG_PRINT("Packet group code too large.\r\n");
+		return;
+	}
+	if (wl_packet_groups[h->groupCode] != NULL)
+	{
+		WL_DEBUG_PRINT("Packet group code already registered.\r\n");
+		return;
+	}
+	wl_packet_groups[h->groupCode] = h;
+}
+
+/**
+ * Unregister a packet group from the wireless library.
+ *
+ * @param h the packet group to remove
+ **/
+void wl_unregister_packet_group(PacketGroupHandler* h)
+{
+	unsigned int groupCode = h->groupCode;
+	PacketGroupHandler* p = wl_packet_groups[groupCode];
+	if (p != NULL && p->unregister != NULL)
+		p->unregister();
+	wl_packet_groups[groupCode] = NULL;
+}
+
+/**
+ * Called when the timer is triggered. This calls the timeout
+ * handlers of all the registered packet groups.
+ **/
+void wl_do_timeout()
+{
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		if (wl_packet_groups[i] != NULL &&
+			wl_packet_groups[i]->timeout_handler != NULL)
+			wl_packet_groups[i]->timeout_handler();
+}
+
+/**
+ * Performs wireless library functionality. This function must
+ * be called frequently for wireless to perform effectively.
+ * This function will call timeout handlers, as well as
+ * received packet and transmit status handlers.
+ **/
+void wl_do()
+{
+	if (wl_timeout)
+	{
+		wl_do_timeout();
+		wl_timeout = 0;
+	}
+
+	int len = xbee_get_packet(wl_buf);
+	if (len < 0)//no packet received
+		return;
+
+	if (wl_buf[0] == XBEE_TX_STATUS)
+	{
+		if (len != 3)
+		{
+			WL_DEBUG_PRINT("Transmit Status packet should be of length 3.\r\n");
+			return;
+		}
+
+		//the first four bits are the packet group
+		//this only works with under 16 groups
+		int group = (int)(wl_buf[1] >> 4);
+		int success = 0;
+		if (wl_buf[2] == 0)
+		{
+			success = 1;
+		}
+		else
+		{
+			WL_DEBUG_PRINT("No response received.\r\n");
+			if (wl_buf[2] == 2)
+			{
+				WL_DEBUG_PRINT("CCA Failure\r\n");
+			}
+			if (wl_buf[2] == 3)
+			{
+				WL_DEBUG_PRINT("Purged\r\n");
+			}
+		}
+
+		if (wl_packet_groups[group] != NULL && wl_packet_groups[group]->handle_response != NULL)
+			wl_packet_groups[group]->handle_response((int)wl_buf[1] & 0x0F, success);
+	}
+	else if (wl_buf[0] == XBEE_RX)
+	{
+    //TODO: what does this 7 represent?  It shouldn't be hardcoded.  It should be set as a define
+		if (len < 7)
+		{
+			WL_DEBUG_PRINT("Packet is too small.\r\n");
+			return;
+		}
+
+		int source = ((int)wl_buf[1] << 8) + ((int)wl_buf[2]);
+
+		/*
+		//unused for now
+		int signalStrength = wl_buf[3];
+		//1 for Address broadcast, 2 for PAN broadcast
+		int options = wl_buf[4];
+		*/
+
+    //TODO: these indices, etc should be defined, not hardcoded
+		int group = wl_buf[5];
+		int type = wl_buf[6];
+		int packetLen = len - 7;
+
+		if (wl_packet_groups[group] != NULL && wl_packet_groups[group]->handle_receive != NULL) {
+			wl_packet_groups[group]->handle_receive(type, source, wl_buf + 7, packetLen);
+		}
+	}
+	else
+	{
+		WL_DEBUG_PRINT("Unexpected packet received from XBee.\r\n");
+		printf("0x%2X\n", wl_buf[0]);
+		printf("%c%c%d\n", wl_buf[2], wl_buf[3], wl_buf[4]);
+	}
+}
+
+
+#ifndef ROBOT
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_set_com_port(char* port)
+{
+	xbee_set_com_port(port);
+}
+#endif
+
Index: branches/scout/projects/libwireless/lib/sensor_matrix.h
===================================================================
--- branches/scout/projects/libwireless/lib/sensor_matrix.h	(nonexistent)
+++ branches/scout/projects/libwireless/lib/sensor_matrix.h	(revision 1346)
@@ -0,0 +1,101 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file sensor_matrix.h
+ * @brief Definitions for sensor matrices
+ *
+ * Contains functions and declarations for using sensor matrices.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef SENSOR_MATRIX_H
+#define SENSOR_MATRIX_H
+
+
+/**
+ * @defgroup sensormatrix Sensor Matrix
+ * @brief the robot sensor matrix
+ *
+ * These functions and structures are used for localization
+ * to determine the relative directions of robots.
+ *
+ * @{
+ **/
+
+#define MAXIMUM_XBEE_ID		0x10
+#define READING_UNKNOWN		0xFF
+
+/**
+ * @struct SensorMatrix
+ *
+ * A sensor matrix.
+ **/
+//TODO: the order of member variables in this struct should be changed in case the compile packs the struct
+// In order to achieve the best packing, the variables should be listed in order of decreasing memory size.
+// Thus, pointers should be first, followed by int, followed by char.
+typedef struct
+{
+	/**
+	 * The number of robots in the token ring.
+	 **/
+	int numJoined;
+	/**
+	 * The element representing a robot is true if that robot
+	 * is in the token ring and false otherwise.
+	 **/
+	unsigned char joined[MAXIMUM_XBEE_ID];
+
+	// on the bayboard, we don't include the matrix to save memory.
+#ifndef BAYBOARD
+	/**
+	 * The matrix. Each row represents the readings of one
+	 * robot.
+	 **/
+	unsigned char matrix[MAXIMUM_XBEE_ID][MAXIMUM_XBEE_ID];
+#endif
+} SensorMatrix;
+
+/**@brief Create a sensor matrix **/
+void sensor_matrix_create(void);
+/**@brief Set a reading in a sensor matrix **/
+void sensor_matrix_set_reading(int observer, int robot, int reading);
+/**@brief Get a reading in a sensor matrix **/
+int sensor_matrix_get_reading(int observer, int robot);
+/**@brief Set whether the robot is in the token ring **/
+void sensor_matrix_set_in_ring(int robot, int in);
+/**@brief Get whether the robot is in the sensor ring **/
+int sensor_matrix_get_in_ring(int robot);
+/**@brief Get the number of robots which have joined the token ring **/
+int sensor_matrix_get_joined(void);
+/**@brief Get the maximum size of the sensor matrix **/
+int sensor_matrix_get_size(void);
+
+/** @} **/ //end defgroup
+
+
+#endif
+
Index: branches/scout/projects/libwireless/lib/Makefile
===================================================================
--- branches/scout/projects/libwireless/lib/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/lib/Makefile	(revision 1346)
@@ -0,0 +1,229 @@
+############################
+### Update this Section ####
+############################
+COLONYROOT = ../../../..
+
+# Target file name (without extension).
+TARGET = libwireless
+COLONET_TARGET = libwireless_colonet
+
+############################
+# don't touch this unless you know what you're doing.
+
+CDEFS = 
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+# dwarf-2
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DROBOT
+
+# Place -I options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+#CFLAGS += -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+AR = avr-ar
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+DOXYGEN = doxygen
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_COMPILING = Compiling:
+MSG_CLEANING = Cleaning project:
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) -Wall $(GENDEPFLAGS)
+ALL_ASFLAGS = rcs
+
+# Default target.
+all: begin build end
+
+dist: all publish
+
+publish:
+	$(COPY) $(TARGET).a $(COLONYROOT)/code/lib/bin
+	$(COPY) *.h $(COLONYROOT)/code/lib/include/$(TARGET)
+
+docs:
+	$(DOXYGEN)
+	$(COPY) docs/html/* $(COLONYROOT)/docs/$(TARGET)
+
+build: $(OBJ)
+	$(AR) $(ALL_ASFLAGS) $(TARGET).a $(OBJ)
+
+computer:
+	gcc *.c -Wall -Wshadow -Wextra -g -I. -c
+	ar rcs $(TARGET).a $(OBJ)
+
+# we should fine a better way to do this.....
+bayboard:
+	avr-gcc *.c -DBAYBOARD -mmcu=atmega164p -I. -DF_CPU=8000000UL -DROBOT -I../../../../code/lib/include/libbayboard \
+			-L../../../../code/lib/bin/bayboard -Wall -Wshadow -Wextra -std=gnu99 -MD -MP -MF -c
+	avr-ar rcs $(TARGET).a $(OBJ)
+
+colonet:
+	g++ -Wall -Wshadow -Wextra *.c -g -I. -c
+	ar rcs $(COLONET_TARGET).a $(OBJ)
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).a
+	$(REMOVE) $(COLONET_TARGET).a
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVE) -r docs
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
Index: branches/scout/projects/libwireless/lib/sensor_matrix.c
===================================================================
--- branches/scout/projects/libwireless/lib/sensor_matrix.c	(nonexistent)
+++ branches/scout/projects/libwireless/lib/sensor_matrix.c	(revision 1346)
@@ -0,0 +1,163 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file sensor_matrix.c
+ * @brief Sensor Matrix implementation
+ *
+ * Implementation of a sensor matrix for storing localization implementation.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <wl_defs.h>
+
+#include "sensor_matrix.h"
+
+// the global sensor matrix
+SensorMatrix m;
+
+/**
+ * Initializes the sensor matrix.
+ *
+ * @return the newly created sensor matrix
+ **/
+void sensor_matrix_create()
+{
+	int i, j;
+
+	m.numJoined = 0;
+
+	for (i = 0; i < MAXIMUM_XBEE_ID; i++)
+	{
+		m.joined[i] = 0;
+#ifndef BAYBOARD
+		for (j = 0; j < MAXIMUM_XBEE_ID; j++)
+			m.matrix[i][j] = READING_UNKNOWN;
+#endif
+	}
+}
+
+/**
+ * Sets the sensor reading for robot robot to reading.
+ *
+ * @param observer the id of the robot who made the reading
+ * @param robot the id of the robot who the reading is for
+ * @param reading the BOM reading from observer to robot
+ */
+void sensor_matrix_set_reading(int observer, int robot, int reading)
+{
+#ifndef BAYBOARD
+	if (robot >= MAXIMUM_XBEE_ID || observer >= MAXIMUM_XBEE_ID)
+	{
+		WL_DEBUG_PRINT("ID too large.");
+		return;
+	}
+
+	m.matrix[observer][robot] = (unsigned char)reading;
+#endif
+}
+
+/**
+ * Gets the sensor reading for a robot to another robot.
+ *
+ * @param observer the robot whose reading we check
+ * @param robot the robot who we are checking the reading to
+ *
+ * @return the observer's BOM reading for robot
+ **/
+int sensor_matrix_get_reading(int observer, int robot)
+{
+#ifndef BAYBOARD
+	if (observer >= MAXIMUM_XBEE_ID || robot >= MAXIMUM_XBEE_ID)
+		return -1;
+
+	return (int)m.matrix[observer][robot];
+#else
+	return -1;
+#endif
+}
+
+/**
+ * Sets whether or not the given robot is part of the token ring.
+ *
+ * @param robot the robot to set as a member / nonmember of the token ring
+ * @param in 1 if the robot is in the token ring, 0 otherwise
+ **/
+void sensor_matrix_set_in_ring(int robot, int in)
+{
+	if (robot >= MAXIMUM_XBEE_ID)
+	{
+		WL_DEBUG_PRINT("ID too large.");
+		return;
+	}
+
+	if (in == 1 && m.joined[robot] == 0)
+		m.numJoined++;
+
+	if (in == 0 && m.joined[robot])
+		m.numJoined--;
+	m.joined[robot] = in;
+}
+
+/**
+ * Checks if the given robot is in the token ring.
+ *
+ * @param robot the ID of the robot to check
+ *
+ * @return 1 if the robot is in the token ring, 0 otherwise
+ **/
+int sensor_matrix_get_in_ring(int robot)
+{
+	if (robot >= MAXIMUM_XBEE_ID)
+		return -1;
+
+	return m.joined[robot];
+}
+
+/**
+ * Returns the number of robots which have joined the
+ * token ring.
+ *
+ * @return the number of robots in the token ring
+ **/
+int sensor_matrix_get_joined(void)
+{
+	return m.numJoined;
+}
+
+/**
+ * Returns the maximum XBee id of a robot which can be stored
+ * in the sensor matrix.
+ *
+ * @return the maximum number of robots which can be stored
+ **/
+int sensor_matrix_get_size(void)
+{
+	return MAXIMUM_XBEE_ID;
+}
+
Index: branches/scout/projects/libwireless/lib/Doxyfile
===================================================================
--- branches/scout/projects/libwireless/lib/Doxyfile	(nonexistent)
+++ branches/scout/projects/libwireless/lib/Doxyfile	(revision 1346)
@@ -0,0 +1,1237 @@
+# Doxyfile 1.4.6
+               
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = libwireless
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 1.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = /home/rc99/trac/docs/libwireless
+     
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that a graph may be further truncated if the graph's 
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
Index: branches/scout/projects/libwireless/lib/wl_token_ring.c
===================================================================
--- branches/scout/projects/libwireless/lib/wl_token_ring.c	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wl_token_ring.c	(revision 1346)
@@ -0,0 +1,870 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_token_ring.c
+ * @brief Token Ring Implementation
+ *
+ * Implementation of the token ring packet group.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include <wl_token_ring.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <wl_defs.h>
+#include <wireless.h>
+#include <sensor_matrix.h>
+
+#ifdef ROBOT
+#ifndef FIREFLY
+#include <bom.h>
+#endif
+#include <time.h>
+#endif
+
+//TODO: why is this in both this file and sensor_matrix.c?  If it is needed in both places,
+// put it in sensor_matrix.h.  This file already includes sensor_matrix.h
+#define DEFAULT_SENSOR_MATRIX_SIZE 20
+
+/*Ring States*/
+
+#define NONMEMBER 0
+#define MEMBER 1
+#define JOINING 2
+#define ACCEPTED 3
+#define LEAVING 4
+
+/*Frame Types*/
+#define TOKEN_JOIN_ACCEPT_FRAME	1
+#define WL_TOKEN_PASS_FRAME	2
+
+/*Function Prototypes*/
+
+/*Wireless Library Prototypes*/
+static void wl_token_ring_timeout_handler(void);
+static void wl_token_ring_response_handler(int frame, int received);
+static void wl_token_ring_receive_handler(char type, int source, unsigned char* packet, int length);
+static void wl_token_ring_cleanup(void);
+
+/*Helper Functions*/
+static int wl_token_pass_token(void);
+static int get_token_distance(int robot1, int robot2);
+static void wl_token_get_token(void);
+
+/*Packet Handling Routines*/
+static void wl_token_pass_receive(int source);
+static void wl_token_sensor_matrix_receive(int source, unsigned char* sensorData, int sensorDataLength);
+static void wl_token_bom_on_receive(int source);
+static void wl_token_join_receive(int source);
+static void wl_token_join_accept_receive(int source);
+
+/*Global Variables*/
+
+//the robot we are waiting to say it has received the token. -1 if unspecified
+static int wl_token_next_robot = -1;
+
+//true if the robot should be in the token ring, 0 otherwise
+static int ringState = NONMEMBER;
+//the id of the robot who accepted us into the token ring, only used in ACCEPTED state
+static int acceptor = -1;
+//id of the robot we are accepting
+static int accepted = -1;
+
+//the counter for when we assume a robot is dead
+static int deathDelay = -1;
+//the counter for joining, before we form our own token ring
+static int joinDelay = -1;
+
+//current robot to check in the iterator
+static int iteratorCount = 0;
+
+// the amount of time a robot has had its BOM on for
+static int bom_on_count = 0;
+
+#ifndef ROBOT
+static void do_nothing(void) {}
+static int get_nothing(void) {return -1;}
+#endif
+
+#ifdef ROBOT
+#ifndef FIREFLY
+static void (*bom_on_function) (void) = bom_on;
+static void (*bom_off_function) (void) = bom_off;
+static int (*get_max_bom_function) (void) = get_max_bom;
+#else
+static void (*bom_on_function) (void) = do_nothing;
+static void (*bom_off_function) (void) = do_nothing;
+static int (*get_max_bom_function) (void) = get_nothing;
+#endif
+#else
+static void (*bom_on_function) (void) = do_nothing;
+static void (*bom_off_function) (void) = do_nothing;
+static int (*get_max_bom_function) (void) = get_nothing;
+#endif
+
+static PacketGroupHandler wl_token_ring_handler =
+	{WL_TOKEN_RING_GROUP, wl_token_ring_timeout_handler,
+		wl_token_ring_response_handler, wl_token_ring_receive_handler,
+		wl_token_ring_cleanup};
+
+/**
+ * Causes the robot to join an existing token ring, or create one
+ * if no token ring exists. The token ring uses global and robot to robot
+ * packets, and does not rely on any PAN.
+ **/
+int wl_token_ring_join()
+{
+	WL_DEBUG_PRINT("Joining the token ring.\r\n");
+
+	ringState = JOINING;
+	joinDelay = DEATH_DELAY * 2;
+	if (wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_JOIN, NULL, 0, 0) != 0) {
+		return -1;
+	}
+
+	return 0;
+}
+
+/**
+ * Causes the robot to leave the token ring. The robot stops
+ * alerting others of its location, but continues storing the
+ * locations of other robots.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_token_ring_leave()
+{
+	ringState = LEAVING;
+}
+
+/**
+ * Initialize the token ring packet group and register it with the
+ * wireless library. The robot will not join a token ring.
+ **/
+int wl_token_ring_register()
+{
+	if (wl_get_xbee_id() > 0xFF)
+	{
+		//Note: if this becomes an issue (unlikely), we could limit sensor information
+		//to half a byte and use 12 bits for the id
+		WL_DEBUG_PRINT("XBee ID must be single byte for token ring, is ");
+		WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+		WL_DEBUG_PRINT(".\r\n");
+		return -1;
+	}
+
+	sensor_matrix_create();
+	//add ourselves to the sensor matrix
+	sensor_matrix_set_in_ring(wl_get_xbee_id(), 0);
+
+	wl_register_packet_group(&wl_token_ring_handler);
+
+	return 0;
+}
+
+/**
+ * Removes the packet group from the wireless library.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_token_ring_unregister()
+{
+	wl_unregister_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Sets the functions that are called when the BOM ought to be
+ * turned on or off. This could be used for things such as
+ * charging stations, which have multiple BOMs.
+ *
+ * @param on_function the function to be called when the BOM
+ * should be turned on
+ * @param off_function the function to be called when the BOM
+ * should be turned off
+ * @param max_bom_function the function to be called when a
+ * measurement of the maximum BOM reading is needed.
+ **/
+void wl_token_ring_set_bom_functions(void (*on_function) (void),
+	void (*off_function) (void), int (*max_bom_function) (void))
+{
+	bom_on_function = on_function;
+	bom_off_function = off_function;
+	get_max_bom_function = max_bom_function;
+}
+
+/**
+ * Called to cleanup the token ring packet group.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+static void wl_token_ring_cleanup()
+{
+}
+
+/**
+ * Called approximately every quarter second by the wireless library.
+ **/
+static void wl_token_ring_timeout_handler()
+{
+	//someone is not responding, assume they are dead
+	if (deathDelay == 0)
+	{
+		//pass the token to the next robot if we think someone has died
+		//also, declare that person dead, as long as it isn't us
+		if (wl_token_next_robot != wl_get_xbee_id())
+		{
+			sensor_matrix_set_in_ring(wl_token_next_robot, 0);
+			WL_DEBUG_PRINT("Robot ");
+			WL_DEBUG_PRINT_INT(wl_token_next_robot);
+			WL_DEBUG_PRINT(" has died.\r\n");
+			wl_token_next_robot = -1;
+			deathDelay = DEATH_DELAY;
+		}
+
+		// we may have been dropped from the ring when this is received
+		if (ringState == MEMBER) {
+			wl_token_pass_token();
+		}
+	}
+
+	//we must start our own token ring, no one is responding to us
+	if (joinDelay == 0)
+	{
+		if (sensor_matrix_get_joined() == 0)
+		{
+			WL_DEBUG_PRINT("Creating our own token ring, no robots seem to exist.\r\n");
+			sensor_matrix_set_in_ring(wl_get_xbee_id(), 1);
+			ringState = MEMBER;
+			//this will make us pass the token to ourself
+			//repeatedly, and other robots when they join
+			deathDelay = DEATH_DELAY;
+			wl_token_next_robot = wl_get_xbee_id();
+		}
+		else
+		{
+			WL_DEBUG_PRINT("Attempting to join the token ring again.\r\n");
+			//attempt to rejoin with a random delay
+			wl_token_ring_join();
+			joinDelay = rand() / (RAND_MAX / JOIN_DELAY) + 1;
+		}
+	}
+
+	if (deathDelay >= 0) {
+		deathDelay--;
+	}
+
+	if (joinDelay >= 0) {
+		joinDelay--;
+	}
+
+	if (bom_on_count >= 0) {
+		bom_on_count++;
+	}
+}
+
+/**
+ * Called when the XBee tells us if a packet we sent has been received.
+ *
+ * @param frame the frame number assigned when the packet was sent
+ * @param received 1 if the packet was received, 0 otherwise
+ **/
+static void wl_token_ring_response_handler(int frame, int received)
+{
+	if (!received)
+	{
+		WL_DEBUG_PRINT("FAILED.\r\n");
+	}
+}
+
+/**
+ * Called when we recieve a token ring packet.
+ * @param type the type of the packet
+ * @param source the id of the robot who sent the packet
+ * @param packet the data in the packet
+ * @param length the length of the packet in bytes
+ **/
+static void wl_token_ring_receive_handler(char type, int source, unsigned char* packet, int length)
+{
+	switch (type)
+	{
+		case WL_TOKEN_PASS:
+			wl_token_pass_receive(source);
+			break;
+		case WL_TOKEN_SENSOR_MATRIX:
+			wl_token_sensor_matrix_receive(source, packet, length);
+			break;
+		case WL_TOKEN_BOM_ON:
+			//add the robot to the sensor matrix if it is not already there
+			wl_token_bom_on_receive(source);
+			break;
+		case WL_TOKEN_JOIN:
+			wl_token_join_receive(source);
+			break;
+		case WL_TOKEN_JOIN_ACCEPT:
+			wl_token_join_accept_receive(source);
+			break;
+		default:
+			WL_DEBUG_PRINT("Unimplemented token ring packet received.\r\n");
+			break;
+	}
+}
+
+/**
+ * Returns the BOM reading robot source has for robot dest.
+ *
+ * @param source the robot that made the BOM reading
+ * @param dest the robot whose relative location is returned
+ *
+ * @return a BOM reading from robot source to robot dest,
+ * in the range 0-15, or -1 if it is unknown
+ **/
+int wl_token_get_sensor_reading(int source, int dest)
+{
+	if (wl_token_is_robot_in_ring(dest) &&
+			(source == wl_get_xbee_id() || wl_token_is_robot_in_ring(source))) {
+		return sensor_matrix_get_reading(source, dest);
+	}
+
+	return -1;
+}
+
+/**
+ * Returns the BOM reading we have for robot dest.
+ *
+ * @param dest the robot whose relative location is returned
+ *
+ * @return a BOM reading from us to robot dest, in the range
+ * 0-15, or -1 if it is unkown
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_token_get_my_sensor_reading(int dest)
+{
+	return wl_token_get_sensor_reading(wl_get_xbee_id(), dest);
+}
+
+
+/**
+ * Returns the number of robots in the token ring.
+ *
+ * @return the number of robots in the token ring
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_token_get_robots_in_ring(void)
+{
+	return sensor_matrix_get_joined();
+}
+
+/**
+ * Returns true if the specified robot is in the token ring, false
+ * otherwise.
+ *
+ * @param robot the robot to check for whether it is in the token ring
+ * @return nonzero if the robot is in the token ring, zero otherwise
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_token_is_robot_in_ring(int robot)
+{
+	return sensor_matrix_get_in_ring(robot);
+}
+
+/**
+ * Begins iterating through the robots in the token ring.
+ *
+ * @see wl_token_iterator_has_next, wl_token_iterator_next
+ **/
+void wl_token_iterator_begin(void)
+{
+	int i = 0;
+  //TODO: the compiler may or may not optimize this such that my comment is useless:
+  // instead of calling sensor_matrix_get_size every iteration of the while loop and incurring
+  // the overhead of a function call each iteration, call it only once before the loop and store
+  // the value in a variable and check against that variable in the loop condition
+	while (!sensor_matrix_get_in_ring(i) && i < sensor_matrix_get_size()) {
+		i++;
+	}
+
+  //TODO: if you do the above comment, then you can compare this to the variable also
+	if (i == sensor_matrix_get_size()) {
+		i = -1;
+	}
+
+	iteratorCount = i;
+}
+
+/**
+ * Returns true if there are more robots in the token ring
+ * to iterate through, and false otherwise.
+ *
+ * @return nonzero if there are more robots to iterate through,
+ * zero otherwise
+ *
+ * @see wl_token_iterator_begin, wl_token_iterator_next
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_token_iterator_has_next(void)
+{
+	return iteratorCount != -1;
+}
+
+/**
+ * Returns the next robot ID in the token ring.
+ *
+ * @return the next robot ID in the token ring, or -1 if none exists
+ *
+ * @see wl_token_iterator_begin, wl_token_iterator_has_next
+ **/
+int wl_token_iterator_next(void)
+{
+	int result = iteratorCount;
+	if (result < 0) {
+		return result;
+	}
+
+  //TODO: the compiler may or may not optimize this such that my comment is useless:
+  // instead of calling sensor_matrix_get_size every iteration of the while loop and incurring
+  // the overhead of a function call each iteration, call it only once before the loop and store
+  // the value in a variable and check against that variable in the loop condition
+	iteratorCount++;
+	while (!sensor_matrix_get_in_ring(iteratorCount)
+		&& iteratorCount < sensor_matrix_get_size()) {
+		iteratorCount++;
+	}
+
+  //TODO: if you do the above comment, then you can compare this to the variable also
+	if (iteratorCount == sensor_matrix_get_size()) {
+		iteratorCount = -1;
+	}
+
+	return result;
+}
+
+/**
+ * Returns the number of robots currently in the token ring.
+ *
+ * @return the number of robots in the token ring
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_token_get_num_robots(void)
+{
+	return sensor_matrix_get_joined();
+}
+
+/**
+ * Returns the number of robots in the sensor matrix.
+ *
+ * @return the number of robots in the sensor matrix
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+int wl_token_get_matrix_size(void)
+{
+	return sensor_matrix_get_size();
+}
+
+/**
+ * This method is called when we receive a token pass packet.
+ *
+ * @param source the robot who passed the token to us.
+ **/
+static void wl_token_pass_receive(int source)
+{
+	WL_DEBUG_PRINT("Received token from ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(", expected ");
+	WL_DEBUG_PRINT_INT(wl_token_next_robot);
+	WL_DEBUG_PRINT(".\n");
+	// this prevents two tokens from being passed around at a time (second clause is in case we are joining)
+	if ((source != wl_token_next_robot && wl_get_xbee_id() != wl_token_next_robot) && bom_on_count <= DEATH_DELAY / 2 &&
+		ringState != ACCEPTED)
+	{
+		WL_DEBUG_PRINT("Received token pass when a robot should not have died yet.\n");
+		WL_DEBUG_PRINT("There are probably two tokens going around, packet ignored.\n");
+		return;
+	}
+	bom_on_count = -1;
+	deathDelay = -1;
+	sensor_matrix_set_in_ring(source, 1);
+	wl_token_get_token();
+}
+
+/**
+ * This method is called when we receive a token pass packet.
+ * @param source is the robot it came from
+ * @param nextRobot is the robot the token was passed to
+ * @param sensorData a char with an id followed by a char with the sensor
+ *		reading for that robot, repeated for sensorDataLength bytes
+ * @param sensorDataLength the length in bytes of sensorData
+ */
+static void wl_token_sensor_matrix_receive(int source, unsigned char* sensorData, int sensorDataLength)
+{
+	int i, j;
+	char nextRobot;
+
+	bom_on_count = -1;
+	deathDelay = -1;
+	sensor_matrix_set_in_ring(source, 1);
+
+	//with this packet, we are passed the id of the next robot in the ring
+	//and the sensor matrix, a list of id and sensor reading pairs (two bytes for both)
+	j = 0;
+  //TODO: the compiler may or may not optimize this such that my comment is useless:
+  // instead of calling sensor_matrix_get_size every iteration of the while loop and incurring
+  // the overhead of a function call each iteration, call it only once before the loop and store
+  // the value in a variable and check against that variable in the loop condition
+	for (i = 0; i < sensor_matrix_get_size(); i++)
+	{
+		if (i == source) {
+			continue;
+		}
+
+		//set the sensor information we receive
+		if (j < sensorDataLength / 2 && sensorData[2 * j] == i)
+		{
+			//the robot we were going to accept has already been accepted
+			if (accepted == i)
+			{
+				accepted = -1;
+				WL_DEBUG_PRINT("Someone accepted the robot we did.\r\n");
+			}
+			sensor_matrix_set_reading(source, i,
+						sensorData[2 * j + 1]);
+			if (!sensor_matrix_get_in_ring(i))
+			{
+				WL_DEBUG_PRINT("Robot ");
+				WL_DEBUG_PRINT_INT(i);
+				WL_DEBUG_PRINT(" has been added to the sensor matrix of robot ");
+				WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+				WL_DEBUG_PRINT(" due to a packet from robot ");
+				WL_DEBUG_PRINT_INT(source);
+				WL_DEBUG_PRINT(".\r\n");
+			}
+			sensor_matrix_set_in_ring(i, 1);
+			j++;
+		}
+		else
+		{
+			if (sensor_matrix_get_in_ring(i))
+			{
+				WL_DEBUG_PRINT("Robot ");
+				WL_DEBUG_PRINT_INT(i);
+				WL_DEBUG_PRINT(" has been removed from the sensor matrix of robot ");
+				WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+				WL_DEBUG_PRINT(" due to a packet from robot ");
+				WL_DEBUG_PRINT_INT(source);
+				WL_DEBUG_PRINT(".\r\n");
+				sensor_matrix_set_in_ring(i, 0);
+			}
+
+			if (i == wl_get_xbee_id() && ringState == MEMBER)
+			{
+				ringState = NONMEMBER;
+				wl_token_ring_join();
+
+				WL_DEBUG_PRINT("We have been removed from the ring ");
+				WL_DEBUG_PRINT("and are rejoining.\r\n");
+			}
+
+			//the person who accepted us is dead... let's ask again
+			if (i == acceptor)
+			{
+				sensor_matrix_set_in_ring(wl_get_xbee_id(), 0);
+				ringState = NONMEMBER;
+				acceptor = -1;
+				wl_token_ring_join();
+			}
+		}
+	}
+	
+	// get the next robot in the token ring
+	i = source + 1;
+	while (1)
+	{
+		if (i == sensor_matrix_get_size()) {
+			i = 0;
+		}
+
+		if (sensor_matrix_get_in_ring(i) || i == source)
+		{
+			nextRobot = (char)i;
+			break;
+		}
+
+		i++;
+	}
+
+	if (nextRobot != wl_get_xbee_id())
+		wl_token_next_robot = nextRobot;
+
+	deathDelay = get_token_distance(wl_get_xbee_id(), nextRobot) * DEATH_DELAY;
+
+	if (sensor_matrix_get_joined() == 0 && ringState == JOINING)
+		wl_send_robot_to_robot_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_PASS, NULL, 0, nextRobot, WL_TOKEN_PASS_FRAME);
+}
+
+/**
+ * Gets the distance in the token ring between two robots.
+ *
+ * @param robot1 the first robot
+ * @param robot2 the second robot
+ *
+ * @return the number of passes before the token is expected
+ * to reach robot2 from robot1
+ **/
+static int get_token_distance(int robot1, int robot2)
+{
+	int curr = robot1 + 1;
+	int count = 1;
+	while (1)
+	{
+    //TODO: the compiler may or may not optimize this such that my comment is useless:
+    // instead of calling sensor_matrix_get_size every iteration of the while loop and incurring
+    // the overhead of a function call each iteration, call it only once before the loop and store
+    // the value in a variable and check against that variable in the loop condition
+		if (curr == sensor_matrix_get_size())
+			curr = 0;
+		if (curr == robot2)
+			break;
+		if (sensor_matrix_get_in_ring(curr))
+			count++;
+		curr++;
+	}
+	return count;
+}
+
+/**
+ * Passes the token to the next robot in the token ring.
+ **/
+static int wl_token_pass_token()
+{
+	char nextRobot = 0xFF;
+	int i = wl_get_xbee_id() + 1;
+	char buf[2 * sensor_matrix_get_size()];
+	if (accepted == -1)
+	{
+		while (1)
+		{
+      //TODO: the compiler may or may not optimize this such that my comment is useless:
+      // instead of calling sensor_matrix_get_size every iteration of the while loop and incurring
+      // the overhead of a function call each iteration, call it only once before the loop and store
+      // the value in a variable and check against that variable in the loop condition
+			if (i == sensor_matrix_get_size()) {
+				i = 0;
+			}
+
+			if (sensor_matrix_get_in_ring(i))
+			{
+				nextRobot = (char)i;
+				break;
+			}
+
+			i++;
+		}
+	}
+	else
+	{
+		WL_DEBUG_PRINT("Accepting new robot, sending it the token.\r\n");
+		//add a new robot to the token ring
+		sensor_matrix_set_in_ring(accepted, 1);
+		nextRobot = accepted;
+		accepted = -1;
+	}
+
+	int j = 0;
+  //TODO: the compiler may or may not optimize this such that my comment is useless:
+  // instead of calling sensor_matrix_get_size every iteration of the while loop and incurring
+  // the overhead of a function call each iteration, call it only once before the loop and store
+  // the value in a variable and check against that variable in the loop condition
+	for (i = 0; i < sensor_matrix_get_size(); i++) {
+		if (sensor_matrix_get_in_ring(i) && i != wl_get_xbee_id())
+		{
+			buf[2*j] = i;
+			buf[2*j + 1] = sensor_matrix_get_reading(wl_get_xbee_id(), i);
+			j++;
+		}
+	}
+
+	int packetSize = 2 * j * sizeof(char);
+	WL_DEBUG_PRINT("Passing the token to robot ");
+	WL_DEBUG_PRINT_INT(nextRobot);
+	WL_DEBUG_PRINT(".\r\n");
+	if (wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_SENSOR_MATRIX, buf, packetSize, 0) != 0)
+		return -1;
+	if (wl_send_robot_to_robot_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_PASS, NULL, 0, nextRobot, WL_TOKEN_PASS_FRAME))
+		return -1;
+
+	wl_token_next_robot = nextRobot;
+	deathDelay = DEATH_DELAY;
+
+	return 0;
+}
+
+/**
+ * Called when a packet is received stating that another robot has turned
+ * its BOM on. Our BOM is then read, and the data is added to the sensor
+ * matrix.
+ *
+ * @param source the robot whose BOM is on
+ **/
+static void wl_token_bom_on_receive(int source)
+{
+	WL_DEBUG_PRINT("Robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(" has flashed its bom.\r\n");
+
+	bom_on_count = 0;
+
+	sensor_matrix_set_reading(wl_get_xbee_id(),
+		source, get_max_bom_function());
+}
+
+/**
+ * This method is called when we receive the token. Upon receiving
+ * the token, we must send a BOM_ON packet, flash the BOM, and send
+ * the token to the next robot.
+ *
+ * If there is a pending request for the token, this is processed first.
+ **/
+static void wl_token_get_token()
+{
+	WL_DEBUG_PRINT("We have the token.\r\n");
+	if (ringState == ACCEPTED)
+	{
+		sensor_matrix_set_in_ring(wl_get_xbee_id(), 1);
+		WL_DEBUG_PRINT("Now a member of the token ring.\r\n");
+		ringState = MEMBER;
+		joinDelay = -1;
+	}
+
+	if (ringState == LEAVING || ringState == NONMEMBER)
+	{
+		sensor_matrix_set_in_ring(wl_get_xbee_id(), 0);
+		if (ringState == NONMEMBER)
+		{
+			WL_DEBUG_PRINT("We should have left the token ring, but didn't.\r\n");
+		}
+		return;
+	}
+
+	WL_DEBUG_PRINT("Our BOM has been flashed.\r\n");
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_BOM_ON, NULL, 0, 0);
+
+	bom_on_function();
+	#ifdef ROBOT
+	delay_ms(BOM_DELAY);
+	#endif
+	bom_off_function();
+
+	if (!sensor_matrix_get_in_ring(wl_get_xbee_id()))
+	{
+		WL_DEBUG_PRINT("Removed from sensor matrix while flashing BOM.\r\n");
+		return;
+	}
+
+	wl_token_pass_token();
+}
+
+/**
+ * Called when a request to join the token ring is received.
+ * If we are the robot preceding the requester in the ring,
+ * we respond with a JOIN_ACCEPT packet and pass the token to
+ * this robot when we receive the token.
+ *
+ * @param source the robot who requested to join
+ **/
+static void wl_token_join_receive(int source)
+{
+	WL_DEBUG_PRINT("Received joining request from robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(".\r\n");
+
+	//we cannot accept the request if we are not a member
+	if (ringState != MEMBER)
+		return;
+	//if they didn't get our response, see if we should respond again
+	if (accepted == source)
+		accepted = -1;
+	//we can only accept one request at a time
+	if (accepted != -1)
+		return;
+
+	//check if we are the preceding robot in the token ring
+	int i = source - 1;
+	while (1)
+	{
+		if (i < 0)
+			i = sensor_matrix_get_size() - 1;
+
+		//we must send a join acceptance
+		if (i == wl_get_xbee_id())
+			break;
+
+		//another robot will handle it
+		if (sensor_matrix_get_in_ring(i))
+			return;
+
+		i--;
+	}
+
+	accepted = source;
+	wl_send_robot_to_robot_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_JOIN_ACCEPT,
+		NULL, 0, source, TOKEN_JOIN_ACCEPT_FRAME);
+
+	WL_DEBUG_PRINT("Accepting robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(" into the token ring.\r\n");
+
+	// the token ring has not started yet
+	if (sensor_matrix_get_joined() == 1)
+		wl_token_pass_token();
+}
+
+/**
+ * Called when we receive a JOIN_ACCEPT packet in attempting to join
+ * the token ring.
+ * Our attempt to join the ring is stopped, and we wait for the token.
+ *
+ * @param source the robot who accepted us
+ **/
+static void wl_token_join_accept_receive(int source)
+{
+	WL_DEBUG_PRINT("Accepted into the token ring by robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(".\r\n");
+	joinDelay = JOIN_DELAY;
+	ringState = ACCEPTED;
+	acceptor = source;
+
+	//add ourselves to the token ring
+	sensor_matrix_set_in_ring(wl_get_xbee_id(), 1);
+}
Index: branches/scout/projects/libwireless/lib/wl_defs.h
===================================================================
--- branches/scout/projects/libwireless/lib/wl_defs.h	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wl_defs.h	(revision 1346)
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_defs.h
+ * @brief Definitions for Wireless
+ *
+ * Contains definitions for wireless packet groups, packet types,
+ * debugging information, etc.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_DEFS_H
+#define WL_DEFS_H
+
+//comment out this line if using a computer hooked up to an xbee
+//#define ROBOT
+
+//uncomment this line for debug information
+//#define WL_DEBUG
+
+// Packet Groups and Types
+
+// Error group
+#define WL_ERROR_GROUP 1
+
+#define WL_ERROR_STRING_TYPE 1
+
+// Token Ring group
+#define WL_TOKEN_RING_GROUP 2
+
+#define WL_TOKEN_PASS 1
+#define WL_TOKEN_SENSOR_MATRIX 2
+#define WL_TOKEN_BOM_ON 3
+#define WL_TOKEN_JOIN 4
+#define WL_TOKEN_JOIN_ACCEPT 5
+
+// timing constants
+#ifndef FIREFLY
+#define BOM_DELAY 100
+#else
+#define BOM_DELAY 200
+#endif
+
+#define DEATH_DELAY 4
+#define JOIN_DELAY 8
+
+#ifdef WL_DEBUG
+
+#ifdef ROBOT
+#include <serial.h>
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT( s ) usb_puts( s )
+#else
+#define WL_DEBUG_PRINT( s ) printf( s )
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT_INT( i ) usb_puti(i)
+#else
+#define WL_DEBUG_PRINT_INT( i ) printf("%i", i)
+#endif
+
+#else
+
+#define WL_DEBUG_PRINT( s )
+#define WL_DEBUG_PRINT_INT( i )
+
+#endif
+
+#endif
+
Index: branches/scout/projects/libwireless/lib/wireless.h
===================================================================
--- branches/scout/projects/libwireless/lib/wireless.h	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wireless.h	(revision 1346)
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wireless.h
+ * @brief Contains definitions for the wireless library.
+ *
+ * Contains functions for the wireless library.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+//Note: If this is raised above 16, we will need to do
+//something about frame numbers for TX Status packets.
+/**
+ * The maximum number of packet groups.
+ **/
+//TODO: a PacketGroupHandler is at least 10 bytes (I don't know if function pointers are 2 bytes
+// or 4 bytes).  That means that in the c file, your array of packet groups is at least 160 bytes.
+// Normally that might be fine (the robot's avr chips have 4k SRAM), but austin's chip only has
+// 1k SRAM, so if this number can be reduced or if the size of the struct could be reduced, that would be a plus.
+#define WL_MAX_PACKET_GROUPS 16
+
+/**
+ * @defgroup wireless Wireless
+ * @brief Wireless definitions.
+ *
+ * Contains functions and definitions for dealing with wireless functionality.<br><br>
+ *
+ * The wireless library provides a modular method for dealing with
+ * wireless packets, by allowing packet groups to be registered.
+ * A packet group is a collection of packets which share a packet
+ * group code. Each packet in the group also has a type. A packet
+ * group code and type are sent with each packet. When a packet
+ * with a group code registered in the wireless library is
+ * received, the corresponding event handler is called. The
+ * event handler uses the packet type and other information
+ * stored in the packet to respond.<br><br>
+ *
+ * This architecture allows different wireless functionality to be
+ * defined and handled separately, making it simpler and more
+ * efficient to take advantage of the XBee's wireless functionality.
+ *
+ * @{
+ **/
+
+/**
+ * @struct PacketGroupHandler
+ * A PacketGroupHandler represents a packet group, and is used to
+ * register a packet group with the wireless library. It contains
+ * handlers for various events which can occur related to a packet
+ * group.
+ **/
+//TODO: the order of member variables in this struct should be changed in case the compile packs the struct
+// In order to achieve the best packing, the variables should be listed in order of decreasing memory size.
+// Thus, pointers should be first, followed by int, followed by char.
+typedef struct
+{
+	/**
+	 * The group code for this packet group. This number
+	 * must be unique. The maximum number of packet groups
+	 * is defined by WL_MAX_PACKET_GROUPS.
+	 **/
+  //TODO: if this number must be less than or equal to WL_MAX_PACKET_GROUPS, don't you only need
+  // one byte for it and it can be made an unsigned char?
+	unsigned int groupCode;
+
+	/**
+	 * Called every half second (not in interrupt,
+	 * but in wl_do).
+	 **/
+	void (*timeout_handler) (void);
+
+	/**
+	 * Called when a transmit status packet is received
+	 * from the XBee where the first four bits of the frame
+	 * are  the group code.
+	 *
+	 * @param frame the last four bits of the frame
+	 * @param received is true if we received an ack, 0 if
+	 * we did not.
+	 **/
+	void (*handle_response) (int frame, int received);
+
+	/**
+	 * Called when we receive a packet from this group.
+	 *
+	 * @param type the packet type
+	 * @param source the 16-bit address of the XBee this
+	 * packet was sent from
+	 * @param packet the packet received
+	 * @param length the length of the packet
+	 **/
+	void (*handle_receive) (char type, int source, unsigned char* packet, int length);
+
+	/**
+	 * Called for any cleanup when the network is turned off.
+	 **/
+	void (*unregister) (void);
+
+} PacketGroupHandler;
+
+/**@brief Initialize the wireless library **/
+int wl_init(void);
+/**@brief Uninitialize the wireless library **/
+void wl_terminate(void);
+/**@brief Perform wireless library functionality **/
+void wl_do(void);
+/**@brief Register a packet group with the wireless library **/
+void wl_register_packet_group(PacketGroupHandler* h);
+/**@brief Unregister a packet group with the wireless library **/
+void wl_unregister_packet_group(PacketGroupHandler* h);
+
+/**@brief Send a packet to a specific robot in any PAN **/
+int wl_send_robot_to_robot_global_packet(char group, char type, char* data, int len, int dest, char frame);
+/**@brief Send a packet to a specific robot in our PAN **/
+int wl_send_robot_to_robot_packet(char group, char type, char* data, int len, int dest, char frame);
+/**@brief Send a packet to all robots **/
+int wl_send_global_packet(char group, char type, char* data, int len, char frame);
+/**@brief Send a packet to all robots in our PAN **/
+void wl_send_pan_packet(char group, char type, char* data, int len, char frame);
+
+/**@brief Set the PAN we are using **/
+int wl_set_pan(int pan);
+/**@brief Get the PAN we are using **/
+int wl_get_pan(void);
+/**@brief Set the channel we are using **/
+int wl_set_channel(int channel);
+/**@brief Get the channel we are using **/
+int wl_get_channel(void);
+/**@brief Get the 16-bit address of the XBee module **/
+int wl_get_xbee_id(void);
+/**@brief Set the com port on a computer, undefined on the robot.**/
+void wl_set_com_port(char* port);
+
+/** @} **/ // end defgroup
+
+#endif
+
Index: branches/scout/projects/libwireless/lib/wl_error_group.c
===================================================================
--- branches/scout/projects/libwireless/lib/wl_error_group.c	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wl_error_group.c	(revision 1346)
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_error_group.h
+ * @brief Error Packets
+ *
+ * A wireless group for sending error packets.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include "wl_error_group.h"
+
+#include <wireless.h>
+#include <wl_defs.h>
+#include <stdio.h>
+#include <string.h>
+
+
+void wl_error_response_receive(int frame, int received);
+void wl_error_handle_receive(char type, int source, unsigned char* packet,
+							int length);
+
+PacketGroupHandler wl_error_handler =
+		{WL_ERROR_GROUP, NULL,
+		wl_error_response_receive, wl_error_handle_receive, NULL};
+
+void wl_error_response_receive(int frame, int received)
+{
+	WL_DEBUG_PRINT("Response received.\r\n");
+	if (!received)
+	{
+		WL_DEBUG_PRINT("FAILED.\r\n");
+	}
+}
+/**
+ * Register this packet group with the wireless library.
+ * This function must be called before any other wl_error
+ * function.
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_error_register(void)
+{
+	wl_register_packet_group(&wl_error_handler);
+}
+
+/**
+ * Unregister this packet group with the wireless library.
+ * This function must be called after wl_error_register.
+ *
+ * @see wl_error_register
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_error_unregister(void)
+{
+	wl_unregister_packet_group(&wl_error_handler);
+}
+
+/**
+ * Handles receiving an error packet.
+ *
+ * @param type the packet type
+ * @param source the 16-bit address of the packet's sender
+ * @param packet the packet data
+ * @param length the length in bytes of the packet
+ **/
+void wl_error_handle_receive(char type, int source, unsigned char* packet,
+							int length)
+{
+	switch (type)
+	{
+		case WL_ERROR_STRING_TYPE:
+			if (packet[length - 1] != 0)
+			{
+				WL_DEBUG_PRINT(
+					"Error packet string should be null terminated.\r\n");
+				break;
+			}
+			WL_DEBUG_PRINT("Error packet received from robot ");
+			WL_DEBUG_PRINT_INT(source);
+			WL_DEBUG_PRINT(":\r\n");
+			WL_DEBUG_PRINT((char*)packet);
+			WL_DEBUG_PRINT("\r\n");
+			break;
+		default:
+			WL_DEBUG_PRINT("Error packet of unknown type received.\r\n");
+			break;
+	}
+}
+
+/**
+ * Send an error message as a string.
+ *
+ * @param str the error message to send
+ **/
+//TODO: this function is so simple, it *may* be beneficial to inline this function.  testing of if
+// it reduces code size or not should be done to be sure.
+void wl_error_send_string(char* str)
+{
+	wl_send_global_packet(WL_ERROR_GROUP, WL_ERROR_STRING_TYPE,
+		str, strlen(str) + 1, 1);
+}
+
Index: branches/scout/projects/libwireless/lib/wl_token_ring.h
===================================================================
--- branches/scout/projects/libwireless/lib/wl_token_ring.h	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wl_token_ring.h	(revision 1346)
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_token_ring.h
+ * @brief Declarations for the token ring packet group
+ * 
+ * Contains declarations for the token ring packet group.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_TOKEN_RING_H
+#define WL_TOKEN_RING_H
+
+/**
+ * @defgroup tokenring Token Ring
+ * @brief Wireless library token ring implementation
+ *
+ * This packet group is used to form a token ring, which
+ * keeps track of the relative directions of the robots
+ * from one another.
+ *
+ * @{
+ **/
+
+/**@brief Register the token ring group with the wireless library.**/
+int wl_token_ring_register(void);
+/**@brief Unregister the token ring group with the wirelss library.**/
+void wl_token_ring_unregister(void);
+/**@brief Set the functions called to turn the bom on and off.**/
+void wl_token_ring_set_bom_functions(void (*on_function) (void), void (*off_function) (void),
+  int (*max_bom_function) (void));
+
+/**@brief Join the token ring **/
+int wl_token_ring_join(void);
+/**@brief Leave the token ring **/
+void wl_token_ring_leave(void);
+
+/**@brief Return the number of robots in the token ring **/
+int wl_token_get_robots_in_ring(void);
+/**@brief Return whether a given robot is in the token ring **/
+int wl_token_is_robot_in_ring(int robot);
+
+/**@brief Begin iterating through robots in the token ring **/
+void wl_token_iterator_begin(void);
+/**@brief Returns whether there are more robots to iterate through **/
+int wl_token_iterator_has_next(void);
+/**@brief Returns the ID of the next robot in the token ring **/
+int wl_token_iterator_next(void);
+
+/**@brief Return the latest BOM reading between two robots **/
+int wl_token_get_sensor_reading(int source, int dest);
+/**@brief Return the latest BOM reading between us and another robot **/
+int wl_token_get_my_sensor_reading(int dest);
+/**@brief Return the number of robots in the sensor matrix.*/
+int wl_token_get_num_robots(void);
+/**@brief Return the number of non-null elements in the sensor matrix*/
+int wl_token_get_matrix_size(void);
+
+/** @} **/ //end token ring group
+
+#endif
Index: branches/scout/projects/libwireless/lib/wl_error_group.h
===================================================================
--- branches/scout/projects/libwireless/lib/wl_error_group.h	(nonexistent)
+++ branches/scout/projects/libwireless/lib/wl_error_group.h	(revision 1346)
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_error_group.h
+ * @brief Error Packets
+ *
+ * A packet group for sending error packets.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_ERROR_GROUP_H
+#define WL_ERROR_GROUP_H
+
+/**
+ * @file wl_error_group.h
+ * @brief A packet group for error messages.
+ *
+ * A packet group for sending and receiving error
+ * messages.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup wlerror Error Packets
+ * @brief Functions for sending and receiving error packets
+ * 
+ * Functions for sending and receiving error packets.
+ * 
+ * @{
+ **/
+
+/**@brief Register this packet group with the wireless library **/
+void wl_error_register(void);
+/**@brief Unregister this packet group with the wireless library **/
+void wl_error_unregister(void);
+/**@brief Send a string in an error packet **/
+void wl_error_send_string(char* str);
+
+/** @} **/ // end defgroup
+
+#endif
Index: branches/scout/projects/libwireless/lib/xbee.h
===================================================================
--- branches/scout/projects/libwireless/lib/xbee.h	(nonexistent)
+++ branches/scout/projects/libwireless/lib/xbee.h	(revision 1346)
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file xbee.h
+ * @brief Contains definitions for using the XBee
+ *
+ * Contains definitions for interfacing with the 
+ * XBee module, from either a robot or a computer.
+ * To use a robot, define ROBOT in wl_defs.h, and
+ * to use a computer, don't define ROBOT.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef XBEE_H
+#define XBEE_H
+
+/**
+ * The port to use the XBee from on the computer.
+ * Also, a backup port if the other is used.
+ **/
+#ifndef ROBOT
+#define XBEE_PORT_DEFAULT "/dev/ttyUSB1"
+#endif
+
+/**
+ * @defgroup xbee XBee
+ * @brief Interface with the XBee module
+ *
+ * Interface with the XBee module.
+ *
+ * @{
+ **/
+
+/*Definitions*/
+/**@brief Unset PAN, uses XBee default **/
+#define XBEE_PAN_DEFAULT 0xFFFF
+/**@brief Unset channel, uses XBee default **/
+#define XBEE_CHANNEL_DEFAULT 0
+/**@brief Broadcast to all robots in the PAN **/
+#define XBEE_BROADCAST 0xFFFF
+/**@brief No special options **/
+#define XBEE_OPTIONS_NONE 0x00
+/**@brief Do not receive a TX_STATUS message from this packet **/
+#define XBEE_OPTIONS_DISABLE_RESPONSE 0x01
+/**@brief Send the packet to all PANS **/
+#define XBEE_OPTIONS_BROADCAST_ALL_PANS 0x04
+/**@brief A transmit status packet **/
+#define XBEE_TX_STATUS 0x89
+/**@brief A packet received from another XBee **/
+#define XBEE_RX 0x81
+
+/**@brief Initialize the XBee library **/
+int xbee_lib_init(void);
+/**@brief Uninitialize the XBee library **/
+void xbee_terminate(void);
+/**@brief Get a packet from the XBee **/
+int xbee_get_packet(unsigned char* packet);
+/**@brief Send a packet to the XBee **/
+int xbee_send_packet(char* packet, int len, int dest, char options, char frame);
+/**@brief Set the PAN ID for the XBee **/
+int xbee_set_pan_id(int id);
+/**@brief Get the XBee's PAN ID **/
+unsigned int xbee_get_pan_id(void);
+/**@brief Set the channel the XBee is currently using **/
+int xbee_set_channel(int channel);
+/**@brief Get the channel the XBee is currently using **/
+int xbee_get_channel(void);
+/**@brief Get the XBee's 16-bit address **/
+unsigned int xbee_get_address(void);
+/**@brief Set the com port on a computer, undefined on the robot**/
+void xbee_set_com_port(char* port);
+
+/**@}**/ //end defgroup
+
+#endif
Index: branches/scout/projects/libwireless/test/test.c
===================================================================
--- branches/scout/projects/libwireless/test/test.c	(nonexistent)
+++ branches/scout/projects/libwireless/test/test.c	(revision 1346)
@@ -0,0 +1,110 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <curses.h>
+#include "../lib/wireless.h"
+
+#define WL_CNTL_GROUP 4
+
+#define FORWARD 0
+#define BACK    1
+#define LEFT    2
+#define RIGHT   3
+#define LEFT_CURVE 4
+#define RIGHT_CURVE 5
+#define STOP    6
+#define VEL_UP  7
+#define VEL_DOWN 8
+
+void send_packet (char color, int dst_robot);
+void packet_receive(char type, int source, unsigned char* packet, int length);
+
+PacketGroupHandler cntlHandler = {WL_CNTL_GROUP, NULL, NULL, NULL, NULL};
+PacketGroupHandler receiveHandler = {1, NULL, NULL, &packet_receive, NULL};
+
+FILE *file;
+
+int main(int argc, char *argv[]) {
+    if (argc != 2) {
+        printf("Usage: ./test <robot #>\n");
+        return 1;
+    }
+    
+    char c;
+    int robot = atoi(argv[1]);
+
+    file = fopen("data_test.txt", "w");
+    if (file == NULL) {
+        printf("fopen error\n");
+        return 1;
+    }
+    initscr();
+    printf("Beginning: robot=%d\r\n", robot);
+	wl_set_com_port("/dev/ttyUSB0");
+	wl_init();
+	wl_set_channel(0xF);
+	printf("Wireless initialized.\r\n");
+	wl_register_packet_group(&cntlHandler);
+	wl_register_packet_group(&receiveHandler);
+    printf("Packet groups initialized.\r\n");
+    fflush(stdout);
+	//while (1);
+	while (1) {
+        wl_do();
+        c = getch();
+        printf("%c\r\n", c);
+        fflush(stdout);
+        if (c=='0')
+            break;
+        switch (c) {
+            case 'w':
+                send_packet(FORWARD, robot);
+                break;
+            case 's':
+                send_packet(BACK, robot);
+                break;
+            case 'a':
+                send_packet(LEFT, robot);
+                break;
+            case 'd':
+                send_packet(RIGHT, robot);
+                break;
+            case 'q':
+                send_packet(LEFT_CURVE, robot);
+                break;
+            case 'e':
+                send_packet(RIGHT_CURVE, robot);
+                break;
+            case 'x':
+                send_packet(STOP, robot);
+                break;
+            case ']':
+                send_packet(VEL_UP, robot);
+                break;
+            case '[':
+                send_packet(VEL_DOWN, robot);
+                break;
+            default:
+                //send_packet(STOP, robot);
+                break;
+        }
+	}
+	fclose(file);
+	return 0;
+}
+
+void send_packet (char type, int dst_robot) {
+    wl_send_robot_to_robot_global_packet(WL_CNTL_GROUP, type, NULL, 0, dst_robot, 0);
+    //wl_send_global_packet(WL_CNTL_GROUP, type, NULL, 0, 0);
+}
+
+void packet_receive (char type, int source, unsigned char* packet, int length) {
+    fprintf(file, "received packet: ");
+    int i, temp;
+    for (i = 0; i < length; i += 2) {
+        temp = packet[i+1] << 8;
+        temp &= 0xFF00;
+        temp |= packet[i];
+        fprintf(file, "%d, ", temp);
+    }
+    fprintf(file, "\n");
+}
Index: branches/scout/projects/libwireless/test/Makefile
===================================================================
--- branches/scout/projects/libwireless/test/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/test/Makefile	(revision 1346)
@@ -0,0 +1,11 @@
+CC = gcc
+CFLAGS = -Wall -g
+
+all: test
+
+test: *.c ../lib/*.c 
+	$(CC) $(CFLAGS) *.c -L../lib -o test -lwireless -lpthread -lncurses
+
+clean:
+	rm *.o test ../lib/*.o
+
Index: branches/scout/projects/libwireless/logger/wl_token_logger.c
===================================================================
--- branches/scout/projects/libwireless/logger/wl_token_logger.c	(nonexistent)
+++ branches/scout/projects/libwireless/logger/wl_token_logger.c	(revision 1346)
@@ -0,0 +1,108 @@
+#include <wl_token_ring.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <wl_defs.h>
+#include <wireless.h>
+
+#include <time.h>
+#include <sys/timeb.h>
+
+/*Function Prototypes*/
+/*Wireless Library Prototypes*/
+void wl_token_ring_receive_handler(char type, int source, unsigned char* packet,
+							int length);
+void timeout_handler(void);
+PacketGroupHandler wl_token_ring_handler =
+		{WL_TOKEN_RING_GROUP, timeout_handler,
+		NULL, wl_token_ring_receive_handler,
+		NULL};
+
+/* Global Variables */
+
+time_t startTime, endTime;
+
+void timeout_handler()
+{
+	if (time(NULL) > endTime)
+		exit(0);
+}
+
+/**
+ * Initialize the token ring packet group and register it with the
+ * wireless library. The robot will not join a token ring.
+ **/
+void wl_token_logger_register(int seconds)
+{
+	if (wl_get_xbee_id() > 0xFF)
+	{
+		//Note: if this becomes an issue (unlikely), we could limit sensor information
+		//to half a byte and use 12 bits for the id
+		WL_DEBUG_PRINT("XBee ID must be single byte for token ring, is ");
+		WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+
+	startTime = time(NULL);
+	endTime = startTime + seconds;
+
+	wl_register_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Removes the packet group from the wireless library.
+ **/
+void wl_token_logger_unregister()
+{
+	wl_unregister_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Called when we recieve a token ring packet.
+ * @param type the type of the packet
+ * @param source the id of the robot who sent the packet
+ * @param packet the data in the packet
+ * @param length the length of the packet in bytes
+ **/
+void wl_token_ring_receive_handler(char type, int source, unsigned char* packet,
+							int length)
+{
+	struct timeb t;
+	if (ftime(&t))
+		exit(0);
+	time_t seconds = t.time;
+	int millis = t.millitm;
+	if (seconds >= endTime)
+		exit(0);
+	int temp = (int)(seconds - startTime);
+	printf("%d:%.2d.%.3d:\n", temp / 60, temp % 60, millis);
+
+	switch (type)
+	{
+		case WL_TOKEN_PASS:
+			printf("We were passed the token from robot %d.\n", source);
+			break;
+		case WL_TOKEN_SENSOR_MATRIX:
+			printf("Robot %d sent sensor matrix:\n", source);
+			int i;
+			for (i = 0; i < length; i+=2)
+				printf("(%d %d)", packet[i], packet[i+1]);
+			printf("\n");
+			break;
+		case WL_TOKEN_BOM_ON:
+			printf("Robot %d has turned its BOM on.\n", source);
+			break;
+		case WL_TOKEN_JOIN:
+			printf("Robot %d has requested to join the token ring.\n", source);
+			break;
+		case WL_TOKEN_JOIN_ACCEPT:
+			printf("Join accept should be a robot to robot packet.\n");
+			break;
+		default:
+			printf("Unimplemented token ring packet received.\r\n");
+			break;
+	}
+}
+
Index: branches/scout/projects/libwireless/logger/main.c
===================================================================
--- branches/scout/projects/libwireless/logger/main.c	(nonexistent)
+++ branches/scout/projects/libwireless/logger/main.c	(revision 1346)
@@ -0,0 +1,36 @@
+#include "stdlib.h"
+#include "stdio.h"
+
+#include <time.h>
+#include <string.h>
+
+#include "../lib/wireless.h"
+#include "wl_token_logger.h"
+
+int main(int argc, char** argv)
+{
+	int seconds = 60;
+	if (argc >= 2 && !strcmp(argv[1], "-t"))
+		seconds = atoi(argv[2]);
+
+	wl_set_com_port("/dev/ttyUSB0");
+	wl_init();
+	wl_set_channel(0xF);
+	wl_token_logger_register(seconds);
+	printf("Started.\n");
+	
+	struct timespec delay;
+	delay.tv_sec = 0;
+	delay.tv_nsec = 50000000;
+	while (1)
+	{
+		//wl_error_send_string("s");
+		wl_do();
+		nanosleep(&delay, 0);
+	}
+	
+	wl_terminate();
+	
+	return 0;
+}
+
Index: branches/scout/projects/libwireless/logger/tests/2robots1station.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/2robots1station.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/2robots1station.test	(revision 1346)
@@ -0,0 +1,5891 @@
+0:00.354: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:00.410: Robot 3 has turned its BOM on.
+0:00.522: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:00.578: Robot 4 has turned its BOM on.
+0:00.694: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:00.750: Robot 10 has turned its BOM on.
+0:00.802: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:00.858: Robot 3 has turned its BOM on.
+0:00.974: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:01.030: Robot 4 has turned its BOM on.
+0:01.142: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:01.198: Robot 10 has turned its BOM on.
+0:01.258: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:01.302: Robot 3 has turned its BOM on.
+0:01.418: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:01.474: Robot 4 has turned its BOM on.
+0:01.586: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:01.642: Robot 10 has turned its BOM on.
+0:01.698: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:01.914: Robot 4 has turned its BOM on.
+0:02.026: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:02.082: Robot 10 has turned its BOM on.
+0:02.138: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:02.194: Robot 3 has turned its BOM on.
+0:02.302: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:02.358: Robot 4 has turned its BOM on.
+0:02.470: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:02.526: Robot 10 has turned its BOM on.
+0:02.586: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:02.642: Robot 3 has turned its BOM on.
+0:02.754: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:02.802: Robot 4 has turned its BOM on.
+0:02.914: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:02.970: Robot 10 has turned its BOM on.
+0:03.082: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:03.138: Robot 3 has turned its BOM on.
+0:03.194: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:03.250: Robot 4 has turned its BOM on.
+0:03.358: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:03.414: Robot 10 has turned its BOM on.
+0:03.526: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:03.582: Robot 3 has turned its BOM on.
+0:03.638: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:03.694: Robot 4 has turned its BOM on.
+0:03.802: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:03.858: Robot 10 has turned its BOM on.
+0:03.970: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:04.082: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:04.138: Robot 4 has turned its BOM on.
+0:04.250: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:04.302: Robot 10 has turned its BOM on.
+0:04.422: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:04.474: Robot 3 has turned its BOM on.
+0:04.530: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:04.586: Robot 4 has turned its BOM on.
+0:04.705: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:04.758: Robot 10 has turned its BOM on.
+0:04.858: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:04.914: Robot 3 has turned its BOM on.
+0:04.970: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:05.026: Robot 4 has turned its BOM on.
+0:05.138: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:05.194: Robot 10 has turned its BOM on.
+0:05.302: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:05.358: Robot 3 has turned its BOM on.
+0:05.414: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:05.470: Robot 4 has turned its BOM on.
+0:05.582: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:05.638: Robot 10 has turned its BOM on.
+0:05.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:05.802: Robot 3 has turned its BOM on.
+0:05.914: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:05.970: Robot 4 has turned its BOM on.
+0:06.026: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:06.082: Robot 10 has turned its BOM on.
+0:06.194: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:06.250: Robot 3 has turned its BOM on.
+0:06.358: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:06.414: Robot 4 has turned its BOM on.
+0:06.474: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:06.534: Robot 10 has turned its BOM on.
+0:06.646: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:06.702: Robot 3 has turned its BOM on.
+0:06.762: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:06.802: Robot 4 has turned its BOM on.
+0:06.914: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:06.970: Robot 10 has turned its BOM on.
+0:07.086: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:07.142: Robot 3 has turned its BOM on.
+0:07.254: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:07.302: Robot 4 has turned its BOM on.
+0:07.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:07.414: Robot 10 has turned its BOM on.
+0:07.530: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:07.586: Robot 3 has turned its BOM on.
+0:07.698: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:07.754: Robot 4 has turned its BOM on.
+0:07.802: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:07.858: Robot 10 has turned its BOM on.
+0:07.970: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:08.026: Robot 3 has turned its BOM on.
+0:08.138: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:08.194: Robot 4 has turned its BOM on.
+0:08.250: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:08.302: Robot 10 has turned its BOM on.
+0:08.414: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:08.478: Robot 3 has turned its BOM on.
+0:08.594: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:08.650: Robot 4 has turned its BOM on.
+0:08.706: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:08.762: Robot 10 has turned its BOM on.
+0:08.858: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:08.914: Robot 3 has turned its BOM on.
+0:09.026: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:09.085: Robot 4 has turned its BOM on.
+0:09.194: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:09.250: Robot 10 has turned its BOM on.
+0:09.302: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:09.358: Robot 3 has turned its BOM on.
+0:09.470: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:09.526: Robot 4 has turned its BOM on.
+0:09.638: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:09.694: Robot 10 has turned its BOM on.
+0:09.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:09.802: Robot 3 has turned its BOM on.
+0:09.914: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:09.971: Robot 4 has turned its BOM on.
+0:10.082: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:10.138: Robot 10 has turned its BOM on.
+0:10.194: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:10.250: Robot 3 has turned its BOM on.
+0:10.358: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:10.417: Robot 4 has turned its BOM on.
+0:10.526: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:10.582: Robot 10 has turned its BOM on.
+0:10.638: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:10.694: Robot 3 has turned its BOM on.
+0:10.802: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:10.858: Robot 4 has turned its BOM on.
+0:10.970: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:11.026: Robot 10 has turned its BOM on.
+0:11.091: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:11.146: Robot 3 has turned its BOM on.
+0:11.258: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:11.302: Robot 4 has turned its BOM on.
+0:11.418: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:11.474: Robot 10 has turned its BOM on.
+0:11.530: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:11.586: Robot 3 has turned its BOM on.
+0:11.698: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:11.754: Robot 4 has turned its BOM on.
+0:11.858: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:11.914: Robot 10 has turned its BOM on.
+0:12.026: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:12.082: Robot 3 has turned its BOM on.
+0:12.139: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:12.194: Robot 4 has turned its BOM on.
+0:12.302: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:12.358: Robot 10 has turned its BOM on.
+0:12.470: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:12.526: Robot 3 has turned its BOM on.
+0:12.586: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:12.643: Robot 4 has turned its BOM on.
+0:12.754: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:12.802: Robot 10 has turned its BOM on.
+0:12.914: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:12.970: Robot 3 has turned its BOM on.
+0:13.026: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:13.085: Robot 4 has turned its BOM on.
+0:13.194: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:13.250: Robot 10 has turned its BOM on.
+0:13.362: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:13.418: Robot 3 has turned its BOM on.
+0:13.474: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:13.530: Robot 4 has turned its BOM on.
+0:13.646: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:13.702: Robot 10 has turned its BOM on.
+0:13.802: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:13.858: Robot 3 has turned its BOM on.
+0:13.914: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:13.970: Robot 4 has turned its BOM on.
+0:14.082: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:14.138: Robot 10 has turned its BOM on.
+0:14.250: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:14.302: Robot 3 has turned its BOM on.
+0:14.362: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:14.418: Robot 4 has turned its BOM on.
+0:14.530: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:14.586: Robot 10 has turned its BOM on.
+0:14.698: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:14.754: Robot 3 has turned its BOM on.
+0:14.858: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:14.914: Robot 4 has turned its BOM on.
+0:14.970: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:15.026: Robot 10 has turned its BOM on.
+0:15.138: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:15.194: Robot 3 has turned its BOM on.
+0:15.302: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:15.358: Robot 4 has turned its BOM on.
+0:15.419: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:15.474: Robot 10 has turned its BOM on.
+0:15.586: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:15.642: Robot 3 has turned its BOM on.
+0:15.754: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:15.802: Robot 4 has turned its BOM on.
+0:15.858: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:15.914: Robot 10 has turned its BOM on.
+0:16.038: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:16.094: Robot 3 has turned its BOM on.
+0:16.154: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:16.210: Robot 4 has turned its BOM on.
+0:16.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:16.418: Robot 10 has turned its BOM on.
+0:16.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:16.527: Robot 3 has turned its BOM on.
+0:16.639: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:16.694: Robot 4 has turned its BOM on.
+0:16.750: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:16.802: Robot 10 has turned its BOM on.
+0:16.918: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:16.974: Robot 3 has turned its BOM on.
+0:17.086: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:17.142: Robot 4 has turned its BOM on.
+0:17.199: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:17.255: Robot 10 has turned its BOM on.
+0:17.358: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:17.414: Robot 3 has turned its BOM on.
+0:17.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:17.582: Robot 4 has turned its BOM on.
+0:17.638: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:17.802: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:17.858: Robot 3 has turned its BOM on.
+0:17.974: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:18.030: Robot 4 has turned its BOM on.
+0:18.086: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:18.142: Robot 10 has turned its BOM on.
+0:18.266: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:18.307: Robot 3 has turned its BOM on.
+0:18.422: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:18.478: Robot 4 has turned its BOM on.
+0:18.538: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:18.594: Robot 10 has turned its BOM on.
+0:18.710: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:18.766: Robot 3 has turned its BOM on.
+0:18.858: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:18.914: Robot 4 has turned its BOM on.
+0:19.026: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:19.082: Robot 10 has turned its BOM on.
+0:19.142: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:19.198: Robot 3 has turned its BOM on.
+0:19.302: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:19.358: Robot 4 has turned its BOM on.
+0:19.470: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:19.526: Robot 10 has turned its BOM on.
+0:19.638: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:19.695: Robot 3 has turned its BOM on.
+0:19.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:19.802: Robot 4 has turned its BOM on.
+0:19.918: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:19.974: Robot 10 has turned its BOM on.
+0:20.086: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:20.142: Robot 3 has turned its BOM on.
+0:20.199: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:20.254: Robot 4 has turned its BOM on.
+0:20.358: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:20.417: Robot 10 has turned its BOM on.
+0:20.470: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:20.526: Robot 3 has turned its BOM on.
+0:20.638: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:20.694: Robot 4 has turned its BOM on.
+0:20.806: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:20.862: Robot 10 has turned its BOM on.
+0:20.918: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:20.974: Robot 3 has turned its BOM on.
+0:21.086: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:21.142: Robot 4 has turned its BOM on.
+0:21.254: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:21.302: Robot 10 has turned its BOM on.
+0:21.414: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:21.470: Robot 3 has turned its BOM on.
+0:21.530: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:21.586: Robot 4 has turned its BOM on.
+0:21.702: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:21.758: Robot 10 has turned its BOM on.
+0:21.858: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:21.914: Robot 3 has turned its BOM on.
+0:21.974: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:22.030: Robot 4 has turned its BOM on.
+0:22.142: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:22.198: Robot 10 has turned its BOM on.
+0:22.302: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:22.358: Robot 3 has turned its BOM on.
+0:22.470: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:22.526: Robot 4 has turned its BOM on.
+0:22.582: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:22.638: Robot 10 has turned its BOM on.
+0:22.750: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:22.802: Robot 3 has turned its BOM on.
+0:22.914: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:22.971: Robot 4 has turned its BOM on.
+0:23.030: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:23.086: Robot 10 has turned its BOM on.
+0:23.198: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:23.254: Robot 3 has turned its BOM on.
+0:23.359: Robot 4 has turned its BOM on.
+0:23.470: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:23.526: Robot 10 has turned its BOM on.
+0:23.638: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:23.802: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:23.858: Robot 4 has turned its BOM on.
+0:23.914: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:23.970: Robot 10 has turned its BOM on.
+0:24.086: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:24.143: Robot 3 has turned its BOM on.
+0:24.254: Robot 4 has turned its BOM on.
+0:24.358: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:24.414: Robot 10 has turned its BOM on.
+0:24.527: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:24.582: Robot 3 has turned its BOM on.
+0:24.694: Robot 4 has turned its BOM on.
+0:24.806: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:24.863: Robot 10 has turned its BOM on.
+0:24.974: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:25.030: Robot 3 has turned its BOM on.
+0:25.142: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:25.198: Robot 4 has turned its BOM on.
+0:25.254: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:25.302: Robot 10 has turned its BOM on.
+0:25.414: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:25.470: Robot 3 has turned its BOM on.
+0:25.582: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:25.638: Robot 4 has turned its BOM on.
+0:25.750: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:25.802: Robot 10 has turned its BOM on.
+0:25.862: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:25.918: Robot 3 has turned its BOM on.
+0:26.030: Robot 4 has turned its BOM on.
+0:26.198: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:26.254: Robot 10 has turned its BOM on.
+0:26.302: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:26.358: Robot 3 has turned its BOM on.
+0:26.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:26.527: Robot 4 has turned its BOM on.
+0:26.638: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:26.694: Robot 10 has turned its BOM on.
+0:26.751: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:26.918: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:26.975: Robot 4 has turned its BOM on.
+0:27.086: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:27.142: Robot 10 has turned its BOM on.
+0:27.198: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:27.255: Robot 3 has turned its BOM on.
+0:27.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:27.414: Robot 4 has turned its BOM on.
+0:27.526: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:27.582: Robot 10 has turned its BOM on.
+0:27.639: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:27.694: Robot 3 has turned its BOM on.
+0:27.802: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:27.858: Robot 4 has turned its BOM on.
+0:27.970: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:28.027: Robot 10 has turned its BOM on.
+0:28.086: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:28.145: Robot 3 has turned its BOM on.
+0:28.254: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:28.302: Robot 4 has turned its BOM on.
+0:28.422: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:28.478: Robot 10 has turned its BOM on.
+0:28.534: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:28.590: Robot 3 has turned its BOM on.
+0:28.702: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:28.758: Robot 4 has turned its BOM on.
+0:28.862: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:28.919: Robot 10 has turned its BOM on.
+0:29.030: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:29.086: Robot 3 has turned its BOM on.
+0:29.143: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:29.198: Robot 4 has turned its BOM on.
+0:29.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:29.358: Robot 10 has turned its BOM on.
+0:29.470: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:29.526: Robot 3 has turned its BOM on.
+0:29.582: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:29.639: Robot 4 has turned its BOM on.
+0:29.751: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:29.803: Robot 10 has turned its BOM on.
+0:29.919: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:29.974: Robot 3 has turned its BOM on.
+0:30.031: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:30.087: Robot 4 has turned its BOM on.
+0:30.199: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:30.255: Robot 10 has turned its BOM on.
+0:30.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:30.415: Robot 3 has turned its BOM on.
+0:30.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:30.527: Robot 4 has turned its BOM on.
+0:30.639: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:30.695: Robot 10 has turned its BOM on.
+0:30.803: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:30.859: Robot 3 has turned its BOM on.
+0:30.919: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:30.975: Robot 4 has turned its BOM on.
+0:31.091: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:31.147: Robot 10 has turned its BOM on.
+0:31.263: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:31.303: Robot 3 has turned its BOM on.
+0:31.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:31.471: Robot 4 has turned its BOM on.
+0:31.527: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:31.583: Robot 10 has turned its BOM on.
+0:31.695: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:31.751: Robot 3 has turned its BOM on.
+0:31.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:31.915: Robot 4 has turned its BOM on.
+0:31.979: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:32.035: Robot 10 has turned its BOM on.
+0:32.147: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:32.203: Robot 3 has turned its BOM on.
+0:32.263: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:32.303: Robot 4 has turned its BOM on.
+0:32.418: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:32.471: Robot 10 has turned its BOM on.
+0:32.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:32.639: Robot 3 has turned its BOM on.
+0:32.751: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:32.803: Robot 4 has turned its BOM on.
+0:32.859: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:32.915: Robot 10 has turned its BOM on.
+0:33.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:33.083: Robot 3 has turned its BOM on.
+0:33.195: Robot 4 has turned its BOM on.
+0:33.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:33.359: Robot 10 has turned its BOM on.
+0:33.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:33.527: Robot 3 has turned its BOM on.
+0:33.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:33.699: Robot 4 has turned its BOM on.
+0:33.755: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:33.803: Robot 10 has turned its BOM on.
+0:33.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:34.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:34.139: Robot 4 has turned its BOM on.
+0:34.199: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:34.255: Robot 10 has turned its BOM on.
+0:34.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:34.415: Robot 3 has turned its BOM on.
+0:34.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:34.583: Robot 4 has turned its BOM on.
+0:34.643: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:34.699: Robot 10 has turned its BOM on.
+0:34.803: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:34.971: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:35.027: Robot 4 has turned its BOM on.
+0:35.139: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:35.195: Robot 10 has turned its BOM on.
+0:35.255: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:35.303: Robot 3 has turned its BOM on.
+0:35.419: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:35.478: Robot 4 has turned its BOM on.
+0:35.587: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:35.643: Robot 10 has turned its BOM on.
+0:35.699: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:35.755: Robot 3 has turned its BOM on.
+0:35.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:35.915: Robot 4 has turned its BOM on.
+0:36.027: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:36.083: Robot 10 has turned its BOM on.
+0:36.139: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:36.195: Robot 3 has turned its BOM on.
+0:36.307: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:36.363: Robot 4 has turned its BOM on.
+0:36.475: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:36.531: Robot 10 has turned its BOM on.
+0:36.587: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:36.643: Robot 3 has turned its BOM on.
+0:36.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:36.803: Robot 4 has turned its BOM on.
+0:36.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:36.971: Robot 10 has turned its BOM on.
+0:37.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:37.083: Robot 3 has turned its BOM on.
+0:37.195: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:37.251: Robot 4 has turned its BOM on.
+0:37.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:37.415: Robot 10 has turned its BOM on.
+0:37.475: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:37.531: Robot 3 has turned its BOM on.
+0:37.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:37.699: Robot 4 has turned its BOM on.
+0:37.803: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:37.859: Robot 10 has turned its BOM on.
+0:37.971: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:38.027: Robot 3 has turned its BOM on.
+0:38.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:38.139: Robot 4 has turned its BOM on.
+0:38.251: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:38.303: Robot 10 has turned its BOM on.
+0:38.415: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:38.471: Robot 3 has turned its BOM on.
+0:38.531: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:38.587: Robot 4 has turned its BOM on.
+0:38.699: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:38.755: Robot 10 has turned its BOM on.
+0:38.863: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:38.919: Robot 3 has turned its BOM on.
+0:38.979: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:39.035: Robot 4 has turned its BOM on.
+0:39.147: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:39.203: Robot 10 has turned its BOM on.
+0:39.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:39.359: Robot 3 has turned its BOM on.
+0:39.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:39.471: Robot 4 has turned its BOM on.
+0:39.587: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:39.643: Robot 10 has turned its BOM on.
+0:39.755: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:39.803: Robot 3 has turned its BOM on.
+0:39.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:39.915: Robot 4 has turned its BOM on.
+0:40.027: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:40.083: Robot 10 has turned its BOM on.
+0:40.195: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:40.251: Robot 3 has turned its BOM on.
+0:40.307: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:40.363: Robot 4 has turned its BOM on.
+0:40.475: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:40.531: Robot 10 has turned its BOM on.
+0:40.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:40.699: Robot 3 has turned its BOM on.
+0:40.759: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:40.803: Robot 4 has turned its BOM on.
+0:40.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:40.971: Robot 10 has turned its BOM on.
+0:41.083: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:41.139: Robot 3 has turned its BOM on.
+0:41.251: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:41.303: Robot 4 has turned its BOM on.
+0:41.363: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:41.419: Robot 10 has turned its BOM on.
+0:41.531: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:41.587: Robot 3 has turned its BOM on.
+0:41.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:41.755: Robot 4 has turned its BOM on.
+0:41.803: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:41.859: Robot 10 has turned its BOM on.
+0:41.971: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:42.027: Robot 3 has turned its BOM on.
+0:42.142: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:42.195: Robot 4 has turned its BOM on.
+0:42.251: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:42.303: Robot 10 has turned its BOM on.
+0:42.419: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:42.475: Robot 3 has turned its BOM on.
+0:42.587: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:42.643: Robot 4 has turned its BOM on.
+0:42.699: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:42.755: Robot 10 has turned its BOM on.
+0:42.859: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:42.915: Robot 3 has turned its BOM on.
+0:43.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:43.083: Robot 4 has turned its BOM on.
+0:43.139: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:43.195: Robot 10 has turned its BOM on.
+0:43.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:43.359: Robot 3 has turned its BOM on.
+0:43.474: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:43.527: Robot 4 has turned its BOM on.
+0:43.587: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:43.643: Robot 10 has turned its BOM on.
+0:43.755: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:43.803: Robot 3 has turned its BOM on.
+0:43.915: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:43.971: Robot 4 has turned its BOM on.
+0:44.083: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:44.142: Robot 10 has turned its BOM on.
+0:44.195: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:44.251: Robot 3 has turned its BOM on.
+0:44.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:44.415: Robot 4 has turned its BOM on.
+0:44.527: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:44.583: Robot 10 has turned its BOM on.
+0:44.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:44.699: Robot 3 has turned its BOM on.
+0:44.803: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:44.859: Robot 4 has turned its BOM on.
+0:44.971: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:45.027: Robot 10 has turned its BOM on.
+0:45.083: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:45.139: Robot 3 has turned its BOM on.
+0:45.251: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:45.303: Robot 4 has turned its BOM on.
+0:45.419: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:45.475: Robot 10 has turned its BOM on.
+0:45.531: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:45.587: Robot 3 has turned its BOM on.
+0:45.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:45.755: Robot 4 has turned its BOM on.
+0:45.863: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:45.919: Robot 10 has turned its BOM on.
+0:45.975: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:46.031: Robot 3 has turned its BOM on.
+0:46.147: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:46.203: Robot 4 has turned its BOM on.
+0:46.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:46.359: Robot 10 has turned its BOM on.
+0:46.419: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:46.475: Robot 3 has turned its BOM on.
+0:46.587: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:46.643: Robot 4 has turned its BOM on.
+0:46.755: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:46.806: Robot 10 has turned its BOM on.
+0:46.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:46.971: Robot 3 has turned its BOM on.
+0:47.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:47.083: Robot 4 has turned its BOM on.
+0:47.195: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:47.251: Robot 10 has turned its BOM on.
+0:47.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:47.415: Robot 3 has turned its BOM on.
+0:47.482: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:47.535: Robot 4 has turned its BOM on.
+0:47.647: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:47.703: Robot 10 has turned its BOM on.
+0:47.763: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:47.803: Robot 3 has turned its BOM on.
+0:47.915: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:47.971: Robot 4 has turned its BOM on.
+0:48.083: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:48.142: Robot 10 has turned its BOM on.
+0:48.251: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:48.303: Robot 3 has turned its BOM on.
+0:48.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:48.415: Robot 4 has turned its BOM on.
+0:48.531: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:48.587: Robot 10 has turned its BOM on.
+0:48.699: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:48.755: Robot 3 has turned its BOM on.
+0:48.806: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:48.859: Robot 4 has turned its BOM on.
+0:48.971: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:49.027: Robot 10 has turned its BOM on.
+0:49.139: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:49.195: Robot 3 has turned its BOM on.
+0:49.255: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:49.303: Robot 4 has turned its BOM on.
+0:49.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:49.474: Robot 10 has turned its BOM on.
+0:49.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:49.639: Robot 3 has turned its BOM on.
+0:49.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:49.755: Robot 4 has turned its BOM on.
+0:49.859: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:49.915: Robot 10 has turned its BOM on.
+0:50.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:50.083: Robot 3 has turned its BOM on.
+0:50.150: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:50.203: Robot 4 has turned its BOM on.
+0:50.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:50.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:50.527: Robot 3 has turned its BOM on.
+0:50.639: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:50.695: Robot 4 has turned its BOM on.
+0:50.751: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:50.806: Robot 10 has turned its BOM on.
+0:50.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:50.971: Robot 3 has turned its BOM on.
+0:51.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:51.139: Robot 4 has turned its BOM on.
+0:51.203: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:51.259: Robot 10 has turned its BOM on.
+0:51.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:51.415: Robot 3 has turned its BOM on.
+0:51.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:51.583: Robot 4 has turned its BOM on.
+0:51.639: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:51.695: Robot 10 has turned its BOM on.
+0:51.807: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:51.863: Robot 3 has turned its BOM on.
+0:51.975: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:52.031: Robot 4 has turned its BOM on.
+0:52.087: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:52.143: Robot 10 has turned its BOM on.
+0:52.255: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:52.303: Robot 3 has turned its BOM on.
+0:52.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:52.471: Robot 4 has turned its BOM on.
+0:52.527: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:52.583: Robot 10 has turned its BOM on.
+0:52.695: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:52.751: Robot 3 has turned its BOM on.
+0:52.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:52.915: Robot 4 has turned its BOM on.
+0:52.975: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:53.031: Robot 10 has turned its BOM on.
+0:53.143: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:53.199: Robot 3 has turned its BOM on.
+0:53.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:53.359: Robot 4 has turned its BOM on.
+0:53.474: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:53.527: Robot 10 has turned its BOM on.
+0:53.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:53.639: Robot 3 has turned its BOM on.
+0:53.751: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:53.803: Robot 4 has turned its BOM on.
+0:53.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:53.971: Robot 10 has turned its BOM on.
+0:54.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:54.083: Robot 3 has turned its BOM on.
+0:54.195: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:54.251: Robot 4 has turned its BOM on.
+0:54.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:54.415: Robot 10 has turned its BOM on.
+0:54.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:54.527: Robot 3 has turned its BOM on.
+0:54.639: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:54.695: Robot 4 has turned its BOM on.
+0:54.803: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:54.859: Robot 10 has turned its BOM on.
+0:54.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:54.971: Robot 3 has turned its BOM on.
+0:55.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:55.139: Robot 4 has turned its BOM on.
+0:55.251: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:55.303: Robot 10 has turned its BOM on.
+0:55.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:55.415: Robot 3 has turned its BOM on.
+0:55.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:55.583: Robot 4 has turned its BOM on.
+0:55.695: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:55.751: Robot 10 has turned its BOM on.
+0:55.807: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:55.863: Robot 3 has turned its BOM on.
+0:55.975: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:56.031: Robot 4 has turned its BOM on.
+0:56.143: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:56.199: Robot 10 has turned its BOM on.
+0:56.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:56.359: Robot 3 has turned its BOM on.
+0:56.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:56.471: Robot 4 has turned its BOM on.
+0:56.583: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:56.639: Robot 10 has turned its BOM on.
+0:56.751: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:56.806: Robot 3 has turned its BOM on.
+0:56.863: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:56.919: Robot 4 has turned its BOM on.
+0:57.031: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:57.087: Robot 10 has turned its BOM on.
+0:57.199: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:57.255: Robot 3 has turned its BOM on.
+0:57.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:57.359: Robot 4 has turned its BOM on.
+0:57.478: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:57.531: Robot 10 has turned its BOM on.
+0:57.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:57.699: Robot 3 has turned its BOM on.
+0:57.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:57.803: Robot 4 has turned its BOM on.
+0:57.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:57.971: Robot 10 has turned its BOM on.
+0:58.083: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:58.139: Robot 3 has turned its BOM on.
+0:58.195: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:58.251: Robot 4 has turned its BOM on.
+0:58.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:58.415: Robot 10 has turned its BOM on.
+0:58.527: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:58.583: Robot 3 has turned its BOM on.
+0:58.639: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:58.695: Robot 4 has turned its BOM on.
+0:58.806: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:58.859: Robot 10 has turned its BOM on.
+0:58.975: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:59.031: Robot 3 has turned its BOM on.
+0:59.087: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:59.143: Robot 4 has turned its BOM on.
+0:59.255: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:59.303: Robot 10 has turned its BOM on.
+0:59.415: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:59.471: Robot 3 has turned its BOM on.
+0:59.583: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+0:59.639: Robot 4 has turned its BOM on.
+0:59.695: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+0:59.751: Robot 10 has turned its BOM on.
+0:59.859: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+0:59.915: Robot 3 has turned its BOM on.
+1:00.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:00.083: Robot 4 has turned its BOM on.
+1:00.143: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:00.199: Robot 10 has turned its BOM on.
+1:00.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:00.359: Robot 3 has turned its BOM on.
+1:00.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:00.527: Robot 4 has turned its BOM on.
+1:00.639: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:00.695: Robot 10 has turned its BOM on.
+1:00.751: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:00.803: Robot 3 has turned its BOM on.
+1:00.923: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:00.979: Robot 4 has turned its BOM on.
+1:01.039: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:01.095: Robot 10 has turned its BOM on.
+1:01.207: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:01.263: Robot 3 has turned its BOM on.
+1:01.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:01.415: Robot 4 has turned its BOM on.
+1:01.475: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:01.531: Robot 10 has turned its BOM on.
+1:01.647: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:01.703: Robot 3 has turned its BOM on.
+1:01.807: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:01.863: Robot 4 has turned its BOM on.
+1:01.919: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:01.975: Robot 10 has turned its BOM on.
+1:02.087: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:02.143: Robot 3 has turned its BOM on.
+1:02.259: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:02.303: Robot 4 has turned its BOM on.
+1:02.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:02.471: Robot 10 has turned its BOM on.
+1:02.527: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:02.583: Robot 3 has turned its BOM on.
+1:02.695: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:02.751: Robot 4 has turned its BOM on.
+1:02.859: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:02.915: Robot 10 has turned its BOM on.
+1:02.979: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:03.035: Robot 3 has turned its BOM on.
+1:03.151: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:03.207: Robot 4 has turned its BOM on.
+1:03.263: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:03.303: Robot 10 has turned its BOM on.
+1:03.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:03.583: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:03.639: Robot 4 has turned its BOM on.
+1:03.751: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:03.803: Robot 10 has turned its BOM on.
+1:03.859: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:03.915: Robot 3 has turned its BOM on.
+1:04.031: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:04.087: Robot 4 has turned its BOM on.
+1:04.199: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:04.255: Robot 10 has turned its BOM on.
+1:04.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:04.359: Robot 3 has turned its BOM on.
+1:04.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:04.527: Robot 4 has turned its BOM on.
+1:04.639: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:04.695: Robot 10 has turned its BOM on.
+1:04.755: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:04.803: Robot 3 has turned its BOM on.
+1:04.915: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:04.971: Robot 4 has turned its BOM on.
+1:05.087: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:05.143: Robot 10 has turned its BOM on.
+1:05.203: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:05.259: Robot 3 has turned its BOM on.
+1:05.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:05.415: Robot 4 has turned its BOM on.
+1:05.527: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:05.583: Robot 10 has turned its BOM on.
+1:05.695: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:05.751: Robot 3 has turned its BOM on.
+1:05.803: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:05.859: Robot 4 has turned its BOM on.
+1:05.971: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:06.027: Robot 10 has turned its BOM on.
+1:06.139: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:06.195: Robot 3 has turned its BOM on.
+1:06.255: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:06.303: Robot 4 has turned its BOM on.
+1:06.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:06.471: Robot 10 has turned its BOM on.
+1:06.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:06.639: Robot 3 has turned its BOM on.
+1:06.751: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:06.803: Robot 4 has turned its BOM on.
+1:06.863: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:06.919: Robot 10 has turned its BOM on.
+1:07.031: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:07.087: Robot 3 has turned its BOM on.
+1:07.147: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:07.203: Robot 4 has turned its BOM on.
+1:07.307: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:07.363: Robot 10 has turned its BOM on.
+1:07.475: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:07.531: Robot 3 has turned its BOM on.
+1:07.587: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:07.643: Robot 4 has turned its BOM on.
+1:07.755: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:07.803: Robot 10 has turned its BOM on.
+1:07.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:07.971: Robot 3 has turned its BOM on.
+1:08.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:08.083: Robot 4 has turned its BOM on.
+1:08.195: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:08.251: Robot 10 has turned its BOM on.
+1:08.363: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:08.419: Robot 3 has turned its BOM on.
+1:08.475: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:08.534: Robot 4 has turned its BOM on.
+1:08.643: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:08.699: Robot 10 has turned its BOM on.
+1:08.806: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:08.859: Robot 3 has turned its BOM on.
+1:08.971: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:09.027: Robot 4 has turned its BOM on.
+1:09.083: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:09.139: Robot 10 has turned its BOM on.
+1:09.251: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:09.303: Robot 3 has turned its BOM on.
+1:09.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:09.471: Robot 4 has turned its BOM on.
+1:09.531: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:09.587: Robot 10 has turned its BOM on.
+1:09.699: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:09.755: Robot 3 has turned its BOM on.
+1:09.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:09.915: Robot 4 has turned its BOM on.
+1:10.027: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:10.083: Robot 10 has turned its BOM on.
+1:10.139: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:10.195: Robot 3 has turned its BOM on.
+1:10.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:10.359: Robot 4 has turned its BOM on.
+1:10.471: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:10.527: Robot 10 has turned its BOM on.
+1:10.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:10.639: Robot 3 has turned its BOM on.
+1:10.751: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:10.803: Robot 4 has turned its BOM on.
+1:10.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:10.971: Robot 10 has turned its BOM on.
+1:11.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:11.083: Robot 3 has turned its BOM on.
+1:11.195: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:11.251: Robot 4 has turned its BOM on.
+1:11.363: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:11.419: Robot 10 has turned its BOM on.
+1:11.475: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:11.531: Robot 3 has turned its BOM on.
+1:11.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:11.699: Robot 4 has turned its BOM on.
+1:11.759: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:11.803: Robot 10 has turned its BOM on.
+1:11.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:11.971: Robot 3 has turned its BOM on.
+1:12.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:12.139: Robot 4 has turned its BOM on.
+1:12.251: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:12.303: Robot 10 has turned its BOM on.
+1:12.363: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:12.419: Robot 3 has turned its BOM on.
+1:12.534: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:12.587: Robot 4 has turned its BOM on.
+1:12.699: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:12.755: Robot 10 has turned its BOM on.
+1:12.867: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:12.923: Robot 3 has turned its BOM on.
+1:12.979: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:13.035: Robot 4 has turned its BOM on.
+1:13.147: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:13.203: Robot 10 has turned its BOM on.
+1:13.259: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:13.303: Robot 3 has turned its BOM on.
+1:13.419: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:13.475: Robot 4 has turned its BOM on.
+1:13.587: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:13.643: Robot 10 has turned its BOM on.
+1:13.755: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:13.803: Robot 3 has turned its BOM on.
+1:13.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:13.915: Robot 4 has turned its BOM on.
+1:14.028: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:14.083: Robot 10 has turned its BOM on.
+1:14.195: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:14.251: Robot 3 has turned its BOM on.
+1:14.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:14.359: Robot 4 has turned its BOM on.
+1:14.475: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:14.535: Robot 10 has turned its BOM on.
+1:14.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:14.699: Robot 3 has turned its BOM on.
+1:14.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:14.803: Robot 4 has turned its BOM on.
+1:14.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:14.971: Robot 10 has turned its BOM on.
+1:15.083: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:15.139: Robot 3 has turned its BOM on.
+1:15.199: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:15.255: Robot 4 has turned its BOM on.
+1:15.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:15.415: Robot 10 has turned its BOM on.
+1:15.527: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:15.583: Robot 3 has turned its BOM on.
+1:15.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:15.699: Robot 4 has turned its BOM on.
+1:15.803: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:15.859: Robot 10 has turned its BOM on.
+1:15.971: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:16.027: Robot 3 has turned its BOM on.
+1:16.139: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:16.195: Robot 4 has turned its BOM on.
+1:16.251: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:16.303: Robot 10 has turned its BOM on.
+1:16.419: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:16.475: Robot 3 has turned its BOM on.
+1:16.587: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:16.643: Robot 4 has turned its BOM on.
+1:16.699: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:16.755: Robot 10 has turned its BOM on.
+1:16.859: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:16.915: Robot 3 has turned its BOM on.
+1:17.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:17.083: Robot 4 has turned its BOM on.
+1:17.139: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:17.198: Robot 10 has turned its BOM on.
+1:17.307: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:17.363: Robot 3 has turned its BOM on.
+1:17.475: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:17.531: Robot 4 has turned its BOM on.
+1:17.587: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:17.643: Robot 10 has turned its BOM on.
+1:17.755: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:17.803: Robot 3 has turned its BOM on.
+1:17.915: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:17.971: Robot 4 has turned its BOM on.
+1:18.027: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:18.083: Robot 10 has turned its BOM on.
+1:18.195: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:18.251: Robot 3 has turned its BOM on.
+1:18.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:18.415: Robot 4 has turned its BOM on.
+1:18.475: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:18.531: Robot 10 has turned its BOM on.
+1:18.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:18.699: Robot 3 has turned its BOM on.
+1:18.803: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:18.859: Robot 4 has turned its BOM on.
+1:18.971: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:19.027: Robot 10 has turned its BOM on.
+1:19.083: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:19.139: Robot 3 has turned its BOM on.
+1:19.263: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:19.303: Robot 4 has turned its BOM on.
+1:19.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:19.471: Robot 10 has turned its BOM on.
+1:19.535: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:19.591: Robot 3 has turned its BOM on.
+1:19.703: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:19.759: Robot 4 has turned its BOM on.
+1:19.862: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:19.915: Robot 10 has turned its BOM on.
+1:19.971: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:20.027: Robot 3 has turned its BOM on.
+1:20.139: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:20.195: Robot 4 has turned its BOM on.
+1:20.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:20.359: Robot 10 has turned its BOM on.
+1:20.415: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:20.471: Robot 3 has turned its BOM on.
+1:20.588: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:20.643: Robot 4 has turned its BOM on.
+1:20.755: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:20.803: Robot 10 has turned its BOM on.
+1:20.859: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:20.915: Robot 3 has turned its BOM on.
+1:21.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:21.083: Robot 4 has turned its BOM on.
+1:21.198: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:21.251: Robot 10 has turned its BOM on.
+1:21.307: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:21.363: Robot 3 has turned its BOM on.
+1:21.475: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:21.531: Robot 4 has turned its BOM on.
+1:21.643: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:21.699: Robot 10 has turned its BOM on.
+1:21.755: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:21.803: Robot 3 has turned its BOM on.
+1:21.971: Robot 4 has turned its BOM on.
+1:22.083: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:22.139: Robot 10 has turned its BOM on.
+1:22.251: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:22.303: Robot 3 has turned its BOM on.
+1:22.363: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:22.419: Robot 4 has turned its BOM on.
+1:22.531: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:22.587: Robot 10 has turned its BOM on.
+1:22.699: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:22.755: Robot 3 has turned its BOM on.
+1:22.803: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:22.859: Robot 4 has turned its BOM on.
+1:22.971: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:23.027: Robot 10 has turned its BOM on.
+1:23.139: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:23.195: Robot 3 has turned its BOM on.
+1:23.251: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:23.303: Robot 4 has turned its BOM on.
+1:23.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:23.471: Robot 10 has turned its BOM on.
+1:23.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:23.639: Robot 3 has turned its BOM on.
+1:23.751: Robot 4 has turned its BOM on.
+1:23.862: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:23.915: Robot 10 has turned its BOM on.
+1:24.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:24.083: Robot 3 has turned its BOM on.
+1:24.139: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:24.195: Robot 4 has turned its BOM on.
+1:24.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:24.359: Robot 10 has turned its BOM on.
+1:24.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:24.530: Robot 3 has turned its BOM on.
+1:24.583: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:24.639: Robot 4 has turned its BOM on.
+1:24.751: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:24.803: Robot 10 has turned its BOM on.
+1:24.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:24.971: Robot 3 has turned its BOM on.
+1:25.031: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:25.087: Robot 4 has turned its BOM on.
+1:25.199: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:25.255: Robot 10 has turned its BOM on.
+1:25.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:25.415: Robot 3 has turned its BOM on.
+1:25.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:25.583: Robot 4 has turned its BOM on.
+1:25.640: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:25.695: Robot 10 has turned its BOM on.
+1:25.803: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:25.862: Robot 3 has turned its BOM on.
+1:25.971: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:26.027: Robot 4 has turned its BOM on.
+1:26.087: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:26.144: Robot 10 has turned its BOM on.
+1:26.255: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:26.415: Robot 4 has turned its BOM on.
+1:26.530: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:26.583: Robot 10 has turned its BOM on.
+1:26.695: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:26.751: Robot 3 has turned its BOM on.
+1:26.863: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:26.919: Robot 4 has turned its BOM on.
+1:26.975: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:27.031: Robot 10 has turned its BOM on.
+1:27.147: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:27.203: Robot 3 has turned its BOM on.
+1:27.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:27.359: Robot 4 has turned its BOM on.
+1:27.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:27.471: Robot 10 has turned its BOM on.
+1:27.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:27.639: Robot 3 has turned its BOM on.
+1:27.751: Robot 4 has turned its BOM on.
+1:27.867: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:27.923: Robot 10 has turned its BOM on.
+1:28.039: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:28.095: Robot 3 has turned its BOM on.
+1:28.207: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:28.263: Robot 4 has turned its BOM on.
+1:28.307: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:28.363: Robot 10 has turned its BOM on.
+1:28.475: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:28.531: Robot 3 has turned its BOM on.
+1:28.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:28.699: Robot 4 has turned its BOM on.
+1:28.763: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:28.806: Robot 10 has turned its BOM on.
+1:28.919: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:28.975: Robot 3 has turned its BOM on.
+1:29.087: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:29.143: Robot 4 has turned its BOM on.
+1:29.255: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:29.303: Robot 10 has turned its BOM on.
+1:29.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:29.415: Robot 3 has turned its BOM on.
+1:29.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:29.583: Robot 4 has turned its BOM on.
+1:29.695: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:29.751: Robot 10 has turned its BOM on.
+1:29.803: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:29.862: Robot 3 has turned its BOM on.
+1:29.975: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:30.031: Robot 4 has turned its BOM on.
+1:30.143: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:30.199: Robot 10 has turned its BOM on.
+1:30.255: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:30.303: Robot 3 has turned its BOM on.
+1:30.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:30.471: Robot 4 has turned its BOM on.
+1:30.583: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:30.639: Robot 10 has turned its BOM on.
+1:30.695: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:30.751: Robot 3 has turned its BOM on.
+1:30.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:30.915: Robot 4 has turned its BOM on.
+1:31.027: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:31.083: Robot 10 has turned its BOM on.
+1:31.143: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:31.199: Robot 3 has turned its BOM on.
+1:31.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:31.359: Robot 4 has turned its BOM on.
+1:31.471: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:31.527: Robot 10 has turned its BOM on.
+1:31.639: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:31.695: Robot 3 has turned its BOM on.
+1:31.751: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:31.803: Robot 4 has turned its BOM on.
+1:31.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:31.971: Robot 10 has turned its BOM on.
+1:32.083: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:32.139: Robot 3 has turned its BOM on.
+1:32.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:32.258: Robot 4 has turned its BOM on.
+1:32.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:32.415: Robot 10 has turned its BOM on.
+1:32.527: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:32.583: Robot 3 has turned its BOM on.
+1:32.639: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:32.695: Robot 4 has turned its BOM on.
+1:32.803: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:32.859: Robot 10 has turned its BOM on.
+1:32.975: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:33.031: Robot 3 has turned its BOM on.
+1:33.087: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:33.143: Robot 4 has turned its BOM on.
+1:33.255: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:33.303: Robot 10 has turned its BOM on.
+1:33.415: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:33.471: Robot 3 has turned its BOM on.
+1:33.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:33.583: Robot 4 has turned its BOM on.
+1:33.695: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:33.751: Robot 10 has turned its BOM on.
+1:33.863: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:33.915: Robot 3 has turned its BOM on.
+1:33.975: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:34.031: Robot 4 has turned its BOM on.
+1:34.143: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:34.199: Robot 10 has turned its BOM on.
+1:34.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:34.359: Robot 3 has turned its BOM on.
+1:34.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:34.527: Robot 4 has turned its BOM on.
+1:34.583: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:34.639: Robot 10 has turned its BOM on.
+1:34.751: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:34.803: Robot 3 has turned its BOM on.
+1:34.915: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:34.971: Robot 4 has turned its BOM on.
+1:35.031: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:35.087: Robot 10 has turned its BOM on.
+1:35.202: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:35.255: Robot 3 has turned its BOM on.
+1:35.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:35.415: Robot 4 has turned its BOM on.
+1:35.471: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:35.527: Robot 10 has turned its BOM on.
+1:35.639: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:35.695: Robot 3 has turned its BOM on.
+1:35.803: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:35.859: Robot 4 has turned its BOM on.
+1:35.915: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:35.971: Robot 10 has turned its BOM on.
+1:36.087: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:36.143: Robot 3 has turned its BOM on.
+1:36.258: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:36.303: Robot 4 has turned its BOM on.
+1:36.359: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:36.415: Robot 10 has turned its BOM on.
+1:36.530: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:36.583: Robot 3 has turned its BOM on.
+1:36.695: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:36.751: Robot 4 has turned its BOM on.
+1:36.807: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:36.863: Robot 10 has turned its BOM on.
+1:36.975: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:37.031: Robot 3 has turned its BOM on.
+1:37.143: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:37.199: Robot 4 has turned its BOM on.
+1:37.255: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:37.303: Robot 10 has turned its BOM on.
+1:37.415: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:37.471: Robot 3 has turned its BOM on.
+1:37.583: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:37.639: Robot 4 has turned its BOM on.
+1:37.751: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:37.803: Robot 10 has turned its BOM on.
+1:37.863: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:37.919: Robot 3 has turned its BOM on.
+1:38.031: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:38.087: Robot 4 has turned its BOM on.
+1:38.199: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:38.258: Robot 10 has turned its BOM on.
+1:38.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:38.359: Robot 3 has turned its BOM on.
+1:38.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:38.527: Robot 4 has turned its BOM on.
+1:38.643: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:38.699: Robot 10 has turned its BOM on.
+1:38.759: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:38.803: Robot 3 has turned its BOM on.
+1:38.920: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:38.975: Robot 4 has turned its BOM on.
+1:39.087: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:39.143: Robot 10 has turned its BOM on.
+1:39.199: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:39.256: Robot 3 has turned its BOM on.
+1:39.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:39.415: Robot 4 has turned its BOM on.
+1:39.531: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:39.590: Robot 10 has turned its BOM on.
+1:39.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:39.699: Robot 3 has turned its BOM on.
+1:39.803: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:39.859: Robot 4 has turned its BOM on.
+1:39.975: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:40.031: Robot 10 has turned its BOM on.
+1:40.087: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:40.143: Robot 3 has turned its BOM on.
+1:40.258: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:40.303: Robot 4 has turned its BOM on.
+1:40.415: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:40.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:40.639: Robot 3 has turned its BOM on.
+1:40.695: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:40.751: Robot 4 has turned its BOM on.
+1:40.859: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:40.915: Robot 10 has turned its BOM on.
+1:41.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:41.083: Robot 3 has turned its BOM on.
+1:41.139: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:41.195: Robot 4 has turned its BOM on.
+1:41.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:41.359: Robot 10 has turned its BOM on.
+1:41.471: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:41.527: Robot 3 has turned its BOM on.
+1:41.587: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:41.643: Robot 4 has turned its BOM on.
+1:41.755: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:41.803: Robot 10 has turned its BOM on.
+1:41.919: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:41.975: Robot 3 has turned its BOM on.
+1:42.035: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:42.091: Robot 4 has turned its BOM on.
+1:42.203: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:42.259: Robot 10 has turned its BOM on.
+1:42.363: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:42.419: Robot 3 has turned its BOM on.
+1:42.475: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:42.531: Robot 4 has turned its BOM on.
+1:42.643: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:42.699: Robot 10 has turned its BOM on.
+1:42.803: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:42.859: Robot 3 has turned its BOM on.
+1:42.915: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:42.971: Robot 4 has turned its BOM on.
+1:43.083: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:43.139: Robot 10 has turned its BOM on.
+1:43.251: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:43.303: Robot 3 has turned its BOM on.
+1:43.359: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:43.415: Robot 4 has turned its BOM on.
+1:43.527: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:43.583: Robot 10 has turned its BOM on.
+1:43.695: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:43.751: Robot 3 has turned its BOM on.
+1:43.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:43.915: Robot 4 has turned its BOM on.
+1:43.971: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:44.027: Robot 10 has turned its BOM on.
+1:44.139: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:44.195: Robot 3 has turned its BOM on.
+1:44.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:44.359: Robot 4 has turned its BOM on.
+1:44.419: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:44.475: Robot 10 has turned its BOM on.
+1:44.587: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:44.643: Robot 3 has turned its BOM on.
+1:44.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:44.804: Robot 4 has turned its BOM on.
+1:44.859: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:44.915: Robot 10 has turned its BOM on.
+1:45.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:45.083: Robot 3 has turned its BOM on.
+1:45.195: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:45.251: Robot 4 has turned its BOM on.
+1:45.303: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:45.359: Robot 10 has turned its BOM on.
+1:45.475: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:45.531: Robot 3 has turned its BOM on.
+1:45.647: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:45.703: Robot 4 has turned its BOM on.
+1:45.759: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:45.803: Robot 10 has turned its BOM on.
+1:45.915: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:45.971: Robot 3 has turned its BOM on.
+1:46.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:46.139: Robot 4 has turned its BOM on.
+1:46.195: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:46.254: Robot 10 has turned its BOM on.
+1:46.359: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:46.415: Robot 3 has turned its BOM on.
+1:46.527: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:46.583: Robot 4 has turned its BOM on.
+1:46.639: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:46.695: Robot 10 has turned its BOM on.
+1:46.804: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:46.859: Robot 3 has turned its BOM on.
+1:46.971: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:47.027: Robot 4 has turned its BOM on.
+1:47.139: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:47.195: Robot 10 has turned its BOM on.
+1:47.251: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:47.303: Robot 3 has turned its BOM on.
+1:47.415: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:47.471: Robot 4 has turned its BOM on.
+1:47.586: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:47.639: Robot 10 has turned its BOM on.
+1:47.699: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:47.755: Robot 3 has turned its BOM on.
+1:47.859: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:47.915: Robot 4 has turned its BOM on.
+1:48.027: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:48.083: Robot 10 has turned its BOM on.
+1:48.195: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:48.254: Robot 3 has turned its BOM on.
+1:48.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:48.359: Robot 4 has turned its BOM on.
+1:48.471: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:48.527: Robot 10 has turned its BOM on.
+1:48.583: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:48.639: Robot 3 has turned its BOM on.
+1:48.759: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:48.803: Robot 4 has turned its BOM on.
+1:48.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:48.971: Robot 10 has turned its BOM on.
+1:49.027: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:49.083: Robot 3 has turned its BOM on.
+1:49.195: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:49.251: Robot 4 has turned its BOM on.
+1:49.363: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:49.419: Robot 10 has turned its BOM on.
+1:49.475: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:49.531: Robot 3 has turned its BOM on.
+1:49.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:49.699: Robot 4 has turned its BOM on.
+1:49.803: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:49.859: Robot 10 has turned its BOM on.
+1:49.971: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:50.028: Robot 3 has turned its BOM on.
+1:50.083: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:50.139: Robot 4 has turned its BOM on.
+1:50.254: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:50.303: Robot 10 has turned its BOM on.
+1:50.415: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:50.471: Robot 3 has turned its BOM on.
+1:50.535: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:50.591: Robot 4 has turned its BOM on.
+1:50.708: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:50.763: Robot 10 has turned its BOM on.
+1:50.859: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:50.918: Robot 3 has turned its BOM on.
+1:51.027: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:51.083: Robot 4 has turned its BOM on.
+1:51.139: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:51.195: Robot 10 has turned its BOM on.
+1:51.303: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:51.359: Robot 3 has turned its BOM on.
+1:51.471: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:51.528: Robot 4 has turned its BOM on.
+1:51.594: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:51.647: Robot 10 has turned its BOM on.
+1:51.759: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:51.803: Robot 3 has turned its BOM on.
+1:51.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:51.971: Robot 4 has turned its BOM on.
+1:52.028: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:52.084: Robot 10 has turned its BOM on.
+1:52.196: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:52.254: Robot 3 has turned its BOM on.
+1:52.307: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:52.364: Robot 4 has turned its BOM on.
+1:52.476: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:52.531: Robot 10 has turned its BOM on.
+1:52.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:52.699: Robot 3 has turned its BOM on.
+1:52.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:52.803: Robot 4 has turned its BOM on.
+1:52.920: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:52.975: Robot 10 has turned its BOM on.
+1:53.091: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:53.147: Robot 3 has turned its BOM on.
+1:53.204: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:53.260: Robot 4 has turned its BOM on.
+1:53.363: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:53.419: Robot 10 has turned its BOM on.
+1:53.531: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:53.587: Robot 3 has turned its BOM on.
+1:53.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:53.756: Robot 4 has turned its BOM on.
+1:53.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:53.915: Robot 10 has turned its BOM on.
+1:53.972: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:54.028: Robot 3 has turned its BOM on.
+1:54.144: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:54.200: Robot 4 has turned its BOM on.
+1:54.260: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:54.304: Robot 10 has turned its BOM on.
+1:54.420: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:54.475: Robot 3 has turned its BOM on.
+1:54.588: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:54.643: Robot 4 has turned its BOM on.
+1:54.756: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:54.804: Robot 10 has turned its BOM on.
+1:54.860: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:54.918: Robot 3 has turned its BOM on.
+1:55.032: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:55.088: Robot 4 has turned its BOM on.
+1:55.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:55.256: Robot 10 has turned its BOM on.
+1:55.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:55.360: Robot 3 has turned its BOM on.
+1:55.476: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:55.532: Robot 4 has turned its BOM on.
+1:55.652: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:55.708: Robot 10 has turned its BOM on.
+1:55.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:55.804: Robot 3 has turned its BOM on.
+1:55.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:55.972: Robot 4 has turned its BOM on.
+1:56.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:56.140: Robot 10 has turned its BOM on.
+1:56.196: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:56.252: Robot 3 has turned its BOM on.
+1:56.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:56.416: Robot 4 has turned its BOM on.
+1:56.528: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:56.584: Robot 10 has turned its BOM on.
+1:56.644: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:56.700: Robot 3 has turned its BOM on.
+1:56.808: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:56.864: Robot 4 has turned its BOM on.
+1:56.976: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:57.032: Robot 10 has turned its BOM on.
+1:57.092: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:57.148: Robot 3 has turned its BOM on.
+1:57.260: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:57.304: Robot 4 has turned its BOM on.
+1:57.420: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:57.476: Robot 10 has turned its BOM on.
+1:57.588: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:57.644: Robot 3 has turned its BOM on.
+1:57.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:57.756: Robot 4 has turned its BOM on.
+1:57.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:57.916: Robot 10 has turned its BOM on.
+1:58.028: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:58.084: Robot 3 has turned its BOM on.
+1:58.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:58.196: Robot 4 has turned its BOM on.
+1:58.308: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:58.364: Robot 10 has turned its BOM on.
+1:58.476: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:58.532: Robot 3 has turned its BOM on.
+1:58.592: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:58.650: Robot 4 has turned its BOM on.
+1:58.760: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:58.804: Robot 10 has turned its BOM on.
+1:58.920: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:58.976: Robot 3 has turned its BOM on.
+1:59.032: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:59.088: Robot 4 has turned its BOM on.
+1:59.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:59.256: Robot 10 has turned its BOM on.
+1:59.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:59.416: Robot 3 has turned its BOM on.
+1:59.472: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:59.528: Robot 4 has turned its BOM on.
+1:59.640: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+1:59.696: Robot 10 has turned its BOM on.
+1:59.804: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+1:59.860: Robot 3 has turned its BOM on.
+1:59.920: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+1:59.976: Robot 4 has turned its BOM on.
+2:00.088: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:00.144: Robot 10 has turned its BOM on.
+2:00.256: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:00.304: Robot 3 has turned its BOM on.
+2:00.416: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:00.472: Robot 4 has turned its BOM on.
+2:00.528: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:00.584: Robot 10 has turned its BOM on.
+2:00.696: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:00.752: Robot 3 has turned its BOM on.
+2:00.860: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:00.918: Robot 4 has turned its BOM on.
+2:00.976: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:01.032: Robot 10 has turned its BOM on.
+2:01.144: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:01.200: Robot 3 has turned its BOM on.
+2:01.304: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:01.360: Robot 4 has turned its BOM on.
+2:01.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:01.472: Robot 10 has turned its BOM on.
+2:01.591: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:01.644: Robot 3 has turned its BOM on.
+2:01.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:01.804: Robot 4 has turned its BOM on.
+2:01.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:01.916: Robot 10 has turned its BOM on.
+2:02.032: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:02.088: Robot 3 has turned its BOM on.
+2:02.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:02.256: Robot 4 has turned its BOM on.
+2:02.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:02.360: Robot 10 has turned its BOM on.
+2:02.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:02.528: Robot 3 has turned its BOM on.
+2:02.640: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:02.696: Robot 4 has turned its BOM on.
+2:02.752: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:02.804: Robot 10 has turned its BOM on.
+2:02.919: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:02.972: Robot 3 has turned its BOM on.
+2:03.084: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:03.140: Robot 4 has turned its BOM on.
+2:03.196: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:03.252: Robot 10 has turned its BOM on.
+2:03.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:03.416: Robot 3 has turned its BOM on.
+2:03.528: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:03.584: Robot 4 has turned its BOM on.
+2:03.696: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:03.752: Robot 10 has turned its BOM on.
+2:03.808: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:03.864: Robot 3 has turned its BOM on.
+2:03.976: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:04.032: Robot 4 has turned its BOM on.
+2:04.144: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:04.200: Robot 10 has turned its BOM on.
+2:04.256: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:04.304: Robot 3 has turned its BOM on.
+2:04.416: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:04.472: Robot 4 has turned its BOM on.
+2:04.584: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:04.640: Robot 10 has turned its BOM on.
+2:04.696: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:04.752: Robot 3 has turned its BOM on.
+2:04.864: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:04.920: Robot 4 has turned its BOM on.
+2:05.032: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:05.088: Robot 10 has turned its BOM on.
+2:05.144: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:05.200: Robot 3 has turned its BOM on.
+2:05.304: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:05.360: Robot 4 has turned its BOM on.
+2:05.472: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:05.528: Robot 10 has turned its BOM on.
+2:05.588: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:05.644: Robot 3 has turned its BOM on.
+2:05.760: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:05.804: Robot 4 has turned its BOM on.
+2:05.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:05.972: Robot 10 has turned its BOM on.
+2:06.032: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:06.088: Robot 3 has turned its BOM on.
+2:06.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:06.256: Robot 4 has turned its BOM on.
+2:06.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:06.416: Robot 10 has turned its BOM on.
+2:06.528: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:06.584: Robot 3 has turned its BOM on.
+2:06.640: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:06.696: Robot 4 has turned its BOM on.
+2:06.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:06.860: Robot 10 has turned its BOM on.
+2:06.972: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:07.028: Robot 3 has turned its BOM on.
+2:07.088: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:07.144: Robot 4 has turned its BOM on.
+2:07.256: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:07.304: Robot 10 has turned its BOM on.
+2:07.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:07.472: Robot 3 has turned its BOM on.
+2:07.528: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:07.584: Robot 4 has turned its BOM on.
+2:07.696: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:07.752: Robot 10 has turned its BOM on.
+2:07.864: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:07.920: Robot 3 has turned its BOM on.
+2:07.976: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:08.032: Robot 4 has turned its BOM on.
+2:08.144: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:08.200: Robot 10 has turned its BOM on.
+2:08.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:08.360: Robot 3 has turned its BOM on.
+2:08.480: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:08.536: Robot 4 has turned its BOM on.
+2:08.596: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:08.652: Robot 10 has turned its BOM on.
+2:08.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:08.804: Robot 3 has turned its BOM on.
+2:08.864: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:08.920: Robot 4 has turned its BOM on.
+2:09.032: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:09.088: Robot 10 has turned its BOM on.
+2:09.200: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:09.256: Robot 3 has turned its BOM on.
+2:09.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:09.416: Robot 4 has turned its BOM on.
+2:09.472: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:09.528: Robot 10 has turned its BOM on.
+2:09.640: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:09.696: Robot 3 has turned its BOM on.
+2:09.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:09.860: Robot 4 has turned its BOM on.
+2:09.920: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:09.976: Robot 10 has turned its BOM on.
+2:10.088: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:10.144: Robot 3 has turned its BOM on.
+2:10.256: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:10.304: Robot 4 has turned its BOM on.
+2:10.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:10.416: Robot 10 has turned its BOM on.
+2:10.528: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:10.584: Robot 3 has turned its BOM on.
+2:10.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:10.756: Robot 4 has turned its BOM on.
+2:10.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:10.860: Robot 10 has turned its BOM on.
+2:10.976: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:11.032: Robot 3 has turned its BOM on.
+2:11.144: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:11.200: Robot 4 has turned its BOM on.
+2:11.256: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:11.304: Robot 10 has turned its BOM on.
+2:11.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:11.472: Robot 3 has turned its BOM on.
+2:11.584: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:11.640: Robot 4 has turned its BOM on.
+2:11.696: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:11.752: Robot 10 has turned its BOM on.
+2:11.860: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:11.916: Robot 3 has turned its BOM on.
+2:12.028: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:12.084: Robot 4 has turned its BOM on.
+2:12.144: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:12.200: Robot 10 has turned its BOM on.
+2:12.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:12.360: Robot 3 has turned its BOM on.
+2:12.472: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:12.528: Robot 4 has turned its BOM on.
+2:12.640: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:12.696: Robot 10 has turned its BOM on.
+2:12.752: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:12.804: Robot 3 has turned its BOM on.
+2:12.919: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:12.972: Robot 4 has turned its BOM on.
+2:13.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:13.140: Robot 10 has turned its BOM on.
+2:13.200: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:13.256: Robot 3 has turned its BOM on.
+2:13.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:13.416: Robot 4 has turned its BOM on.
+2:13.528: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:13.584: Robot 10 has turned its BOM on.
+2:13.640: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:13.696: Robot 3 has turned its BOM on.
+2:13.808: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:13.864: Robot 4 has turned its BOM on.
+2:13.979: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:14.032: Robot 10 has turned its BOM on.
+2:14.088: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:14.144: Robot 3 has turned its BOM on.
+2:14.256: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:14.304: Robot 4 has turned its BOM on.
+2:14.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:14.472: Robot 10 has turned its BOM on.
+2:14.532: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:14.588: Robot 3 has turned its BOM on.
+2:14.704: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:14.760: Robot 4 has turned its BOM on.
+2:14.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:14.916: Robot 10 has turned its BOM on.
+2:14.972: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:15.028: Robot 3 has turned its BOM on.
+2:15.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:15.196: Robot 4 has turned its BOM on.
+2:15.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:15.360: Robot 10 has turned its BOM on.
+2:15.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:15.528: Robot 3 has turned its BOM on.
+2:15.584: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:15.640: Robot 4 has turned its BOM on.
+2:15.752: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:15.804: Robot 10 has turned its BOM on.
+2:15.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:15.972: Robot 3 has turned its BOM on.
+2:16.028: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:16.084: Robot 4 has turned its BOM on.
+2:16.196: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:16.252: Robot 10 has turned its BOM on.
+2:16.312: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:16.368: Robot 3 has turned its BOM on.
+2:16.480: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:16.536: Robot 4 has turned its BOM on.
+2:16.648: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:16.704: Robot 10 has turned its BOM on.
+2:16.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:16.804: Robot 3 has turned its BOM on.
+2:16.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:16.972: Robot 4 has turned its BOM on.
+2:17.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:17.140: Robot 10 has turned its BOM on.
+2:17.252: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:17.304: Robot 3 has turned its BOM on.
+2:17.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:17.416: Robot 4 has turned its BOM on.
+2:17.532: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:17.588: Robot 10 has turned its BOM on.
+2:17.700: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:17.756: Robot 3 has turned its BOM on.
+2:17.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:17.860: Robot 4 has turned its BOM on.
+2:17.972: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:18.028: Robot 10 has turned its BOM on.
+2:18.140: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:18.196: Robot 3 has turned its BOM on.
+2:18.252: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:18.304: Robot 4 has turned its BOM on.
+2:18.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:18.472: Robot 10 has turned its BOM on.
+2:18.584: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:18.640: Robot 3 has turned its BOM on.
+2:18.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:18.756: Robot 4 has turned its BOM on.
+2:18.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:18.916: Robot 10 has turned its BOM on.
+2:19.028: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:19.084: Robot 3 has turned its BOM on.
+2:19.196: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:19.252: Robot 4 has turned its BOM on.
+2:19.308: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:19.364: Robot 10 has turned its BOM on.
+2:19.476: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:19.532: Robot 3 has turned its BOM on.
+2:19.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:19.700: Robot 4 has turned its BOM on.
+2:19.756: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:19.804: Robot 10 has turned its BOM on.
+2:19.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:19.972: Robot 3 has turned its BOM on.
+2:20.084: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:20.140: Robot 4 has turned its BOM on.
+2:20.196: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:20.252: Robot 10 has turned its BOM on.
+2:20.364: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:20.420: Robot 3 has turned its BOM on.
+2:20.532: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:20.588: Robot 4 has turned its BOM on.
+2:20.647: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:20.700: Robot 10 has turned its BOM on.
+2:20.804: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:20.860: Robot 3 has turned its BOM on.
+2:20.972: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:21.028: Robot 4 has turned its BOM on.
+2:21.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:21.140: Robot 10 has turned its BOM on.
+2:21.252: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:21.304: Robot 3 has turned its BOM on.
+2:21.420: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:21.476: Robot 4 has turned its BOM on.
+2:21.536: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:21.592: Robot 10 has turned its BOM on.
+2:21.708: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:21.764: Robot 3 has turned its BOM on.
+2:21.860: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:21.916: Robot 4 has turned its BOM on.
+2:22.028: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:22.084: Robot 10 has turned its BOM on.
+2:22.140: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:22.196: Robot 3 has turned its BOM on.
+2:22.304: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:22.360: Robot 4 has turned its BOM on.
+2:22.472: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:22.528: Robot 10 has turned its BOM on.
+2:22.588: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:22.644: Robot 3 has turned its BOM on.
+2:22.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:22.804: Robot 4 has turned its BOM on.
+2:22.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:22.972: Robot 10 has turned its BOM on.
+2:23.028: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:23.084: Robot 3 has turned its BOM on.
+2:23.196: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:23.252: Robot 4 has turned its BOM on.
+2:23.364: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:23.420: Robot 10 has turned its BOM on.
+2:23.476: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:23.532: Robot 3 has turned its BOM on.
+2:23.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:23.700: Robot 4 has turned its BOM on.
+2:23.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:23.860: Robot 10 has turned its BOM on.
+2:23.920: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:23.976: Robot 3 has turned its BOM on.
+2:24.092: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:24.148: Robot 4 has turned its BOM on.
+2:24.260: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:24.304: Robot 10 has turned its BOM on.
+2:24.364: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:24.420: Robot 3 has turned its BOM on.
+2:24.532: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:24.588: Robot 4 has turned its BOM on.
+2:24.700: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:24.756: Robot 10 has turned its BOM on.
+2:24.860: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:24.916: Robot 3 has turned its BOM on.
+2:24.972: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:25.028: Robot 4 has turned its BOM on.
+2:25.141: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:25.196: Robot 10 has turned its BOM on.
+2:25.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:25.360: Robot 3 has turned its BOM on.
+2:25.420: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:25.476: Robot 4 has turned its BOM on.
+2:25.588: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:25.645: Robot 10 has turned its BOM on.
+2:25.756: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:25.804: Robot 3 has turned its BOM on.
+2:25.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:25.975: Robot 4 has turned its BOM on.
+2:26.028: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:26.084: Robot 10 has turned its BOM on.
+2:26.196: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:26.252: Robot 3 has turned its BOM on.
+2:26.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:26.416: Robot 4 has turned its BOM on.
+2:26.472: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:26.528: Robot 10 has turned its BOM on.
+2:26.643: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:26.696: Robot 3 has turned its BOM on.
+2:26.752: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:26.804: Robot 4 has turned its BOM on.
+2:26.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:26.972: Robot 10 has turned its BOM on.
+2:27.084: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:27.140: Robot 3 has turned its BOM on.
+2:27.196: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:27.252: Robot 4 has turned its BOM on.
+2:27.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:27.416: Robot 10 has turned its BOM on.
+2:27.528: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:27.584: Robot 3 has turned its BOM on.
+2:27.640: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:27.696: Robot 4 has turned its BOM on.
+2:27.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:27.860: Robot 10 has turned its BOM on.
+2:27.975: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:28.028: Robot 3 has turned its BOM on.
+2:28.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:28.196: Robot 4 has turned its BOM on.
+2:28.256: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:28.304: Robot 10 has turned its BOM on.
+2:28.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:28.472: Robot 3 has turned its BOM on.
+2:28.584: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:28.643: Robot 4 has turned its BOM on.
+2:28.700: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:28.756: Robot 10 has turned its BOM on.
+2:28.860: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:28.916: Robot 3 has turned its BOM on.
+2:29.028: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:29.084: Robot 4 has turned its BOM on.
+2:29.196: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:29.252: Robot 10 has turned its BOM on.
+2:29.315: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:29.368: Robot 3 has turned its BOM on.
+2:29.480: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:29.536: Robot 4 has turned its BOM on.
+2:29.596: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:29.652: Robot 10 has turned its BOM on.
+2:29.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:29.804: Robot 3 has turned its BOM on.
+2:29.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:29.975: Robot 4 has turned its BOM on.
+2:30.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:30.140: Robot 10 has turned its BOM on.
+2:30.196: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:30.252: Robot 3 has turned its BOM on.
+2:30.364: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:30.420: Robot 4 has turned its BOM on.
+2:30.532: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:30.588: Robot 10 has turned its BOM on.
+2:30.644: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:30.700: Robot 3 has turned its BOM on.
+2:30.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:30.860: Robot 4 has turned its BOM on.
+2:30.972: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:31.028: Robot 10 has turned its BOM on.
+2:31.084: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:31.140: Robot 3 has turned its BOM on.
+2:31.252: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:31.307: Robot 4 has turned its BOM on.
+2:31.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:31.472: Robot 10 has turned its BOM on.
+2:31.532: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:31.588: Robot 3 has turned its BOM on.
+2:31.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:31.756: Robot 4 has turned its BOM on.
+2:31.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:31.916: Robot 10 has turned its BOM on.
+2:32.028: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:32.084: Robot 3 has turned its BOM on.
+2:32.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:32.196: Robot 4 has turned its BOM on.
+2:32.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:32.360: Robot 10 has turned its BOM on.
+2:32.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:32.528: Robot 3 has turned its BOM on.
+2:32.588: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:32.644: Robot 4 has turned its BOM on.
+2:32.756: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:32.804: Robot 10 has turned its BOM on.
+2:32.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:32.972: Robot 3 has turned its BOM on.
+2:33.028: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:33.084: Robot 4 has turned its BOM on.
+2:33.196: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:33.252: Robot 10 has turned its BOM on.
+2:33.368: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:33.424: Robot 3 has turned its BOM on.
+2:33.484: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:33.540: Robot 4 has turned its BOM on.
+2:33.652: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:33.708: Robot 10 has turned its BOM on.
+2:33.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:33.804: Robot 3 has turned its BOM on.
+2:33.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:33.975: Robot 4 has turned its BOM on.
+2:34.088: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:34.144: Robot 10 has turned its BOM on.
+2:34.200: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:34.256: Robot 3 has turned its BOM on.
+2:34.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:34.416: Robot 4 has turned its BOM on.
+2:34.528: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:34.584: Robot 10 has turned its BOM on.
+2:34.696: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:34.752: Robot 3 has turned its BOM on.
+2:34.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:34.860: Robot 4 has turned its BOM on.
+2:34.972: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:35.028: Robot 10 has turned its BOM on.
+2:35.140: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:35.196: Robot 3 has turned its BOM on.
+2:35.256: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:35.307: Robot 4 has turned its BOM on.
+2:35.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:35.472: Robot 10 has turned its BOM on.
+2:35.584: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:35.640: Robot 3 has turned its BOM on.
+2:35.752: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:35.804: Robot 4 has turned its BOM on.
+2:35.864: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:35.920: Robot 10 has turned its BOM on.
+2:36.032: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:36.088: Robot 3 has turned its BOM on.
+2:36.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:36.256: Robot 4 has turned its BOM on.
+2:36.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:36.360: Robot 10 has turned its BOM on.
+2:36.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:36.528: Robot 3 has turned its BOM on.
+2:36.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:36.700: Robot 4 has turned its BOM on.
+2:36.760: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:36.804: Robot 10 has turned its BOM on.
+2:36.920: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:36.976: Robot 3 has turned its BOM on.
+2:37.088: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:37.144: Robot 4 has turned its BOM on.
+2:37.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:37.256: Robot 10 has turned its BOM on.
+2:37.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:37.416: Robot 3 has turned its BOM on.
+2:37.528: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:37.584: Robot 4 has turned its BOM on.
+2:37.640: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:37.696: Robot 10 has turned its BOM on.
+2:37.804: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:37.860: Robot 3 has turned its BOM on.
+2:37.972: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:38.028: Robot 4 has turned its BOM on.
+2:38.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:38.140: Robot 10 has turned its BOM on.
+2:38.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:38.304: Robot 3 has turned its BOM on.
+2:38.416: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:38.472: Robot 4 has turned its BOM on.
+2:38.584: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:38.640: Robot 10 has turned its BOM on.
+2:38.696: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:38.752: Robot 3 has turned its BOM on.
+2:38.864: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:38.920: Robot 4 has turned its BOM on.
+2:39.032: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:39.088: Robot 10 has turned its BOM on.
+2:39.144: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:39.200: Robot 3 has turned its BOM on.
+2:39.311: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:39.364: Robot 4 has turned its BOM on.
+2:39.476: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:39.532: Robot 10 has turned its BOM on.
+2:39.592: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:39.648: Robot 3 has turned its BOM on.
+2:39.765: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:39.804: Robot 4 has turned its BOM on.
+2:39.920: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:39.976: Robot 10 has turned its BOM on.
+2:40.032: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:40.088: Robot 3 has turned its BOM on.
+2:40.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:40.256: Robot 4 has turned its BOM on.
+2:40.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:40.416: Robot 10 has turned its BOM on.
+2:40.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:40.528: Robot 3 has turned its BOM on.
+2:40.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:40.696: Robot 4 has turned its BOM on.
+2:40.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:40.860: Robot 10 has turned its BOM on.
+2:40.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:40.972: Robot 3 has turned its BOM on.
+2:41.084: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:41.140: Robot 4 has turned its BOM on.
+2:41.252: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:41.304: Robot 10 has turned its BOM on.
+2:41.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:41.472: Robot 3 has turned its BOM on.
+2:41.528: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:41.584: Robot 4 has turned its BOM on.
+2:41.696: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:41.752: Robot 10 has turned its BOM on.
+2:41.860: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:41.916: Robot 3 has turned its BOM on.
+2:41.972: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:42.028: Robot 4 has turned its BOM on.
+2:42.140: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:42.196: Robot 10 has turned its BOM on.
+2:42.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:42.360: Robot 3 has turned its BOM on.
+2:42.416: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:42.472: Robot 4 has turned its BOM on.
+2:42.584: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:42.640: Robot 10 has turned its BOM on.
+2:42.752: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:42.804: Robot 3 has turned its BOM on.
+2:42.860: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:42.916: Robot 4 has turned its BOM on.
+2:43.032: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:43.088: Robot 10 has turned its BOM on.
+2:43.200: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:43.256: Robot 3 has turned its BOM on.
+2:43.308: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:43.364: Robot 4 has turned its BOM on.
+2:43.476: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:43.532: Robot 10 has turned its BOM on.
+2:43.648: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:43.704: Robot 3 has turned its BOM on.
+2:43.760: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:43.804: Robot 4 has turned its BOM on.
+2:43.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:43.972: Robot 10 has turned its BOM on.
+2:44.084: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:44.140: Robot 3 has turned its BOM on.
+2:44.196: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:44.252: Robot 4 has turned its BOM on.
+2:44.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:44.416: Robot 10 has turned its BOM on.
+2:44.528: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:44.584: Robot 3 has turned its BOM on.
+2:44.696: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:44.752: Robot 4 has turned its BOM on.
+2:44.808: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:44.864: Robot 10 has turned its BOM on.
+2:44.976: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:45.035: Robot 3 has turned its BOM on.
+2:45.144: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:45.200: Robot 4 has turned its BOM on.
+2:45.256: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:45.304: Robot 10 has turned its BOM on.
+2:45.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:45.472: Robot 3 has turned its BOM on.
+2:45.584: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:45.640: Robot 4 has turned its BOM on.
+2:45.696: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:45.752: Robot 10 has turned its BOM on.
+2:45.864: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:45.920: Robot 3 has turned its BOM on.
+2:46.032: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:46.088: Robot 4 has turned its BOM on.
+2:46.144: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:46.200: Robot 10 has turned its BOM on.
+2:46.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:46.360: Robot 3 has turned its BOM on.
+2:46.472: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:46.528: Robot 4 has turned its BOM on.
+2:46.584: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:46.640: Robot 10 has turned its BOM on.
+2:46.752: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:46.804: Robot 3 has turned its BOM on.
+2:46.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:46.972: Robot 4 has turned its BOM on.
+2:47.032: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:47.088: Robot 10 has turned its BOM on.
+2:47.200: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:47.256: Robot 3 has turned its BOM on.
+2:47.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:47.416: Robot 4 has turned its BOM on.
+2:47.528: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:47.584: Robot 10 has turned its BOM on.
+2:47.640: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:47.696: Robot 3 has turned its BOM on.
+2:47.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:47.860: Robot 4 has turned its BOM on.
+2:47.972: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:48.028: Robot 10 has turned its BOM on.
+2:48.092: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:48.148: Robot 3 has turned its BOM on.
+2:48.260: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:48.304: Robot 4 has turned its BOM on.
+2:48.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:48.472: Robot 10 has turned its BOM on.
+2:48.528: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:48.584: Robot 3 has turned its BOM on.
+2:48.696: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:48.752: Robot 4 has turned its BOM on.
+2:48.864: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:48.920: Robot 10 has turned its BOM on.
+2:48.976: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:49.035: Robot 3 has turned its BOM on.
+2:49.144: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:49.200: Robot 4 has turned its BOM on.
+2:49.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:49.360: Robot 10 has turned its BOM on.
+2:49.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:49.472: Robot 3 has turned its BOM on.
+2:49.584: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:49.640: Robot 4 has turned its BOM on.
+2:49.752: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:49.804: Robot 10 has turned its BOM on.
+2:49.864: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:49.920: Robot 3 has turned its BOM on.
+2:50.032: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:50.088: Robot 4 has turned its BOM on.
+2:50.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:50.256: Robot 10 has turned its BOM on.
+2:50.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:50.416: Robot 3 has turned its BOM on.
+2:50.472: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:50.528: Robot 4 has turned its BOM on.
+2:50.640: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:50.696: Robot 10 has turned its BOM on.
+2:50.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:50.804: Robot 3 has turned its BOM on.
+2:50.920: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:50.976: Robot 4 has turned its BOM on.
+2:51.088: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:51.260: Robot 3 has turned its BOM on.
+2:51.365: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:51.420: Robot 4 has turned its BOM on.
+2:51.532: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:51.588: Robot 10 has turned its BOM on.
+2:51.700: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:51.756: Robot 3 has turned its BOM on.
+2:51.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:51.860: Robot 4 has turned its BOM on.
+2:51.972: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:52.028: Robot 10 has turned its BOM on.
+2:52.140: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:52.196: Robot 3 has turned its BOM on.
+2:52.252: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:52.304: Robot 4 has turned its BOM on.
+2:52.420: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:52.476: Robot 10 has turned its BOM on.
+2:52.588: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:52.644: Robot 3 has turned its BOM on.
+2:52.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:52.756: Robot 4 has turned its BOM on.
+2:52.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:52.916: Robot 10 has turned its BOM on.
+2:53.028: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:53.084: Robot 3 has turned its BOM on.
+2:53.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:53.196: Robot 4 has turned its BOM on.
+2:53.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:53.360: Robot 10 has turned its BOM on.
+2:53.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:53.528: Robot 3 has turned its BOM on.
+2:53.588: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:53.644: Robot 4 has turned its BOM on.
+2:53.756: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:53.804: Robot 10 has turned its BOM on.
+2:53.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:53.972: Robot 3 has turned its BOM on.
+2:54.084: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:54.140: Robot 4 has turned its BOM on.
+2:54.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:54.256: Robot 10 has turned its BOM on.
+2:54.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:54.416: Robot 3 has turned its BOM on.
+2:54.528: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:54.584: Robot 4 has turned its BOM on.
+2:54.644: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:54.700: Robot 10 has turned its BOM on.
+2:54.804: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:54.860: Robot 3 has turned its BOM on.
+2:54.972: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:55.028: Robot 4 has turned its BOM on.
+2:55.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:55.140: Robot 10 has turned its BOM on.
+2:55.252: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:55.304: Robot 3 has turned its BOM on.
+2:55.420: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:55.476: Robot 4 has turned its BOM on.
+2:55.532: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:55.588: Robot 10 has turned its BOM on.
+2:55.704: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:55.760: Robot 3 has turned its BOM on.
+2:55.860: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:55.916: Robot 4 has turned its BOM on.
+2:55.972: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:56.028: Robot 10 has turned its BOM on.
+2:56.140: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:56.196: Robot 3 has turned its BOM on.
+2:56.308: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:56.367: Robot 4 has turned its BOM on.
+2:56.420: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:56.476: Robot 10 has turned its BOM on.
+2:56.588: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:56.644: Robot 3 has turned its BOM on.
+2:56.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:56.804: Robot 4 has turned its BOM on.
+2:56.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:56.972: Robot 10 has turned its BOM on.
+2:57.035: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:57.088: Robot 3 has turned its BOM on.
+2:57.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:57.256: Robot 4 has turned its BOM on.
+2:57.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:57.416: Robot 10 has turned its BOM on.
+2:57.476: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:57.532: Robot 3 has turned its BOM on.
+2:57.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:57.700: Robot 4 has turned its BOM on.
+2:57.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:57.860: Robot 10 has turned its BOM on.
+2:57.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:57.972: Robot 3 has turned its BOM on.
+2:58.084: Robot 4 has turned its BOM on.
+2:58.252: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:58.304: Robot 10 has turned its BOM on.
+2:58.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:58.416: Robot 3 has turned its BOM on.
+2:58.532: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:58.588: Robot 4 has turned its BOM on.
+2:58.700: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:58.756: Robot 10 has turned its BOM on.
+2:58.804: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:58.860: Robot 3 has turned its BOM on.
+2:59.031: Robot 4 has turned its BOM on.
+2:59.140: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:59.196: Robot 10 has turned its BOM on.
+2:59.256: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:59.304: Robot 3 has turned its BOM on.
+2:59.416: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:59.472: Robot 4 has turned its BOM on.
+2:59.588: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+2:59.644: Robot 10 has turned its BOM on.
+2:59.707: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+2:59.760: Robot 3 has turned its BOM on.
+2:59.860: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+2:59.916: Robot 4 has turned its BOM on.
+3:00.028: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:00.084: Robot 10 has turned its BOM on.
+3:00.196: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:00.252: Robot 3 has turned its BOM on.
+3:00.304: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:00.363: Robot 4 has turned its BOM on.
+3:00.472: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:00.528: Robot 10 has turned its BOM on.
+3:00.640: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:00.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:00.804: Robot 4 has turned its BOM on.
+3:00.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:00.972: Robot 10 has turned its BOM on.
+3:01.088: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:01.144: Robot 3 has turned its BOM on.
+3:01.204: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:01.260: Robot 4 has turned its BOM on.
+3:01.364: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:01.420: Robot 10 has turned its BOM on.
+3:01.532: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:01.589: Robot 3 has turned its BOM on.
+3:01.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:01.700: Robot 4 has turned its BOM on.
+3:01.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:01.860: Robot 10 has turned its BOM on.
+3:01.972: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:02.028: Robot 3 has turned its BOM on.
+3:02.084: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:02.140: Robot 4 has turned its BOM on.
+3:02.252: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:02.304: Robot 10 has turned its BOM on.
+3:02.420: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:02.476: Robot 3 has turned its BOM on.
+3:02.532: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:02.588: Robot 4 has turned its BOM on.
+3:02.700: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:02.756: Robot 10 has turned its BOM on.
+3:02.860: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:02.916: Robot 3 has turned its BOM on.
+3:03.031: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:03.084: Robot 4 has turned its BOM on.
+3:03.140: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:03.196: Robot 10 has turned its BOM on.
+3:03.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:03.360: Robot 3 has turned its BOM on.
+3:03.472: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:03.528: Robot 4 has turned its BOM on.
+3:03.588: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:03.644: Robot 10 has turned its BOM on.
+3:03.756: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:03.804: Robot 3 has turned its BOM on.
+3:03.920: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:03.976: Robot 4 has turned its BOM on.
+3:04.036: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:04.095: Robot 10 has turned its BOM on.
+3:04.204: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:04.260: Robot 3 has turned its BOM on.
+3:04.367: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:04.420: Robot 4 has turned its BOM on.
+3:04.477: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:04.532: Robot 10 has turned its BOM on.
+3:04.644: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:04.700: Robot 3 has turned its BOM on.
+3:04.808: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:04.864: Robot 4 has turned its BOM on.
+3:04.920: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:04.976: Robot 10 has turned its BOM on.
+3:05.092: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:05.148: Robot 3 has turned its BOM on.
+3:05.260: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:05.304: Robot 4 has turned its BOM on.
+3:05.364: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:05.420: Robot 10 has turned its BOM on.
+3:05.532: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:05.588: Robot 3 has turned its BOM on.
+3:05.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:05.756: Robot 4 has turned its BOM on.
+3:05.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:05.916: Robot 10 has turned its BOM on.
+3:05.972: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:06.028: Robot 3 has turned its BOM on.
+3:06.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:06.196: Robot 4 has turned its BOM on.
+3:06.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:06.363: Robot 10 has turned its BOM on.
+3:06.416: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:06.472: Robot 3 has turned its BOM on.
+3:06.584: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:06.640: Robot 4 has turned its BOM on.
+3:06.752: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:06.804: Robot 10 has turned its BOM on.
+3:06.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:06.972: Robot 3 has turned its BOM on.
+3:07.035: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:07.088: Robot 4 has turned its BOM on.
+3:07.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:07.256: Robot 10 has turned its BOM on.
+3:07.304: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:07.360: Robot 3 has turned its BOM on.
+3:07.476: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:07.532: Robot 4 has turned its BOM on.
+3:07.644: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:07.700: Robot 10 has turned its BOM on.
+3:07.764: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:07.804: Robot 3 has turned its BOM on.
+3:07.916: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:07.972: Robot 4 has turned its BOM on.
+3:08.084: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:08.140: Robot 10 has turned its BOM on.
+3:08.196: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:08.252: Robot 3 has turned its BOM on.
+3:08.360: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:08.416: Robot 4 has turned its BOM on.
+3:08.536: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:08.592: Robot 10 has turned its BOM on.
+3:08.648: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:08.704: Robot 3 has turned its BOM on.
+3:08.804: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:08.860: Robot 4 has turned its BOM on.
+3:08.976: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:09.032: Robot 10 has turned its BOM on.
+3:09.088: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:09.144: Robot 3 has turned its BOM on.
+3:09.256: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:09.304: Robot 4 has turned its BOM on.
+3:09.416: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:09.472: Robot 10 has turned its BOM on.
+3:09.584: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:09.640: Robot 3 has turned its BOM on.
+3:09.703: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:09.756: Robot 4 has turned its BOM on.
+3:09.860: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:09.916: Robot 10 has turned its BOM on.
+3:10.029: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:10.084: Robot 3 has turned its BOM on.
+3:10.140: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:10.196: Robot 4 has turned its BOM on.
+3:10.304: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:10.363: Robot 10 has turned its BOM on.
+3:10.472: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:10.528: Robot 3 has turned its BOM on.
+3:10.640: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:10.696: Robot 4 has turned its BOM on.
+3:10.752: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:10.804: Robot 10 has turned its BOM on.
+3:10.920: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:10.976: Robot 3 has turned its BOM on.
+3:11.088: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:11.144: Robot 4 has turned its BOM on.
+3:11.200: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:11.256: Robot 10 has turned its BOM on.
+3:11.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:11.416: Robot 3 has turned its BOM on.
+3:11.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:11.528: Robot 4 has turned its BOM on.
+3:11.640: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:11.696: Robot 10 has turned its BOM on.
+3:11.812: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:11.868: Robot 3 has turned its BOM on.
+3:11.924: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:11.980: Robot 4 has turned its BOM on.
+3:12.100: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:12.156: Robot 10 has turned its BOM on.
+3:12.268: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:12.304: Robot 3 has turned its BOM on.
+3:12.416: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:12.472: Robot 4 has turned its BOM on.
+3:12.592: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:12.648: Robot 10 has turned its BOM on.
+3:12.704: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:12.760: Robot 3 has turned its BOM on.
+3:12.860: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:12.916: Robot 4 has turned its BOM on.
+3:12.976: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:13.032: Robot 10 has turned its BOM on.
+3:13.144: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:13.200: Robot 3 has turned its BOM on.
+3:13.307: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:13.360: Robot 4 has turned its BOM on.
+3:13.472: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:13.528: Robot 10 has turned its BOM on.
+3:13.585: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:13.640: Robot 3 has turned its BOM on.
+3:13.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:13.804: Robot 4 has turned its BOM on.
+3:13.916: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:13.972: Robot 10 has turned its BOM on.
+3:14.032: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:14.089: Robot 3 has turned its BOM on.
+3:14.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:14.256: Robot 4 has turned its BOM on.
+3:14.360: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:14.416: Robot 10 has turned its BOM on.
+3:14.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:14.528: Robot 3 has turned its BOM on.
+3:14.641: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:14.697: Robot 4 has turned its BOM on.
+3:14.804: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:14.860: Robot 10 has turned its BOM on.
+3:14.916: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:14.972: Robot 3 has turned its BOM on.
+3:15.088: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:15.144: Robot 4 has turned its BOM on.
+3:15.257: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:15.304: Robot 10 has turned its BOM on.
+3:15.360: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:15.416: Robot 3 has turned its BOM on.
+3:15.528: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:15.584: Robot 4 has turned its BOM on.
+3:15.696: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:15.753: Robot 10 has turned its BOM on.
+3:15.808: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:15.864: Robot 3 has turned its BOM on.
+3:15.976: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:16.032: Robot 4 has turned its BOM on.
+3:16.144: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:16.200: Robot 10 has turned its BOM on.
+3:16.256: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:16.304: Robot 3 has turned its BOM on.
+3:16.421: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:16.476: Robot 4 has turned its BOM on.
+3:16.589: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:16.644: Robot 10 has turned its BOM on.
+3:16.704: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:16.760: Robot 3 has turned its BOM on.
+3:16.917: Robot 4 has turned its BOM on.
+3:17.032: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:17.089: Robot 10 has turned its BOM on.
+3:17.200: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:17.257: Robot 3 has turned its BOM on.
+3:17.360: Robot 4 has turned its BOM on.
+3:17.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:17.528: Robot 10 has turned its BOM on.
+3:17.644: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:17.804: Robot 4 has turned its BOM on.
+3:17.920: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:17.976: Robot 10 has turned its BOM on.
+3:18.092: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:18.145: Robot 3 has turned its BOM on.
+3:18.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:18.256: Robot 4 has turned its BOM on.
+3:18.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:18.417: Robot 10 has turned its BOM on.
+3:18.528: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:18.584: Robot 3 has turned its BOM on.
+3:18.640: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:18.696: Robot 4 has turned its BOM on.
+3:18.805: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:18.861: Robot 10 has turned its BOM on.
+3:18.973: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:19.029: Robot 3 has turned its BOM on.
+3:19.089: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:19.145: Robot 4 has turned its BOM on.
+3:19.257: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:19.305: Robot 10 has turned its BOM on.
+3:19.417: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:19.473: Robot 3 has turned its BOM on.
+3:19.585: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:19.641: Robot 4 has turned its BOM on.
+3:19.697: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:19.753: Robot 10 has turned its BOM on.
+3:19.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:19.917: Robot 3 has turned its BOM on.
+3:20.029: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:20.085: Robot 4 has turned its BOM on.
+3:20.145: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:20.201: Robot 10 has turned its BOM on.
+3:20.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:20.361: Robot 3 has turned its BOM on.
+3:20.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:20.529: Robot 4 has turned its BOM on.
+3:20.585: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:20.641: Robot 10 has turned its BOM on.
+3:20.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:20.805: Robot 3 has turned its BOM on.
+3:20.921: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:20.977: Robot 4 has turned its BOM on.
+3:21.033: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:21.089: Robot 10 has turned its BOM on.
+3:21.201: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:21.257: Robot 3 has turned its BOM on.
+3:21.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:21.417: Robot 4 has turned its BOM on.
+3:21.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:21.529: Robot 10 has turned its BOM on.
+3:21.641: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:21.697: Robot 3 has turned its BOM on.
+3:21.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:21.861: Robot 4 has turned its BOM on.
+3:21.921: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:21.977: Robot 10 has turned its BOM on.
+3:22.092: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:22.145: Robot 3 has turned its BOM on.
+3:22.257: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:22.305: Robot 4 has turned its BOM on.
+3:22.417: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:22.473: Robot 10 has turned its BOM on.
+3:22.529: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:22.585: Robot 3 has turned its BOM on.
+3:22.697: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:22.753: Robot 4 has turned its BOM on.
+3:22.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:22.917: Robot 10 has turned its BOM on.
+3:22.977: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:23.033: Robot 3 has turned its BOM on.
+3:23.145: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:23.201: Robot 4 has turned its BOM on.
+3:23.305: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:23.361: Robot 10 has turned its BOM on.
+3:23.417: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:23.473: Robot 3 has turned its BOM on.
+3:23.585: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:23.641: Robot 4 has turned its BOM on.
+3:23.753: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:23.805: Robot 10 has turned its BOM on.
+3:23.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:23.917: Robot 3 has turned its BOM on.
+3:24.029: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:24.085: Robot 4 has turned its BOM on.
+3:24.201: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:24.257: Robot 10 has turned its BOM on.
+3:24.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:24.361: Robot 3 has turned its BOM on.
+3:24.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:24.529: Robot 4 has turned its BOM on.
+3:24.641: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:24.697: Robot 10 has turned its BOM on.
+3:24.756: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:24.805: Robot 3 has turned its BOM on.
+3:24.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:24.973: Robot 4 has turned its BOM on.
+3:25.085: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:25.141: Robot 10 has turned its BOM on.
+3:25.197: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:25.253: Robot 3 has turned its BOM on.
+3:25.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:25.417: Robot 4 has turned its BOM on.
+3:25.529: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:25.585: Robot 10 has turned its BOM on.
+3:25.697: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:25.809: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:25.865: Robot 4 has turned its BOM on.
+3:25.977: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:26.033: Robot 10 has turned its BOM on.
+3:26.100: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:26.153: Robot 3 has turned its BOM on.
+3:26.269: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:26.305: Robot 4 has turned its BOM on.
+3:26.417: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:26.473: Robot 10 has turned its BOM on.
+3:26.585: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:26.641: Robot 3 has turned its BOM on.
+3:26.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:26.757: Robot 4 has turned its BOM on.
+3:26.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:26.917: Robot 10 has turned its BOM on.
+3:27.029: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:27.085: Robot 3 has turned its BOM on.
+3:27.141: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:27.197: Robot 4 has turned its BOM on.
+3:27.309: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:27.365: Robot 10 has turned its BOM on.
+3:27.481: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:27.537: Robot 3 has turned its BOM on.
+3:27.597: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:27.653: Robot 4 has turned its BOM on.
+3:27.765: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:27.805: Robot 10 has turned its BOM on.
+3:27.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:27.973: Robot 3 has turned its BOM on.
+3:28.029: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:28.088: Robot 4 has turned its BOM on.
+3:28.197: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:28.253: Robot 10 has turned its BOM on.
+3:28.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:28.417: Robot 3 has turned its BOM on.
+3:28.477: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:28.533: Robot 4 has turned its BOM on.
+3:28.645: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:28.701: Robot 10 has turned its BOM on.
+3:28.805: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:28.861: Robot 3 has turned its BOM on.
+3:28.973: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:29.029: Robot 4 has turned its BOM on.
+3:29.085: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:29.141: Robot 10 has turned its BOM on.
+3:29.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:29.305: Robot 3 has turned its BOM on.
+3:29.417: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:29.473: Robot 4 has turned its BOM on.
+3:29.533: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:29.589: Robot 10 has turned its BOM on.
+3:29.701: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:29.757: Robot 3 has turned its BOM on.
+3:29.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:29.917: Robot 4 has turned its BOM on.
+3:29.973: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:30.029: Robot 10 has turned its BOM on.
+3:30.141: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:30.197: Robot 3 has turned its BOM on.
+3:30.305: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:30.361: Robot 4 has turned its BOM on.
+3:30.417: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:30.473: Robot 10 has turned its BOM on.
+3:30.589: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:30.645: Robot 3 has turned its BOM on.
+3:30.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:30.805: Robot 4 has turned its BOM on.
+3:30.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:30.917: Robot 10 has turned its BOM on.
+3:31.037: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:31.093: Robot 3 has turned its BOM on.
+3:31.205: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:31.261: Robot 4 has turned its BOM on.
+3:31.309: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:31.365: Robot 10 has turned its BOM on.
+3:31.477: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:31.533: Robot 3 has turned its BOM on.
+3:31.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:31.701: Robot 4 has turned its BOM on.
+3:31.757: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:31.805: Robot 10 has turned its BOM on.
+3:31.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:31.973: Robot 3 has turned its BOM on.
+3:32.088: Robot 4 has turned its BOM on.
+3:32.253: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:32.305: Robot 10 has turned its BOM on.
+3:32.365: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:32.421: Robot 3 has turned its BOM on.
+3:32.533: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:32.589: Robot 4 has turned its BOM on.
+3:32.701: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:32.757: Robot 10 has turned its BOM on.
+3:32.805: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:32.861: Robot 3 has turned its BOM on.
+3:32.973: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:33.029: Robot 4 has turned its BOM on.
+3:33.141: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:33.197: Robot 10 has turned its BOM on.
+3:33.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:33.305: Robot 3 has turned its BOM on.
+3:33.425: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:33.481: Robot 4 has turned its BOM on.
+3:33.593: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:33.649: Robot 10 has turned its BOM on.
+3:33.709: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:33.765: Robot 3 has turned its BOM on.
+3:33.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:33.917: Robot 4 has turned its BOM on.
+3:34.029: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:34.088: Robot 10 has turned its BOM on.
+3:34.141: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:34.197: Robot 3 has turned its BOM on.
+3:34.305: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:34.361: Robot 4 has turned its BOM on.
+3:34.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:34.529: Robot 10 has turned its BOM on.
+3:34.589: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:34.645: Robot 3 has turned its BOM on.
+3:34.760: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:34.805: Robot 4 has turned its BOM on.
+3:34.917: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:34.973: Robot 10 has turned its BOM on.
+3:35.085: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:35.197: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:35.253: Robot 4 has turned its BOM on.
+3:35.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:35.420: Robot 10 has turned its BOM on.
+3:35.529: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:35.585: Robot 3 has turned its BOM on.
+3:35.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:35.701: Robot 4 has turned its BOM on.
+3:35.805: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:35.861: Robot 10 has turned its BOM on.
+3:35.973: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:36.029: Robot 3 has turned its BOM on.
+3:36.088: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:36.141: Robot 4 has turned its BOM on.
+3:36.257: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:36.305: Robot 10 has turned its BOM on.
+3:36.421: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:36.477: Robot 3 has turned its BOM on.
+3:36.533: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:36.589: Robot 4 has turned its BOM on.
+3:36.701: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:36.757: Robot 10 has turned its BOM on.
+3:36.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:36.917: Robot 3 has turned its BOM on.
+3:36.973: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:37.029: Robot 4 has turned its BOM on.
+3:37.141: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:37.197: Robot 10 has turned its BOM on.
+3:37.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:37.361: Robot 3 has turned its BOM on.
+3:37.425: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:37.481: Robot 4 has turned its BOM on.
+3:37.597: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:37.653: Robot 10 has turned its BOM on.
+3:37.765: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:37.805: Robot 3 has turned its BOM on.
+3:37.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:37.973: Robot 4 has turned its BOM on.
+3:38.029: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:38.088: Robot 10 has turned its BOM on.
+3:38.197: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:38.361: Robot 4 has turned its BOM on.
+3:38.477: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:38.533: Robot 10 has turned its BOM on.
+3:38.645: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:38.701: Robot 3 has turned its BOM on.
+3:38.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:38.861: Robot 4 has turned its BOM on.
+3:38.917: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:38.973: Robot 10 has turned its BOM on.
+3:39.085: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:39.141: Robot 3 has turned its BOM on.
+3:39.253: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:39.305: Robot 4 has turned its BOM on.
+3:39.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:39.420: Robot 10 has turned its BOM on.
+3:39.533: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:39.589: Robot 3 has turned its BOM on.
+3:39.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:39.757: Robot 4 has turned its BOM on.
+3:39.805: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:39.861: Robot 10 has turned its BOM on.
+3:39.973: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:40.029: Robot 3 has turned its BOM on.
+3:40.141: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:40.197: Robot 4 has turned its BOM on.
+3:40.253: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:40.305: Robot 10 has turned its BOM on.
+3:40.417: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:40.473: Robot 3 has turned its BOM on.
+3:40.589: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:40.645: Robot 4 has turned its BOM on.
+3:40.701: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:40.757: Robot 10 has turned its BOM on.
+3:40.865: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:40.921: Robot 3 has turned its BOM on.
+3:41.033: Robot 4 has turned its BOM on.
+3:41.149: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:41.205: Robot 10 has turned its BOM on.
+3:41.309: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:41.365: Robot 3 has turned its BOM on.
+3:41.477: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:41.533: Robot 4 has turned its BOM on.
+3:41.645: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:41.701: Robot 10 has turned its BOM on.
+3:41.757: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:41.805: Robot 3 has turned its BOM on.
+3:41.921: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:41.977: Robot 4 has turned its BOM on.
+3:42.089: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:42.145: Robot 10 has turned its BOM on.
+3:42.205: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:42.261: Robot 3 has turned its BOM on.
+3:42.365: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:42.421: Robot 4 has turned its BOM on.
+3:42.537: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:42.593: Robot 10 has turned its BOM on.
+3:42.653: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:42.709: Robot 3 has turned its BOM on.
+3:42.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:42.861: Robot 4 has turned its BOM on.
+3:42.973: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:43.029: Robot 10 has turned its BOM on.
+3:43.085: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:43.141: Robot 3 has turned its BOM on.
+3:43.253: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:43.305: Robot 4 has turned its BOM on.
+3:43.421: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:43.477: Robot 10 has turned its BOM on.
+3:43.533: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:43.589: Robot 3 has turned its BOM on.
+3:43.705: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:43.761: Robot 4 has turned its BOM on.
+3:43.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:43.917: Robot 10 has turned its BOM on.
+3:43.973: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:44.029: Robot 3 has turned its BOM on.
+3:44.141: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:44.197: Robot 4 has turned its BOM on.
+3:44.305: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:44.361: Robot 10 has turned its BOM on.
+3:44.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:44.529: Robot 3 has turned its BOM on.
+3:44.585: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:44.641: Robot 4 has turned its BOM on.
+3:44.753: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:44.805: Robot 10 has turned its BOM on.
+3:44.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:44.973: Robot 3 has turned its BOM on.
+3:45.033: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:45.089: Robot 4 has turned its BOM on.
+3:45.205: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:45.261: Robot 10 has turned its BOM on.
+3:45.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:45.417: Robot 3 has turned its BOM on.
+3:45.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:45.529: Robot 4 has turned its BOM on.
+3:45.645: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:45.701: Robot 10 has turned its BOM on.
+3:45.805: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:45.861: Robot 3 has turned its BOM on.
+3:45.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:45.973: Robot 4 has turned its BOM on.
+3:46.089: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:46.145: Robot 10 has turned its BOM on.
+3:46.261: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:46.305: Robot 3 has turned its BOM on.
+3:46.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:46.417: Robot 4 has turned its BOM on.
+3:46.529: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:46.585: Robot 10 has turned its BOM on.
+3:46.697: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:46.753: Robot 3 has turned its BOM on.
+3:46.809: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:46.865: Robot 4 has turned its BOM on.
+3:46.977: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:47.033: Robot 10 has turned its BOM on.
+3:47.156: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:47.209: Robot 3 has turned its BOM on.
+3:47.265: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:47.305: Robot 4 has turned its BOM on.
+3:47.421: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:47.477: Robot 10 has turned its BOM on.
+3:47.589: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:47.645: Robot 3 has turned its BOM on.
+3:47.705: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:47.761: Robot 4 has turned its BOM on.
+3:47.865: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:47.921: Robot 10 has turned its BOM on.
+3:48.033: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:48.089: Robot 3 has turned its BOM on.
+3:48.201: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:48.257: Robot 4 has turned its BOM on.
+3:48.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:48.417: Robot 10 has turned its BOM on.
+3:48.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:48.529: Robot 3 has turned its BOM on.
+3:48.641: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:48.697: Robot 4 has turned its BOM on.
+3:48.753: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:48.805: Robot 10 has turned its BOM on.
+3:48.921: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:48.977: Robot 3 has turned its BOM on.
+3:49.093: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:49.149: Robot 4 has turned its BOM on.
+3:49.209: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:49.265: Robot 10 has turned its BOM on.
+3:49.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:49.417: Robot 3 has turned its BOM on.
+3:49.529: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:49.585: Robot 4 has turned its BOM on.
+3:49.641: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:49.697: Robot 10 has turned its BOM on.
+3:49.805: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:49.861: Robot 3 has turned its BOM on.
+3:49.973: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:50.029: Robot 4 has turned its BOM on.
+3:50.085: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:50.141: Robot 10 has turned its BOM on.
+3:50.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:50.305: Robot 3 has turned its BOM on.
+3:50.417: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:50.473: Robot 4 has turned its BOM on.
+3:50.585: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:50.641: Robot 10 has turned its BOM on.
+3:50.697: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:50.753: Robot 3 has turned its BOM on.
+3:50.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:50.917: Robot 4 has turned its BOM on.
+3:51.029: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:51.085: Robot 10 has turned its BOM on.
+3:51.145: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:51.201: Robot 3 has turned its BOM on.
+3:51.309: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:51.365: Robot 4 has turned its BOM on.
+3:51.477: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:51.533: Robot 10 has turned its BOM on.
+3:51.593: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:51.649: Robot 3 has turned its BOM on.
+3:51.761: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:51.805: Robot 4 has turned its BOM on.
+3:51.921: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:51.977: Robot 10 has turned its BOM on.
+3:52.033: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:52.089: Robot 3 has turned its BOM on.
+3:52.201: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:52.257: Robot 4 has turned its BOM on.
+3:52.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:52.417: Robot 10 has turned its BOM on.
+3:52.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:52.529: Robot 3 has turned its BOM on.
+3:52.641: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:52.697: Robot 4 has turned its BOM on.
+3:52.809: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:52.865: Robot 10 has turned its BOM on.
+3:52.921: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:52.977: Robot 3 has turned its BOM on.
+3:53.089: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:53.148: Robot 4 has turned its BOM on.
+3:53.261: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:53.305: Robot 10 has turned its BOM on.
+3:53.417: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:53.473: Robot 3 has turned its BOM on.
+3:53.529: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:53.585: Robot 4 has turned its BOM on.
+3:53.697: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:53.753: Robot 10 has turned its BOM on.
+3:53.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:53.917: Robot 3 has turned its BOM on.
+3:53.977: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:54.033: Robot 4 has turned its BOM on.
+3:54.145: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:54.201: Robot 10 has turned its BOM on.
+3:54.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:54.361: Robot 3 has turned its BOM on.
+3:54.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:54.529: Robot 4 has turned its BOM on.
+3:54.585: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:54.641: Robot 10 has turned its BOM on.
+3:54.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:54.805: Robot 3 has turned its BOM on.
+3:54.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:54.973: Robot 4 has turned its BOM on.
+3:55.033: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:55.089: Robot 10 has turned its BOM on.
+3:55.205: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:55.261: Robot 3 has turned its BOM on.
+3:55.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:55.417: Robot 4 has turned its BOM on.
+3:55.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:55.529: Robot 10 has turned its BOM on.
+3:55.641: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:55.697: Robot 3 has turned its BOM on.
+3:55.753: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:55.805: Robot 4 has turned its BOM on.
+3:55.917: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:55.973: Robot 10 has turned its BOM on.
+3:56.089: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:56.145: Robot 3 has turned its BOM on.
+3:56.201: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:56.257: Robot 4 has turned its BOM on.
+3:56.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:56.417: Robot 10 has turned its BOM on.
+3:56.529: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:56.585: Robot 3 has turned its BOM on.
+3:56.697: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:56.753: Robot 4 has turned its BOM on.
+3:56.809: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:56.865: Robot 10 has turned its BOM on.
+3:56.977: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:57.033: Robot 3 has turned its BOM on.
+3:57.148: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:57.201: Robot 4 has turned its BOM on.
+3:57.261: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:57.305: Robot 10 has turned its BOM on.
+3:57.418: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:57.473: Robot 3 has turned its BOM on.
+3:57.585: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:57.641: Robot 4 has turned its BOM on.
+3:57.753: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:57.805: Robot 10 has turned its BOM on.
+3:57.865: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:57.922: Robot 3 has turned its BOM on.
+3:58.033: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:58.089: Robot 4 has turned its BOM on.
+3:58.201: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:58.257: Robot 10 has turned its BOM on.
+3:58.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:58.361: Robot 3 has turned its BOM on.
+3:58.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:58.529: Robot 4 has turned its BOM on.
+3:58.641: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:58.697: Robot 10 has turned its BOM on.
+3:58.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:58.805: Robot 3 has turned its BOM on.
+3:58.921: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:58.977: Robot 4 has turned its BOM on.
+3:59.089: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:59.145: Robot 10 has turned its BOM on.
+3:59.201: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:59.257: Robot 3 has turned its BOM on.
+3:59.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:59.417: Robot 4 has turned its BOM on.
+3:59.529: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+3:59.585: Robot 10 has turned its BOM on.
+3:59.641: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+3:59.697: Robot 3 has turned its BOM on.
+3:59.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+3:59.861: Robot 4 has turned its BOM on.
+3:59.977: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:00.033: Robot 10 has turned its BOM on.
+4:00.089: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:00.145: Robot 3 has turned its BOM on.
+4:00.257: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:00.305: Robot 4 has turned its BOM on.
+4:00.417: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:00.473: Robot 10 has turned its BOM on.
+4:00.585: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:00.641: Robot 3 has turned its BOM on.
+4:00.697: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:00.753: Robot 4 has turned its BOM on.
+4:00.865: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:00.921: Robot 10 has turned its BOM on.
+4:00.985: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:01.041: Robot 3 has turned its BOM on.
+4:01.161: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:01.217: Robot 4 has turned its BOM on.
+4:01.273: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:01.305: Robot 10 has turned its BOM on.
+4:01.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:01.529: Robot 3 has turned its BOM on.
+4:01.585: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:01.641: Robot 4 has turned its BOM on.
+4:01.753: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:01.805: Robot 10 has turned its BOM on.
+4:01.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:01.973: Robot 3 has turned its BOM on.
+4:02.029: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:02.085: Robot 4 has turned its BOM on.
+4:02.201: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:02.257: Robot 10 has turned its BOM on.
+4:02.309: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:02.365: Robot 3 has turned its BOM on.
+4:02.480: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:02.533: Robot 4 has turned its BOM on.
+4:02.645: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:02.701: Robot 10 has turned its BOM on.
+4:02.761: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:02.805: Robot 3 has turned its BOM on.
+4:02.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:02.973: Robot 4 has turned its BOM on.
+4:03.085: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:03.144: Robot 10 has turned its BOM on.
+4:03.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:03.305: Robot 3 has turned its BOM on.
+4:03.365: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:03.421: Robot 4 has turned its BOM on.
+4:03.533: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:03.589: Robot 10 has turned its BOM on.
+4:03.701: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:03.757: Robot 3 has turned its BOM on.
+4:03.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:03.917: Robot 4 has turned its BOM on.
+4:03.973: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:04.029: Robot 10 has turned its BOM on.
+4:04.141: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:04.197: Robot 3 has turned its BOM on.
+4:04.305: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:04.361: Robot 4 has turned its BOM on.
+4:04.421: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:04.477: Robot 10 has turned its BOM on.
+4:04.589: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:04.645: Robot 3 has turned its BOM on.
+4:04.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:04.805: Robot 4 has turned its BOM on.
+4:04.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:04.917: Robot 10 has turned its BOM on.
+4:05.029: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:05.085: Robot 3 has turned its BOM on.
+4:05.197: Robot 4 has turned its BOM on.
+4:05.305: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:05.361: Robot 10 has turned its BOM on.
+4:05.477: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:05.533: Robot 3 has turned its BOM on.
+4:05.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:05.701: Robot 4 has turned its BOM on.
+4:05.757: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:05.805: Robot 10 has turned its BOM on.
+4:05.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:05.973: Robot 3 has turned its BOM on.
+4:06.085: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:06.141: Robot 4 has turned its BOM on.
+4:06.197: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:06.253: Robot 10 has turned its BOM on.
+4:06.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:06.417: Robot 3 has turned its BOM on.
+4:06.529: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:06.585: Robot 4 has turned its BOM on.
+4:06.645: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:06.701: Robot 10 has turned its BOM on.
+4:06.805: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:06.861: Robot 3 has turned its BOM on.
+4:06.973: Robot 4 has turned its BOM on.
+4:07.144: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:07.197: Robot 10 has turned its BOM on.
+4:07.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:07.305: Robot 3 has turned its BOM on.
+4:07.421: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:07.477: Robot 4 has turned its BOM on.
+4:07.589: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:07.645: Robot 10 has turned its BOM on.
+4:07.701: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:07.757: Robot 3 has turned its BOM on.
+4:07.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:07.917: Robot 4 has turned its BOM on.
+4:08.033: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:08.089: Robot 10 has turned its BOM on.
+4:08.149: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:08.208: Robot 3 has turned its BOM on.
+4:08.309: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:08.365: Robot 4 has turned its BOM on.
+4:08.477: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:08.533: Robot 10 has turned its BOM on.
+4:08.589: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:08.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:08.805: Robot 4 has turned its BOM on.
+4:08.917: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:08.973: Robot 10 has turned its BOM on.
+4:09.033: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:09.089: Robot 3 has turned its BOM on.
+4:09.205: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:09.261: Robot 4 has turned its BOM on.
+4:09.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:09.417: Robot 10 has turned its BOM on.
+4:09.477: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:09.533: Robot 3 has turned its BOM on.
+4:09.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:09.701: Robot 4 has turned its BOM on.
+4:09.808: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:09.861: Robot 10 has turned its BOM on.
+4:09.973: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:10.029: Robot 3 has turned its BOM on.
+4:10.085: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:10.141: Robot 4 has turned its BOM on.
+4:10.253: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:10.305: Robot 10 has turned its BOM on.
+4:10.417: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:10.476: Robot 3 has turned its BOM on.
+4:10.537: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:10.593: Robot 4 has turned its BOM on.
+4:10.705: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:10.761: Robot 10 has turned its BOM on.
+4:10.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:10.917: Robot 3 has turned its BOM on.
+4:10.973: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:11.030: Robot 4 has turned its BOM on.
+4:11.148: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:11.201: Robot 10 has turned its BOM on.
+4:11.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:11.361: Robot 3 has turned its BOM on.
+4:11.417: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:11.473: Robot 4 has turned its BOM on.
+4:11.585: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:11.641: Robot 10 has turned its BOM on.
+4:11.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:11.808: Robot 3 has turned its BOM on.
+4:11.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:11.917: Robot 4 has turned its BOM on.
+4:12.029: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:12.085: Robot 10 has turned its BOM on.
+4:12.197: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:12.253: Robot 3 has turned its BOM on.
+4:12.305: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:12.361: Robot 4 has turned its BOM on.
+4:12.476: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:12.529: Robot 10 has turned its BOM on.
+4:12.641: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:12.697: Robot 3 has turned its BOM on.
+4:12.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:12.805: Robot 4 has turned its BOM on.
+4:12.917: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:12.973: Robot 10 has turned its BOM on.
+4:13.085: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:13.141: Robot 3 has turned its BOM on.
+4:13.253: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:13.305: Robot 4 has turned its BOM on.
+4:13.365: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:13.421: Robot 10 has turned its BOM on.
+4:13.533: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:13.589: Robot 3 has turned its BOM on.
+4:13.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:13.757: Robot 4 has turned its BOM on.
+4:13.808: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:13.861: Robot 10 has turned its BOM on.
+4:13.973: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:14.029: Robot 3 has turned its BOM on.
+4:14.141: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:14.197: Robot 4 has turned its BOM on.
+4:14.253: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:14.305: Robot 10 has turned its BOM on.
+4:14.425: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:14.481: Robot 3 has turned its BOM on.
+4:14.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:14.649: Robot 4 has turned its BOM on.
+4:14.709: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:14.765: Robot 10 has turned its BOM on.
+4:14.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:14.917: Robot 3 has turned its BOM on.
+4:15.029: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:15.085: Robot 4 has turned its BOM on.
+4:15.145: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:15.201: Robot 10 has turned its BOM on.
+4:15.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:15.361: Robot 3 has turned its BOM on.
+4:15.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:15.529: Robot 4 has turned its BOM on.
+4:15.589: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:15.645: Robot 10 has turned its BOM on.
+4:15.757: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:15.808: Robot 3 has turned its BOM on.
+4:15.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:15.973: Robot 4 has turned its BOM on.
+4:16.085: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:16.141: Robot 10 has turned its BOM on.
+4:16.197: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:16.253: Robot 3 has turned its BOM on.
+4:16.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:16.417: Robot 4 has turned its BOM on.
+4:16.541: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:16.597: Robot 10 has turned its BOM on.
+4:16.653: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:16.709: Robot 3 has turned its BOM on.
+4:16.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:16.861: Robot 4 has turned its BOM on.
+4:16.973: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:17.029: Robot 10 has turned its BOM on.
+4:17.085: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:17.141: Robot 3 has turned its BOM on.
+4:17.253: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:17.305: Robot 4 has turned its BOM on.
+4:17.421: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:17.477: Robot 10 has turned its BOM on.
+4:17.533: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:17.589: Robot 3 has turned its BOM on.
+4:17.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:17.757: Robot 4 has turned its BOM on.
+4:17.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:17.917: Robot 10 has turned its BOM on.
+4:17.977: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:18.033: Robot 3 has turned its BOM on.
+4:18.149: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:18.208: Robot 4 has turned its BOM on.
+4:18.305: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:18.361: Robot 10 has turned its BOM on.
+4:18.421: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:18.477: Robot 3 has turned its BOM on.
+4:18.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:18.649: Robot 4 has turned its BOM on.
+4:18.761: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:18.805: Robot 10 has turned its BOM on.
+4:18.865: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:18.921: Robot 3 has turned its BOM on.
+4:19.033: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:19.089: Robot 4 has turned its BOM on.
+4:19.201: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:19.257: Robot 10 has turned its BOM on.
+4:19.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:19.417: Robot 3 has turned its BOM on.
+4:19.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:19.529: Robot 4 has turned its BOM on.
+4:19.641: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:19.697: Robot 10 has turned its BOM on.
+4:19.805: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:19.861: Robot 3 has turned its BOM on.
+4:19.925: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:19.981: Robot 4 has turned its BOM on.
+4:20.093: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:20.149: Robot 10 has turned its BOM on.
+4:20.209: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:20.265: Robot 3 has turned its BOM on.
+4:20.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:20.417: Robot 4 has turned its BOM on.
+4:20.529: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:20.585: Robot 10 has turned its BOM on.
+4:20.697: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:20.753: Robot 3 has turned its BOM on.
+4:20.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:20.861: Robot 4 has turned its BOM on.
+4:20.973: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:21.029: Robot 10 has turned its BOM on.
+4:21.145: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:21.201: Robot 3 has turned its BOM on.
+4:21.257: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:21.305: Robot 4 has turned its BOM on.
+4:21.417: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:21.473: Robot 10 has turned its BOM on.
+4:21.585: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:21.641: Robot 3 has turned its BOM on.
+4:21.697: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:21.753: Robot 4 has turned its BOM on.
+4:21.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:21.917: Robot 10 has turned its BOM on.
+4:22.029: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:22.085: Robot 3 has turned its BOM on.
+4:22.141: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:22.197: Robot 4 has turned its BOM on.
+4:22.305: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:22.361: Robot 10 has turned its BOM on.
+4:22.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:22.529: Robot 3 has turned its BOM on.
+4:22.641: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:22.697: Robot 4 has turned its BOM on.
+4:22.753: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:22.805: Robot 10 has turned its BOM on.
+4:22.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:22.973: Robot 3 has turned its BOM on.
+4:23.037: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:23.093: Robot 4 has turned its BOM on.
+4:23.205: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:23.261: Robot 10 has turned its BOM on.
+4:23.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:23.417: Robot 3 has turned its BOM on.
+4:23.529: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:23.585: Robot 4 has turned its BOM on.
+4:23.641: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:23.697: Robot 10 has turned its BOM on.
+4:23.809: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:23.865: Robot 3 has turned its BOM on.
+4:23.977: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:24.033: Robot 4 has turned its BOM on.
+4:24.089: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:24.145: Robot 10 has turned its BOM on.
+4:24.257: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:24.305: Robot 3 has turned its BOM on.
+4:24.421: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:24.477: Robot 4 has turned its BOM on.
+4:24.533: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:24.589: Robot 10 has turned its BOM on.
+4:24.705: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:24.761: Robot 3 has turned its BOM on.
+4:24.861: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:24.917: Robot 4 has turned its BOM on.
+4:24.981: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:25.037: Robot 10 has turned its BOM on.
+4:25.153: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:25.209: Robot 3 has turned its BOM on.
+4:25.305: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:25.361: Robot 4 has turned its BOM on.
+4:25.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:25.529: Robot 10 has turned its BOM on.
+4:25.585: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:25.641: Robot 3 has turned its BOM on.
+4:25.753: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:25.805: Robot 4 has turned its BOM on.
+4:25.917: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:25.973: Robot 10 has turned its BOM on.
+4:26.033: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:26.089: Robot 3 has turned its BOM on.
+4:26.204: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:26.257: Robot 4 has turned its BOM on.
+4:26.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:26.417: Robot 10 has turned its BOM on.
+4:26.473: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:26.529: Robot 3 has turned its BOM on.
+4:26.641: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:26.697: Robot 4 has turned its BOM on.
+4:26.805: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:26.861: Robot 10 has turned its BOM on.
+4:26.917: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:26.973: Robot 3 has turned its BOM on.
+4:27.089: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:27.145: Robot 4 has turned its BOM on.
+4:27.257: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:27.305: Robot 10 has turned its BOM on.
+4:27.361: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:27.417: Robot 3 has turned its BOM on.
+4:27.530: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:27.585: Robot 4 has turned its BOM on.
+4:27.697: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:27.753: Robot 10 has turned its BOM on.
+4:27.809: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:27.865: Robot 3 has turned its BOM on.
+4:27.977: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:28.033: Robot 4 has turned its BOM on.
+4:28.145: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:28.204: Robot 10 has turned its BOM on.
+4:28.257: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:28.306: Robot 3 has turned its BOM on.
+4:28.417: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:28.473: Robot 4 has turned its BOM on.
+4:28.585: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:28.641: Robot 10 has turned its BOM on.
+4:28.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:28.805: Robot 3 has turned its BOM on.
+4:28.866: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:28.921: Robot 4 has turned its BOM on.
+4:29.033: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:29.089: Robot 10 has turned its BOM on.
+4:29.201: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:29.257: Robot 3 has turned its BOM on.
+4:29.305: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:29.361: Robot 4 has turned its BOM on.
+4:29.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:29.529: Robot 10 has turned its BOM on.
+4:29.641: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:29.697: Robot 3 has turned its BOM on.
+4:29.753: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:29.805: Robot 4 has turned its BOM on.
+4:29.925: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:29.981: Robot 10 has turned its BOM on.
+4:30.093: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:30.149: Robot 3 has turned its BOM on.
+4:30.209: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:30.265: Robot 4 has turned its BOM on.
+4:30.361: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:30.417: Robot 10 has turned its BOM on.
+4:30.529: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:30.585: Robot 3 has turned its BOM on.
+4:30.641: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:30.698: Robot 4 has turned its BOM on.
+4:30.805: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:30.861: Robot 10 has turned its BOM on.
+4:30.977: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:31.033: Robot 3 has turned its BOM on.
+4:31.089: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:31.145: Robot 4 has turned its BOM on.
+4:31.257: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:31.305: Robot 10 has turned its BOM on.
+4:31.417: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:31.473: Robot 3 has turned its BOM on.
+4:31.585: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:31.641: Robot 4 has turned its BOM on.
+4:31.697: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:31.753: Robot 10 has turned its BOM on.
+4:31.861: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:31.917: Robot 3 has turned its BOM on.
+4:32.029: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:32.085: Robot 4 has turned its BOM on.
+4:32.145: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:32.201: Robot 10 has turned its BOM on.
+4:32.305: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:32.361: Robot 3 has turned its BOM on.
+4:32.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:32.529: Robot 4 has turned its BOM on.
+4:32.585: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:32.641: Robot 10 has turned its BOM on.
+4:32.753: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:32.805: Robot 3 has turned its BOM on.
+4:32.921: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:32.977: Robot 4 has turned its BOM on.
+4:33.033: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:33.089: Robot 10 has turned its BOM on.
+4:33.201: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:33.257: Robot 3 has turned its BOM on.
+4:33.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:33.417: Robot 4 has turned its BOM on.
+4:33.473: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:33.529: Robot 10 has turned its BOM on.
+4:33.641: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:33.697: Robot 3 has turned its BOM on.
+4:33.809: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:33.865: Robot 4 has turned its BOM on.
+4:33.925: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:33.981: Robot 10 has turned its BOM on.
+4:34.097: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:34.153: Robot 3 has turned its BOM on.
+4:34.265: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:34.305: Robot 4 has turned its BOM on.
+4:34.417: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:34.473: Robot 10 has turned its BOM on.
+4:34.529: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:34.585: Robot 3 has turned its BOM on.
+4:34.697: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:34.753: Robot 4 has turned its BOM on.
+4:34.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:34.917: Robot 10 has turned its BOM on.
+4:34.977: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:35.034: Robot 3 has turned its BOM on.
+4:35.145: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:37.261: Robot 3 passed the token to robot 10. Sensor matrix:
+(10 255)
+4:37.309: Robot 4 has requested to join the token ring.
+4:37.365: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)
+4:37.421: Robot 3 has requested to join the token ring.
+4:37.478: Robot 3 has turned its BOM on.
+4:37.534: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:37.589: Robot 4 has turned its BOM on.
+4:37.645: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:37.701: Robot 10 has turned its BOM on.
+4:37.757: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:37.805: Robot 3 has turned its BOM on.
+4:37.917: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:37.973: Robot 4 has turned its BOM on.
+4:38.085: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:38.141: Robot 10 has turned its BOM on.
+4:38.253: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:38.305: Robot 3 has turned its BOM on.
+4:38.361: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:38.417: Robot 4 has turned its BOM on.
+4:38.529: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:38.585: Robot 10 has turned its BOM on.
+4:38.697: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:38.753: Robot 3 has turned its BOM on.
+4:38.805: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:38.861: Robot 4 has turned its BOM on.
+4:38.973: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:39.029: Robot 10 has turned its BOM on.
+4:39.141: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:39.198: Robot 3 has turned its BOM on.
+4:39.253: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:39.305: Robot 4 has turned its BOM on.
+4:39.425: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:39.481: Robot 10 has turned its BOM on.
+4:39.593: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:39.649: Robot 3 has turned its BOM on.
+4:39.709: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:39.765: Robot 4 has turned its BOM on.
+4:39.861: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:39.917: Robot 10 has turned its BOM on.
+4:40.030: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:40.085: Robot 3 has turned its BOM on.
+4:40.142: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:40.200: Robot 4 has turned its BOM on.
+4:40.305: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:40.361: Robot 10 has turned its BOM on.
+4:40.474: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:40.529: Robot 3 has turned its BOM on.
+4:40.589: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:40.645: Robot 4 has turned its BOM on.
+4:40.758: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:40.805: Robot 10 has turned its BOM on.
+4:40.921: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:40.978: Robot 3 has turned its BOM on.
+4:41.037: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:41.094: Robot 4 has turned its BOM on.
+4:41.205: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:41.264: Robot 10 has turned its BOM on.
+4:41.362: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:41.417: Robot 3 has turned its BOM on.
+4:41.532: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:41.585: Robot 4 has turned its BOM on.
+4:41.646: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:41.702: Robot 10 has turned its BOM on.
+4:41.812: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:41.865: Robot 3 has turned its BOM on.
+4:41.978: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:42.033: Robot 4 has turned its BOM on.
+4:42.094: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:42.150: Robot 10 has turned its BOM on.
+4:42.261: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:42.306: Robot 3 has turned its BOM on.
+4:42.425: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:42.481: Robot 4 has turned its BOM on.
+4:42.541: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:42.600: Robot 10 has turned its BOM on.
+4:42.709: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:42.766: Robot 3 has turned its BOM on.
+4:42.864: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:42.917: Robot 4 has turned its BOM on.
+4:42.974: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:43.030: Robot 10 has turned its BOM on.
+4:43.142: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:43.197: Robot 3 has turned its BOM on.
+4:43.306: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:43.362: Robot 4 has turned its BOM on.
+4:43.422: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:43.478: Robot 10 has turned its BOM on.
+4:43.590: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:43.645: Robot 3 has turned its BOM on.
+4:43.758: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:43.806: Robot 4 has turned its BOM on.
+4:43.918: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:43.974: Robot 10 has turned its BOM on.
+4:44.030: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:44.200: Robot 4 has turned its BOM on.
+4:44.362: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:44.418: Robot 10 has turned its BOM on.
+4:44.482: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:44.538: Robot 3 has turned its BOM on.
+4:44.650: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:44.706: Robot 4 has turned its BOM on.
+4:44.766: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:44.806: Robot 10 has turned its BOM on.
+4:44.918: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:44.974: Robot 3 has turned its BOM on.
+4:45.086: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:45.142: Robot 4 has turned its BOM on.
+4:45.254: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:45.306: Robot 10 has turned its BOM on.
+4:45.362: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:45.418: Robot 3 has turned its BOM on.
+4:45.538: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:45.594: Robot 4 has turned its BOM on.
+4:45.706: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:45.762: Robot 10 has turned its BOM on.
+4:45.806: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:45.862: Robot 3 has turned its BOM on.
+4:45.974: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:46.030: Robot 4 has turned its BOM on.
+4:46.142: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:46.198: Robot 10 has turned its BOM on.
+4:46.254: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:46.306: Robot 3 has turned its BOM on.
+4:46.418: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:46.474: Robot 4 has turned its BOM on.
+4:46.586: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:46.642: Robot 10 has turned its BOM on.
+4:46.702: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:46.758: Robot 3 has turned its BOM on.
+4:46.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:46.922: Robot 4 has turned its BOM on.
+4:47.034: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:47.090: Robot 10 has turned its BOM on.
+4:47.150: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:47.206: Robot 3 has turned its BOM on.
+4:47.314: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:47.370: Robot 4 has turned its BOM on.
+4:47.482: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:47.538: Robot 10 has turned its BOM on.
+4:47.598: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:48.702: Robot 10 passed the token to robot 4. Sensor matrix:
+(4 255)
+4:49.198: Robot 3 passed the token to robot 10. Sensor matrix:
+(10 255)
+4:49.254: Robot 4 has requested to join the token ring.
+4:49.698: Robot 10 passed the token to robot 4. Sensor matrix:
+(4 255)
+4:49.862: Robot 4 passed the token to robot 10. Sensor matrix:
+(10 11)
+4:49.918: Robot 10 has turned its BOM on.
+4:49.974: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:50.030: Robot 3 has turned its BOM on.
+4:50.142: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:50.198: Robot 4 has turned its BOM on.
+4:50.306: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:50.362: Robot 10 has turned its BOM on.
+4:50.418: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:50.474: Robot 3 has turned its BOM on.
+4:50.590: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:50.646: Robot 4 has turned its BOM on.
+4:50.758: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:50.806: Robot 10 has turned its BOM on.
+4:50.869: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:50.922: Robot 3 has turned its BOM on.
+4:51.038: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:51.094: Robot 4 has turned its BOM on.
+4:51.206: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:51.265: Robot 10 has turned its BOM on.
+4:51.310: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:51.366: Robot 3 has turned its BOM on.
+4:51.478: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:51.534: Robot 4 has turned its BOM on.
+4:51.646: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:51.702: Robot 10 has turned its BOM on.
+4:51.758: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:51.806: Robot 3 has turned its BOM on.
+4:51.918: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:51.974: Robot 4 has turned its BOM on.
+4:52.086: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:52.142: Robot 10 has turned its BOM on.
+4:52.254: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:52.306: Robot 3 has turned its BOM on.
+4:52.366: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:52.422: Robot 4 has turned its BOM on.
+4:52.534: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:52.590: Robot 10 has turned its BOM on.
+4:52.702: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:52.758: Robot 3 has turned its BOM on.
+4:52.806: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:52.862: Robot 4 has turned its BOM on.
+4:52.974: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:53.030: Robot 10 has turned its BOM on.
+4:53.142: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:53.198: Robot 3 has turned its BOM on.
+4:53.254: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:53.306: Robot 4 has turned its BOM on.
+4:53.426: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:53.482: Robot 10 has turned its BOM on.
+4:53.594: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:53.650: Robot 3 has turned its BOM on.
+4:53.706: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:53.762: Robot 4 has turned its BOM on.
+4:53.866: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:53.922: Robot 10 has turned its BOM on.
+4:54.034: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:54.090: Robot 3 has turned its BOM on.
+4:54.146: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:54.202: Robot 4 has turned its BOM on.
+4:54.306: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:54.362: Robot 10 has turned its BOM on.
+4:54.474: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:54.530: Robot 3 has turned its BOM on.
+4:54.586: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:54.642: Robot 4 has turned its BOM on.
+4:54.754: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:54.806: Robot 10 has turned its BOM on.
+4:54.918: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:54.974: Robot 3 has turned its BOM on.
+4:55.034: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:55.090: Robot 4 has turned its BOM on.
+4:55.202: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:55.261: Robot 10 has turned its BOM on.
+4:55.362: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:55.418: Robot 3 has turned its BOM on.
+4:55.530: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:55.586: Robot 4 has turned its BOM on.
+4:55.642: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:55.698: Robot 10 has turned its BOM on.
+4:55.806: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:55.862: Robot 3 has turned its BOM on.
+4:55.974: Robot 4 has turned its BOM on.
+4:56.090: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:56.146: Robot 10 has turned its BOM on.
+4:56.258: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:56.306: Robot 3 has turned its BOM on.
+4:56.418: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:56.474: Robot 4 has turned its BOM on.
+4:56.530: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:56.586: Robot 10 has turned its BOM on.
+4:56.698: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:56.754: Robot 3 has turned its BOM on.
+4:56.866: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:56.922: Robot 4 has turned its BOM on.
+4:56.978: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:57.034: Robot 10 has turned its BOM on.
+4:57.146: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:57.202: Robot 3 has turned its BOM on.
+4:57.306: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:57.362: Robot 4 has turned its BOM on.
+4:57.418: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:57.474: Robot 10 has turned its BOM on.
+4:57.586: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:57.642: Robot 3 has turned its BOM on.
+4:57.754: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:57.806: Robot 4 has turned its BOM on.
+4:57.862: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:57.918: Robot 10 has turned its BOM on.
+4:58.030: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:58.086: Robot 3 has turned its BOM on.
+4:58.198: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:58.254: Robot 4 has turned its BOM on.
+4:58.362: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:58.418: Robot 10 has turned its BOM on.
+4:58.474: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:58.642: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:58.698: Robot 4 has turned its BOM on.
+4:58.806: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:58.862: Robot 10 has turned its BOM on.
+4:58.918: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:58.974: Robot 3 has turned its BOM on.
+4:59.086: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:59.142: Robot 4 has turned its BOM on.
+4:59.254: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:59.306: Robot 10 has turned its BOM on.
+4:59.362: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:59.418: Robot 3 has turned its BOM on.
+4:59.530: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
+4:59.586: Robot 4 has turned its BOM on.
+4:59.698: Robot 4 passed the token to robot 10. Sensor matrix:
+(3 12)(10 11)
+4:59.754: Robot 10 has turned its BOM on.
+4:59.806: Robot 10 passed the token to robot 3. Sensor matrix:
+(3 255)(4 255)
+4:59.862: Robot 3 has turned its BOM on.
+4:59.978: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 2)(10 255)
Index: branches/scout/projects/libwireless/logger/tests/5robots150bom.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots150bom.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots150bom.test	(revision 1346)
@@ -0,0 +1,5507 @@
+0:0.787: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:0.843: Robot 1 has turned its BOM on.
+0:0.955: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:1.11: Robot 2 has turned its BOM on.
+0:1.123: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:1.179: Robot 5 has turned its BOM on.
+0:1.235: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:1.291: Robot 7 has turned its BOM on.
+0:1.403: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:1.459: Robot 9 has turned its BOM on.
+0:1.571: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:1.627: Robot 1 has turned its BOM on.
+0:1.735: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:1.791: Robot 2 has turned its BOM on.
+0:1.907: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:1.963: Robot 5 has turned its BOM on.
+0:2.75: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:2.131: Robot 7 has turned its BOM on.
+0:2.235: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:2.291: Robot 9 has turned its BOM on.
+0:2.347: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:2.403: Robot 1 has turned its BOM on.
+0:2.515: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:2.571: Robot 2 has turned its BOM on.
+0:2.683: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:2.735: Robot 5 has turned its BOM on.
+0:2.847: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:2.903: Robot 7 has turned its BOM on.
+0:3.15: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:3.71: Robot 9 has turned its BOM on.
+0:3.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:3.235: Robot 1 has turned its BOM on.
+0:3.347: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:3.403: Robot 2 has turned its BOM on.
+0:3.459: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:3.515: Robot 5 has turned its BOM on.
+0:3.627: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:3.683: Robot 7 has turned its BOM on.
+0:3.795: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:3.851: Robot 9 has turned its BOM on.
+0:3.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:4.19: Robot 1 has turned its BOM on.
+0:4.131: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:4.187: Robot 2 has turned its BOM on.
+0:4.291: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:4.347: Robot 5 has turned its BOM on.
+0:4.403: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:4.459: Robot 7 has turned its BOM on.
+0:4.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:4.627: Robot 9 has turned its BOM on.
+0:4.739: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:4.795: Robot 1 has turned its BOM on.
+0:4.907: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:4.963: Robot 2 has turned its BOM on.
+0:5.75: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:5.131: Robot 5 has turned its BOM on.
+0:5.187: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:5.235: Robot 7 has turned its BOM on.
+0:5.347: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:5.403: Robot 9 has turned its BOM on.
+0:5.515: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:5.571: Robot 1 has turned its BOM on.
+0:5.683: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:5.735: Robot 2 has turned its BOM on.
+0:5.851: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:5.907: Robot 5 has turned its BOM on.
+0:6.19: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:6.75: Robot 7 has turned its BOM on.
+0:6.135: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:6.191: Robot 9 has turned its BOM on.
+0:6.292: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:6.347: Robot 1 has turned its BOM on.
+0:6.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:6.515: Robot 2 has turned its BOM on.
+0:6.627: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:6.683: Robot 5 has turned its BOM on.
+0:6.791: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:6.847: Robot 7 has turned its BOM on.
+0:6.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:7.15: Robot 9 has turned its BOM on.
+0:7.131: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:7.187: Robot 1 has turned its BOM on.
+0:7.291: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:7.347: Robot 2 has turned its BOM on.
+0:7.403: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:7.459: Robot 5 has turned its BOM on.
+0:7.571: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:7.627: Robot 7 has turned its BOM on.
+0:7.735: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:7.791: Robot 9 has turned its BOM on.
+0:7.903: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:7.959: Robot 1 has turned its BOM on.
+0:8.75: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:8.131: Robot 2 has turned its BOM on.
+0:8.235: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:8.291: Robot 5 has turned its BOM on.
+0:8.403: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:8.459: Robot 7 has turned its BOM on.
+0:8.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:8.571: Robot 9 has turned its BOM on.
+0:8.683: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:8.735: Robot 1 has turned its BOM on.
+0:8.851: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:8.907: Robot 2 has turned its BOM on.
+0:9.23: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:9.79: Robot 5 has turned its BOM on.
+0:9.139: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:9.195: Robot 7 has turned its BOM on.
+0:9.347: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:9.403: Robot 9 has turned its BOM on.
+0:9.459: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:9.515: Robot 1 has turned its BOM on.
+0:9.627: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:9.683: Robot 2 has turned its BOM on.
+0:9.795: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:9.851: Robot 5 has turned its BOM on.
+0:9.963: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:10.19: Robot 7 has turned its BOM on.
+0:10.131: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:10.187: Robot 9 has turned its BOM on.
+0:10.291: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:10.347: Robot 1 has turned its BOM on.
+0:10.403: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:10.459: Robot 2 has turned its BOM on.
+0:10.575: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:10.631: Robot 5 has turned its BOM on.
+0:10.735: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:10.791: Robot 7 has turned its BOM on.
+0:10.903: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:10.959: Robot 9 has turned its BOM on.
+0:11.71: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:11.127: Robot 1 has turned its BOM on.
+0:11.183: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:11.235: Robot 2 has turned its BOM on.
+0:11.347: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:11.403: Robot 5 has turned its BOM on.
+0:11.519: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:11.575: Robot 7 has turned its BOM on.
+0:11.687: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:11.735: Robot 9 has turned its BOM on.
+0:11.847: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:11.903: Robot 1 has turned its BOM on.
+0:12.15: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:12.71: Robot 2 has turned its BOM on.
+0:12.183: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:12.235: Robot 5 has turned its BOM on.
+0:12.291: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:12.347: Robot 7 has turned its BOM on.
+0:12.463: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:12.519: Robot 9 has turned its BOM on.
+0:12.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:12.687: Robot 1 has turned its BOM on.
+0:12.791: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:12.848: Robot 2 has turned its BOM on.
+0:12.959: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:13.15: Robot 5 has turned its BOM on.
+0:13.127: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:13.183: Robot 7 has turned its BOM on.
+0:13.291: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:13.347: Robot 9 has turned its BOM on.
+0:13.407: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:13.463: Robot 1 has turned its BOM on.
+0:13.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:13.631: Robot 2 has turned its BOM on.
+0:13.735: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:13.791: Robot 5 has turned its BOM on.
+0:13.903: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:13.959: Robot 7 has turned its BOM on.
+0:14.71: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:14.127: Robot 9 has turned its BOM on.
+0:14.235: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:14.291: Robot 1 has turned its BOM on.
+0:14.351: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:14.407: Robot 2 has turned its BOM on.
+0:14.519: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:14.575: Robot 5 has turned its BOM on.
+0:14.687: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:14.735: Robot 7 has turned its BOM on.
+0:14.855: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:14.911: Robot 9 has turned its BOM on.
+0:15.23: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:15.79: Robot 1 has turned its BOM on.
+0:15.135: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:15.191: Robot 2 has turned its BOM on.
+0:15.295: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:15.351: Robot 5 has turned its BOM on.
+0:15.463: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:15.519: Robot 7 has turned its BOM on.
+0:15.631: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:15.687: Robot 9 has turned its BOM on.
+0:15.791: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:15.847: Robot 1 has turned its BOM on.
+0:15.959: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:16.15: Robot 2 has turned its BOM on.
+0:16.127: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:16.183: Robot 5 has turned its BOM on.
+0:16.239: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:16.295: Robot 7 has turned its BOM on.
+0:16.407: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:16.463: Robot 9 has turned its BOM on.
+0:16.583: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:16.639: Robot 1 has turned its BOM on.
+0:16.735: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:16.791: Robot 2 has turned its BOM on.
+0:16.903: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:16.959: Robot 5 has turned its BOM on.
+0:17.71: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:17.127: Robot 7 has turned its BOM on.
+0:17.235: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:17.291: Robot 9 has turned its BOM on.
+0:17.347: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:17.403: Robot 1 has turned its BOM on.
+0:17.515: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:17.571: Robot 2 has turned its BOM on.
+0:17.683: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:17.735: Robot 5 has turned its BOM on.
+0:17.847: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:17.903: Robot 7 has turned its BOM on.
+0:18.15: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:18.71: Robot 9 has turned its BOM on.
+0:18.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:18.235: Robot 1 has turned its BOM on.
+0:18.347: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:18.403: Robot 2 has turned its BOM on.
+0:18.463: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:18.519: Robot 5 has turned its BOM on.
+0:18.631: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:18.687: Robot 7 has turned its BOM on.
+0:18.791: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:18.847: Robot 9 has turned its BOM on.
+0:18.959: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:19.15: Robot 1 has turned its BOM on.
+0:19.127: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:19.183: Robot 2 has turned its BOM on.
+0:19.291: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:19.347: Robot 5 has turned its BOM on.
+0:19.403: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:19.459: Robot 7 has turned its BOM on.
+0:19.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:19.627: Robot 9 has turned its BOM on.
+0:19.735: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:19.791: Robot 1 has turned its BOM on.
+0:19.903: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:19.959: Robot 2 has turned its BOM on.
+0:20.71: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:20.127: Robot 5 has turned its BOM on.
+0:20.235: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:20.291: Robot 7 has turned its BOM on.
+0:20.351: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:20.407: Robot 9 has turned its BOM on.
+0:20.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:20.575: Robot 1 has turned its BOM on.
+0:20.687: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:20.735: Robot 2 has turned its BOM on.
+0:20.847: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:20.903: Robot 5 has turned its BOM on.
+0:21.15: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:21.71: Robot 7 has turned its BOM on.
+0:21.183: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:21.235: Robot 9 has turned its BOM on.
+0:21.295: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:21.351: Robot 1 has turned its BOM on.
+0:21.463: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:21.519: Robot 2 has turned its BOM on.
+0:21.639: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:21.695: Robot 5 has turned its BOM on.
+0:21.791: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:21.847: Robot 7 has turned its BOM on.
+0:21.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:22.15: Robot 9 has turned its BOM on.
+0:22.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:22.183: Robot 1 has turned its BOM on.
+0:22.291: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:22.347: Robot 2 has turned its BOM on.
+0:22.403: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:22.459: Robot 5 has turned its BOM on.
+0:22.575: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:22.631: Robot 7 has turned its BOM on.
+0:22.735: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:22.791: Robot 9 has turned its BOM on.
+0:22.903: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:22.959: Robot 1 has turned its BOM on.
+0:23.71: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 10)
+0:23.127: Robot 2 has turned its BOM on.
+0:23.235: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:23.291: Robot 5 has turned its BOM on.
+0:23.403: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:23.459: Robot 7 has turned its BOM on.
+0:23.519: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:23.575: Robot 9 has turned its BOM on.
+0:23.687: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:23.735: Robot 1 has turned its BOM on.
+0:23.847: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:23.903: Robot 2 has turned its BOM on.
+0:24.15: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:24.71: Robot 5 has turned its BOM on.
+0:24.183: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:24.235: Robot 7 has turned its BOM on.
+0:24.347: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:24.403: Robot 9 has turned its BOM on.
+0:24.463: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:24.519: Robot 1 has turned its BOM on.
+0:24.631: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:24.687: Robot 2 has turned its BOM on.
+0:24.791: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:24.847: Robot 5 has turned its BOM on.
+0:24.959: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:25.15: Robot 7 has turned its BOM on.
+0:25.127: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:25.183: Robot 9 has turned its BOM on.
+0:25.291: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:25.347: Robot 1 has turned its BOM on.
+0:25.403: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:25.459: Robot 2 has turned its BOM on.
+0:25.571: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:25.627: Robot 5 has turned its BOM on.
+0:25.735: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:25.791: Robot 7 has turned its BOM on.
+0:25.903: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:25.960: Robot 9 has turned its BOM on.
+0:26.71: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:26.127: Robot 1 has turned its BOM on.
+0:26.235: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:26.291: Robot 2 has turned its BOM on.
+0:26.351: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:26.407: Robot 5 has turned its BOM on.
+0:26.519: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:26.575: Robot 7 has turned its BOM on.
+0:26.691: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:26.735: Robot 9 has turned its BOM on.
+0:26.847: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:26.903: Robot 1 has turned its BOM on.
+0:27.15: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:27.71: Robot 2 has turned its BOM on.
+0:27.183: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:27.235: Robot 5 has turned its BOM on.
+0:27.351: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:27.407: Robot 7 has turned its BOM on.
+0:27.467: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:27.523: Robot 9 has turned its BOM on.
+0:27.635: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:27.691: Robot 1 has turned its BOM on.
+0:27.791: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:27.847: Robot 2 has turned its BOM on.
+0:27.963: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:28.19: Robot 5 has turned its BOM on.
+0:28.131: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:28.187: Robot 7 has turned its BOM on.
+0:28.291: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:28.347: Robot 9 has turned its BOM on.
+0:28.459: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:28.515: Robot 1 has turned its BOM on.
+0:28.571: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:28.627: Robot 2 has turned its BOM on.
+0:28.735: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:28.791: Robot 5 has turned its BOM on.
+0:28.907: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:28.963: Robot 7 has turned its BOM on.
+0:29.75: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:29.131: Robot 9 has turned its BOM on.
+0:29.235: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:29.291: Robot 1 has turned its BOM on.
+0:29.403: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:29.459: Robot 2 has turned its BOM on.
+0:29.579: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:29.635: Robot 5 has turned its BOM on.
+0:29.691: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:29.735: Robot 7 has turned its BOM on.
+0:29.851: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:29.907: Robot 9 has turned its BOM on.
+0:30.19: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:30.75: Robot 1 has turned its BOM on.
+0:30.187: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:30.235: Robot 2 has turned its BOM on.
+0:30.347: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:30.403: Robot 5 has turned its BOM on.
+0:30.459: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:30.515: Robot 7 has turned its BOM on.
+0:30.627: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:30.683: Robot 9 has turned its BOM on.
+0:30.795: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:30.851: Robot 1 has turned its BOM on.
+0:30.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:31.19: Robot 2 has turned its BOM on.
+0:31.131: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:31.187: Robot 5 has turned its BOM on.
+0:31.291: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:31.347: Robot 7 has turned its BOM on.
+0:31.467: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:31.523: Robot 9 has turned its BOM on.
+0:31.579: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:31.635: Robot 1 has turned its BOM on.
+0:31.739: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:31.795: Robot 2 has turned its BOM on.
+0:31.907: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:31.963: Robot 5 has turned its BOM on.
+0:32.75: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:32.131: Robot 7 has turned its BOM on.
+0:32.235: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:32.291: Robot 9 has turned its BOM on.
+0:32.347: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:32.403: Robot 1 has turned its BOM on.
+0:32.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:32.571: Robot 2 has turned its BOM on.
+0:32.687: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:32.735: Robot 5 has turned its BOM on.
+0:32.847: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:32.903: Robot 7 has turned its BOM on.
+0:33.15: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:33.71: Robot 9 has turned its BOM on.
+0:33.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:33.235: Robot 1 has turned its BOM on.
+0:33.347: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:33.403: Robot 2 has turned its BOM on.
+0:33.515: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:33.571: Robot 5 has turned its BOM on.
+0:33.627: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:33.683: Robot 7 has turned its BOM on.
+0:33.791: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:33.847: Robot 9 has turned its BOM on.
+0:33.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:34.19: Robot 1 has turned its BOM on.
+0:34.131: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:34.187: Robot 2 has turned its BOM on.
+0:34.291: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:34.347: Robot 5 has turned its BOM on.
+0:34.459: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:34.515: Robot 7 has turned its BOM on.
+0:34.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:34.627: Robot 9 has turned its BOM on.
+0:34.735: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:34.791: Robot 1 has turned its BOM on.
+0:34.907: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:34.963: Robot 2 has turned its BOM on.
+0:35.75: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:35.131: Robot 5 has turned its BOM on.
+0:35.235: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:35.291: Robot 7 has turned its BOM on.
+0:35.403: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:35.459: Robot 9 has turned its BOM on.
+0:35.515: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:35.571: Robot 1 has turned its BOM on.
+0:35.683: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:35.735: Robot 2 has turned its BOM on.
+0:35.848: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:35.903: Robot 5 has turned its BOM on.
+0:36.15: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:36.71: Robot 7 has turned its BOM on.
+0:36.183: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:36.235: Robot 9 has turned its BOM on.
+0:36.347: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:36.403: Robot 1 has turned its BOM on.
+0:36.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:36.515: Robot 2 has turned its BOM on.
+0:36.627: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:36.683: Robot 5 has turned its BOM on.
+0:36.792: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:36.847: Robot 7 has turned its BOM on.
+0:36.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:37.15: Robot 9 has turned its BOM on.
+0:37.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:37.183: Robot 1 has turned its BOM on.
+0:37.291: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:37.347: Robot 2 has turned its BOM on.
+0:37.403: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:37.459: Robot 5 has turned its BOM on.
+0:37.571: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:37.627: Robot 7 has turned its BOM on.
+0:37.739: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:37.795: Robot 9 has turned its BOM on.
+0:37.907: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:37.963: Robot 1 has turned its BOM on.
+0:38.75: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:38.131: Robot 2 has turned its BOM on.
+0:38.235: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:38.291: Robot 5 has turned its BOM on.
+0:38.403: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:38.459: Robot 7 has turned its BOM on.
+0:38.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:38.627: Robot 9 has turned its BOM on.
+0:38.683: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:38.735: Robot 1 has turned its BOM on.
+0:38.847: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:38.903: Robot 2 has turned its BOM on.
+0:39.19: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:39.75: Robot 5 has turned its BOM on.
+0:39.187: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:39.235: Robot 7 has turned its BOM on.
+0:39.347: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:39.403: Robot 9 has turned its BOM on.
+0:39.515: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:39.572: Robot 1 has turned its BOM on.
+0:39.627: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:39.683: Robot 2 has turned its BOM on.
+0:39.791: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:39.847: Robot 5 has turned its BOM on.
+0:39.959: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:40.15: Robot 7 has turned its BOM on.
+0:40.131: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:40.187: Robot 9 has turned its BOM on.
+0:40.291: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:40.347: Robot 1 has turned its BOM on.
+0:40.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:40.515: Robot 2 has turned its BOM on.
+0:40.571: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:40.627: Robot 5 has turned its BOM on.
+0:40.735: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:40.791: Robot 7 has turned its BOM on.
+0:40.907: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:40.963: Robot 9 has turned its BOM on.
+0:41.79: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:41.135: Robot 1 has turned its BOM on.
+0:41.195: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:41.235: Robot 2 has turned its BOM on.
+0:41.403: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:41.459: Robot 5 has turned its BOM on.
+0:41.519: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:41.575: Robot 7 has turned its BOM on.
+0:41.687: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:41.735: Robot 9 has turned its BOM on.
+0:41.851: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:41.907: Robot 1 has turned its BOM on.
+0:42.19: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:42.75: Robot 2 has turned its BOM on.
+0:42.187: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:42.235: Robot 5 has turned its BOM on.
+0:42.347: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:42.403: Robot 7 has turned its BOM on.
+0:42.459: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:42.515: Robot 9 has turned its BOM on.
+0:42.627: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:42.683: Robot 1 has turned its BOM on.
+0:42.795: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:42.851: Robot 2 has turned its BOM on.
+0:42.963: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:43.19: Robot 5 has turned its BOM on.
+0:43.135: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:43.191: Robot 7 has turned its BOM on.
+0:43.291: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:43.347: Robot 9 has turned its BOM on.
+0:43.459: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:43.515: Robot 1 has turned its BOM on.
+0:43.571: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:43.627: Robot 2 has turned its BOM on.
+0:43.739: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:43.795: Robot 5 has turned its BOM on.
+0:43.907: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:43.963: Robot 7 has turned its BOM on.
+0:44.75: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:44.131: Robot 9 has turned its BOM on.
+0:44.235: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:44.291: Robot 1 has turned its BOM on.
+0:44.403: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:44.459: Robot 2 has turned its BOM on.
+0:44.571: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:44.627: Robot 5 has turned its BOM on.
+0:44.683: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:44.735: Robot 7 has turned its BOM on.
+0:44.847: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:44.903: Robot 9 has turned its BOM on.
+0:45.15: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:45.71: Robot 1 has turned its BOM on.
+0:45.183: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:45.235: Robot 2 has turned its BOM on.
+0:45.347: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:45.403: Robot 5 has turned its BOM on.
+0:45.463: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:45.519: Robot 7 has turned its BOM on.
+0:45.631: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:45.687: Robot 9 has turned its BOM on.
+0:45.791: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:45.847: Robot 1 has turned its BOM on.
+0:45.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:46.19: Robot 2 has turned its BOM on.
+0:46.131: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:46.187: Robot 5 has turned its BOM on.
+0:46.291: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:46.347: Robot 7 has turned its BOM on.
+0:46.407: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:46.463: Robot 9 has turned its BOM on.
+0:46.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:46.632: Robot 1 has turned its BOM on.
+0:46.735: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:46.791: Robot 2 has turned its BOM on.
+0:46.903: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:46.959: Robot 5 has turned its BOM on.
+0:47.71: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:47.127: Robot 7 has turned its BOM on.
+0:47.235: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:47.291: Robot 9 has turned its BOM on.
+0:47.351: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:47.407: Robot 1 has turned its BOM on.
+0:47.519: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:47.575: Robot 2 has turned its BOM on.
+0:47.688: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:47.735: Robot 5 has turned its BOM on.
+0:47.847: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:47.903: Robot 7 has turned its BOM on.
+0:48.15: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:48.71: Robot 9 has turned its BOM on.
+0:48.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:48.235: Robot 1 has turned its BOM on.
+0:48.351: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:48.407: Robot 2 has turned its BOM on.
+0:48.519: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:48.575: Robot 5 has turned its BOM on.
+0:48.631: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:48.687: Robot 7 has turned its BOM on.
+0:48.791: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:48.847: Robot 9 has turned its BOM on.
+0:48.959: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:49.15: Robot 1 has turned its BOM on.
+0:49.127: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:49.183: Robot 2 has turned its BOM on.
+0:49.295: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:49.351: Robot 5 has turned its BOM on.
+0:49.463: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:49.519: Robot 7 has turned its BOM on.
+0:49.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:49.631: Robot 9 has turned its BOM on.
+0:49.735: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:49.791: Robot 1 has turned its BOM on.
+0:49.903: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:49.959: Robot 2 has turned its BOM on.
+0:50.71: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:50.127: Robot 5 has turned its BOM on.
+0:50.235: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:50.291: Robot 7 has turned its BOM on.
+0:50.403: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:50.459: Robot 9 has turned its BOM on.
+0:50.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:50.575: Robot 1 has turned its BOM on.
+0:50.687: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:50.735: Robot 2 has turned its BOM on.
+0:50.847: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:50.903: Robot 5 has turned its BOM on.
+0:51.15: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:51.71: Robot 7 has turned its BOM on.
+0:51.183: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:51.235: Robot 9 has turned its BOM on.
+0:51.347: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:51.403: Robot 1 has turned its BOM on.
+0:51.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:51.516: Robot 2 has turned its BOM on.
+0:51.627: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:51.683: Robot 5 has turned its BOM on.
+0:51.791: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:51.847: Robot 7 has turned its BOM on.
+0:51.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:52.15: Robot 9 has turned its BOM on.
+0:52.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:52.183: Robot 1 has turned its BOM on.
+0:52.291: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:52.347: Robot 2 has turned its BOM on.
+0:52.407: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:52.463: Robot 5 has turned its BOM on.
+0:52.575: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:52.635: Robot 7 has turned its BOM on.
+0:52.735: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:52.791: Robot 9 has turned its BOM on.
+0:52.904: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:52.959: Robot 1 has turned its BOM on.
+0:53.71: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:53.127: Robot 2 has turned its BOM on.
+0:53.235: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:53.292: Robot 5 has turned its BOM on.
+0:53.407: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:53.463: Robot 7 has turned its BOM on.
+0:53.576: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:53.632: Robot 9 has turned its BOM on.
+0:53.688: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:53.736: Robot 1 has turned its BOM on.
+0:53.847: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:53.903: Robot 2 has turned its BOM on.
+0:54.16: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:54.184: Robot 7 has turned its BOM on.
+0:54.351: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:54.408: Robot 9 has turned its BOM on.
+0:54.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:54.575: Robot 1 has turned its BOM on.
+0:54.632: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:54.687: Robot 2 has turned its BOM on.
+0:54.796: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:54.851: Robot 5 has turned its BOM on.
+0:54.968: Robot 7 has turned its BOM on.
+0:55.136: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:55.296: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:55.352: Robot 1 has turned its BOM on.
+0:55.464: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:55.520: Robot 2 has turned its BOM on.
+0:55.576: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:55.632: Robot 5 has turned its BOM on.
+0:55.736: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:55.792: Robot 7 has turned its BOM on.
+0:55.904: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:55.960: Robot 9 has turned its BOM on.
+0:56.72: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:56.128: Robot 1 has turned its BOM on.
+0:56.236: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:56.292: Robot 2 has turned its BOM on.
+0:56.404: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+0:56.460: Robot 5 has turned its BOM on.
+0:56.520: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:56.576: Robot 7 has turned its BOM on.
+0:56.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:56.736: Robot 9 has turned its BOM on.
+0:56.848: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:56.904: Robot 1 has turned its BOM on.
+0:57.16: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:57.72: Robot 2 has turned its BOM on.
+0:57.184: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:57.236: Robot 5 has turned its BOM on.
+0:57.348: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+0:57.404: Robot 7 has turned its BOM on.
+0:57.464: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:57.520: Robot 9 has turned its BOM on.
+0:57.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:57.688: Robot 1 has turned its BOM on.
+0:57.792: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:57.848: Robot 2 has turned its BOM on.
+0:57.960: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+0:58.16: Robot 5 has turned its BOM on.
+0:58.128: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+0:58.184: Robot 7 has turned its BOM on.
+0:58.292: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+0:58.348: Robot 9 has turned its BOM on.
+0:58.464: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+0:58.520: Robot 1 has turned its BOM on.
+0:58.632: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+0:58.688: Robot 2 has turned its BOM on.
+1:0.736: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(5 5)(9 9)
+1:0.792: Robot 2 has requested to join the token ring.
+1:0.848: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(5 0)(7 14)
+1:0.904: Robot 1 has turned its BOM on.
+1:1.16: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:1.72: Robot 2 has turned its BOM on.
+1:1.128: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:1.184: Robot 5 has turned its BOM on.
+1:1.292: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:1.348: Robot 7 has turned its BOM on.
+1:1.464: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:1.520: Robot 9 has turned its BOM on.
+1:1.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:1.688: Robot 1 has turned its BOM on.
+1:1.792: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:1.848: Robot 2 has turned its BOM on.
+1:1.964: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+1:2.20: Robot 5 has turned its BOM on.
+1:2.76: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:2.132: Robot 7 has turned its BOM on.
+1:2.236: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:2.292: Robot 9 has turned its BOM on.
+1:2.404: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:2.460: Robot 1 has turned its BOM on.
+1:2.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:2.628: Robot 2 has turned its BOM on.
+1:2.740: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+1:2.796: Robot 5 has turned its BOM on.
+1:2.908: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:2.964: Robot 7 has turned its BOM on.
+1:3.76: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:3.132: Robot 9 has turned its BOM on.
+1:3.188: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:3.236: Robot 1 has turned its BOM on.
+1:3.348: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:3.404: Robot 2 has turned its BOM on.
+1:3.516: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:3.572: Robot 5 has turned its BOM on.
+1:3.684: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:3.736: Robot 7 has turned its BOM on.
+1:3.848: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:3.904: Robot 9 has turned its BOM on.
+1:4.16: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:4.72: Robot 1 has turned its BOM on.
+1:4.128: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:4.184: Robot 2 has turned its BOM on.
+1:4.292: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:4.348: Robot 5 has turned its BOM on.
+1:4.460: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:4.516: Robot 7 has turned its BOM on.
+1:4.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:4.684: Robot 9 has turned its BOM on.
+1:4.796: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:4.852: Robot 1 has turned its BOM on.
+1:4.964: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:5.20: Robot 2 has turned its BOM on.
+1:5.76: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:5.132: Robot 5 has turned its BOM on.
+1:5.236: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:5.292: Robot 7 has turned its BOM on.
+1:5.404: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:5.460: Robot 9 has turned its BOM on.
+1:5.576: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:5.632: Robot 1 has turned its BOM on.
+1:5.736: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:5.792: Robot 2 has turned its BOM on.
+1:5.904: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:5.960: Robot 5 has turned its BOM on.
+1:6.20: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:6.76: Robot 7 has turned its BOM on.
+1:6.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:6.236: Robot 9 has turned its BOM on.
+1:6.348: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:6.404: Robot 1 has turned its BOM on.
+1:6.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:6.572: Robot 2 has turned its BOM on.
+1:6.684: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:6.736: Robot 5 has turned its BOM on.
+1:6.848: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:6.904: Robot 7 has turned its BOM on.
+1:7.16: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:7.72: Robot 9 has turned its BOM on.
+1:7.128: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:7.184: Robot 1 has turned its BOM on.
+1:7.292: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:7.348: Robot 2 has turned its BOM on.
+1:7.460: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:7.516: Robot 5 has turned its BOM on.
+1:7.628: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:7.684: Robot 7 has turned its BOM on.
+1:7.796: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:7.852: Robot 9 has turned its BOM on.
+1:7.964: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:8.20: Robot 1 has turned its BOM on.
+1:8.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:8.188: Robot 2 has turned its BOM on.
+1:8.236: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:8.292: Robot 5 has turned its BOM on.
+1:8.404: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:8.460: Robot 7 has turned its BOM on.
+1:8.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:8.628: Robot 9 has turned its BOM on.
+1:8.740: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:8.796: Robot 1 has turned its BOM on.
+1:8.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:8.964: Robot 2 has turned its BOM on.
+1:9.76: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:9.132: Robot 5 has turned its BOM on.
+1:9.188: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:9.236: Robot 7 has turned its BOM on.
+1:9.348: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:9.404: Robot 9 has turned its BOM on.
+1:9.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:9.572: Robot 1 has turned its BOM on.
+1:9.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:9.736: Robot 2 has turned its BOM on.
+1:9.848: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:9.904: Robot 5 has turned its BOM on.
+1:10.16: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:10.72: Robot 7 has turned its BOM on.
+1:10.132: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:10.188: Robot 9 has turned its BOM on.
+1:10.292: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:10.348: Robot 1 has turned its BOM on.
+1:10.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:10.516: Robot 2 has turned its BOM on.
+1:10.628: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:10.684: Robot 5 has turned its BOM on.
+1:10.796: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:10.852: Robot 7 has turned its BOM on.
+1:10.964: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:11.20: Robot 9 has turned its BOM on.
+1:11.76: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:11.132: Robot 1 has turned its BOM on.
+1:11.236: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:11.292: Robot 2 has turned its BOM on.
+1:11.404: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:11.460: Robot 5 has turned its BOM on.
+1:11.572: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:11.628: Robot 7 has turned its BOM on.
+1:11.736: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:11.792: Robot 9 has turned its BOM on.
+1:11.904: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:11.960: Robot 1 has turned its BOM on.
+1:12.16: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:12.72: Robot 2 has turned its BOM on.
+1:12.184: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:12.236: Robot 5 has turned its BOM on.
+1:12.348: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:12.404: Robot 7 has turned its BOM on.
+1:12.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:12.572: Robot 9 has turned its BOM on.
+1:12.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:12.736: Robot 1 has turned its BOM on.
+1:12.848: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:12.904: Robot 2 has turned its BOM on.
+1:13.20: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:13.76: Robot 5 has turned its BOM on.
+1:13.188: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:13.236: Robot 7 has turned its BOM on.
+1:13.292: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:13.348: Robot 9 has turned its BOM on.
+1:13.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:13.516: Robot 1 has turned its BOM on.
+1:13.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:13.684: Robot 2 has turned its BOM on.
+1:13.792: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:13.848: Robot 5 has turned its BOM on.
+1:13.964: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:14.20: Robot 7 has turned its BOM on.
+1:14.132: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:14.188: Robot 9 has turned its BOM on.
+1:14.292: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:14.348: Robot 1 has turned its BOM on.
+1:14.404: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:14.460: Robot 2 has turned its BOM on.
+1:14.572: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:14.628: Robot 5 has turned its BOM on.
+1:14.740: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:14.796: Robot 7 has turned its BOM on.
+1:14.908: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:14.964: Robot 9 has turned its BOM on.
+1:15.76: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:15.132: Robot 1 has turned its BOM on.
+1:15.188: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:15.236: Robot 2 has turned its BOM on.
+1:15.348: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:15.404: Robot 5 has turned its BOM on.
+1:15.516: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:15.572: Robot 7 has turned its BOM on.
+1:15.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:15.736: Robot 9 has turned its BOM on.
+1:15.852: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:15.908: Robot 1 has turned its BOM on.
+1:16.20: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:16.76: Robot 2 has turned its BOM on.
+1:16.132: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:16.188: Robot 5 has turned its BOM on.
+1:16.292: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:16.348: Robot 7 has turned its BOM on.
+1:16.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:16.516: Robot 9 has turned its BOM on.
+1:16.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:16.684: Robot 1 has turned its BOM on.
+1:16.792: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:16.848: Robot 2 has turned its BOM on.
+1:16.960: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:17.16: Robot 5 has turned its BOM on.
+1:17.80: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:17.136: Robot 7 has turned its BOM on.
+1:17.236: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:17.292: Robot 9 has turned its BOM on.
+1:17.404: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:17.460: Robot 1 has turned its BOM on.
+1:17.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:17.628: Robot 2 has turned its BOM on.
+1:17.736: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:17.792: Robot 5 has turned its BOM on.
+1:17.904: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:17.960: Robot 7 has turned its BOM on.
+1:18.76: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:18.132: Robot 9 has turned its BOM on.
+1:18.236: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:18.292: Robot 1 has turned its BOM on.
+1:18.348: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:18.404: Robot 2 has turned its BOM on.
+1:18.516: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:18.572: Robot 5 has turned its BOM on.
+1:18.684: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:18.736: Robot 7 has turned its BOM on.
+1:18.848: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:18.904: Robot 9 has turned its BOM on.
+1:19.16: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:19.72: Robot 1 has turned its BOM on.
+1:19.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:19.236: Robot 2 has turned its BOM on.
+1:19.296: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:19.352: Robot 5 has turned its BOM on.
+1:19.464: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:19.520: Robot 7 has turned its BOM on.
+1:19.632: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:19.688: Robot 9 has turned its BOM on.
+1:19.792: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:19.848: Robot 1 has turned its BOM on.
+1:19.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:20.16: Robot 2 has turned its BOM on.
+1:20.128: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:20.184: Robot 5 has turned its BOM on.
+1:20.240: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:20.296: Robot 7 has turned its BOM on.
+1:20.408: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:20.464: Robot 9 has turned its BOM on.
+1:20.580: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:20.636: Robot 1 has turned its BOM on.
+1:20.736: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:20.792: Robot 2 has turned its BOM on.
+1:20.904: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:20.960: Robot 5 has turned its BOM on.
+1:21.72: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:21.128: Robot 7 has turned its BOM on.
+1:21.184: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:21.236: Robot 9 has turned its BOM on.
+1:21.348: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:21.404: Robot 1 has turned its BOM on.
+1:21.520: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:21.576: Robot 2 has turned its BOM on.
+1:21.688: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:21.736: Robot 5 has turned its BOM on.
+1:21.848: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:21.904: Robot 7 has turned its BOM on.
+1:22.16: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:22.72: Robot 9 has turned its BOM on.
+1:22.128: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:22.184: Robot 1 has turned its BOM on.
+1:22.292: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:22.348: Robot 2 has turned its BOM on.
+1:22.464: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:22.520: Robot 5 has turned its BOM on.
+1:22.632: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:22.688: Robot 7 has turned its BOM on.
+1:22.792: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:22.848: Robot 9 has turned its BOM on.
+1:22.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:23.16: Robot 1 has turned its BOM on.
+1:23.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:23.188: Robot 2 has turned its BOM on.
+1:23.292: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:23.348: Robot 5 has turned its BOM on.
+1:23.408: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:23.464: Robot 7 has turned its BOM on.
+1:23.576: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:23.632: Robot 9 has turned its BOM on.
+1:23.736: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:23.792: Robot 1 has turned its BOM on.
+1:23.904: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:23.960: Robot 2 has turned its BOM on.
+1:24.72: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:24.128: Robot 5 has turned its BOM on.
+1:24.236: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:24.292: Robot 7 has turned its BOM on.
+1:24.352: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:24.408: Robot 9 has turned its BOM on.
+1:24.520: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:24.576: Robot 1 has turned its BOM on.
+1:24.688: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:24.736: Robot 2 has turned its BOM on.
+1:24.848: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:24.904: Robot 5 has turned its BOM on.
+1:25.16: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:25.72: Robot 7 has turned its BOM on.
+1:25.184: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:25.236: Robot 9 has turned its BOM on.
+1:25.296: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:25.352: Robot 1 has turned its BOM on.
+1:25.464: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:25.520: Robot 2 has turned its BOM on.
+1:25.632: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:25.688: Robot 5 has turned its BOM on.
+1:25.792: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:25.848: Robot 7 has turned its BOM on.
+1:25.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:26.16: Robot 9 has turned its BOM on.
+1:26.128: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:26.184: Robot 1 has turned its BOM on.
+1:26.240: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:26.296: Robot 2 has turned its BOM on.
+1:26.408: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:26.465: Robot 5 has turned its BOM on.
+1:26.576: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:26.632: Robot 7 has turned its BOM on.
+1:26.736: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:26.792: Robot 9 has turned its BOM on.
+1:26.904: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:26.960: Robot 1 has turned its BOM on.
+1:27.72: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:27.128: Robot 2 has turned its BOM on.
+1:27.184: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:27.236: Robot 5 has turned its BOM on.
+1:27.348: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:27.404: Robot 7 has turned its BOM on.
+1:27.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:27.576: Robot 9 has turned its BOM on.
+1:27.688: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:27.736: Robot 1 has turned its BOM on.
+1:27.848: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:27.904: Robot 2 has turned its BOM on.
+1:28.16: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:28.72: Robot 5 has turned its BOM on.
+1:28.184: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:28.236: Robot 7 has turned its BOM on.
+1:28.292: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:28.348: Robot 9 has turned its BOM on.
+1:28.464: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:28.520: Robot 1 has turned its BOM on.
+1:28.632: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:28.688: Robot 2 has turned its BOM on.
+1:28.792: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:28.848: Robot 5 has turned its BOM on.
+1:28.964: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:29.20: Robot 7 has turned its BOM on.
+1:29.132: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:29.188: Robot 9 has turned its BOM on.
+1:29.292: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:29.348: Robot 1 has turned its BOM on.
+1:29.404: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:29.460: Robot 2 has turned its BOM on.
+1:29.572: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:29.628: Robot 5 has turned its BOM on.
+1:29.736: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:29.792: Robot 7 has turned its BOM on.
+1:29.904: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:29.960: Robot 9 has turned its BOM on.
+1:30.72: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:30.128: Robot 1 has turned its BOM on.
+1:30.236: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:30.292: Robot 2 has turned its BOM on.
+1:30.352: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:30.408: Robot 5 has turned its BOM on.
+1:30.520: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:30.576: Robot 7 has turned its BOM on.
+1:30.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:30.736: Robot 9 has turned its BOM on.
+1:30.848: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:30.904: Robot 1 has turned its BOM on.
+1:31.20: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:31.76: Robot 2 has turned its BOM on.
+1:31.136: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+1:31.192: Robot 5 has turned its BOM on.
+1:31.296: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:31.352: Robot 7 has turned its BOM on.
+1:31.464: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:31.520: Robot 9 has turned its BOM on.
+1:31.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:31.688: Robot 1 has turned its BOM on.
+1:31.792: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:31.848: Robot 2 has turned its BOM on.
+1:31.960: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:32.17: Robot 5 has turned its BOM on.
+1:32.128: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:32.184: Robot 7 has turned its BOM on.
+1:32.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:32.300: Robot 9 has turned its BOM on.
+1:32.416: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:32.472: Robot 1 has turned its BOM on.
+1:32.584: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:32.640: Robot 2 has turned its BOM on.
+1:32.736: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:32.792: Robot 5 has turned its BOM on.
+1:32.904: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:32.960: Robot 7 has turned its BOM on.
+1:33.72: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:33.128: Robot 9 has turned its BOM on.
+1:33.236: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:33.292: Robot 1 has turned its BOM on.
+1:33.348: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:33.404: Robot 2 has turned its BOM on.
+1:33.520: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:33.576: Robot 5 has turned its BOM on.
+1:33.688: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:33.736: Robot 7 has turned its BOM on.
+1:33.848: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:33.904: Robot 9 has turned its BOM on.
+1:34.16: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:34.72: Robot 1 has turned its BOM on.
+1:34.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:34.236: Robot 2 has turned its BOM on.
+1:34.348: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:34.404: Robot 5 has turned its BOM on.
+1:34.464: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:34.520: Robot 7 has turned its BOM on.
+1:34.632: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:34.688: Robot 9 has turned its BOM on.
+1:34.792: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:34.848: Robot 1 has turned its BOM on.
+1:34.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:35.16: Robot 2 has turned its BOM on.
+1:35.128: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+1:35.184: Robot 5 has turned its BOM on.
+1:35.292: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:35.348: Robot 7 has turned its BOM on.
+1:35.404: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:35.460: Robot 9 has turned its BOM on.
+1:35.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:35.628: Robot 1 has turned its BOM on.
+1:35.736: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:35.792: Robot 2 has turned its BOM on.
+1:35.904: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:35.960: Robot 5 has turned its BOM on.
+1:36.72: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:36.128: Robot 7 has turned its BOM on.
+1:36.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:36.236: Robot 9 has turned its BOM on.
+1:36.348: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:36.404: Robot 1 has turned its BOM on.
+1:36.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:36.572: Robot 2 has turned its BOM on.
+1:36.688: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:36.736: Robot 5 has turned its BOM on.
+1:36.852: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:36.908: Robot 7 has turned its BOM on.
+1:37.20: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:37.76: Robot 9 has turned its BOM on.
+1:37.132: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:37.188: Robot 1 has turned its BOM on.
+1:37.292: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:37.348: Robot 2 has turned its BOM on.
+1:37.460: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:37.516: Robot 5 has turned its BOM on.
+1:37.628: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:37.684: Robot 7 has turned its BOM on.
+1:37.792: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:37.848: Robot 9 has turned its BOM on.
+1:37.964: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:38.20: Robot 1 has turned its BOM on.
+1:38.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:38.188: Robot 2 has turned its BOM on.
+1:38.292: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:38.348: Robot 5 has turned its BOM on.
+1:38.404: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:38.460: Robot 7 has turned its BOM on.
+1:38.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:38.628: Robot 9 has turned its BOM on.
+1:38.736: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:38.792: Robot 1 has turned its BOM on.
+1:38.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:38.964: Robot 2 has turned its BOM on.
+1:39.77: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:39.132: Robot 5 has turned its BOM on.
+1:39.236: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:39.292: Robot 7 has turned its BOM on.
+1:39.404: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:39.460: Robot 9 has turned its BOM on.
+1:39.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:39.572: Robot 1 has turned its BOM on.
+1:39.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:39.736: Robot 2 has turned its BOM on.
+1:39.852: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:39.908: Robot 5 has turned its BOM on.
+1:40.20: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:40.76: Robot 7 has turned its BOM on.
+1:40.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:40.236: Robot 9 has turned its BOM on.
+1:40.348: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:40.404: Robot 1 has turned its BOM on.
+1:40.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:40.516: Robot 2 has turned its BOM on.
+1:40.628: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:40.684: Robot 5 has turned its BOM on.
+1:40.796: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:40.852: Robot 7 has turned its BOM on.
+1:40.964: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:41.20: Robot 9 has turned its BOM on.
+1:41.132: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:41.188: Robot 1 has turned its BOM on.
+1:41.292: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:41.348: Robot 2 has turned its BOM on.
+1:41.404: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:41.460: Robot 5 has turned its BOM on.
+1:41.572: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:41.628: Robot 7 has turned its BOM on.
+1:41.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:41.796: Robot 9 has turned its BOM on.
+1:41.908: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:41.964: Robot 1 has turned its BOM on.
+1:42.76: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:42.132: Robot 2 has turned its BOM on.
+1:42.188: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:42.236: Robot 5 has turned its BOM on.
+1:42.348: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:42.404: Robot 7 has turned its BOM on.
+1:42.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:42.572: Robot 9 has turned its BOM on.
+1:42.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:42.736: Robot 1 has turned its BOM on.
+1:42.848: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:42.904: Robot 2 has turned its BOM on.
+1:43.16: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:43.72: Robot 5 has turned its BOM on.
+1:43.188: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:43.236: Robot 7 has turned its BOM on.
+1:43.348: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:43.404: Robot 9 has turned its BOM on.
+1:43.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:43.516: Robot 1 has turned its BOM on.
+1:43.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:43.684: Robot 2 has turned its BOM on.
+1:43.792: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:43.848: Robot 5 has turned its BOM on.
+1:43.964: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:44.20: Robot 7 has turned its BOM on.
+1:44.132: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:44.188: Robot 9 has turned its BOM on.
+1:44.296: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:44.352: Robot 1 has turned its BOM on.
+1:44.412: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:44.468: Robot 2 has turned its BOM on.
+1:44.580: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:44.636: Robot 5 has turned its BOM on.
+1:44.736: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:44.792: Robot 7 has turned its BOM on.
+1:44.908: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:44.964: Robot 9 has turned its BOM on.
+1:45.76: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:45.133: Robot 1 has turned its BOM on.
+1:45.236: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:45.292: Robot 2 has turned its BOM on.
+1:45.404: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:45.460: Robot 5 has turned its BOM on.
+1:45.516: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:45.572: Robot 7 has turned its BOM on.
+1:45.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:45.736: Robot 9 has turned its BOM on.
+1:45.852: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:45.908: Robot 1 has turned its BOM on.
+1:46.20: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:46.76: Robot 2 has turned its BOM on.
+1:46.188: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:46.236: Robot 5 has turned its BOM on.
+1:46.348: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:46.404: Robot 7 has turned its BOM on.
+1:46.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:46.516: Robot 9 has turned its BOM on.
+1:46.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:46.684: Robot 1 has turned its BOM on.
+1:46.796: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:46.852: Robot 2 has turned its BOM on.
+1:46.964: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:47.20: Robot 5 has turned its BOM on.
+1:47.132: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:47.188: Robot 7 has turned its BOM on.
+1:47.292: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:47.348: Robot 9 has turned its BOM on.
+1:47.404: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:47.460: Robot 1 has turned its BOM on.
+1:47.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:47.628: Robot 2 has turned its BOM on.
+1:47.740: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:47.796: Robot 5 has turned its BOM on.
+1:47.908: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:47.964: Robot 7 has turned its BOM on.
+1:48.76: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:48.132: Robot 9 has turned its BOM on.
+1:48.236: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:48.292: Robot 1 has turned its BOM on.
+1:48.348: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:48.404: Robot 2 has turned its BOM on.
+1:48.516: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:48.572: Robot 5 has turned its BOM on.
+1:48.684: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:48.736: Robot 7 has turned its BOM on.
+1:48.848: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:48.904: Robot 9 has turned its BOM on.
+1:49.20: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:49.76: Robot 1 has turned its BOM on.
+1:49.188: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:49.236: Robot 2 has turned its BOM on.
+1:49.348: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:49.404: Robot 5 has turned its BOM on.
+1:49.516: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:49.572: Robot 7 has turned its BOM on.
+1:49.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:49.684: Robot 9 has turned its BOM on.
+1:49.792: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:49.848: Robot 1 has turned its BOM on.
+1:49.964: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:50.20: Robot 2 has turned its BOM on.
+1:50.132: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:50.188: Robot 5 has turned its BOM on.
+1:50.292: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:50.348: Robot 7 has turned its BOM on.
+1:50.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:50.516: Robot 9 has turned its BOM on.
+1:50.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:50.628: Robot 1 has turned its BOM on.
+1:50.736: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:50.792: Robot 2 has turned its BOM on.
+1:50.912: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:50.968: Robot 5 has turned its BOM on.
+1:51.80: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:51.136: Robot 7 has turned its BOM on.
+1:51.196: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:51.236: Robot 9 has turned its BOM on.
+1:51.404: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:51.460: Robot 1 has turned its BOM on.
+1:51.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:51.572: Robot 2 has turned its BOM on.
+1:51.685: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:51.736: Robot 5 has turned its BOM on.
+1:51.848: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:51.904: Robot 7 has turned its BOM on.
+1:52.20: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:52.76: Robot 9 has turned its BOM on.
+1:52.189: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:52.236: Robot 1 has turned its BOM on.
+1:52.348: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:52.404: Robot 2 has turned its BOM on.
+1:52.460: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:52.516: Robot 5 has turned its BOM on.
+1:52.628: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+1:52.684: Robot 7 has turned its BOM on.
+1:52.796: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:52.852: Robot 9 has turned its BOM on.
+1:52.964: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:53.20: Robot 1 has turned its BOM on.
+1:53.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:53.188: Robot 2 has turned its BOM on.
+1:53.296: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:53.352: Robot 5 has turned its BOM on.
+1:53.408: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:53.464: Robot 7 has turned its BOM on.
+1:53.576: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:53.632: Robot 9 has turned its BOM on.
+1:53.736: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:53.792: Robot 1 has turned its BOM on.
+1:53.904: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:53.960: Robot 2 has turned its BOM on.
+1:54.76: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:54.132: Robot 5 has turned its BOM on.
+1:54.236: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:54.292: Robot 7 has turned its BOM on.
+1:54.404: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:54.460: Robot 9 has turned its BOM on.
+1:54.520: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:54.576: Robot 1 has turned its BOM on.
+1:54.688: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:54.736: Robot 2 has turned its BOM on.
+1:54.848: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:54.904: Robot 5 has turned its BOM on.
+1:55.16: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:55.72: Robot 7 has turned its BOM on.
+1:55.184: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:55.236: Robot 9 has turned its BOM on.
+1:55.348: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:55.404: Robot 1 has turned its BOM on.
+1:55.464: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:55.520: Robot 2 has turned its BOM on.
+1:55.632: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:55.688: Robot 5 has turned its BOM on.
+1:55.792: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:55.848: Robot 7 has turned its BOM on.
+1:55.960: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:56.16: Robot 9 has turned its BOM on.
+1:56.128: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:56.184: Robot 1 has turned its BOM on.
+1:56.292: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:56.348: Robot 2 has turned its BOM on.
+1:56.408: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:56.464: Robot 5 has turned its BOM on.
+1:56.576: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:56.632: Robot 7 has turned its BOM on.
+1:56.736: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:56.792: Robot 9 has turned its BOM on.
+1:56.904: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:56.960: Robot 1 has turned its BOM on.
+1:57.72: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:57.128: Robot 2 has turned its BOM on.
+1:57.236: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:57.292: Robot 5 has turned its BOM on.
+1:57.352: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:57.408: Robot 7 has turned its BOM on.
+1:57.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:57.576: Robot 9 has turned its BOM on.
+1:57.692: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:57.737: Robot 1 has turned its BOM on.
+1:57.848: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:57.904: Robot 2 has turned its BOM on.
+1:58.16: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:58.72: Robot 5 has turned its BOM on.
+1:58.184: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:58.236: Robot 7 has turned its BOM on.
+1:58.348: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:58.404: Robot 9 has turned its BOM on.
+1:58.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:58.516: Robot 1 has turned its BOM on.
+1:58.632: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:58.688: Robot 2 has turned its BOM on.
+1:58.792: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+1:58.848: Robot 5 has turned its BOM on.
+1:58.960: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:59.16: Robot 7 has turned its BOM on.
+1:59.128: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:59.184: Robot 9 has turned its BOM on.
+1:59.296: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+1:59.352: Robot 1 has turned its BOM on.
+1:59.464: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+1:59.520: Robot 2 has turned its BOM on.
+1:59.576: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+1:59.632: Robot 5 has turned its BOM on.
+1:59.736: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+1:59.792: Robot 7 has turned its BOM on.
+1:59.904: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+1:59.960: Robot 9 has turned its BOM on.
+2:0.72: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:0.128: Robot 1 has turned its BOM on.
+2:0.236: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:0.292: Robot 2 has turned its BOM on.
+2:0.404: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:0.460: Robot 5 has turned its BOM on.
+2:0.520: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:0.576: Robot 7 has turned its BOM on.
+2:0.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:0.736: Robot 9 has turned its BOM on.
+2:0.848: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:0.904: Robot 1 has turned its BOM on.
+2:1.16: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:1.72: Robot 2 has turned its BOM on.
+2:1.184: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:1.236: Robot 5 has turned its BOM on.
+2:1.348: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:1.404: Robot 7 has turned its BOM on.
+2:1.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:1.516: Robot 9 has turned its BOM on.
+2:1.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:1.684: Robot 1 has turned its BOM on.
+2:1.792: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:1.848: Robot 2 has turned its BOM on.
+2:1.960: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:2.16: Robot 5 has turned its BOM on.
+2:2.128: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:2.184: Robot 7 has turned its BOM on.
+2:2.292: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:2.348: Robot 9 has turned its BOM on.
+2:2.408: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:2.464: Robot 1 has turned its BOM on.
+2:2.580: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:2.636: Robot 2 has turned its BOM on.
+2:2.736: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:2.792: Robot 5 has turned its BOM on.
+2:2.904: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:2.960: Robot 7 has turned its BOM on.
+2:3.72: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:3.128: Robot 9 has turned its BOM on.
+2:3.236: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:3.292: Robot 1 has turned its BOM on.
+2:3.352: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:3.408: Robot 2 has turned its BOM on.
+2:3.520: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:3.576: Robot 5 has turned its BOM on.
+2:3.688: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:3.736: Robot 7 has turned its BOM on.
+2:3.848: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:3.904: Robot 9 has turned its BOM on.
+2:4.16: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:4.72: Robot 1 has turned its BOM on.
+2:4.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:4.236: Robot 2 has turned its BOM on.
+2:4.352: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:4.408: Robot 5 has turned its BOM on.
+2:4.520: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:4.576: Robot 7 has turned its BOM on.
+2:4.632: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:4.688: Robot 9 has turned its BOM on.
+2:4.793: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:4.848: Robot 1 has turned its BOM on.
+2:4.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:5.16: Robot 2 has turned its BOM on.
+2:5.128: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:5.184: Robot 5 has turned its BOM on.
+2:5.297: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:5.353: Robot 7 has turned its BOM on.
+2:5.464: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:5.520: Robot 9 has turned its BOM on.
+2:5.576: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:5.632: Robot 1 has turned its BOM on.
+2:5.736: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:5.792: Robot 2 has turned its BOM on.
+2:5.904: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:5.960: Robot 5 has turned its BOM on.
+2:6.72: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:6.128: Robot 7 has turned its BOM on.
+2:6.240: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:6.296: Robot 9 has turned its BOM on.
+2:6.408: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:6.464: Robot 1 has turned its BOM on.
+2:6.520: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:6.576: Robot 2 has turned its BOM on.
+2:6.688: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:6.736: Robot 5 has turned its BOM on.
+2:6.848: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:6.904: Robot 7 has turned its BOM on.
+2:7.16: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:7.72: Robot 9 has turned its BOM on.
+2:7.184: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:7.236: Robot 1 has turned its BOM on.
+2:7.348: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:7.404: Robot 2 has turned its BOM on.
+2:7.460: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:7.516: Robot 5 has turned its BOM on.
+2:7.628: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:7.684: Robot 7 has turned its BOM on.
+2:7.792: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:7.848: Robot 9 has turned its BOM on.
+2:7.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:10.144: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:10.200: Robot 2 has requested to join the token ring.
+2:10.236: Robot 2 has turned its BOM on.
+2:10.292: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 8)(7 11)(9 9)
+2:10.348: Robot 5 has turned its BOM on.
+2:10.405: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:10.460: Robot 7 has turned its BOM on.
+2:10.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:10.628: Robot 9 has turned its BOM on.
+2:10.736: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:10.792: Robot 2 has turned its BOM on.
+2:10.852: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 8)(7 11)(9 9)
+2:10.908: Robot 5 has turned its BOM on.
+2:11.20: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 9)
+2:11.76: Robot 7 has turned its BOM on.
+2:11.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:11.236: Robot 9 has turned its BOM on.
+2:11.348: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:11.404: Robot 2 has turned its BOM on.
+2:11.460: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 8)(7 11)(9 9)
+2:11.516: Robot 5 has turned its BOM on.
+2:11.628: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:11.684: Robot 7 has turned its BOM on.
+2:11.796: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:11.852: Robot 9 has turned its BOM on.
+2:11.964: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:12.20: Robot 2 has turned its BOM on.
+2:12.132: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 8)(7 11)(9 9)
+2:12.188: Robot 5 has turned its BOM on.
+2:12.236: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:12.292: Robot 7 has turned its BOM on.
+2:12.404: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:12.460: Robot 9 has turned its BOM on.
+2:12.572: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:12.628: Robot 2 has turned its BOM on.
+2:12.736: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 8)(7 11)(9 9)
+2:12.792: Robot 5 has turned its BOM on.
+2:12.852: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:12.908: Robot 7 has turned its BOM on.
+2:13.20: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:13.76: Robot 9 has turned its BOM on.
+2:13.188: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:13.236: Robot 2 has turned its BOM on.
+2:13.348: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+2:13.404: Robot 5 has turned its BOM on.
+2:13.460: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:13.516: Robot 7 has turned its BOM on.
+2:13.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:13.684: Robot 9 has turned its BOM on.
+2:13.792: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:13.848: Robot 2 has turned its BOM on.
+2:13.964: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+2:14.20: Robot 5 has turned its BOM on.
+2:14.132: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:14.188: Robot 7 has turned its BOM on.
+2:14.236: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:14.292: Robot 9 has turned its BOM on.
+2:14.348: Robot 1 has requested to join the token ring.
+2:14.404: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:14.461: Robot 2 has turned its BOM on.
+2:14.572: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 8)(7 11)(9 9)
+2:14.628: Robot 5 has turned its BOM on.
+2:14.736: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+2:14.792: Robot 7 has turned its BOM on.
+2:14.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+2:14.908: Robot 9 has turned its BOM on.
+2:15.20: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:15.76: Robot 1 has turned its BOM on.
+2:15.188: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:15.236: Robot 2 has turned its BOM on.
+2:15.349: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:15.405: Robot 5 has turned its BOM on.
+2:15.516: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:15.572: Robot 7 has turned its BOM on.
+2:15.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:15.736: Robot 9 has turned its BOM on.
+2:15.796: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:15.852: Robot 1 has turned its BOM on.
+2:15.964: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:16.20: Robot 2 has turned its BOM on.
+2:16.133: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:16.188: Robot 5 has turned its BOM on.
+2:16.292: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:16.348: Robot 7 has turned its BOM on.
+2:16.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:16.516: Robot 9 has turned its BOM on.
+2:16.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:16.684: Robot 1 has turned its BOM on.
+2:16.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:16.796: Robot 2 has turned its BOM on.
+2:16.909: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:16.965: Robot 5 has turned its BOM on.
+2:17.76: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:17.132: Robot 7 has turned its BOM on.
+2:17.236: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:17.293: Robot 9 has turned its BOM on.
+2:17.404: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:17.461: Robot 1 has turned its BOM on.
+2:17.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:17.628: Robot 2 has turned its BOM on.
+2:17.684: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:17.736: Robot 5 has turned its BOM on.
+2:17.848: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:17.905: Robot 7 has turned its BOM on.
+2:18.20: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:18.76: Robot 9 has turned its BOM on.
+2:18.189: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:18.236: Robot 1 has turned its BOM on.
+2:18.349: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:18.404: Robot 2 has turned its BOM on.
+2:18.516: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:18.573: Robot 5 has turned its BOM on.
+2:18.684: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:18.736: Robot 7 has turned its BOM on.
+2:18.792: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:18.848: Robot 9 has turned its BOM on.
+2:18.965: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:19.20: Robot 1 has turned its BOM on.
+2:19.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:19.188: Robot 2 has turned its BOM on.
+2:19.292: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:19.349: Robot 5 has turned its BOM on.
+2:19.461: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:19.517: Robot 7 has turned its BOM on.
+2:19.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:19.685: Robot 9 has turned its BOM on.
+2:19.793: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:19.849: Robot 1 has turned its BOM on.
+2:19.913: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:19.969: Robot 2 has turned its BOM on.
+2:20.85: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:20.141: Robot 5 has turned its BOM on.
+2:20.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:20.293: Robot 7 has turned its BOM on.
+2:20.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:20.465: Robot 9 has turned its BOM on.
+2:20.577: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:20.633: Robot 1 has turned its BOM on.
+2:20.693: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:20.737: Robot 2 has turned its BOM on.
+2:20.853: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:20.909: Robot 5 has turned its BOM on.
+2:21.21: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:21.77: Robot 7 has turned its BOM on.
+2:21.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:21.237: Robot 9 has turned its BOM on.
+2:21.353: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:21.409: Robot 1 has turned its BOM on.
+2:21.521: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:21.577: Robot 2 has turned its BOM on.
+2:21.637: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:21.693: Robot 5 has turned its BOM on.
+2:21.797: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:21.853: Robot 7 has turned its BOM on.
+2:21.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:22.21: Robot 9 has turned its BOM on.
+2:22.133: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:22.189: Robot 1 has turned its BOM on.
+2:22.293: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:22.349: Robot 2 has turned its BOM on.
+2:22.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:22.517: Robot 5 has turned its BOM on.
+2:22.629: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:22.685: Robot 7 has turned its BOM on.
+2:22.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:22.797: Robot 9 has turned its BOM on.
+2:22.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:22.965: Robot 1 has turned its BOM on.
+2:23.81: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:23.137: Robot 2 has turned its BOM on.
+2:23.237: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:23.293: Robot 5 has turned its BOM on.
+2:23.405: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:23.461: Robot 7 has turned its BOM on.
+2:23.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:23.629: Robot 9 has turned its BOM on.
+2:23.737: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:23.793: Robot 1 has turned its BOM on.
+2:23.849: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:23.905: Robot 2 has turned its BOM on.
+2:24.25: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:24.81: Robot 5 has turned its BOM on.
+2:24.197: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:24.237: Robot 7 has turned its BOM on.
+2:24.349: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:24.405: Robot 9 has turned its BOM on.
+2:24.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:24.573: Robot 1 has turned its BOM on.
+2:24.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:24.737: Robot 2 has turned its BOM on.
+2:24.849: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:24.905: Robot 5 has turned its BOM on.
+2:24.965: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:25.21: Robot 7 has turned its BOM on.
+2:25.133: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:25.189: Robot 9 has turned its BOM on.
+2:25.293: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:25.349: Robot 1 has turned its BOM on.
+2:25.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:25.517: Robot 2 has turned its BOM on.
+2:25.629: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:25.685: Robot 5 has turned its BOM on.
+2:25.793: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:25.849: Robot 7 has turned its BOM on.
+2:25.909: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:25.965: Robot 9 has turned its BOM on.
+2:26.77: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:26.133: Robot 1 has turned its BOM on.
+2:26.237: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:26.293: Robot 2 has turned its BOM on.
+2:26.405: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:26.461: Robot 5 has turned its BOM on.
+2:26.573: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:26.629: Robot 7 has turned its BOM on.
+2:26.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:26.793: Robot 9 has turned its BOM on.
+2:26.853: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:26.909: Robot 1 has turned its BOM on.
+2:27.21: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:27.77: Robot 2 has turned its BOM on.
+2:27.189: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:27.237: Robot 5 has turned its BOM on.
+2:27.353: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:27.409: Robot 7 has turned its BOM on.
+2:27.521: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:27.577: Robot 9 has turned its BOM on.
+2:27.633: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:27.689: Robot 1 has turned its BOM on.
+2:27.793: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:27.849: Robot 2 has turned its BOM on.
+2:27.961: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:28.17: Robot 5 has turned its BOM on.
+2:28.129: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:28.185: Robot 7 has turned its BOM on.
+2:28.293: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:28.349: Robot 9 has turned its BOM on.
+2:28.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:28.517: Robot 1 has turned its BOM on.
+2:28.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:28.689: Robot 2 has turned its BOM on.
+2:28.793: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:28.849: Robot 5 has turned its BOM on.
+2:28.905: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:28.961: Robot 7 has turned its BOM on.
+2:29.73: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:29.129: Robot 9 has turned its BOM on.
+2:29.237: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:29.293: Robot 1 has turned its BOM on.
+2:29.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:29.465: Robot 2 has turned its BOM on.
+2:29.577: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:29.633: Robot 5 has turned its BOM on.
+2:29.737: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:29.793: Robot 7 has turned its BOM on.
+2:29.905: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:29.961: Robot 9 has turned its BOM on.
+2:30.17: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:30.73: Robot 1 has turned its BOM on.
+2:30.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:30.237: Robot 2 has turned its BOM on.
+2:30.353: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:30.409: Robot 5 has turned its BOM on.
+2:30.521: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:30.577: Robot 7 has turned its BOM on.
+2:30.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:30.737: Robot 9 has turned its BOM on.
+2:30.849: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:30.905: Robot 1 has turned its BOM on.
+2:30.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:31.17: Robot 2 has turned its BOM on.
+2:31.129: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:31.185: Robot 5 has turned its BOM on.
+2:31.297: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:31.353: Robot 7 has turned its BOM on.
+2:31.465: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:31.521: Robot 9 has turned its BOM on.
+2:31.633: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:31.689: Robot 1 has turned its BOM on.
+2:31.793: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:31.849: Robot 2 has turned its BOM on.
+2:31.905: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:31.961: Robot 5 has turned its BOM on.
+2:32.73: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:32.129: Robot 7 has turned its BOM on.
+2:32.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:32.297: Robot 9 has turned its BOM on.
+2:32.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:32.465: Robot 1 has turned its BOM on.
+2:32.577: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:32.633: Robot 2 has turned its BOM on.
+2:32.689: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:32.737: Robot 5 has turned its BOM on.
+2:32.849: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:32.905: Robot 7 has turned its BOM on.
+2:33.17: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:33.73: Robot 9 has turned its BOM on.
+2:33.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:33.237: Robot 1 has turned its BOM on.
+2:33.349: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:33.405: Robot 2 has turned its BOM on.
+2:33.517: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:33.573: Robot 5 has turned its BOM on.
+2:33.685: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:33.737: Robot 7 has turned its BOM on.
+2:33.793: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:33.849: Robot 9 has turned its BOM on.
+2:33.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:34.17: Robot 1 has turned its BOM on.
+2:34.137: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:34.193: Robot 2 has turned its BOM on.
+2:34.293: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:34.349: Robot 5 has turned its BOM on.
+2:34.465: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:34.521: Robot 7 has turned its BOM on.
+2:34.637: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:34.693: Robot 9 has turned its BOM on.
+2:34.793: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:34.849: Robot 1 has turned its BOM on.
+2:34.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:35.17: Robot 2 has turned its BOM on.
+2:35.73: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:35.129: Robot 5 has turned its BOM on.
+2:35.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:35.293: Robot 7 has turned its BOM on.
+2:35.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:35.465: Robot 9 has turned its BOM on.
+2:35.577: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:35.633: Robot 1 has turned its BOM on.
+2:35.737: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:35.793: Robot 2 has turned its BOM on.
+2:35.905: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 8)(7 11)(9 9)
+2:35.961: Robot 5 has turned its BOM on.
+2:36.17: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:36.73: Robot 7 has turned its BOM on.
+2:36.185: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:36.237: Robot 9 has turned its BOM on.
+2:36.353: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:36.409: Robot 1 has turned its BOM on.
+2:36.521: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:36.577: Robot 2 has turned its BOM on.
+2:36.689: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:36.737: Robot 5 has turned its BOM on.
+2:36.849: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:36.905: Robot 7 has turned its BOM on.
+2:36.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:37.17: Robot 9 has turned its BOM on.
+2:37.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:37.185: Robot 1 has turned its BOM on.
+2:37.293: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:37.349: Robot 2 has turned its BOM on.
+2:37.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:37.517: Robot 5 has turned its BOM on.
+2:37.629: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:37.685: Robot 7 has turned its BOM on.
+2:37.793: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:37.849: Robot 9 has turned its BOM on.
+2:37.905: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:37.961: Robot 1 has turned its BOM on.
+2:38.73: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:38.129: Robot 2 has turned its BOM on.
+2:38.241: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:38.297: Robot 5 has turned its BOM on.
+2:38.409: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:38.465: Robot 7 has turned its BOM on.
+2:38.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:38.633: Robot 9 has turned its BOM on.
+2:38.737: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:38.793: Robot 1 has turned its BOM on.
+2:38.849: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:38.905: Robot 2 has turned its BOM on.
+2:39.17: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:39.73: Robot 5 has turned its BOM on.
+2:39.185: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:39.237: Robot 7 has turned its BOM on.
+2:39.349: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:39.405: Robot 9 has turned its BOM on.
+2:39.521: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:39.577: Robot 1 has turned its BOM on.
+2:39.693: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:39.737: Robot 2 has turned its BOM on.
+2:39.849: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:39.905: Robot 5 has turned its BOM on.
+2:40.17: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:40.73: Robot 7 has turned its BOM on.
+2:40.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:40.185: Robot 9 has turned its BOM on.
+2:40.293: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:40.349: Robot 1 has turned its BOM on.
+2:40.465: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:40.521: Robot 2 has turned its BOM on.
+2:40.637: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:40.693: Robot 5 has turned its BOM on.
+2:40.793: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:40.849: Robot 7 has turned its BOM on.
+2:40.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:41.17: Robot 9 has turned its BOM on.
+2:41.73: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:41.129: Robot 1 has turned its BOM on.
+2:41.237: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:41.293: Robot 2 has turned its BOM on.
+2:41.409: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:41.465: Robot 5 has turned its BOM on.
+2:41.577: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:41.633: Robot 7 has turned its BOM on.
+2:41.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:41.793: Robot 9 has turned its BOM on.
+2:41.905: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:41.961: Robot 1 has turned its BOM on.
+2:42.17: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:42.73: Robot 2 has turned its BOM on.
+2:42.185: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:42.237: Robot 5 has turned its BOM on.
+2:42.357: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:42.413: Robot 7 has turned its BOM on.
+2:42.525: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:42.581: Robot 9 has turned its BOM on.
+2:42.641: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:42.697: Robot 1 has turned its BOM on.
+2:42.849: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:42.905: Robot 2 has turned its BOM on.
+2:42.961: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:43.17: Robot 5 has turned its BOM on.
+2:43.129: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:43.185: Robot 7 has turned its BOM on.
+2:43.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:43.353: Robot 9 has turned its BOM on.
+2:43.465: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:43.521: Robot 1 has turned its BOM on.
+2:43.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:43.689: Robot 2 has turned its BOM on.
+2:43.793: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:43.849: Robot 5 has turned its BOM on.
+2:43.905: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:43.961: Robot 7 has turned its BOM on.
+2:44.73: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:44.129: Robot 9 has turned its BOM on.
+2:44.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:44.297: Robot 1 has turned its BOM on.
+2:44.417: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:44.473: Robot 2 has turned its BOM on.
+2:44.585: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:44.641: Robot 5 has turned its BOM on.
+2:44.701: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:44.737: Robot 7 has turned its BOM on.
+2:44.905: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:44.961: Robot 9 has turned its BOM on.
+2:45.77: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:45.133: Robot 1 has turned its BOM on.
+2:45.189: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:45.237: Robot 2 has turned its BOM on.
+2:45.349: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:45.405: Robot 5 has turned its BOM on.
+2:45.517: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:45.573: Robot 7 has turned its BOM on.
+2:45.685: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:45.737: Robot 9 has turned its BOM on.
+2:45.849: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:45.905: Robot 1 has turned its BOM on.
+2:45.965: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:46.21: Robot 2 has turned its BOM on.
+2:46.133: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:46.189: Robot 5 has turned its BOM on.
+2:46.293: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:46.349: Robot 7 has turned its BOM on.
+2:46.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:46.517: Robot 9 has turned its BOM on.
+2:46.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:46.685: Robot 1 has turned its BOM on.
+2:46.793: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:46.849: Robot 2 has turned its BOM on.
+2:46.913: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:46.969: Robot 5 has turned its BOM on.
+2:47.85: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:47.141: Robot 7 has turned its BOM on.
+2:47.237: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:47.293: Robot 9 has turned its BOM on.
+2:47.413: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:47.469: Robot 1 has turned its BOM on.
+2:47.581: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:47.637: Robot 2 has turned its BOM on.
+2:47.693: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:47.737: Robot 5 has turned its BOM on.
+2:47.853: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:47.909: Robot 7 has turned its BOM on.
+2:48.21: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:48.77: Robot 9 has turned its BOM on.
+2:48.189: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:48.237: Robot 1 has turned its BOM on.
+2:48.349: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:48.405: Robot 2 has turned its BOM on.
+2:48.517: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:48.573: Robot 5 has turned its BOM on.
+2:48.685: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:48.737: Robot 7 has turned its BOM on.
+2:48.853: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:48.909: Robot 9 has turned its BOM on.
+2:48.965: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:49.21: Robot 1 has turned its BOM on.
+2:49.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:49.189: Robot 2 has turned its BOM on.
+2:49.293: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:49.349: Robot 5 has turned its BOM on.
+2:49.461: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:49.517: Robot 7 has turned its BOM on.
+2:49.633: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:49.689: Robot 9 has turned its BOM on.
+2:49.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:49.853: Robot 1 has turned its BOM on.
+2:49.965: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:50.21: Robot 2 has turned its BOM on.
+2:50.77: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:50.133: Robot 5 has turned its BOM on.
+2:50.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:50.293: Robot 7 has turned its BOM on.
+2:50.405: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:50.461: Robot 9 has turned its BOM on.
+2:50.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:50.629: Robot 1 has turned its BOM on.
+2:50.737: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:50.793: Robot 2 has turned its BOM on.
+2:50.905: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:50.961: Robot 5 has turned its BOM on.
+2:51.21: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:51.77: Robot 7 has turned its BOM on.
+2:51.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:51.237: Robot 9 has turned its BOM on.
+2:51.349: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:51.405: Robot 1 has turned its BOM on.
+2:51.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:51.573: Robot 2 has turned its BOM on.
+2:51.686: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:51.737: Robot 5 has turned its BOM on.
+2:51.849: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:51.905: Robot 7 has turned its BOM on.
+2:51.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:52.21: Robot 9 has turned its BOM on.
+2:52.133: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:52.190: Robot 1 has turned its BOM on.
+2:52.293: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:52.349: Robot 2 has turned its BOM on.
+2:52.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:52.517: Robot 5 has turned its BOM on.
+2:52.629: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:52.685: Robot 7 has turned its BOM on.
+2:52.793: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:52.849: Robot 9 has turned its BOM on.
+2:52.913: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:52.969: Robot 1 has turned its BOM on.
+2:53.85: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:53.141: Robot 2 has turned its BOM on.
+2:53.237: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:53.293: Robot 5 has turned its BOM on.
+2:53.405: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:53.461: Robot 7 has turned its BOM on.
+2:53.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:53.629: Robot 9 has turned its BOM on.
+2:53.737: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:53.793: Robot 1 has turned its BOM on.
+2:53.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:53.965: Robot 2 has turned its BOM on.
+2:54.21: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:54.77: Robot 5 has turned its BOM on.
+2:54.189: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:54.237: Robot 7 has turned its BOM on.
+2:54.349: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:54.405: Robot 9 has turned its BOM on.
+2:54.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:54.573: Robot 1 has turned its BOM on.
+2:54.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:54.737: Robot 2 has turned its BOM on.
+2:54.849: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:54.905: Robot 5 has turned its BOM on.
+2:55.17: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:55.73: Robot 7 has turned its BOM on.
+2:55.133: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:55.189: Robot 9 has turned its BOM on.
+2:55.293: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:55.349: Robot 1 has turned its BOM on.
+2:55.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:55.517: Robot 2 has turned its BOM on.
+2:55.629: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:55.685: Robot 5 has turned its BOM on.
+2:55.797: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:55.853: Robot 7 has turned its BOM on.
+2:55.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:56.21: Robot 9 has turned its BOM on.
+2:56.77: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:56.133: Robot 1 has turned its BOM on.
+2:56.237: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:56.293: Robot 2 has turned its BOM on.
+2:56.405: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:56.461: Robot 5 has turned its BOM on.
+2:56.573: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+2:56.629: Robot 7 has turned its BOM on.
+2:56.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:56.793: Robot 9 has turned its BOM on.
+2:56.905: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:56.961: Robot 1 has turned its BOM on.
+2:57.21: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+2:57.77: Robot 2 has turned its BOM on.
+2:57.189: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+2:57.237: Robot 5 has turned its BOM on.
+2:57.349: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+2:57.405: Robot 7 has turned its BOM on.
+2:57.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+2:57.573: Robot 9 has turned its BOM on.
+2:57.685: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+2:59.685: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+2:59.849: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+2:59.905: Robot 5 has turned its BOM on.
+2:59.965: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 9)
+3:0.21: Robot 7 has turned its BOM on.
+3:0.133: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:0.189: Robot 9 has turned its BOM on.
+3:0.293: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:0.349: Robot 2 has turned its BOM on.
+3:0.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:0.517: Robot 5 has turned its BOM on.
+3:0.573: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:0.629: Robot 7 has turned its BOM on.
+3:0.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:0.793: Robot 9 has turned its BOM on.
+3:0.909: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:0.965: Robot 2 has turned its BOM on.
+3:1.77: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:1.133: Robot 5 has turned its BOM on.
+3:1.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 9)
+3:1.293: Robot 7 has turned its BOM on.
+3:1.349: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:1.405: Robot 9 has turned its BOM on.
+3:1.517: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:1.573: Robot 2 has turned its BOM on.
+3:1.685: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:1.737: Robot 5 has turned its BOM on.
+3:1.849: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:1.905: Robot 7 has turned its BOM on.
+3:1.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:2.17: Robot 9 has turned its BOM on.
+3:2.297: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:2.353: Robot 5 has turned its BOM on.
+3:2.465: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:2.521: Robot 7 has turned its BOM on.
+3:2.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:2.633: Robot 9 has turned its BOM on.
+3:2.737: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:2.793: Robot 2 has turned its BOM on.
+3:2.905: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:2.961: Robot 5 has turned its BOM on.
+3:3.81: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:3.137: Robot 7 has turned its BOM on.
+3:3.193: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:3.237: Robot 9 has turned its BOM on.
+3:3.349: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:3.405: Robot 2 has turned its BOM on.
+3:3.517: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:3.573: Robot 5 has turned its BOM on.
+3:3.685: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 9)
+3:3.737: Robot 7 has turned its BOM on.
+3:3.849: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:3.905: Robot 1 has requested to join the token ring.
+3:3.961: Robot 9 has turned its BOM on.
+3:4.17: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:4.73: Robot 2 has turned its BOM on.
+3:4.129: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:4.185: Robot 5 has turned its BOM on.
+3:4.297: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:4.353: Robot 7 has turned its BOM on.
+3:4.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:4.465: Robot 9 has turned its BOM on.
+3:4.577: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:4.633: Robot 1 has turned its BOM on.
+3:4.737: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:4.793: Robot 2 has turned its BOM on.
+3:4.905: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:4.961: Robot 5 has turned its BOM on.
+3:5.73: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:5.129: Robot 7 has turned its BOM on.
+3:5.245: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:5.301: Robot 9 has turned its BOM on.
+3:5.413: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:5.469: Robot 1 has turned its BOM on.
+3:5.525: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:5.581: Robot 2 has turned its BOM on.
+3:5.693: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:5.737: Robot 5 has turned its BOM on.
+3:5.849: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:5.905: Robot 7 has turned its BOM on.
+3:6.17: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:6.73: Robot 9 has turned its BOM on.
+3:6.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:6.237: Robot 1 has turned its BOM on.
+3:6.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:6.409: Robot 2 has turned its BOM on.
+3:6.521: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:6.577: Robot 5 has turned its BOM on.
+3:6.637: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:6.693: Robot 7 has turned its BOM on.
+3:6.793: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:6.849: Robot 9 has turned its BOM on.
+3:6.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:7.17: Robot 1 has turned its BOM on.
+3:7.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:7.185: Robot 2 has turned its BOM on.
+3:7.297: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:7.353: Robot 5 has turned its BOM on.
+3:7.465: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:7.521: Robot 7 has turned its BOM on.
+3:7.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:7.633: Robot 9 has turned its BOM on.
+3:7.737: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:7.793: Robot 1 has turned its BOM on.
+3:7.905: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:7.961: Robot 2 has turned its BOM on.
+3:8.73: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:8.129: Robot 5 has turned its BOM on.
+3:8.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:8.293: Robot 7 has turned its BOM on.
+3:8.405: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:8.461: Robot 9 has turned its BOM on.
+3:8.521: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:8.577: Robot 1 has turned its BOM on.
+3:8.689: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:8.737: Robot 2 has turned its BOM on.
+3:8.849: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:8.905: Robot 5 has turned its BOM on.
+3:9.17: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:9.73: Robot 7 has turned its BOM on.
+3:9.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:9.237: Robot 9 has turned its BOM on.
+3:9.349: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:9.405: Robot 1 has turned its BOM on.
+3:9.465: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:9.521: Robot 2 has turned its BOM on.
+3:9.633: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:9.689: Robot 5 has turned its BOM on.
+3:9.793: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:9.849: Robot 7 has turned its BOM on.
+3:9.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:10.17: Robot 9 has turned its BOM on.
+3:10.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:10.185: Robot 1 has turned its BOM on.
+3:10.293: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:10.349: Robot 2 has turned its BOM on.
+3:10.465: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:10.521: Robot 5 has turned its BOM on.
+3:10.633: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:10.689: Robot 7 has turned its BOM on.
+3:10.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:10.793: Robot 9 has turned its BOM on.
+3:10.905: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:10.961: Robot 1 has turned its BOM on.
+3:11.73: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:11.129: Robot 2 has turned its BOM on.
+3:11.237: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:11.293: Robot 5 has turned its BOM on.
+3:11.409: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:11.465: Robot 7 has turned its BOM on.
+3:11.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:11.633: Robot 9 has turned its BOM on.
+3:11.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:11.737: Robot 1 has turned its BOM on.
+3:11.849: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:11.905: Robot 2 has turned its BOM on.
+3:12.17: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:12.73: Robot 5 has turned its BOM on.
+3:12.185: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:12.237: Robot 7 has turned its BOM on.
+3:12.349: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:12.405: Robot 9 has turned its BOM on.
+3:12.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:12.573: Robot 1 has turned its BOM on.
+3:12.629: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:12.685: Robot 2 has turned its BOM on.
+3:12.793: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:12.849: Robot 5 has turned its BOM on.
+3:12.961: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:13.17: Robot 7 has turned its BOM on.
+3:13.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:13.185: Robot 9 has turned its BOM on.
+3:13.301: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:13.357: Robot 1 has turned its BOM on.
+3:13.417: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:13.473: Robot 2 has turned its BOM on.
+3:13.585: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:13.641: Robot 5 has turned its BOM on.
+3:13.737: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:13.793: Robot 7 has turned its BOM on.
+3:13.905: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:13.961: Robot 9 has turned its BOM on.
+3:14.73: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:14.129: Robot 1 has turned its BOM on.
+3:14.237: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:14.293: Robot 2 has turned its BOM on.
+3:14.405: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:14.461: Robot 5 has turned its BOM on.
+3:14.521: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:14.577: Robot 7 has turned its BOM on.
+3:14.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:14.737: Robot 9 has turned its BOM on.
+3:14.849: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:14.905: Robot 1 has turned its BOM on.
+3:15.17: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:15.73: Robot 2 has turned its BOM on.
+3:15.185: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:15.237: Robot 5 has turned its BOM on.
+3:15.349: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:15.405: Robot 7 has turned its BOM on.
+3:15.521: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:15.577: Robot 9 has turned its BOM on.
+3:15.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:15.737: Robot 1 has turned its BOM on.
+3:15.793: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:15.849: Robot 2 has turned its BOM on.
+3:15.962: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:16.17: Robot 5 has turned its BOM on.
+3:16.129: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:16.185: Robot 7 has turned its BOM on.
+3:16.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:16.353: Robot 9 has turned its BOM on.
+3:16.466: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:16.521: Robot 1 has turned its BOM on.
+3:16.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:16.689: Robot 2 has turned its BOM on.
+3:16.793: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:16.849: Robot 5 has turned its BOM on.
+3:16.905: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:16.961: Robot 7 has turned its BOM on.
+3:17.73: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:17.129: Robot 9 has turned its BOM on.
+3:17.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:17.297: Robot 1 has turned its BOM on.
+3:17.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:17.465: Robot 2 has turned its BOM on.
+3:17.577: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:17.633: Robot 5 has turned its BOM on.
+3:17.689: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:17.737: Robot 7 has turned its BOM on.
+3:17.849: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:17.906: Robot 9 has turned its BOM on.
+3:18.17: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:18.73: Robot 1 has turned its BOM on.
+3:18.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:18.237: Robot 2 has turned its BOM on.
+3:18.353: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:18.410: Robot 5 has turned its BOM on.
+3:18.521: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:18.577: Robot 7 has turned its BOM on.
+3:18.633: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:18.689: Robot 9 has turned its BOM on.
+3:18.793: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:18.849: Robot 1 has turned its BOM on.
+3:18.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:19.17: Robot 2 has turned its BOM on.
+3:19.129: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:19.185: Robot 5 has turned its BOM on.
+3:19.297: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:19.353: Robot 7 has turned its BOM on.
+3:19.473: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:19.529: Robot 9 has turned its BOM on.
+3:19.589: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:19.645: Robot 1 has turned its BOM on.
+3:19.737: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:19.793: Robot 2 has turned its BOM on.
+3:19.905: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:19.961: Robot 5 has turned its BOM on.
+3:20.73: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:20.129: Robot 7 has turned its BOM on.
+3:20.237: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:20.293: Robot 9 has turned its BOM on.
+3:20.405: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:20.461: Robot 1 has turned its BOM on.
+3:20.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:20.629: Robot 2 has turned its BOM on.
+3:20.737: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:20.793: Robot 5 has turned its BOM on.
+3:20.849: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:20.905: Robot 7 has turned its BOM on.
+3:21.17: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:21.73: Robot 9 has turned its BOM on.
+3:21.193: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:21.237: Robot 1 has turned its BOM on.
+3:21.349: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:21.405: Robot 2 has turned its BOM on.
+3:21.517: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:21.573: Robot 5 has turned its BOM on.
+3:21.685: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:21.737: Robot 7 has turned its BOM on.
+3:21.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:21.853: Robot 9 has turned its BOM on.
+3:21.965: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:22.21: Robot 1 has turned its BOM on.
+3:22.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:22.189: Robot 2 has turned its BOM on.
+3:22.293: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:22.349: Robot 5 has turned its BOM on.
+3:22.461: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:22.517: Robot 7 has turned its BOM on.
+3:22.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:22.685: Robot 9 has turned its BOM on.
+3:22.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:22.797: Robot 1 has turned its BOM on.
+3:22.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:22.965: Robot 2 has turned its BOM on.
+3:23.77: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:23.133: Robot 5 has turned its BOM on.
+3:23.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:23.293: Robot 7 has turned its BOM on.
+3:23.405: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:23.461: Robot 9 has turned its BOM on.
+3:23.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:23.629: Robot 1 has turned its BOM on.
+3:23.689: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:23.737: Robot 2 has turned its BOM on.
+3:23.849: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:23.905: Robot 5 has turned its BOM on.
+3:24.21: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:24.77: Robot 7 has turned its BOM on.
+3:24.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:24.237: Robot 9 has turned its BOM on.
+3:24.349: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:24.405: Robot 1 has turned its BOM on.
+3:24.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:24.573: Robot 2 has turned its BOM on.
+3:24.629: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:24.685: Robot 5 has turned its BOM on.
+3:24.793: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:24.849: Robot 7 has turned its BOM on.
+3:24.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:25.21: Robot 9 has turned its BOM on.
+3:25.133: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:25.189: Robot 1 has turned its BOM on.
+3:25.293: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:25.349: Robot 2 has turned its BOM on.
+3:25.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:25.517: Robot 5 has turned its BOM on.
+3:25.629: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:25.685: Robot 7 has turned its BOM on.
+3:25.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:25.793: Robot 9 has turned its BOM on.
+3:25.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:25.965: Robot 1 has turned its BOM on.
+3:26.77: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:28.237: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:28.293: Robot 1 has requested to join the token ring.
+3:28.349: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:28.405: Robot 7 has turned its BOM on.
+3:28.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:28.573: Robot 9 has turned its BOM on.
+3:28.685: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:28.737: Robot 2 has turned its BOM on.
+3:28.793: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:28.849: Robot 5 has turned its BOM on.
+3:28.965: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:29.21: Robot 7 has turned its BOM on.
+3:29.133: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:29.189: Robot 9 has turned its BOM on.
+3:29.293: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:29.349: Robot 2 has turned its BOM on.
+3:29.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:29.517: Robot 5 has turned its BOM on.
+3:29.573: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 9)
+3:29.629: Robot 7 has turned its BOM on.
+3:29.737: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:29.793: Robot 9 has turned its BOM on.
+3:29.905: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:29.961: Robot 2 has turned its BOM on.
+3:30.21: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:30.77: Robot 5 has turned its BOM on.
+3:30.189: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:30.237: Robot 7 has turned its BOM on.
+3:30.349: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:30.405: Robot 9 has turned its BOM on.
+3:30.517: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:30.573: Robot 2 has turned its BOM on.
+3:30.685: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:30.737: Robot 5 has turned its BOM on.
+3:30.793: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:30.849: Robot 7 has turned its BOM on.
+3:30.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:31.21: Robot 9 has turned its BOM on.
+3:31.133: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:31.189: Robot 2 has turned its BOM on.
+3:31.293: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:31.349: Robot 5 has turned its BOM on.
+3:31.461: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:31.518: Robot 7 has turned its BOM on.
+3:31.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:31.629: Robot 9 has turned its BOM on.
+3:31.741: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 15)(5 0)(7 14)
+3:31.797: Robot 2 has turned its BOM on.
+3:31.909: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)(9 9)
+3:31.965: Robot 5 has turned its BOM on.
+3:32.22: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)(9 8)
+3:32.77: Robot 7 has turned its BOM on.
+3:32.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(5 5)(9 9)
+3:32.237: Robot 9 has turned its BOM on.
+3:32.349: Robot 1 has requested to join the token ring.
+3:33.905: Robot 1 has requested to join the token ring.
+3:34.349: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:34.517: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:34.629: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:34.685: Robot 5 has turned its BOM on.
+3:34.793: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:34.849: Robot 7 has turned its BOM on.
+3:34.961: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:35.17: Robot 2 has turned its BOM on.
+3:35.73: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:35.129: Robot 5 has turned its BOM on.
+3:35.237: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:35.293: Robot 7 has turned its BOM on.
+3:35.405: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:35.461: Robot 2 has turned its BOM on.
+3:35.573: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:35.629: Robot 5 has turned its BOM on.
+3:35.685: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:35.737: Robot 7 has turned its BOM on.
+3:35.853: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:35.909: Robot 2 has turned its BOM on.
+3:36.21: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:36.77: Robot 5 has turned its BOM on.
+3:36.134: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:36.189: Robot 7 has turned its BOM on.
+3:36.293: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:36.349: Robot 2 has turned its BOM on.
+3:36.461: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:36.517: Robot 5 has turned its BOM on.
+3:36.574: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:36.629: Robot 7 has turned its BOM on.
+3:36.741: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:36.797: Robot 2 has turned its BOM on.
+3:36.909: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:36.965: Robot 5 has turned its BOM on.
+3:37.21: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:37.77: Robot 7 has turned its BOM on.
+3:37.189: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:37.237: Robot 2 has turned its BOM on.
+3:37.353: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:37.409: Robot 5 has turned its BOM on.
+3:37.465: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:37.521: Robot 7 has turned its BOM on.
+3:37.633: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:37.689: Robot 2 has turned its BOM on.
+3:37.793: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:37.849: Robot 5 has turned its BOM on.
+3:37.909: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:37.965: Robot 7 has turned its BOM on.
+3:38.77: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:38.133: Robot 2 has turned its BOM on.
+3:38.237: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:38.293: Robot 5 has turned its BOM on.
+3:38.349: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:38.405: Robot 7 has turned its BOM on.
+3:38.517: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:38.574: Robot 2 has turned its BOM on.
+3:38.689: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:38.737: Robot 5 has turned its BOM on.
+3:38.793: Robot 2 has requested to join the token ring.
+3:38.849: Robot 9 has requested to join the token ring.
+3:38.905: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:38.961: Robot 5 has requested to join the token ring.
+3:39.18: Robot 1 has requested to join the token ring.
+3:39.73: Robot 7 has turned its BOM on.
+3:39.129: Robot 7 passed the token to robot 2. Sensor matrix:
+(2 3)(5 5)
+3:39.186: Robot 2 has turned its BOM on.
+3:39.237: Robot 2 passed the token to robot 5. Sensor matrix:
+(5 11)(7 11)
+3:39.293: Robot 5 has turned its BOM on.
+3:39.349: Robot 5 passed the token to robot 7. Sensor matrix:
+(2 15)(7 13)
+3:39.409: Robot 7 has turned its BOM on.
+3:39.465: Robot 7 passed the token to robot 1. Sensor matrix:
+(1 1)(2 3)(5 5)
+3:39.521: Robot 1 has turned its BOM on.
+3:39.577: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)
+3:39.633: Robot 2 has turned its BOM on.
+3:39.737: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)
+3:39.793: Robot 5 has turned its BOM on.
+3:39.905: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)
+3:39.961: Robot 7 has turned its BOM on.
+3:40.17: Robot 7 passed the token to robot 1. Sensor matrix:
+(1 1)(2 3)(5 5)
+3:40.73: Robot 1 has turned its BOM on.
+3:40.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)
+3:40.237: Robot 2 has turned its BOM on.
+3:40.353: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)
+3:40.409: Robot 5 has turned its BOM on.
+3:40.521: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)
+3:40.577: Robot 7 has turned its BOM on.
+3:40.689: Robot 7 passed the token to robot 1. Sensor matrix:
+(1 1)(2 3)(5 5)
+3:40.737: Robot 1 has turned its BOM on.
+3:40.793: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)
+3:40.849: Robot 5 has requested to join the token ring.
+3:40.905: Robot 2 has turned its BOM on.
+3:40.961: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)
+3:41.18: Robot 5 has turned its BOM on.
+3:41.129: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)
+3:41.185: Robot 7 has turned its BOM on.
+3:41.237: Robot 9 has requested to join the token ring.
+3:41.293: Robot 7 passed the token to robot 1. Sensor matrix:
+(1 1)(2 3)(5 5)
+3:41.349: Robot 1 has turned its BOM on.
+3:41.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)
+3:41.466: Robot 2 has turned its BOM on.
+3:41.577: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)
+3:41.633: Robot 5 has turned its BOM on.
+3:41.737: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)
+3:41.793: Robot 7 has turned its BOM on.
+3:41.905: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:41.961: Robot 9 has turned its BOM on.
+3:42.74: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:42.129: Robot 1 has turned its BOM on.
+3:42.237: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:42.293: Robot 2 has turned its BOM on.
+3:42.353: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:42.410: Robot 5 has turned its BOM on.
+3:42.521: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:42.578: Robot 7 has turned its BOM on.
+3:42.690: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:42.737: Robot 9 has turned its BOM on.
+3:42.849: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:42.905: Robot 1 has turned its BOM on.
+3:43.18: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:43.73: Robot 2 has turned its BOM on.
+3:43.186: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:43.238: Robot 5 has turned its BOM on.
+3:43.294: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:43.350: Robot 7 has turned its BOM on.
+3:43.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:43.517: Robot 9 has turned its BOM on.
+3:43.630: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:43.685: Robot 1 has turned its BOM on.
+3:43.794: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:43.850: Robot 2 has turned its BOM on.
+3:43.961: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:44.17: Robot 5 has turned its BOM on.
+3:44.130: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:44.186: Robot 7 has turned its BOM on.
+3:44.242: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:44.298: Robot 9 has turned its BOM on.
+3:44.410: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:44.466: Robot 1 has turned its BOM on.
+3:44.578: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:44.634: Robot 2 has turned its BOM on.
+3:44.738: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:44.794: Robot 5 has turned its BOM on.
+3:44.906: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:44.962: Robot 7 has turned its BOM on.
+3:45.74: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:45.130: Robot 9 has turned its BOM on.
+3:45.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:45.238: Robot 1 has turned its BOM on.
+3:45.350: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:45.406: Robot 2 has turned its BOM on.
+3:45.526: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:45.582: Robot 5 has turned its BOM on.
+3:45.694: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:45.738: Robot 7 has turned its BOM on.
+3:45.850: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:45.906: Robot 9 has turned its BOM on.
+3:46.18: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:46.74: Robot 1 has turned its BOM on.
+3:46.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:46.186: Robot 2 has turned its BOM on.
+3:46.294: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:46.350: Robot 5 has turned its BOM on.
+3:46.466: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:46.522: Robot 7 has turned its BOM on.
+3:46.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:46.690: Robot 9 has turned its BOM on.
+3:46.794: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:46.850: Robot 1 has turned its BOM on.
+3:46.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:47.18: Robot 2 has turned its BOM on.
+3:47.130: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:47.186: Robot 5 has turned its BOM on.
+3:47.294: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:47.350: Robot 7 has turned its BOM on.
+3:47.410: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:47.466: Robot 9 has turned its BOM on.
+3:47.578: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:47.634: Robot 1 has turned its BOM on.
+3:47.738: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:47.794: Robot 2 has turned its BOM on.
+3:47.906: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:47.962: Robot 5 has turned its BOM on.
+3:48.74: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:48.130: Robot 7 has turned its BOM on.
+3:48.238: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:48.294: Robot 9 has turned its BOM on.
+3:48.354: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:48.410: Robot 1 has turned its BOM on.
+3:48.522: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:48.578: Robot 2 has turned its BOM on.
+3:48.690: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:48.738: Robot 5 has turned its BOM on.
+3:48.850: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:48.906: Robot 7 has turned its BOM on.
+3:49.18: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:49.74: Robot 9 has turned its BOM on.
+3:49.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:49.238: Robot 1 has turned its BOM on.
+3:49.294: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:49.350: Robot 2 has turned its BOM on.
+3:49.462: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:49.518: Robot 5 has turned its BOM on.
+3:49.634: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:49.690: Robot 7 has turned its BOM on.
+3:49.794: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:49.850: Robot 9 has turned its BOM on.
+3:49.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:50.18: Robot 1 has turned its BOM on.
+3:50.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:50.186: Robot 2 has turned its BOM on.
+3:50.242: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:50.298: Robot 5 has turned its BOM on.
+3:50.410: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:50.466: Robot 7 has turned its BOM on.
+3:50.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:50.634: Robot 9 has turned its BOM on.
+3:50.738: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:50.794: Robot 1 has turned its BOM on.
+3:50.906: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:50.962: Robot 2 has turned its BOM on.
+3:51.74: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:51.130: Robot 5 has turned its BOM on.
+3:51.186: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:51.238: Robot 7 has turned its BOM on.
+3:51.350: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:51.406: Robot 9 has turned its BOM on.
+3:51.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:51.578: Robot 1 has turned its BOM on.
+3:51.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:51.738: Robot 2 has turned its BOM on.
+3:51.850: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:51.906: Robot 5 has turned its BOM on.
+3:52.18: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:52.74: Robot 7 has turned its BOM on.
+3:52.190: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:52.238: Robot 9 has turned its BOM on.
+3:52.350: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:52.406: Robot 1 has turned its BOM on.
+3:52.466: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:52.522: Robot 2 has turned its BOM on.
+3:52.634: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:52.690: Robot 5 has turned its BOM on.
+3:52.794: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:52.850: Robot 7 has turned its BOM on.
+3:52.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:53.18: Robot 9 has turned its BOM on.
+3:53.130: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:53.186: Robot 1 has turned its BOM on.
+3:53.294: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:53.350: Robot 2 has turned its BOM on.
+3:53.410: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:53.466: Robot 5 has turned its BOM on.
+3:53.578: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:53.634: Robot 7 has turned its BOM on.
+3:53.738: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:53.794: Robot 9 has turned its BOM on.
+3:53.906: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:53.962: Robot 1 has turned its BOM on.
+3:54.74: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:54.130: Robot 2 has turned its BOM on.
+3:54.246: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:54.302: Robot 5 has turned its BOM on.
+3:54.358: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:54.414: Robot 7 has turned its BOM on.
+3:54.534: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:54.590: Robot 9 has turned its BOM on.
+3:54.702: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:54.738: Robot 1 has turned its BOM on.
+3:54.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:54.910: Robot 2 has turned its BOM on.
+3:55.22: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:55.78: Robot 5 has turned its BOM on.
+3:55.134: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:55.190: Robot 7 has turned its BOM on.
+3:55.294: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:55.350: Robot 9 has turned its BOM on.
+3:55.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:55.518: Robot 1 has turned its BOM on.
+3:55.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:55.686: Robot 2 has turned its BOM on.
+3:55.798: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:55.854: Robot 5 has turned its BOM on.
+3:55.966: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:56.30: Robot 7 has turned its BOM on.
+3:56.86: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:56.142: Robot 9 has turned its BOM on.
+3:56.238: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:56.294: Robot 1 has turned its BOM on.
+3:56.406: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:56.462: Robot 2 has turned its BOM on.
+3:56.574: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:56.630: Robot 5 has turned its BOM on.
+3:56.738: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:56.794: Robot 7 has turned its BOM on.
+3:56.910: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:56.966: Robot 9 has turned its BOM on.
+3:57.82: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:57.138: Robot 1 has turned its BOM on.
+3:57.198: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:57.238: Robot 2 has turned its BOM on.
+3:57.350: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:57.406: Robot 5 has turned its BOM on.
+3:57.518: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:57.574: Robot 7 has turned its BOM on.
+3:57.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:57.738: Robot 9 has turned its BOM on.
+3:57.854: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:57.910: Robot 1 has turned its BOM on.
+3:58.26: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:58.82: Robot 2 has turned its BOM on.
+3:58.142: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:58.198: Robot 5 has turned its BOM on.
+3:58.350: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:58.406: Robot 7 has turned its BOM on.
+3:58.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:58.518: Robot 9 has turned its BOM on.
+3:58.630: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:58.686: Robot 1 has turned its BOM on.
+3:58.798: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:58.854: Robot 2 has turned its BOM on.
+3:58.970: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:59.26: Robot 5 has turned its BOM on.
+3:59.86: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+3:59.142: Robot 7 has turned its BOM on.
+3:59.294: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+3:59.350: Robot 9 has turned its BOM on.
+3:59.406: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+3:59.462: Robot 1 has turned its BOM on.
+3:59.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+3:59.630: Robot 2 has turned its BOM on.
+3:59.742: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+3:59.798: Robot 5 has turned its BOM on.
+3:59.914: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+3:59.970: Robot 7 has turned its BOM on.
+4:0.30: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:0.86: Robot 9 has turned its BOM on.
+4:0.198: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:0.238: Robot 1 has turned its BOM on.
+4:0.350: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:0.406: Robot 2 has turned its BOM on.
+4:0.518: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:0.574: Robot 5 has turned its BOM on.
+4:0.686: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:0.738: Robot 7 has turned its BOM on.
+4:0.850: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:0.906: Robot 9 has turned its BOM on.
+4:1.18: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:1.74: Robot 1 has turned its BOM on.
+4:1.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:1.186: Robot 2 has turned its BOM on.
+4:1.294: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:1.350: Robot 5 has turned its BOM on.
+4:1.462: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:1.518: Robot 7 has turned its BOM on.
+4:1.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:1.686: Robot 9 has turned its BOM on.
+4:1.794: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:1.850: Robot 1 has turned its BOM on.
+4:1.966: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:2.22: Robot 2 has turned its BOM on.
+4:2.134: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:2.190: Robot 5 has turned its BOM on.
+4:2.294: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:2.350: Robot 7 has turned its BOM on.
+4:2.406: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:2.462: Robot 9 has turned its BOM on.
+4:2.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:2.630: Robot 1 has turned its BOM on.
+4:2.738: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:2.794: Robot 2 has turned its BOM on.
+4:2.910: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:2.966: Robot 5 has turned its BOM on.
+4:3.78: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:3.134: Robot 7 has turned its BOM on.
+4:3.238: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:3.294: Robot 9 has turned its BOM on.
+4:3.406: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:3.462: Robot 1 has turned its BOM on.
+4:3.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:3.574: Robot 2 has turned its BOM on.
+4:3.686: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:3.738: Robot 5 has turned its BOM on.
+4:3.854: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:3.910: Robot 7 has turned its BOM on.
+4:4.22: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:4.78: Robot 9 has turned its BOM on.
+4:4.190: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:4.238: Robot 1 has turned its BOM on.
+4:4.350: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:4.406: Robot 2 has turned its BOM on.
+4:4.462: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:4.518: Robot 5 has turned its BOM on.
+4:4.630: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:4.686: Robot 7 has turned its BOM on.
+4:4.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:4.854: Robot 9 has turned its BOM on.
+4:4.966: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:5.22: Robot 1 has turned its BOM on.
+4:5.134: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:5.190: Robot 2 has turned its BOM on.
+4:5.294: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:5.350: Robot 5 has turned its BOM on.
+4:5.406: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:5.462: Robot 7 has turned its BOM on.
+4:5.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:5.630: Robot 9 has turned its BOM on.
+4:5.742: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:5.798: Robot 1 has turned its BOM on.
+4:5.910: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:5.966: Robot 2 has turned its BOM on.
+4:6.78: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:6.134: Robot 5 has turned its BOM on.
+4:6.190: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:6.238: Robot 7 has turned its BOM on.
+4:6.350: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:6.406: Robot 9 has turned its BOM on.
+4:6.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:6.574: Robot 1 has turned its BOM on.
+4:6.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:6.738: Robot 2 has turned its BOM on.
+4:6.850: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:6.906: Robot 5 has turned its BOM on.
+4:7.22: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:7.78: Robot 7 has turned its BOM on.
+4:7.190: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:7.238: Robot 9 has turned its BOM on.
+4:7.350: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:7.406: Robot 1 has turned its BOM on.
+4:7.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:7.518: Robot 2 has turned its BOM on.
+4:7.630: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:7.686: Robot 5 has turned its BOM on.
+4:7.794: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:7.850: Robot 7 has turned its BOM on.
+4:7.966: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:8.22: Robot 9 has turned its BOM on.
+4:8.134: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:8.190: Robot 1 has turned its BOM on.
+4:8.294: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:8.350: Robot 2 has turned its BOM on.
+4:8.462: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:8.518: Robot 5 has turned its BOM on.
+4:8.574: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:8.630: Robot 7 has turned its BOM on.
+4:8.738: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:8.794: Robot 9 has turned its BOM on.
+4:8.910: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:8.966: Robot 1 has turned its BOM on.
+4:9.82: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:9.138: Robot 2 has turned its BOM on.
+4:9.198: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:9.238: Robot 5 has turned its BOM on.
+4:9.406: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:9.462: Robot 7 has turned its BOM on.
+4:9.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:9.574: Robot 9 has turned its BOM on.
+4:9.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:9.738: Robot 1 has turned its BOM on.
+4:9.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:9.910: Robot 2 has turned its BOM on.
+4:10.22: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:10.78: Robot 5 has turned its BOM on.
+4:10.190: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:10.238: Robot 7 has turned its BOM on.
+4:10.350: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:10.406: Robot 9 has turned its BOM on.
+4:10.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:10.518: Robot 1 has turned its BOM on.
+4:10.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:10.686: Robot 2 has turned its BOM on.
+4:10.798: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:10.854: Robot 5 has turned its BOM on.
+4:10.966: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:11.22: Robot 7 has turned its BOM on.
+4:11.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:11.190: Robot 9 has turned its BOM on.
+4:11.294: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:11.351: Robot 1 has turned its BOM on.
+4:11.406: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:11.462: Robot 2 has turned its BOM on.
+4:11.574: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:11.630: Robot 5 has turned its BOM on.
+4:11.738: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:11.794: Robot 7 has turned its BOM on.
+4:11.906: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:11.962: Robot 9 has turned its BOM on.
+4:12.78: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:12.134: Robot 1 has turned its BOM on.
+4:12.238: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:12.294: Robot 2 has turned its BOM on.
+4:12.406: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:12.462: Robot 5 has turned its BOM on.
+4:12.522: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:12.578: Robot 7 has turned its BOM on.
+4:12.690: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:12.738: Robot 9 has turned its BOM on.
+4:12.850: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:12.906: Robot 1 has turned its BOM on.
+4:13.22: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:13.78: Robot 2 has turned its BOM on.
+4:13.214: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:13.238: Robot 5 has turned its BOM on.
+4:13.350: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:13.406: Robot 7 has turned its BOM on.
+4:13.466: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:13.522: Robot 9 has turned its BOM on.
+4:13.634: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:13.690: Robot 1 has turned its BOM on.
+4:13.794: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:13.850: Robot 2 has turned its BOM on.
+4:13.962: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:14.18: Robot 5 has turned its BOM on.
+4:14.134: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:14.190: Robot 7 has turned its BOM on.
+4:14.310: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:14.366: Robot 9 has turned its BOM on.
+4:14.426: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:14.482: Robot 1 has turned its BOM on.
+4:14.594: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:14.650: Robot 2 has turned its BOM on.
+4:14.738: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:14.794: Robot 5 has turned its BOM on.
+4:14.906: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:14.962: Robot 7 has turned its BOM on.
+4:15.78: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:15.134: Robot 9 has turned its BOM on.
+4:15.194: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:15.238: Robot 1 has turned its BOM on.
+4:15.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:15.410: Robot 2 has turned its BOM on.
+4:15.522: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:15.578: Robot 5 has turned its BOM on.
+4:15.690: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:15.738: Robot 7 has turned its BOM on.
+4:15.850: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:15.906: Robot 9 has turned its BOM on.
+4:16.18: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:16.74: Robot 1 has turned its BOM on.
+4:16.186: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:16.238: Robot 2 has turned its BOM on.
+4:16.298: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:16.354: Robot 5 has turned its BOM on.
+4:16.466: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:16.522: Robot 7 has turned its BOM on.
+4:16.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:16.690: Robot 9 has turned its BOM on.
+4:16.798: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:16.854: Robot 1 has turned its BOM on.
+4:16.970: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:17.26: Robot 2 has turned its BOM on.
+4:17.138: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:17.194: Robot 5 has turned its BOM on.
+4:17.298: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:17.354: Robot 7 has turned its BOM on.
+4:17.466: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:17.522: Robot 9 has turned its BOM on.
+4:17.578: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:17.634: Robot 1 has turned its BOM on.
+4:17.738: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:17.794: Robot 2 has turned its BOM on.
+4:17.907: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:17.962: Robot 5 has turned its BOM on.
+4:18.74: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:18.130: Robot 7 has turned its BOM on.
+4:18.238: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:18.294: Robot 9 has turned its BOM on.
+4:18.406: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:18.462: Robot 1 has turned its BOM on.
+4:18.522: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:18.578: Robot 2 has turned its BOM on.
+4:18.690: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:18.738: Robot 5 has turned its BOM on.
+4:18.850: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:18.906: Robot 7 has turned its BOM on.
+4:19.18: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:19.74: Robot 9 has turned its BOM on.
+4:19.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:19.238: Robot 1 has turned its BOM on.
+4:19.350: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:19.406: Robot 2 has turned its BOM on.
+4:19.470: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:19.526: Robot 5 has turned its BOM on.
+4:19.639: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:19.694: Robot 7 has turned its BOM on.
+4:19.794: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:19.850: Robot 9 has turned its BOM on.
+4:19.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:20.18: Robot 1 has turned its BOM on.
+4:20.134: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:20.190: Robot 2 has turned its BOM on.
+4:20.294: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:20.350: Robot 5 has turned its BOM on.
+4:20.410: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:20.466: Robot 7 has turned its BOM on.
+4:20.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:20.634: Robot 9 has turned its BOM on.
+4:20.738: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:20.794: Robot 1 has turned its BOM on.
+4:20.906: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:20.962: Robot 2 has turned its BOM on.
+4:21.74: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:21.130: Robot 5 has turned its BOM on.
+4:21.238: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:21.294: Robot 7 has turned its BOM on.
+4:21.354: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:21.410: Robot 9 has turned its BOM on.
+4:21.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:21.578: Robot 1 has turned its BOM on.
+4:21.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:21.738: Robot 2 has turned its BOM on.
+4:21.850: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:21.906: Robot 5 has turned its BOM on.
+4:22.18: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:22.74: Robot 7 has turned its BOM on.
+4:22.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:22.238: Robot 9 has turned its BOM on.
+4:22.354: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:22.410: Robot 1 has turned its BOM on.
+4:22.522: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:22.578: Robot 2 has turned its BOM on.
+4:22.638: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:22.698: Robot 5 has turned its BOM on.
+4:22.794: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:22.850: Robot 7 has turned its BOM on.
+4:22.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:23.18: Robot 9 has turned its BOM on.
+4:23.130: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:23.186: Robot 1 has turned its BOM on.
+4:23.298: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:23.354: Robot 2 has turned its BOM on.
+4:23.466: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:23.522: Robot 5 has turned its BOM on.
+4:23.578: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:23.634: Robot 7 has turned its BOM on.
+4:23.738: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:23.794: Robot 9 has turned its BOM on.
+4:23.906: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:23.962: Robot 1 has turned its BOM on.
+4:24.74: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:24.130: Robot 2 has turned its BOM on.
+4:24.238: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:24.294: Robot 5 has turned its BOM on.
+4:24.406: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:24.462: Robot 7 has turned its BOM on.
+4:24.522: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:24.578: Robot 9 has turned its BOM on.
+4:24.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:24.738: Robot 1 has turned its BOM on.
+4:24.850: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:24.906: Robot 2 has turned its BOM on.
+4:25.18: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:25.74: Robot 5 has turned its BOM on.
+4:25.186: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:25.238: Robot 7 has turned its BOM on.
+4:25.350: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:25.406: Robot 9 has turned its BOM on.
+4:25.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:25.518: Robot 1 has turned its BOM on.
+4:25.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:25.686: Robot 2 has turned its BOM on.
+4:25.794: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:25.850: Robot 5 has turned its BOM on.
+4:25.966: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:26.22: Robot 7 has turned its BOM on.
+4:26.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:26.190: Robot 9 has turned its BOM on.
+4:26.294: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:26.350: Robot 1 has turned its BOM on.
+4:26.410: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:26.466: Robot 2 has turned its BOM on.
+4:26.578: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:26.634: Robot 5 has turned its BOM on.
+4:26.738: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:26.794: Robot 7 has turned its BOM on.
+4:26.906: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:26.962: Robot 9 has turned its BOM on.
+4:27.74: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:27.130: Robot 1 has turned its BOM on.
+4:27.238: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:27.294: Robot 2 has turned its BOM on.
+4:27.410: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:27.466: Robot 5 has turned its BOM on.
+4:27.522: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 0)(7 13)(9 8)
+4:27.578: Robot 7 has turned its BOM on.
+4:27.690: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:27.738: Robot 9 has turned its BOM on.
+4:27.850: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:27.906: Robot 1 has turned its BOM on.
+4:28.18: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:28.74: Robot 2 has turned its BOM on.
+4:28.186: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:28.238: Robot 5 has turned its BOM on.
+4:28.354: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:28.410: Robot 7 has turned its BOM on.
+4:28.522: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:28.578: Robot 9 has turned its BOM on.
+4:28.634: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:28.690: Robot 1 has turned its BOM on.
+4:28.794: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:28.850: Robot 2 has turned its BOM on.
+4:28.962: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:29.18: Robot 5 has turned its BOM on.
+4:29.130: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:29.186: Robot 7 has turned its BOM on.
+4:29.298: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:29.354: Robot 9 has turned its BOM on.
+4:29.418: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:29.474: Robot 1 has turned its BOM on.
+4:29.590: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:29.646: Robot 2 has turned its BOM on.
+4:29.738: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:29.794: Robot 5 has turned its BOM on.
+4:29.910: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:29.966: Robot 7 has turned its BOM on.
+4:30.78: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:30.134: Robot 9 has turned its BOM on.
+4:30.238: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:30.294: Robot 1 has turned its BOM on.
+4:30.406: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:30.462: Robot 2 has turned its BOM on.
+4:30.518: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:30.574: Robot 5 has turned its BOM on.
+4:30.686: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:30.738: Robot 7 has turned its BOM on.
+4:30.850: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:30.906: Robot 9 has turned its BOM on.
+4:31.18: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:31.74: Robot 1 has turned its BOM on.
+4:31.186: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:31.238: Robot 2 has turned its BOM on.
+4:31.350: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:31.406: Robot 5 has turned its BOM on.
+4:31.462: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:31.518: Robot 7 has turned its BOM on.
+4:31.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:31.686: Robot 9 has turned its BOM on.
+4:31.794: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:31.850: Robot 1 has turned its BOM on.
+4:31.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:32.19: Robot 2 has turned its BOM on.
+4:32.130: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:32.186: Robot 5 has turned its BOM on.
+4:32.294: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:32.350: Robot 7 has turned its BOM on.
+4:32.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:32.518: Robot 9 has turned its BOM on.
+4:32.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:32.630: Robot 1 has turned its BOM on.
+4:32.738: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:32.794: Robot 2 has turned its BOM on.
+4:32.906: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:32.962: Robot 5 has turned its BOM on.
+4:33.78: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:33.134: Robot 7 has turned its BOM on.
+4:33.238: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:33.294: Robot 9 has turned its BOM on.
+4:33.406: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:33.462: Robot 1 has turned its BOM on.
+4:33.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:33.630: Robot 2 has turned its BOM on.
+4:33.686: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:33.738: Robot 5 has turned its BOM on.
+4:33.850: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:33.906: Robot 7 has turned its BOM on.
+4:34.22: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:34.78: Robot 9 has turned its BOM on.
+4:34.190: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:34.238: Robot 1 has turned its BOM on.
+4:34.350: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:34.406: Robot 2 has turned its BOM on.
+4:34.518: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:34.574: Robot 5 has turned its BOM on.
+4:34.630: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:34.686: Robot 7 has turned its BOM on.
+4:34.794: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:34.850: Robot 9 has turned its BOM on.
+4:34.966: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:35.22: Robot 1 has turned its BOM on.
+4:35.134: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:35.190: Robot 2 has turned its BOM on.
+4:35.294: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:35.350: Robot 5 has turned its BOM on.
+4:35.462: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:35.518: Robot 7 has turned its BOM on.
+4:35.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:35.630: Robot 9 has turned its BOM on.
+4:35.738: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:35.794: Robot 1 has turned its BOM on.
+4:35.910: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:35.966: Robot 2 has turned its BOM on.
+4:36.78: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:36.134: Robot 5 has turned its BOM on.
+4:36.238: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:36.294: Robot 7 has turned its BOM on.
+4:36.406: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:36.462: Robot 9 has turned its BOM on.
+4:36.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:36.574: Robot 1 has turned its BOM on.
+4:36.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:36.738: Robot 2 has turned its BOM on.
+4:36.854: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:36.910: Robot 5 has turned its BOM on.
+4:37.22: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:37.78: Robot 7 has turned its BOM on.
+4:37.190: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:37.238: Robot 9 has turned its BOM on.
+4:37.350: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:37.406: Robot 1 has turned its BOM on.
+4:37.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:37.518: Robot 2 has turned its BOM on.
+4:37.630: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:37.686: Robot 5 has turned its BOM on.
+4:37.802: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:37.858: Robot 7 has turned its BOM on.
+4:37.974: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:38.30: Robot 9 has turned its BOM on.
+4:38.142: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:38.198: Robot 1 has turned its BOM on.
+4:38.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:38.358: Robot 2 has turned its BOM on.
+4:38.470: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:38.526: Robot 5 has turned its BOM on.
+4:38.582: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:38.638: Robot 7 has turned its BOM on.
+4:38.742: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:38.798: Robot 9 has turned its BOM on.
+4:38.910: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:38.966: Robot 1 has turned its BOM on.
+4:39.79: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:39.134: Robot 2 has turned its BOM on.
+4:39.238: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:39.294: Robot 5 has turned its BOM on.
+4:39.406: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:39.462: Robot 7 has turned its BOM on.
+4:39.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:39.630: Robot 9 has turned its BOM on.
+4:39.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:39.738: Robot 1 has turned its BOM on.
+4:39.850: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:39.906: Robot 2 has turned its BOM on.
+4:40.18: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:40.74: Robot 5 has turned its BOM on.
+4:40.186: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:40.238: Robot 7 has turned its BOM on.
+4:40.350: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:40.406: Robot 9 has turned its BOM on.
+4:40.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:40.574: Robot 1 has turned its BOM on.
+4:40.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:40.687: Robot 2 has turned its BOM on.
+4:40.794: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:40.850: Robot 5 has turned its BOM on.
+4:40.966: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:41.22: Robot 7 has turned its BOM on.
+4:41.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:41.190: Robot 9 has turned its BOM on.
+4:41.294: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:41.350: Robot 1 has turned its BOM on.
+4:41.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:41.518: Robot 2 has turned its BOM on.
+4:41.574: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:41.630: Robot 5 has turned its BOM on.
+4:41.738: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:41.794: Robot 7 has turned its BOM on.
+4:41.910: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:41.966: Robot 9 has turned its BOM on.
+4:42.78: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:42.134: Robot 1 has turned its BOM on.
+4:42.238: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:42.294: Robot 2 has turned its BOM on.
+4:42.406: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:42.462: Robot 5 has turned its BOM on.
+4:42.518: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:42.574: Robot 7 has turned its BOM on.
+4:42.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:42.738: Robot 9 has turned its BOM on.
+4:42.858: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:42.914: Robot 1 has turned its BOM on.
+4:43.30: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:43.86: Robot 2 has turned its BOM on.
+4:43.198: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:43.238: Robot 5 has turned its BOM on.
+4:43.350: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:43.406: Robot 7 has turned its BOM on.
+4:43.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:43.574: Robot 9 has turned its BOM on.
+4:43.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:43.738: Robot 1 has turned its BOM on.
+4:43.798: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:43.854: Robot 2 has turned its BOM on.
+4:43.966: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:44.22: Robot 5 has turned its BOM on.
+4:44.134: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:44.190: Robot 7 has turned its BOM on.
+4:44.294: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:44.350: Robot 9 has turned its BOM on.
+4:44.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:44.518: Robot 1 has turned its BOM on.
+4:44.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:44.686: Robot 2 has turned its BOM on.
+4:44.738: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:44.794: Robot 5 has turned its BOM on.
+4:44.906: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:45.74: Robot 9 has turned its BOM on.
+4:45.238: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:45.294: Robot 1 has turned its BOM on.
+4:45.406: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:45.462: Robot 2 has turned its BOM on.
+4:45.574: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:45.631: Robot 5 has turned its BOM on.
+4:45.686: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:45.738: Robot 7 has turned its BOM on.
+4:45.850: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:45.906: Robot 9 has turned its BOM on.
+4:46.22: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:46.78: Robot 1 has turned its BOM on.
+4:46.190: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:46.238: Robot 2 has turned its BOM on.
+4:46.350: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:46.406: Robot 5 has turned its BOM on.
+4:46.518: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:46.574: Robot 7 has turned its BOM on.
+4:46.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:46.686: Robot 9 has turned its BOM on.
+4:46.794: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:46.850: Robot 1 has turned its BOM on.
+4:46.966: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:47.22: Robot 2 has turned its BOM on.
+4:47.134: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:47.190: Robot 5 has turned its BOM on.
+4:47.294: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:47.350: Robot 7 has turned its BOM on.
+4:47.466: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:47.522: Robot 9 has turned its BOM on.
+4:47.578: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:47.634: Robot 1 has turned its BOM on.
+4:47.738: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:47.794: Robot 2 has turned its BOM on.
+4:47.906: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:47.962: Robot 5 has turned its BOM on.
+4:48.74: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:48.130: Robot 7 has turned its BOM on.
+4:48.242: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:48.298: Robot 9 has turned its BOM on.
+4:48.410: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:48.466: Robot 1 has turned its BOM on.
+4:48.578: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:48.634: Robot 2 has turned its BOM on.
+4:48.690: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:48.738: Robot 5 has turned its BOM on.
+4:48.850: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:48.906: Robot 7 has turned its BOM on.
+4:49.18: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:49.74: Robot 9 has turned its BOM on.
+4:49.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:49.238: Robot 1 has turned its BOM on.
+4:49.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:49.410: Robot 2 has turned its BOM on.
+4:49.522: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:49.578: Robot 5 has turned its BOM on.
+4:49.638: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:49.694: Robot 7 has turned its BOM on.
+4:49.794: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:49.850: Robot 9 has turned its BOM on.
+4:49.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:50.18: Robot 1 has turned its BOM on.
+4:50.134: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:50.190: Robot 2 has turned its BOM on.
+4:50.298: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:50.354: Robot 5 has turned its BOM on.
+4:50.466: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:50.522: Robot 7 has turned its BOM on.
+4:50.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:50.634: Robot 9 has turned its BOM on.
+4:50.738: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:50.794: Robot 1 has turned its BOM on.
+4:50.906: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:50.962: Robot 2 has turned its BOM on.
+4:51.74: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:51.130: Robot 5 has turned its BOM on.
+4:51.238: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:51.294: Robot 7 has turned its BOM on.
+4:51.406: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:51.462: Robot 9 has turned its BOM on.
+4:51.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:51.578: Robot 1 has turned its BOM on.
+4:51.691: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:51.738: Robot 2 has turned its BOM on.
+4:51.850: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:51.906: Robot 5 has turned its BOM on.
+4:52.18: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:52.74: Robot 7 has turned its BOM on.
+4:52.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:52.238: Robot 9 has turned its BOM on.
+4:52.350: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:52.406: Robot 1 has turned its BOM on.
+4:52.466: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:52.522: Robot 2 has turned its BOM on.
+4:52.634: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:52.690: Robot 5 has turned its BOM on.
+4:52.794: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:52.850: Robot 7 has turned its BOM on.
+4:52.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:53.18: Robot 9 has turned its BOM on.
+4:53.130: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:53.186: Robot 1 has turned its BOM on.
+4:53.294: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:53.350: Robot 2 has turned its BOM on.
+4:53.462: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:53.518: Robot 5 has turned its BOM on.
+4:53.630: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:53.686: Robot 7 has turned its BOM on.
+4:53.738: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:53.794: Robot 9 has turned its BOM on.
+4:53.906: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:53.962: Robot 1 has turned its BOM on.
+4:54.74: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:54.130: Robot 2 has turned its BOM on.
+4:54.242: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:54.298: Robot 5 has turned its BOM on.
+4:54.410: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:54.466: Robot 7 has turned its BOM on.
+4:54.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:54.634: Robot 9 has turned its BOM on.
+4:54.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:54.738: Robot 1 has turned its BOM on.
+4:54.850: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:54.906: Robot 2 has turned its BOM on.
+4:55.18: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:55.74: Robot 5 has turned its BOM on.
+4:55.186: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:55.238: Robot 7 has turned its BOM on.
+4:55.354: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:55.410: Robot 9 has turned its BOM on.
+4:55.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:55.578: Robot 1 has turned its BOM on.
+4:55.634: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:55.690: Robot 2 has turned its BOM on.
+4:55.798: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:55.854: Robot 5 has turned its BOM on.
+4:55.970: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:56.26: Robot 7 has turned its BOM on.
+4:56.138: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:56.194: Robot 9 has turned its BOM on.
+4:56.298: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:56.354: Robot 1 has turned its BOM on.
+4:56.466: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:56.522: Robot 2 has turned its BOM on.
+4:56.578: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:56.634: Robot 5 has turned its BOM on.
+4:56.742: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:56.798: Robot 7 has turned its BOM on.
+4:56.914: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:56.970: Robot 9 has turned its BOM on.
+4:57.82: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:57.138: Robot 1 has turned its BOM on.
+4:57.238: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:57.294: Robot 2 has turned its BOM on.
+4:57.406: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:57.462: Robot 5 has turned its BOM on.
+4:57.518: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:57.574: Robot 7 has turned its BOM on.
+4:57.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:57.739: Robot 9 has turned its BOM on.
+4:57.850: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:57.906: Robot 1 has turned its BOM on.
+4:58.18: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:58.74: Robot 2 has turned its BOM on.
+4:58.186: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:58.238: Robot 5 has turned its BOM on.
+4:58.350: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 8)
+4:58.406: Robot 7 has turned its BOM on.
+4:58.522: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:58.578: Robot 9 has turned its BOM on.
+4:58.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:58.738: Robot 1 has turned its BOM on.
+4:58.794: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:58.851: Robot 2 has turned its BOM on.
+4:58.962: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:59.18: Robot 5 has turned its BOM on.
+4:59.130: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:59.186: Robot 7 has turned its BOM on.
+4:59.298: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 1)(2 3)(5 5)(9 9)
+4:59.355: Robot 9 has turned its BOM on.
+4:59.466: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 13)(2 15)(5 0)(7 14)
+4:59.522: Robot 1 has turned its BOM on.
+4:59.634: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 5)(5 10)(7 10)(9 2)
+4:59.690: Robot 2 has turned its BOM on.
+4:59.794: Robot 2 passed the token to robot 5. Sensor matrix:
+(1 15)(5 11)(7 11)(9 9)
+4:59.850: Robot 5 has turned its BOM on.
+4:59.906: Robot 5 passed the token to robot 7. Sensor matrix:
+(1 14)(2 15)(7 13)(9 9)
+4:59.962: Robot 7 has turned its BOM on.
Index: branches/scout/projects/libwireless/logger/tests/5robots150bom.analysis
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots150bom.analysis	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots150bom.analysis	(revision 1346)
@@ -0,0 +1,14 @@
+Robots:						5
+Time (seconds):					300
+Deaths:						5
+
+Deaths per Minute:				1
+Rejoin Time (seconds):				0.354
+Seconds Between BOM Flash and Token Sent:	0.101
+Seconds Between Token Sent and Token Returned:	0.634
+Seconds Between Token Sent and BOM Flash:	0.056
+
+Token Passes per Second:			6.11
+
+Deaths per Robot per Minute:			0.2
+Token Passes per Robot per Second:		1.2
Index: branches/scout/projects/libwireless/logger/tests/5robots100bom.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots100bom.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots100bom.test	(revision 1346)
@@ -0,0 +1,5586 @@
+0:02.459: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:02.515: Robot 1 has requested to join the token ring.
+0:02.571: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 3)
+0:02.627: Robot 3 has turned its BOM on.
+0:02.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:02.743: Robot 7 has turned its BOM on.
+0:02.855: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+0:02.911: Robot 9 has turned its BOM on.
+0:03.019: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:03.075: Robot 2 has turned its BOM on.
+0:03.135: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 3)
+0:03.191: Robot 3 has turned its BOM on.
+0:03.303: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:03.359: Robot 7 has turned its BOM on.
+0:03.459: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 10)(3 9)(9 0)
+0:03.515: Robot 9 has turned its BOM on.
+0:03.627: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:03.683: Robot 2 has turned its BOM on.
+0:03.739: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+0:03.795: Robot 3 has turned its BOM on.
+0:03.907: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:03.959: Robot 7 has turned its BOM on.
+0:04.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+0:04.127: Robot 9 has turned its BOM on.
+0:04.239: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:04.295: Robot 2 has turned its BOM on.
+0:04.351: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+0:04.407: Robot 3 has turned its BOM on.
+0:04.515: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:04.571: Robot 7 has turned its BOM on.
+0:04.687: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+0:04.743: Robot 9 has turned its BOM on.
+0:04.863: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:04.919: Robot 2 has turned its BOM on.
+0:05.015: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 3)
+0:05.071: Robot 3 has turned its BOM on.
+0:05.127: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:05.183: Robot 7 has turned its BOM on.
+0:05.295: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 10)(3 9)(9 0)
+0:05.351: Robot 9 has turned its BOM on.
+0:05.459: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:05.515: Robot 2 has turned its BOM on.
+0:05.627: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 3)
+0:05.683: Robot 3 has turned its BOM on.
+0:05.743: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:05.799: Robot 7 has turned its BOM on.
+0:05.915: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 10)(3 9)(9 0)
+0:05.959: Robot 9 has turned its BOM on.
+0:06.071: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:06.127: Robot 2 has turned its BOM on.
+0:06.239: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+0:06.295: Robot 3 has turned its BOM on.
+0:06.351: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:06.407: Robot 7 has turned its BOM on.
+0:06.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+0:06.571: Robot 9 has turned its BOM on.
+0:06.687: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 4)(7 8)
+0:06.743: Robot 2 has turned its BOM on.
+0:06.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+0:06.911: Robot 1 has requested to join the token ring.
+0:06.959: Robot 3 has turned its BOM on.
+0:07.015: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+0:07.071: Robot 7 has turned its BOM on.
+0:07.127: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+0:07.183: Robot 9 has turned its BOM on.
+0:07.295: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:07.351: Robot 1 has turned its BOM on.
+0:07.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:07.515: Robot 2 has turned its BOM on.
+0:07.635: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:07.691: Robot 3 has turned its BOM on.
+0:07.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:07.859: Robot 7 has turned its BOM on.
+0:07.919: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:07.959: Robot 9 has turned its BOM on.
+0:08.075: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:08.131: Robot 1 has turned its BOM on.
+0:08.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:08.299: Robot 2 has turned its BOM on.
+0:08.411: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:08.459: Robot 3 has turned its BOM on.
+0:08.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:08.631: Robot 7 has turned its BOM on.
+0:08.743: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:08.799: Robot 9 has turned its BOM on.
+0:08.859: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:08.915: Robot 1 has turned its BOM on.
+0:09.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:09.075: Robot 2 has turned its BOM on.
+0:09.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:09.243: Robot 3 has turned its BOM on.
+0:09.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:09.411: Robot 7 has turned its BOM on.
+0:09.519: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:09.575: Robot 9 has turned its BOM on.
+0:09.687: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:09.743: Robot 1 has turned its BOM on.
+0:09.803: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:09.859: Robot 2 has turned its BOM on.
+0:09.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:10.019: Robot 3 has turned its BOM on.
+0:10.131: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:10.187: Robot 7 has turned its BOM on.
+0:10.307: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:10.367: Robot 9 has turned its BOM on.
+0:10.479: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:10.535: Robot 1 has turned its BOM on.
+0:10.647: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:10.703: Robot 2 has turned its BOM on.
+0:10.759: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:10.815: Robot 3 has turned its BOM on.
+0:10.927: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:10.959: Robot 7 has turned its BOM on.
+0:11.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:11.127: Robot 9 has turned its BOM on.
+0:11.243: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:11.299: Robot 1 has turned its BOM on.
+0:11.411: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:11.459: Robot 2 has turned its BOM on.
+0:11.571: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:11.627: Robot 3 has turned its BOM on.
+0:11.739: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:11.795: Robot 7 has turned its BOM on.
+0:11.907: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:11.959: Robot 9 has turned its BOM on.
+0:12.015: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:12.071: Robot 1 has turned its BOM on.
+0:12.187: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:12.243: Robot 2 has turned its BOM on.
+0:12.355: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:12.411: Robot 3 has turned its BOM on.
+0:12.515: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:12.571: Robot 7 has turned its BOM on.
+0:12.683: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:12.740: Robot 9 has turned its BOM on.
+0:12.871: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:12.927: Robot 1 has turned its BOM on.
+0:13.015: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:13.071: Robot 2 has turned its BOM on.
+0:13.131: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:13.187: Robot 3 has turned its BOM on.
+0:13.299: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:13.355: Robot 7 has turned its BOM on.
+0:13.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:13.519: Robot 9 has turned its BOM on.
+0:13.639: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:13.695: Robot 1 has turned its BOM on.
+0:13.755: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:13.811: Robot 2 has turned its BOM on.
+0:13.923: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:13.959: Robot 3 has turned its BOM on.
+0:14.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:14.131: Robot 7 has turned its BOM on.
+0:14.255: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:14.311: Robot 9 has turned its BOM on.
+0:14.423: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:14.459: Robot 1 has turned its BOM on.
+0:14.583: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:14.639: Robot 2 has turned its BOM on.
+0:14.699: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:14.755: Robot 3 has turned its BOM on.
+0:14.867: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:14.923: Robot 7 has turned its BOM on.
+0:15.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:15.075: Robot 9 has turned its BOM on.
+0:15.187: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:15.243: Robot 1 has turned its BOM on.
+0:15.355: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:15.411: Robot 2 has turned its BOM on.
+0:15.515: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:15.571: Robot 3 has turned its BOM on.
+0:15.695: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:15.751: Robot 7 has turned its BOM on.
+0:15.807: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:15.863: Robot 9 has turned its BOM on.
+0:15.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:16.027: Robot 1 has turned its BOM on.
+0:16.139: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:16.195: Robot 2 has turned its BOM on.
+0:16.307: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:16.363: Robot 3 has turned its BOM on.
+0:16.459: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:16.515: Robot 7 has turned its BOM on.
+0:16.627: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:16.683: Robot 9 has turned its BOM on.
+0:16.795: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:16.851: Robot 1 has turned its BOM on.
+0:16.959: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:17.015: Robot 2 has turned its BOM on.
+0:17.071: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:17.127: Robot 3 has turned its BOM on.
+0:17.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:17.299: Robot 7 has turned its BOM on.
+0:17.411: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:17.459: Robot 9 has turned its BOM on.
+0:17.571: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:17.627: Robot 1 has turned its BOM on.
+0:17.739: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:17.795: Robot 2 has turned its BOM on.
+0:17.919: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:17.963: Robot 3 has turned its BOM on.
+0:18.083: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:18.139: Robot 7 has turned its BOM on.
+0:18.195: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:18.251: Robot 9 has turned its BOM on.
+0:18.367: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:18.423: Robot 1 has turned its BOM on.
+0:18.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:18.571: Robot 2 has turned its BOM on.
+0:18.683: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:18.739: Robot 3 has turned its BOM on.
+0:18.851: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:18.907: Robot 7 has turned its BOM on.
+0:19.015: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:19.071: Robot 9 has turned its BOM on.
+0:19.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:19.183: Robot 1 has turned its BOM on.
+0:19.295: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:19.351: Robot 2 has turned its BOM on.
+0:19.459: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:19.515: Robot 3 has turned its BOM on.
+0:19.627: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:19.683: Robot 7 has turned its BOM on.
+0:19.803: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:19.859: Robot 9 has turned its BOM on.
+0:19.915: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:19.959: Robot 1 has turned its BOM on.
+0:20.083: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:20.139: Robot 2 has turned its BOM on.
+0:20.251: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:20.307: Robot 3 has turned its BOM on.
+0:20.419: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:20.459: Robot 7 has turned its BOM on.
+0:20.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:20.627: Robot 9 has turned its BOM on.
+0:20.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:20.799: Robot 1 has turned its BOM on.
+0:20.859: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:20.915: Robot 2 has turned its BOM on.
+0:21.019: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:21.075: Robot 3 has turned its BOM on.
+0:21.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:21.243: Robot 7 has turned its BOM on.
+0:21.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:21.411: Robot 9 has turned its BOM on.
+0:21.515: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:21.571: Robot 1 has turned its BOM on.
+0:21.683: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:21.739: Robot 2 has turned its BOM on.
+0:21.851: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:21.907: Robot 3 has turned its BOM on.
+0:22.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:22.075: Robot 7 has turned its BOM on.
+0:22.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:22.243: Robot 9 has turned its BOM on.
+0:22.299: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:22.355: Robot 1 has turned its BOM on.
+0:22.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:22.515: Robot 2 has turned its BOM on.
+0:22.627: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:22.683: Robot 3 has turned its BOM on.
+0:22.799: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:22.855: Robot 7 has turned its BOM on.
+0:22.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:23.015: Robot 9 has turned its BOM on.
+0:23.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:23.183: Robot 1 has turned its BOM on.
+0:23.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:23.299: Robot 2 has turned its BOM on.
+0:23.411: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:23.459: Robot 3 has turned its BOM on.
+0:23.571: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:23.627: Robot 7 has turned its BOM on.
+0:23.739: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:23.795: Robot 9 has turned its BOM on.
+0:23.907: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:23.959: Robot 1 has turned its BOM on.
+0:24.079: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:24.131: Robot 2 has turned its BOM on.
+0:24.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:24.243: Robot 3 has turned its BOM on.
+0:24.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:24.411: Robot 7 has turned its BOM on.
+0:24.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:24.571: Robot 9 has turned its BOM on.
+0:24.683: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:24.739: Robot 1 has turned its BOM on.
+0:24.851: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:24.907: Robot 2 has turned its BOM on.
+0:25.015: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:25.079: Robot 3 has turned its BOM on.
+0:25.135: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:25.191: Robot 7 has turned its BOM on.
+0:25.303: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:25.359: Robot 9 has turned its BOM on.
+0:25.463: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:25.519: Robot 1 has turned its BOM on.
+0:25.631: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:25.687: Robot 2 has turned its BOM on.
+0:25.799: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:25.855: Robot 3 has turned its BOM on.
+0:25.959: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:26.015: Robot 7 has turned its BOM on.
+0:26.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:26.127: Robot 9 has turned its BOM on.
+0:26.239: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:26.295: Robot 1 has turned its BOM on.
+0:26.407: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:26.459: Robot 2 has turned its BOM on.
+0:26.571: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:26.627: Robot 3 has turned its BOM on.
+0:26.743: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:26.799: Robot 7 has turned its BOM on.
+0:26.911: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:26.959: Robot 9 has turned its BOM on.
+0:27.071: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:27.127: Robot 1 has turned its BOM on.
+0:27.183: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:27.239: Robot 2 has turned its BOM on.
+0:27.351: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:27.407: Robot 3 has turned its BOM on.
+0:27.515: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:27.571: Robot 7 has turned its BOM on.
+0:27.687: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:27.743: Robot 9 has turned its BOM on.
+0:27.859: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:27.915: Robot 1 has turned its BOM on.
+0:28.015: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:28.071: Robot 2 has turned its BOM on.
+0:28.183: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:28.239: Robot 3 has turned its BOM on.
+0:28.299: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:28.355: Robot 7 has turned its BOM on.
+0:28.459: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:28.515: Robot 9 has turned its BOM on.
+0:28.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:28.687: Robot 1 has turned its BOM on.
+0:28.799: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:28.855: Robot 2 has turned its BOM on.
+0:28.959: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:29.015: Robot 3 has turned its BOM on.
+0:29.127: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:29.183: Robot 7 has turned its BOM on.
+0:29.239: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:29.295: Robot 9 has turned its BOM on.
+0:29.407: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:29.459: Robot 1 has turned its BOM on.
+0:29.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:29.631: Robot 2 has turned its BOM on.
+0:29.743: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:29.799: Robot 3 has turned its BOM on.
+0:29.911: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:29.959: Robot 7 has turned its BOM on.
+0:30.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:30.128: Robot 9 has turned its BOM on.
+0:30.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:30.239: Robot 1 has turned its BOM on.
+0:30.351: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:30.407: Robot 2 has turned its BOM on.
+0:30.519: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:30.575: Robot 3 has turned its BOM on.
+0:30.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:30.743: Robot 7 has turned its BOM on.
+0:30.855: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:30.911: Robot 9 has turned its BOM on.
+0:31.015: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:31.071: Robot 1 has turned its BOM on.
+0:31.127: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:31.183: Robot 2 has turned its BOM on.
+0:31.295: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:31.351: Robot 3 has turned its BOM on.
+0:31.459: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:31.515: Robot 7 has turned its BOM on.
+0:31.627: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:31.683: Robot 9 has turned its BOM on.
+0:31.799: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:31.855: Robot 1 has turned its BOM on.
+0:31.959: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:32.015: Robot 2 has turned its BOM on.
+0:32.127: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:32.183: Robot 3 has turned its BOM on.
+0:32.239: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:32.295: Robot 7 has turned its BOM on.
+0:32.407: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:32.459: Robot 9 has turned its BOM on.
+0:32.571: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:32.627: Robot 1 has turned its BOM on.
+0:32.747: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:32.803: Robot 2 has turned its BOM on.
+0:32.915: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:32.959: Robot 3 has turned its BOM on.
+0:33.071: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:33.127: Robot 7 has turned its BOM on.
+0:33.239: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:33.295: Robot 9 has turned its BOM on.
+0:33.351: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:33.407: Robot 1 has turned its BOM on.
+0:33.515: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:33.571: Robot 2 has turned its BOM on.
+0:33.687: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:33.743: Robot 3 has turned its BOM on.
+0:33.855: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:33.911: Robot 7 has turned its BOM on.
+0:34.015: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:34.071: Robot 9 has turned its BOM on.
+0:34.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:34.239: Robot 1 has turned its BOM on.
+0:34.295: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:34.351: Robot 2 has turned its BOM on.
+0:34.459: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:34.515: Robot 3 has turned its BOM on.
+0:34.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:34.687: Robot 7 has turned its BOM on.
+0:34.799: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:34.855: Robot 9 has turned its BOM on.
+0:34.959: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:35.015: Robot 1 has turned its BOM on.
+0:35.127: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:35.183: Robot 2 has turned its BOM on.
+0:35.239: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:35.295: Robot 3 has turned its BOM on.
+0:35.407: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:35.459: Robot 7 has turned its BOM on.
+0:35.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:35.631: Robot 9 has turned its BOM on.
+0:35.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:35.799: Robot 1 has turned its BOM on.
+0:35.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:35.959: Robot 2 has turned its BOM on.
+0:36.071: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:36.127: Robot 3 has turned its BOM on.
+0:36.183: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:36.239: Robot 7 has turned its BOM on.
+0:36.351: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:36.407: Robot 9 has turned its BOM on.
+0:36.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:36.575: Robot 1 has turned its BOM on.
+0:36.687: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:36.743: Robot 2 has turned its BOM on.
+0:36.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:36.911: Robot 3 has turned its BOM on.
+0:37.015: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:37.071: Robot 7 has turned its BOM on.
+0:37.184: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:37.239: Robot 9 has turned its BOM on.
+0:37.295: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:37.351: Robot 1 has turned its BOM on.
+0:37.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:37.515: Robot 2 has turned its BOM on.
+0:37.627: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:37.683: Robot 3 has turned its BOM on.
+0:37.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:37.859: Robot 7 has turned its BOM on.
+0:37.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:38.015: Robot 9 has turned its BOM on.
+0:38.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:38.183: Robot 1 has turned its BOM on.
+0:38.295: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:38.351: Robot 2 has turned its BOM on.
+0:38.407: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:38.459: Robot 3 has turned its BOM on.
+0:38.571: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:38.627: Robot 7 has turned its BOM on.
+0:38.743: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:38.799: Robot 9 has turned its BOM on.
+0:38.911: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:38.959: Robot 1 has turned its BOM on.
+0:39.071: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:39.127: Robot 2 has turned its BOM on.
+0:39.239: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:39.295: Robot 3 has turned its BOM on.
+0:39.351: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:39.407: Robot 7 has turned its BOM on.
+0:39.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:39.571: Robot 9 has turned its BOM on.
+0:39.687: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:39.743: Robot 1 has turned its BOM on.
+0:39.855: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:39.911: Robot 2 has turned its BOM on.
+0:40.015: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:40.071: Robot 3 has turned its BOM on.
+0:40.183: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:40.239: Robot 7 has turned its BOM on.
+0:40.295: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:40.351: Robot 9 has turned its BOM on.
+0:40.459: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:40.515: Robot 1 has turned its BOM on.
+0:40.635: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:40.691: Robot 2 has turned its BOM on.
+0:40.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:40.859: Robot 3 has turned its BOM on.
+0:40.959: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:41.015: Robot 7 has turned its BOM on.
+0:41.127: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:41.183: Robot 9 has turned its BOM on.
+0:41.239: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:41.295: Robot 1 has turned its BOM on.
+0:41.407: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:41.459: Robot 2 has turned its BOM on.
+0:41.571: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:41.627: Robot 3 has turned its BOM on.
+0:41.739: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:41.795: Robot 7 has turned its BOM on.
+0:41.911: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:41.959: Robot 9 has turned its BOM on.
+0:42.071: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:42.127: Robot 1 has turned its BOM on.
+0:42.239: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:42.295: Robot 2 has turned its BOM on.
+0:42.351: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:42.407: Robot 3 has turned its BOM on.
+0:42.515: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:42.571: Robot 7 has turned its BOM on.
+0:42.683: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:42.739: Robot 9 has turned its BOM on.
+0:42.851: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:42.907: Robot 1 has turned its BOM on.
+0:43.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:43.075: Robot 2 has turned its BOM on.
+0:43.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:43.243: Robot 3 has turned its BOM on.
+0:43.299: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:43.355: Robot 7 has turned its BOM on.
+0:43.459: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:43.515: Robot 9 has turned its BOM on.
+0:43.627: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:43.683: Robot 1 has turned its BOM on.
+0:43.795: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:43.851: Robot 2 has turned its BOM on.
+0:43.959: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:44.015: Robot 3 has turned its BOM on.
+0:44.127: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:44.183: Robot 7 has turned its BOM on.
+0:44.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:44.299: Robot 9 has turned its BOM on.
+0:44.411: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:44.459: Robot 1 has turned its BOM on.
+0:44.571: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:44.627: Robot 2 has turned its BOM on.
+0:44.739: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:44.795: Robot 3 has turned its BOM on.
+0:44.911: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:44.959: Robot 7 has turned its BOM on.
+0:45.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:45.127: Robot 9 has turned its BOM on.
+0:45.187: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:45.243: Robot 1 has turned its BOM on.
+0:45.355: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:45.411: Robot 2 has turned its BOM on.
+0:45.515: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:45.571: Robot 3 has turned its BOM on.
+0:45.683: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:45.739: Robot 7 has turned its BOM on.
+0:45.851: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:45.907: Robot 9 has turned its BOM on.
+0:46.015: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:46.071: Robot 1 has turned its BOM on.
+0:46.131: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:46.187: Robot 2 has turned its BOM on.
+0:46.299: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:46.355: Robot 3 has turned its BOM on.
+0:46.459: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:46.515: Robot 7 has turned its BOM on.
+0:46.627: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:46.683: Robot 9 has turned its BOM on.
+0:46.795: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:46.851: Robot 1 has turned its BOM on.
+0:46.959: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:47.015: Robot 2 has turned its BOM on.
+0:47.127: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:47.183: Robot 3 has turned its BOM on.
+0:47.295: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:47.351: Robot 7 has turned its BOM on.
+0:47.407: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:47.459: Robot 9 has turned its BOM on.
+0:47.571: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:47.627: Robot 1 has turned its BOM on.
+0:47.739: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:47.795: Robot 2 has turned its BOM on.
+0:47.907: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:47.959: Robot 3 has turned its BOM on.
+0:48.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:48.131: Robot 7 has turned its BOM on.
+0:48.243: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:48.299: Robot 9 has turned its BOM on.
+0:48.355: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:48.411: Robot 1 has turned its BOM on.
+0:48.519: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:48.575: Robot 2 has turned its BOM on.
+0:48.691: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:48.747: Robot 3 has turned its BOM on.
+0:48.859: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:48.915: Robot 7 has turned its BOM on.
+0:49.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:49.075: Robot 9 has turned its BOM on.
+0:49.187: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:49.243: Robot 1 has turned its BOM on.
+0:49.299: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:49.355: Robot 2 has turned its BOM on.
+0:49.459: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:49.515: Robot 3 has turned its BOM on.
+0:49.627: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:49.683: Robot 7 has turned its BOM on.
+0:49.795: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:49.851: Robot 9 has turned its BOM on.
+0:49.959: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:50.015: Robot 1 has turned its BOM on.
+0:50.127: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:50.183: Robot 2 has turned its BOM on.
+0:50.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:50.299: Robot 3 has turned its BOM on.
+0:50.411: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:50.459: Robot 7 has turned its BOM on.
+0:50.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:50.627: Robot 9 has turned its BOM on.
+0:50.739: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:50.796: Robot 1 has turned its BOM on.
+0:50.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:50.959: Robot 2 has turned its BOM on.
+0:51.071: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:51.127: Robot 3 has turned its BOM on.
+0:51.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:51.243: Robot 7 has turned its BOM on.
+0:51.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:51.411: Robot 9 has turned its BOM on.
+0:51.515: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:51.571: Robot 1 has turned its BOM on.
+0:51.683: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:51.739: Robot 2 has turned its BOM on.
+0:51.851: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:51.907: Robot 3 has turned its BOM on.
+0:52.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:52.075: Robot 7 has turned its BOM on.
+0:52.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:52.243: Robot 9 has turned its BOM on.
+0:52.355: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:52.411: Robot 1 has turned its BOM on.
+0:52.459: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:52.515: Robot 2 has turned its BOM on.
+0:52.627: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:52.683: Robot 3 has turned its BOM on.
+0:52.795: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:52.851: Robot 7 has turned its BOM on.
+0:52.963: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:53.019: Robot 9 has turned its BOM on.
+0:53.131: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:53.187: Robot 1 has turned its BOM on.
+0:53.299: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:53.355: Robot 2 has turned its BOM on.
+0:53.459: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:53.515: Robot 3 has turned its BOM on.
+0:53.571: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:53.627: Robot 7 has turned its BOM on.
+0:53.739: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:53.795: Robot 9 has turned its BOM on.
+0:53.907: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:53.959: Robot 1 has turned its BOM on.
+0:54.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:54.131: Robot 2 has turned its BOM on.
+0:54.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:54.299: Robot 3 has turned its BOM on.
+0:54.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:54.411: Robot 7 has turned its BOM on.
+0:54.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:54.571: Robot 9 has turned its BOM on.
+0:54.683: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:54.739: Robot 1 has turned its BOM on.
+0:54.851: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:54.907: Robot 2 has turned its BOM on.
+0:55.019: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:55.075: Robot 3 has turned its BOM on.
+0:55.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:55.243: Robot 7 has turned its BOM on.
+0:55.299: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:55.355: Robot 9 has turned its BOM on.
+0:55.459: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:55.515: Robot 1 has turned its BOM on.
+0:55.627: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:55.683: Robot 2 has turned its BOM on.
+0:55.795: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:55.851: Robot 3 has turned its BOM on.
+0:55.959: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:56.015: Robot 7 has turned its BOM on.
+0:56.127: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:56.183: Robot 9 has turned its BOM on.
+0:56.243: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:56.299: Robot 1 has turned its BOM on.
+0:56.411: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:56.459: Robot 2 has turned its BOM on.
+0:56.571: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:56.627: Robot 3 has turned its BOM on.
+0:56.739: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:56.795: Robot 7 has turned its BOM on.
+0:56.907: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+0:56.959: Robot 9 has turned its BOM on.
+0:57.075: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:57.131: Robot 1 has turned its BOM on.
+0:57.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:57.299: Robot 2 has turned its BOM on.
+0:57.411: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+0:57.459: Robot 3 has turned its BOM on.
+0:57.515: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:57.571: Robot 7 has turned its BOM on.
+0:57.683: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:57.739: Robot 9 has turned its BOM on.
+0:57.852: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:57.907: Robot 1 has turned its BOM on.
+0:58.015: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:58.071: Robot 2 has turned its BOM on.
+0:58.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:58.243: Robot 3 has turned its BOM on.
+0:58.356: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:58.411: Robot 7 has turned its BOM on.
+0:58.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+0:58.571: Robot 9 has turned its BOM on.
+0:58.627: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:58.683: Robot 1 has turned its BOM on.
+0:58.795: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:58.851: Robot 2 has turned its BOM on.
+0:58.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:59.019: Robot 3 has turned its BOM on.
+0:59.131: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:59.187: Robot 7 has turned its BOM on.
+0:59.247: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+0:59.303: Robot 9 has turned its BOM on.
+0:59.415: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:59.459: Robot 1 has turned its BOM on.
+0:59.571: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:59.627: Robot 2 has turned its BOM on.
+0:59.743: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+0:59.799: Robot 3 has turned its BOM on.
+0:59.911: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:59.959: Robot 7 has turned its BOM on.
+1:00.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:00.127: Robot 9 has turned its BOM on.
+1:00.239: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:00.295: Robot 1 has turned its BOM on.
+1:00.351: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:00.407: Robot 2 has turned its BOM on.
+1:00.515: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:00.571: Robot 3 has turned its BOM on.
+1:00.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:00.743: Robot 7 has turned its BOM on.
+1:00.855: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:00.911: Robot 9 has turned its BOM on.
+1:01.015: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:01.071: Robot 1 has turned its BOM on.
+1:01.183: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:01.239: Robot 2 has turned its BOM on.
+1:01.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:01.351: Robot 3 has turned its BOM on.
+1:01.459: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:01.515: Robot 7 has turned its BOM on.
+1:01.627: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:01.683: Robot 9 has turned its BOM on.
+1:01.795: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:01.851: Robot 1 has turned its BOM on.
+1:01.959: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:02.015: Robot 2 has turned its BOM on.
+1:02.127: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:02.183: Robot 3 has turned its BOM on.
+1:02.295: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:02.351: Robot 7 has turned its BOM on.
+1:02.459: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:02.515: Robot 9 has turned its BOM on.
+1:02.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:02.631: Robot 1 has turned its BOM on.
+1:02.743: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:02.799: Robot 2 has turned its BOM on.
+1:02.911: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:02.959: Robot 3 has turned its BOM on.
+1:03.071: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:03.127: Robot 7 has turned its BOM on.
+1:03.239: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:03.295: Robot 9 has turned its BOM on.
+1:03.407: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:03.459: Robot 1 has turned its BOM on.
+1:03.519: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:03.575: Robot 2 has turned its BOM on.
+1:03.687: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:03.743: Robot 3 has turned its BOM on.
+1:03.855: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:03.911: Robot 7 has turned its BOM on.
+1:04.015: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:04.071: Robot 9 has turned its BOM on.
+1:04.183: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:04.239: Robot 1 has turned its BOM on.
+1:04.351: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:04.408: Robot 2 has turned its BOM on.
+1:04.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:04.519: Robot 3 has turned its BOM on.
+1:04.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:04.687: Robot 7 has turned its BOM on.
+1:04.799: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:04.855: Robot 9 has turned its BOM on.
+1:04.959: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:05.015: Robot 1 has turned its BOM on.
+1:05.127: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:05.183: Robot 2 has turned its BOM on.
+1:05.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:05.299: Robot 3 has turned its BOM on.
+1:05.411: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:05.459: Robot 7 has turned its BOM on.
+1:05.571: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:05.627: Robot 9 has turned its BOM on.
+1:05.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:05.799: Robot 1 has turned its BOM on.
+1:05.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:05.959: Robot 2 has turned its BOM on.
+1:06.071: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:06.127: Robot 3 has turned its BOM on.
+1:06.239: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:06.295: Robot 7 has turned its BOM on.
+1:06.351: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:06.407: Robot 9 has turned its BOM on.
+1:06.515: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:06.571: Robot 1 has turned its BOM on.
+1:06.687: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:06.743: Robot 2 has turned its BOM on.
+1:06.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:06.911: Robot 3 has turned its BOM on.
+1:07.015: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:07.071: Robot 7 has turned its BOM on.
+1:07.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:07.243: Robot 9 has turned its BOM on.
+1:07.355: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:07.411: Robot 1 has turned its BOM on.
+1:07.515: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:07.571: Robot 2 has turned its BOM on.
+1:07.631: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:07.687: Robot 3 has turned its BOM on.
+1:07.799: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:07.855: Robot 7 has turned its BOM on.
+1:07.959: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:08.015: Robot 9 has turned its BOM on.
+1:08.127: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:08.183: Robot 1 has turned its BOM on.
+1:08.295: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:08.351: Robot 2 has turned its BOM on.
+1:08.459: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:08.515: Robot 3 has turned its BOM on.
+1:08.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:08.631: Robot 7 has turned its BOM on.
+1:08.743: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:08.799: Robot 9 has turned its BOM on.
+1:08.911: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:08.959: Robot 1 has turned its BOM on.
+1:09.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:09.131: Robot 2 has turned its BOM on.
+1:09.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:09.299: Robot 3 has turned its BOM on.
+1:09.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:09.411: Robot 7 has turned its BOM on.
+1:09.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:09.571: Robot 9 has turned its BOM on.
+1:09.683: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:09.739: Robot 1 has turned its BOM on.
+1:09.855: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:09.911: Robot 2 has turned its BOM on.
+1:10.015: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:10.071: Robot 3 has turned its BOM on.
+1:10.183: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:10.239: Robot 7 has turned its BOM on.
+1:10.351: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:10.407: Robot 9 has turned its BOM on.
+1:10.463: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:10.519: Robot 1 has turned its BOM on.
+1:10.631: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:10.687: Robot 2 has turned its BOM on.
+1:10.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:10.859: Robot 3 has turned its BOM on.
+1:10.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:11.015: Robot 7 has turned its BOM on.
+1:11.127: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:11.183: Robot 9 has turned its BOM on.
+1:11.295: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:11.351: Robot 1 has turned its BOM on.
+1:11.407: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:11.459: Robot 2 has turned its BOM on.
+1:11.571: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:11.627: Robot 3 has turned its BOM on.
+1:11.747: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:11.803: Robot 7 has turned its BOM on.
+1:11.919: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:11.959: Robot 9 has turned its BOM on.
+1:12.071: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:12.127: Robot 1 has turned its BOM on.
+1:12.239: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:12.296: Robot 2 has turned its BOM on.
+1:12.407: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:12.459: Robot 3 has turned its BOM on.
+1:12.571: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:12.628: Robot 7 has turned its BOM on.
+1:12.687: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:12.743: Robot 9 has turned its BOM on.
+1:12.855: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:12.911: Robot 1 has turned its BOM on.
+1:13.016: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:13.071: Robot 2 has turned its BOM on.
+1:13.183: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:13.239: Robot 3 has turned its BOM on.
+1:13.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:13.411: Robot 7 has turned its BOM on.
+1:13.515: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:13.571: Robot 9 has turned its BOM on.
+1:13.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:13.687: Robot 1 has turned its BOM on.
+1:13.799: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:13.855: Robot 2 has turned its BOM on.
+1:13.959: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:14.015: Robot 3 has turned its BOM on.
+1:14.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:14.183: Robot 7 has turned its BOM on.
+1:14.300: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:14.355: Robot 9 has turned its BOM on.
+1:14.415: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:14.459: Robot 1 has turned its BOM on.
+1:14.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:14.631: Robot 2 has turned its BOM on.
+1:14.743: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:14.799: Robot 3 has turned its BOM on.
+1:14.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:14.960: Robot 7 has turned its BOM on.
+1:15.071: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:15.128: Robot 9 has turned its BOM on.
+1:15.240: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:15.295: Robot 1 has turned its BOM on.
+1:15.408: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:15.460: Robot 2 has turned its BOM on.
+1:15.515: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:15.572: Robot 3 has turned its BOM on.
+1:15.683: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:15.739: Robot 7 has turned its BOM on.
+1:15.855: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:15.912: Robot 9 has turned its BOM on.
+1:16.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:16.071: Robot 1 has turned its BOM on.
+1:16.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:16.240: Robot 2 has turned its BOM on.
+1:16.355: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:16.412: Robot 3 has turned its BOM on.
+1:16.460: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:16.516: Robot 7 has turned its BOM on.
+1:16.627: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:16.684: Robot 9 has turned its BOM on.
+1:16.795: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:16.851: Robot 1 has turned its BOM on.
+1:16.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:17.016: Robot 2 has turned its BOM on.
+1:17.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:17.188: Robot 3 has turned its BOM on.
+1:17.300: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:17.356: Robot 7 has turned its BOM on.
+1:17.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:17.516: Robot 9 has turned its BOM on.
+1:17.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:17.684: Robot 1 has turned its BOM on.
+1:17.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:17.796: Robot 2 has turned its BOM on.
+1:17.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:17.960: Robot 3 has turned its BOM on.
+1:18.076: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:18.132: Robot 7 has turned its BOM on.
+1:18.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:18.300: Robot 9 has turned its BOM on.
+1:18.412: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:18.460: Robot 1 has turned its BOM on.
+1:18.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:18.628: Robot 2 has turned its BOM on.
+1:18.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:18.740: Robot 3 has turned its BOM on.
+1:18.852: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:18.908: Robot 7 has turned its BOM on.
+1:19.016: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:19.072: Robot 9 has turned its BOM on.
+1:19.184: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:19.240: Robot 1 has turned its BOM on.
+1:19.352: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:19.408: Robot 2 has turned its BOM on.
+1:19.516: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:19.572: Robot 3 has turned its BOM on.
+1:19.628: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:19.684: Robot 7 has turned its BOM on.
+1:19.796: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:19.852: Robot 9 has turned its BOM on.
+1:19.964: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:20.020: Robot 1 has turned its BOM on.
+1:20.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:20.188: Robot 2 has turned its BOM on.
+1:20.300: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:20.356: Robot 3 has turned its BOM on.
+1:20.412: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:20.460: Robot 7 has turned its BOM on.
+1:20.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:20.628: Robot 9 has turned its BOM on.
+1:20.740: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:20.796: Robot 1 has turned its BOM on.
+1:20.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:20.960: Robot 2 has turned its BOM on.
+1:21.072: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:21.128: Robot 3 has turned its BOM on.
+1:21.240: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:21.296: Robot 7 has turned its BOM on.
+1:21.412: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:21.460: Robot 9 has turned its BOM on.
+1:21.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:21.572: Robot 1 has turned its BOM on.
+1:21.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:21.740: Robot 2 has turned its BOM on.
+1:21.852: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:21.908: Robot 3 has turned its BOM on.
+1:22.016: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:22.072: Robot 7 has turned its BOM on.
+1:22.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:22.244: Robot 9 has turned its BOM on.
+1:22.356: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:22.412: Robot 1 has turned its BOM on.
+1:22.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:22.572: Robot 2 has turned its BOM on.
+1:22.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:22.740: Robot 3 has turned its BOM on.
+1:22.796: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:22.852: Robot 7 has turned its BOM on.
+1:22.960: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:23.016: Robot 9 has turned its BOM on.
+1:23.132: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:23.188: Robot 1 has turned its BOM on.
+1:23.300: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:23.356: Robot 2 has turned its BOM on.
+1:23.460: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:23.516: Robot 3 has turned its BOM on.
+1:23.628: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:23.684: Robot 7 has turned its BOM on.
+1:23.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:23.796: Robot 9 has turned its BOM on.
+1:23.908: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:23.960: Robot 1 has turned its BOM on.
+1:24.076: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:24.132: Robot 2 has turned its BOM on.
+1:24.244: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:24.300: Robot 3 has turned its BOM on.
+1:24.412: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:24.460: Robot 7 has turned its BOM on.
+1:24.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:24.628: Robot 9 has turned its BOM on.
+1:24.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:24.740: Robot 1 has turned its BOM on.
+1:24.852: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:24.908: Robot 2 has turned its BOM on.
+1:25.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:25.072: Robot 3 has turned its BOM on.
+1:25.184: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:25.240: Robot 7 has turned its BOM on.
+1:25.352: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:25.408: Robot 9 has turned its BOM on.
+1:25.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:25.572: Robot 1 has turned its BOM on.
+1:25.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:25.684: Robot 2 has turned its BOM on.
+1:25.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:25.852: Robot 3 has turned its BOM on.
+1:25.968: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:26.024: Robot 7 has turned its BOM on.
+1:26.136: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:26.192: Robot 9 has turned its BOM on.
+1:26.308: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:26.364: Robot 1 has turned its BOM on.
+1:26.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:26.516: Robot 2 has turned its BOM on.
+1:26.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:26.628: Robot 3 has turned its BOM on.
+1:26.740: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:26.796: Robot 7 has turned its BOM on.
+1:26.908: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:26.960: Robot 9 has turned its BOM on.
+1:27.072: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:27.128: Robot 1 has turned its BOM on.
+1:27.240: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:27.296: Robot 2 has turned its BOM on.
+1:27.408: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:27.460: Robot 3 has turned its BOM on.
+1:27.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:27.628: Robot 7 has turned its BOM on.
+1:27.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:27.796: Robot 9 has turned its BOM on.
+1:27.852: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:27.908: Robot 1 has turned its BOM on.
+1:28.016: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:28.072: Robot 2 has turned its BOM on.
+1:28.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:28.244: Robot 3 has turned its BOM on.
+1:28.356: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:28.412: Robot 7 has turned its BOM on.
+1:28.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:28.572: Robot 9 has turned its BOM on.
+1:28.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:28.740: Robot 1 has turned its BOM on.
+1:28.796: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:28.852: Robot 2 has turned its BOM on.
+1:28.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:29.016: Robot 3 has turned its BOM on.
+1:29.132: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:29.188: Robot 7 has turned its BOM on.
+1:29.300: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:29.356: Robot 9 has turned its BOM on.
+1:29.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:29.516: Robot 1 has turned its BOM on.
+1:29.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:29.684: Robot 2 has turned its BOM on.
+1:29.740: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:29.796: Robot 3 has turned its BOM on.
+1:29.908: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:29.960: Robot 7 has turned its BOM on.
+1:30.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:30.128: Robot 9 has turned its BOM on.
+1:30.244: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:30.300: Robot 1 has turned its BOM on.
+1:30.412: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:30.460: Robot 2 has turned its BOM on.
+1:30.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:30.628: Robot 3 has turned its BOM on.
+1:30.684: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:30.740: Robot 7 has turned its BOM on.
+1:30.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:30.908: Robot 9 has turned its BOM on.
+1:31.020: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:31.076: Robot 1 has turned its BOM on.
+1:31.188: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:31.244: Robot 2 has turned its BOM on.
+1:31.356: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:31.412: Robot 3 has turned its BOM on.
+1:31.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:31.572: Robot 7 has turned its BOM on.
+1:31.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:31.684: Robot 9 has turned its BOM on.
+1:31.796: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:31.852: Robot 1 has turned its BOM on.
+1:31.964: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:32.020: Robot 2 has turned its BOM on.
+1:32.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:32.188: Robot 3 has turned its BOM on.
+1:32.300: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:32.356: Robot 7 has turned its BOM on.
+1:32.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:32.516: Robot 9 has turned its BOM on.
+1:32.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:32.684: Robot 1 has turned its BOM on.
+1:32.796: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:32.852: Robot 2 has turned its BOM on.
+1:32.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:32.960: Robot 3 has turned its BOM on.
+1:33.072: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:33.128: Robot 7 has turned its BOM on.
+1:33.248: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:33.304: Robot 9 has turned its BOM on.
+1:33.420: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:33.460: Robot 1 has turned its BOM on.
+1:33.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:33.628: Robot 2 has turned its BOM on.
+1:33.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:33.740: Robot 3 has turned its BOM on.
+1:33.852: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:33.908: Robot 7 has turned its BOM on.
+1:34.016: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:34.072: Robot 9 has turned its BOM on.
+1:34.184: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:34.240: Robot 1 has turned its BOM on.
+1:34.352: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:34.408: Robot 2 has turned its BOM on.
+1:34.516: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:34.572: Robot 3 has turned its BOM on.
+1:34.636: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:34.692: Robot 7 has turned its BOM on.
+1:34.808: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:34.864: Robot 9 has turned its BOM on.
+1:34.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:35.016: Robot 1 has turned its BOM on.
+1:35.128: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:35.184: Robot 2 has turned its BOM on.
+1:35.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:35.352: Robot 3 has turned its BOM on.
+1:35.460: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:35.516: Robot 7 has turned its BOM on.
+1:35.632: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:35.688: Robot 9 has turned its BOM on.
+1:35.744: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:35.800: Robot 1 has turned its BOM on.
+1:35.912: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:35.960: Robot 2 has turned its BOM on.
+1:36.076: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:36.132: Robot 3 has turned its BOM on.
+1:36.244: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:36.300: Robot 7 has turned its BOM on.
+1:36.416: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:36.460: Robot 9 has turned its BOM on.
+1:36.576: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:36.632: Robot 1 has turned its BOM on.
+1:36.688: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:36.744: Robot 2 has turned its BOM on.
+1:36.856: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:36.912: Robot 3 has turned its BOM on.
+1:37.016: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:37.072: Robot 7 has turned its BOM on.
+1:37.184: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:37.240: Robot 9 has turned its BOM on.
+1:37.352: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:37.408: Robot 1 has turned its BOM on.
+1:37.520: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:37.576: Robot 2 has turned its BOM on.
+1:37.688: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:37.744: Robot 3 has turned its BOM on.
+1:37.800: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:37.856: Robot 7 has turned its BOM on.
+1:37.960: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:38.016: Robot 9 has turned its BOM on.
+1:38.128: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:38.184: Robot 1 has turned its BOM on.
+1:38.296: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:38.352: Robot 2 has turned its BOM on.
+1:38.460: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:38.516: Robot 3 has turned its BOM on.
+1:38.628: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:38.684: Robot 7 has turned its BOM on.
+1:38.744: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:38.800: Robot 9 has turned its BOM on.
+1:38.912: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:38.960: Robot 1 has turned its BOM on.
+1:39.072: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:39.128: Robot 2 has turned its BOM on.
+1:39.240: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:39.296: Robot 3 has turned its BOM on.
+1:39.408: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:39.460: Robot 7 has turned its BOM on.
+1:39.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:39.628: Robot 9 has turned its BOM on.
+1:39.688: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:39.744: Robot 1 has turned its BOM on.
+1:39.856: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:39.912: Robot 2 has turned its BOM on.
+1:40.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:40.072: Robot 3 has turned its BOM on.
+1:40.184: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:40.240: Robot 7 has turned its BOM on.
+1:40.352: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:40.408: Robot 9 has turned its BOM on.
+1:40.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:40.572: Robot 1 has turned its BOM on.
+1:40.632: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:40.688: Robot 2 has turned its BOM on.
+1:40.800: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:40.856: Robot 3 has turned its BOM on.
+1:40.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:41.016: Robot 7 has turned its BOM on.
+1:41.128: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:41.184: Robot 9 has turned its BOM on.
+1:41.296: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:41.352: Robot 1 has turned its BOM on.
+1:41.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:41.516: Robot 2 has turned its BOM on.
+1:41.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:41.684: Robot 3 has turned its BOM on.
+1:41.740: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:41.796: Robot 7 has turned its BOM on.
+1:41.912: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:41.960: Robot 9 has turned its BOM on.
+1:42.072: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:42.128: Robot 1 has turned its BOM on.
+1:42.240: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:42.296: Robot 2 has turned its BOM on.
+1:42.408: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:42.460: Robot 3 has turned its BOM on.
+1:42.576: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:42.632: Robot 7 has turned its BOM on.
+1:42.744: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:42.800: Robot 9 has turned its BOM on.
+1:42.856: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:42.912: Robot 1 has turned its BOM on.
+1:43.020: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:43.076: Robot 2 has turned its BOM on.
+1:43.192: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:43.248: Robot 3 has turned its BOM on.
+1:43.360: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:43.416: Robot 7 has turned its BOM on.
+1:43.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:43.576: Robot 9 has turned its BOM on.
+1:43.688: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:43.744: Robot 1 has turned its BOM on.
+1:43.800: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:43.856: Robot 2 has turned its BOM on.
+1:43.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:44.016: Robot 3 has turned its BOM on.
+1:44.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:44.184: Robot 7 has turned its BOM on.
+1:44.296: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:44.352: Robot 9 has turned its BOM on.
+1:44.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:44.516: Robot 1 has turned its BOM on.
+1:44.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:44.684: Robot 2 has turned its BOM on.
+1:44.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:44.800: Robot 3 has turned its BOM on.
+1:44.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:44.960: Robot 7 has turned its BOM on.
+1:45.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:45.128: Robot 9 has turned its BOM on.
+1:45.240: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:45.296: Robot 1 has turned its BOM on.
+1:45.408: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:45.460: Robot 2 has turned its BOM on.
+1:45.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:45.628: Robot 3 has turned its BOM on.
+1:45.684: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:45.740: Robot 7 has turned its BOM on.
+1:45.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:45.908: Robot 9 has turned its BOM on.
+1:46.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:46.072: Robot 1 has turned its BOM on.
+1:46.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:46.240: Robot 2 has turned its BOM on.
+1:46.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:46.408: Robot 3 has turned its BOM on.
+1:46.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:46.572: Robot 7 has turned its BOM on.
+1:46.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:46.744: Robot 9 has turned its BOM on.
+1:46.800: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:46.856: Robot 1 has turned its BOM on.
+1:46.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:47.016: Robot 2 has turned its BOM on.
+1:47.128: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:47.184: Robot 3 has turned its BOM on.
+1:47.296: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:47.352: Robot 7 has turned its BOM on.
+1:47.464: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:47.520: Robot 9 has turned its BOM on.
+1:47.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:47.688: Robot 1 has turned its BOM on.
+1:47.800: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:47.856: Robot 2 has turned its BOM on.
+1:47.912: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:47.960: Robot 3 has turned its BOM on.
+1:48.072: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:48.128: Robot 7 has turned its BOM on.
+1:48.240: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:48.296: Robot 9 has turned its BOM on.
+1:48.408: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:48.460: Robot 1 has turned its BOM on.
+1:48.576: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:48.632: Robot 2 has turned its BOM on.
+1:48.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:48.800: Robot 3 has turned its BOM on.
+1:48.856: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:48.912: Robot 7 has turned its BOM on.
+1:49.020: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:49.076: Robot 9 has turned its BOM on.
+1:49.192: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:49.248: Robot 1 has turned its BOM on.
+1:49.360: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:49.416: Robot 2 has turned its BOM on.
+1:49.520: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:49.576: Robot 3 has turned its BOM on.
+1:49.688: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:49.744: Robot 7 has turned its BOM on.
+1:49.800: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:49.856: Robot 9 has turned its BOM on.
+1:49.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:50.016: Robot 1 has turned its BOM on.
+1:50.128: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:50.184: Robot 2 has turned its BOM on.
+1:50.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:50.352: Robot 3 has turned its BOM on.
+1:50.460: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:50.516: Robot 7 has turned its BOM on.
+1:50.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:50.684: Robot 9 has turned its BOM on.
+1:50.740: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:50.796: Robot 1 has turned its BOM on.
+1:50.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:50.960: Robot 2 has turned its BOM on.
+1:51.076: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:51.132: Robot 3 has turned its BOM on.
+1:51.244: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:51.300: Robot 7 has turned its BOM on.
+1:51.412: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:51.460: Robot 9 has turned its BOM on.
+1:51.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:51.628: Robot 1 has turned its BOM on.
+1:51.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:51.796: Robot 2 has turned its BOM on.
+1:51.852: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:51.908: Robot 3 has turned its BOM on.
+1:52.020: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:52.076: Robot 7 has turned its BOM on.
+1:52.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:52.244: Robot 9 has turned its BOM on.
+1:52.356: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:52.412: Robot 1 has turned its BOM on.
+1:52.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:52.572: Robot 2 has turned its BOM on.
+1:52.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:52.740: Robot 3 has turned its BOM on.
+1:52.852: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:52.908: Robot 7 has turned its BOM on.
+1:52.968: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:53.024: Robot 9 has turned its BOM on.
+1:53.140: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:53.196: Robot 1 has turned its BOM on.
+1:53.308: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:53.364: Robot 2 has turned its BOM on.
+1:53.460: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:53.516: Robot 3 has turned its BOM on.
+1:53.628: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:53.684: Robot 7 has turned its BOM on.
+1:53.796: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:53.852: Robot 9 has turned its BOM on.
+1:53.908: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:53.960: Robot 1 has turned its BOM on.
+1:54.072: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:54.128: Robot 2 has turned its BOM on.
+1:54.240: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:54.296: Robot 3 has turned its BOM on.
+1:54.412: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:54.460: Robot 7 has turned its BOM on.
+1:54.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:54.628: Robot 9 has turned its BOM on.
+1:54.740: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:54.796: Robot 1 has turned its BOM on.
+1:54.852: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:54.908: Robot 2 has turned its BOM on.
+1:55.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:55.072: Robot 3 has turned its BOM on.
+1:55.192: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:55.248: Robot 7 has turned its BOM on.
+1:55.360: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:55.416: Robot 9 has turned its BOM on.
+1:55.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:55.572: Robot 1 has turned its BOM on.
+1:55.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:55.740: Robot 2 has turned its BOM on.
+1:55.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:55.852: Robot 3 has turned its BOM on.
+1:55.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:56.016: Robot 7 has turned its BOM on.
+1:56.132: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:56.188: Robot 9 has turned its BOM on.
+1:56.300: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:56.356: Robot 1 has turned its BOM on.
+1:56.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:56.516: Robot 2 has turned its BOM on.
+1:56.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:56.684: Robot 3 has turned its BOM on.
+1:56.800: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:56.856: Robot 7 has turned its BOM on.
+1:56.916: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:56.960: Robot 9 has turned its BOM on.
+1:57.076: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:57.132: Robot 1 has turned its BOM on.
+1:57.244: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:57.300: Robot 2 has turned its BOM on.
+1:57.412: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:57.460: Robot 3 has turned its BOM on.
+1:57.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:57.628: Robot 7 has turned its BOM on.
+1:57.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+1:57.796: Robot 9 has turned its BOM on.
+1:57.908: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:57.960: Robot 1 has turned its BOM on.
+1:58.020: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:58.076: Robot 2 has turned its BOM on.
+1:58.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:58.244: Robot 3 has turned its BOM on.
+1:58.357: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:58.412: Robot 7 has turned its BOM on.
+1:58.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+1:58.572: Robot 9 has turned its BOM on.
+1:58.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:58.740: Robot 1 has turned its BOM on.
+1:58.852: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:58.908: Robot 2 has turned its BOM on.
+1:58.964: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+1:59.020: Robot 3 has turned its BOM on.
+1:59.132: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:59.188: Robot 7 has turned its BOM on.
+1:59.300: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+1:59.356: Robot 9 has turned its BOM on.
+1:59.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:59.516: Robot 1 has turned its BOM on.
+1:59.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:59.684: Robot 2 has turned its BOM on.
+1:59.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+1:59.800: Robot 3 has turned its BOM on.
+1:59.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:59.960: Robot 7 has turned its BOM on.
+2:00.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:00.128: Robot 9 has turned its BOM on.
+2:00.240: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:00.296: Robot 1 has turned its BOM on.
+2:00.408: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:00.460: Robot 2 has turned its BOM on.
+2:00.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:00.628: Robot 3 has turned its BOM on.
+2:00.740: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:00.796: Robot 7 has turned its BOM on.
+2:00.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:00.908: Robot 9 has turned its BOM on.
+2:01.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:01.072: Robot 1 has turned its BOM on.
+2:01.188: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:01.244: Robot 2 has turned its BOM on.
+2:01.356: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:01.412: Robot 3 has turned its BOM on.
+2:01.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:01.572: Robot 7 has turned its BOM on.
+2:01.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:01.740: Robot 9 has turned its BOM on.
+2:01.852: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:01.908: Robot 1 has turned its BOM on.
+2:01.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:02.016: Robot 2 has turned its BOM on.
+2:02.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:02.188: Robot 3 has turned its BOM on.
+2:02.300: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:02.356: Robot 7 has turned its BOM on.
+2:02.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:02.516: Robot 9 has turned its BOM on.
+2:02.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:02.684: Robot 1 has turned its BOM on.
+2:02.796: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:02.852: Robot 2 has turned its BOM on.
+2:02.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:03.016: Robot 3 has turned its BOM on.
+2:03.076: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:03.132: Robot 7 has turned its BOM on.
+2:03.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:03.300: Robot 9 has turned its BOM on.
+2:03.412: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:03.460: Robot 1 has turned its BOM on.
+2:03.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:03.628: Robot 2 has turned its BOM on.
+2:03.740: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:03.796: Robot 3 has turned its BOM on.
+2:03.908: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:03.960: Robot 7 has turned its BOM on.
+2:04.020: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:04.076: Robot 9 has turned its BOM on.
+2:04.188: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:04.244: Robot 1 has turned its BOM on.
+2:04.360: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:04.416: Robot 2 has turned its BOM on.
+2:04.516: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:04.572: Robot 3 has turned its BOM on.
+2:04.684: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:04.740: Robot 7 has turned its BOM on.
+2:04.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:04.908: Robot 9 has turned its BOM on.
+2:04.964: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:05.020: Robot 1 has turned its BOM on.
+2:05.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:05.188: Robot 2 has turned its BOM on.
+2:05.300: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:05.356: Robot 3 has turned its BOM on.
+2:05.460: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:05.516: Robot 7 has turned its BOM on.
+2:05.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:05.684: Robot 9 has turned its BOM on.
+2:05.796: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:05.852: Robot 1 has turned its BOM on.
+2:05.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:05.960: Robot 2 has turned its BOM on.
+2:06.072: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:06.128: Robot 3 has turned its BOM on.
+2:06.244: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:06.300: Robot 7 has turned its BOM on.
+2:06.412: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:06.460: Robot 9 has turned its BOM on.
+2:06.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:06.628: Robot 1 has turned its BOM on.
+2:06.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:06.796: Robot 2 has turned its BOM on.
+2:06.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:06.960: Robot 3 has turned its BOM on.
+2:07.016: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:07.072: Robot 7 has turned its BOM on.
+2:07.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:07.244: Robot 9 has turned its BOM on.
+2:07.356: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:09.700: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 5)(7 8)
+2:09.756: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:09.812: Robot 3 has turned its BOM on.
+2:09.872: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+2:09.928: Robot 7 has turned its BOM on.
+2:10.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 10)(3 9)(9 0)
+2:10.128: Robot 9 has turned its BOM on.
+2:10.184: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 3)(7 8)
+2:10.240: Robot 2 has turned its BOM on.
+2:10.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:10.408: Robot 3 has turned its BOM on.
+2:10.520: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 1)
+2:10.576: Robot 7 has turned its BOM on.
+2:10.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:10.744: Robot 9 has turned its BOM on.
+2:10.800: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 3)(3 3)(7 8)
+2:10.856: Robot 2 has turned its BOM on.
+2:10.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:11.016: Robot 3 has turned its BOM on.
+2:11.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 1)
+2:11.184: Robot 7 has turned its BOM on.
+2:11.296: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:11.352: Robot 9 has turned its BOM on.
+2:11.408: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 3)(3 3)(7 8)
+2:11.460: Robot 2 has turned its BOM on.
+2:11.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:11.628: Robot 3 has turned its BOM on.
+2:11.744: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+2:11.800: Robot 7 has turned its BOM on.
+2:11.912: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:11.960: Robot 9 has turned its BOM on.
+2:12.072: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 3)(3 3)(7 8)
+2:12.128: Robot 2 has turned its BOM on.
+2:12.184: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:12.240: Robot 3 has turned its BOM on.
+2:12.352: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+2:12.408: Robot 7 has turned its BOM on.
+2:12.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:12.576: Robot 9 has turned its BOM on.
+2:12.688: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 3)(3 3)(7 8)
+2:12.744: Robot 2 has turned its BOM on.
+2:12.800: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:12.856: Robot 3 has turned its BOM on.
+2:12.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+2:13.016: Robot 7 has turned its BOM on.
+2:13.128: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:13.184: Robot 9 has turned its BOM on.
+2:13.296: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 3)(3 3)(7 8)
+2:13.352: Robot 2 has turned its BOM on.
+2:13.408: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:13.460: Robot 3 has turned its BOM on.
+2:13.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+2:13.628: Robot 7 has turned its BOM on.
+2:13.744: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:13.800: Robot 9 has turned its BOM on.
+2:13.856: Robot 1 has requested to join the token ring.
+2:13.912: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 3)(3 3)(7 8)
+2:13.960: Robot 2 has turned its BOM on.
+2:14.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 2)(9 1)
+2:14.072: Robot 3 has turned its BOM on.
+2:14.184: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+2:14.240: Robot 7 has turned its BOM on.
+2:14.352: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 3)(3 9)(9 0)
+2:14.408: Robot 9 has turned its BOM on.
+2:14.520: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 3)(3 4)(7 8)
+2:14.576: Robot 1 has turned its BOM on.
+2:14.688: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:14.744: Robot 2 has turned its BOM on.
+2:14.800: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:14.856: Robot 3 has turned its BOM on.
+2:14.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 0)(9 255)
+2:15.016: Robot 7 has turned its BOM on.
+2:15.128: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:15.184: Robot 9 has turned its BOM on.
+2:15.296: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:15.352: Robot 1 has turned its BOM on.
+2:15.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:15.516: Robot 2 has turned its BOM on.
+2:15.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:15.684: Robot 3 has turned its BOM on.
+2:15.800: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:15.856: Robot 7 has turned its BOM on.
+2:15.912: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:15.960: Robot 9 has turned its BOM on.
+2:16.072: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:16.128: Robot 1 has turned its BOM on.
+2:16.240: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:16.296: Robot 2 has turned its BOM on.
+2:16.408: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:16.460: Robot 3 has turned its BOM on.
+2:16.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+2:16.628: Robot 7 has turned its BOM on.
+2:16.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:16.796: Robot 9 has turned its BOM on.
+2:16.908: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:16.960: Robot 1 has turned its BOM on.
+2:17.072: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 0)(9 2)
+2:17.128: Robot 2 has turned its BOM on.
+2:17.184: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:17.240: Robot 3 has turned its BOM on.
+2:17.352: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 4)(2 8)(7 1)(9 3)
+2:17.408: Robot 7 has turned its BOM on.
+2:17.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:17.576: Robot 9 has turned its BOM on.
+2:17.688: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:17.744: Robot 1 has turned its BOM on.
+2:17.856: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 0)(9 2)
+2:17.912: Robot 2 has turned its BOM on.
+2:18.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+2:18.072: Robot 3 has turned its BOM on.
+2:18.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 4)(2 8)(7 1)(9 1)
+2:18.184: Robot 7 has turned its BOM on.
+2:18.296: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:18.352: Robot 9 has turned its BOM on.
+2:18.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:18.516: Robot 1 has turned its BOM on.
+2:18.632: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:18.688: Robot 2 has turned its BOM on.
+2:18.800: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+2:18.856: Robot 3 has turned its BOM on.
+2:18.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+2:18.961: Robot 7 has turned its BOM on.
+2:19.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:19.128: Robot 9 has turned its BOM on.
+2:19.240: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:19.296: Robot 1 has turned its BOM on.
+2:19.408: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:19.460: Robot 2 has turned its BOM on.
+2:19.576: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+2:19.632: Robot 3 has turned its BOM on.
+2:19.744: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 3)
+2:19.800: Robot 7 has turned its BOM on.
+2:19.856: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:19.912: Robot 9 has turned its BOM on.
+2:20.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:20.072: Robot 1 has turned its BOM on.
+2:20.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 0)(9 2)
+2:20.240: Robot 2 has turned its BOM on.
+2:20.356: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:20.412: Robot 3 has turned its BOM on.
+2:20.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:20.572: Robot 7 has turned its BOM on.
+2:20.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:20.740: Robot 9 has turned its BOM on.
+2:20.856: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:20.912: Robot 1 has turned its BOM on.
+2:20.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 0)(9 0)
+2:21.016: Robot 2 has turned its BOM on.
+2:21.128: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:21.184: Robot 3 has turned its BOM on.
+2:21.296: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:21.352: Robot 7 has turned its BOM on.
+2:21.460: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:21.516: Robot 9 has turned its BOM on.
+2:21.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:21.688: Robot 1 has turned its BOM on.
+2:21.800: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 0)(7 0)(9 2)
+2:21.856: Robot 2 has turned its BOM on.
+2:21.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:22.016: Robot 3 has turned its BOM on.
+2:22.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:22.184: Robot 7 has turned its BOM on.
+2:22.240: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:22.296: Robot 9 has turned its BOM on.
+2:22.408: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:22.460: Robot 1 has turned its BOM on.
+2:22.576: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 0)(9 2)
+2:22.632: Robot 2 has turned its BOM on.
+2:22.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:22.800: Robot 3 has turned its BOM on.
+2:22.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:22.960: Robot 7 has turned its BOM on.
+2:23.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:23.128: Robot 9 has turned its BOM on.
+2:23.184: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:23.240: Robot 1 has turned its BOM on.
+2:23.352: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:23.408: Robot 2 has turned its BOM on.
+2:23.520: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:23.576: Robot 3 has turned its BOM on.
+2:23.688: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:23.744: Robot 7 has turned its BOM on.
+2:23.856: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:23.912: Robot 9 has turned its BOM on.
+2:24.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:24.073: Robot 1 has turned its BOM on.
+2:24.128: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:24.184: Robot 2 has turned its BOM on.
+2:24.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:24.352: Robot 3 has turned its BOM on.
+2:24.464: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:24.520: Robot 7 has turned its BOM on.
+2:24.632: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:24.688: Robot 9 has turned its BOM on.
+2:24.748: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:24.804: Robot 1 has turned its BOM on.
+2:24.916: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 0)(9 2)
+2:24.960: Robot 2 has turned its BOM on.
+2:25.072: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:25.128: Robot 3 has turned its BOM on.
+2:25.244: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:25.300: Robot 7 has turned its BOM on.
+2:25.412: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:25.460: Robot 9 has turned its BOM on.
+2:25.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:25.628: Robot 1 has turned its BOM on.
+2:25.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:25.796: Robot 2 has turned its BOM on.
+2:25.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:25.960: Robot 3 has turned its BOM on.
+2:26.016: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:26.072: Robot 7 has turned its BOM on.
+2:26.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:26.244: Robot 9 has turned its BOM on.
+2:26.356: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:26.412: Robot 1 has turned its BOM on.
+2:26.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:26.572: Robot 2 has turned its BOM on.
+2:26.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:26.740: Robot 3 has turned its BOM on.
+2:26.852: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:26.908: Robot 7 has turned its BOM on.
+2:27.016: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:27.072: Robot 9 has turned its BOM on.
+2:27.132: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:27.188: Robot 1 has turned its BOM on.
+2:27.300: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:27.356: Robot 2 has turned its BOM on.
+2:27.460: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:27.516: Robot 3 has turned its BOM on.
+2:27.628: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:27.684: Robot 7 has turned its BOM on.
+2:27.796: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:27.852: Robot 9 has turned its BOM on.
+2:27.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:28.016: Robot 1 has turned its BOM on.
+2:28.076: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:28.132: Robot 2 has turned its BOM on.
+2:28.244: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:28.300: Robot 3 has turned its BOM on.
+2:28.412: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:28.460: Robot 7 has turned its BOM on.
+2:28.572: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:28.628: Robot 9 has turned its BOM on.
+2:28.740: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:28.796: Robot 1 has turned its BOM on.
+2:28.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:28.960: Robot 2 has turned its BOM on.
+2:29.020: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:29.076: Robot 3 has turned its BOM on.
+2:29.188: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:29.244: Robot 7 has turned its BOM on.
+2:29.356: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:29.412: Robot 9 has turned its BOM on.
+2:29.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:29.572: Robot 1 has turned its BOM on.
+2:29.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:29.740: Robot 2 has turned its BOM on.
+2:29.852: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:29.908: Robot 3 has turned its BOM on.
+2:29.968: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:30.024: Robot 7 has turned its BOM on.
+2:30.140: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:30.196: Robot 9 has turned its BOM on.
+2:30.308: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:30.364: Robot 1 has turned its BOM on.
+2:30.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:30.516: Robot 2 has turned its BOM on.
+2:30.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:30.684: Robot 3 has turned its BOM on.
+2:30.796: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:30.852: Robot 7 has turned its BOM on.
+2:30.960: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:31.016: Robot 9 has turned its BOM on.
+2:31.072: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:31.128: Robot 1 has turned its BOM on.
+2:31.244: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:31.300: Robot 2 has turned its BOM on.
+2:31.412: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:31.460: Robot 3 has turned its BOM on.
+2:31.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:31.628: Robot 7 has turned its BOM on.
+2:31.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:31.796: Robot 9 has turned its BOM on.
+2:31.912: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:31.960: Robot 1 has turned its BOM on.
+2:32.072: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:32.128: Robot 2 has turned its BOM on.
+2:32.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:32.244: Robot 3 has turned its BOM on.
+2:32.356: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:32.412: Robot 7 has turned its BOM on.
+2:32.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:32.573: Robot 9 has turned its BOM on.
+2:32.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:32.740: Robot 1 has turned its BOM on.
+2:32.852: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:32.908: Robot 2 has turned its BOM on.
+2:33.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:33.072: Robot 3 has turned its BOM on.
+2:33.132: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:33.188: Robot 7 has turned its BOM on.
+2:33.300: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:33.356: Robot 9 has turned its BOM on.
+2:33.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:33.516: Robot 1 has turned its BOM on.
+2:33.628: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:33.684: Robot 2 has turned its BOM on.
+2:33.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:33.852: Robot 3 has turned its BOM on.
+2:33.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:34.016: Robot 7 has turned its BOM on.
+2:34.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:34.128: Robot 9 has turned its BOM on.
+2:34.240: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:34.296: Robot 1 has turned its BOM on.
+2:34.412: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:34.460: Robot 2 has turned its BOM on.
+2:34.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:34.629: Robot 3 has turned its BOM on.
+2:34.740: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:34.796: Robot 7 has turned its BOM on.
+2:34.908: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:34.960: Robot 9 has turned its BOM on.
+2:35.020: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:35.076: Robot 1 has turned its BOM on.
+2:35.188: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:35.244: Robot 2 has turned its BOM on.
+2:35.356: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:35.412: Robot 3 has turned its BOM on.
+2:35.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:35.572: Robot 7 has turned its BOM on.
+2:35.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:35.740: Robot 9 has turned its BOM on.
+2:35.852: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:35.908: Robot 1 has turned its BOM on.
+2:36.020: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:36.076: Robot 2 has turned its BOM on.
+2:36.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:36.188: Robot 3 has turned its BOM on.
+2:36.300: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:36.356: Robot 7 has turned its BOM on.
+2:36.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:36.516: Robot 9 has turned its BOM on.
+2:36.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:36.684: Robot 1 has turned its BOM on.
+2:36.796: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:36.852: Robot 2 has turned its BOM on.
+2:36.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:37.016: Robot 3 has turned its BOM on.
+2:37.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:37.184: Robot 7 has turned its BOM on.
+2:37.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:37.300: Robot 9 has turned its BOM on.
+2:37.412: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:37.461: Robot 1 has turned its BOM on.
+2:37.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:37.628: Robot 2 has turned its BOM on.
+2:37.740: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:37.796: Robot 3 has turned its BOM on.
+2:37.908: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:37.960: Robot 7 has turned its BOM on.
+2:38.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:38.128: Robot 9 has turned its BOM on.
+2:38.188: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:38.244: Robot 1 has turned its BOM on.
+2:38.356: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:38.412: Robot 2 has turned its BOM on.
+2:38.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:38.572: Robot 3 has turned its BOM on.
+2:38.685: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:38.740: Robot 7 has turned its BOM on.
+2:38.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:38.909: Robot 9 has turned its BOM on.
+2:39.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:39.072: Robot 1 has turned its BOM on.
+2:39.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:39.188: Robot 2 has turned its BOM on.
+2:39.300: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:39.356: Robot 3 has turned its BOM on.
+2:39.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:39.516: Robot 7 has turned its BOM on.
+2:39.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:39.684: Robot 9 has turned its BOM on.
+2:39.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:39.852: Robot 1 has turned its BOM on.
+2:39.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:40.016: Robot 2 has turned its BOM on.
+2:40.076: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:40.133: Robot 3 has turned its BOM on.
+2:40.244: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:40.300: Robot 7 has turned its BOM on.
+2:40.413: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:40.461: Robot 9 has turned its BOM on.
+2:40.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:40.629: Robot 1 has turned its BOM on.
+2:40.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:40.797: Robot 2 has turned its BOM on.
+2:40.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:40.961: Robot 3 has turned its BOM on.
+2:41.076: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:41.132: Robot 7 has turned its BOM on.
+2:41.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:41.244: Robot 9 has turned its BOM on.
+2:41.357: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:41.412: Robot 1 has turned its BOM on.
+2:41.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:41.572: Robot 2 has turned its BOM on.
+2:41.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:41.741: Robot 3 has turned its BOM on.
+2:41.857: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:41.913: Robot 7 has turned its BOM on.
+2:42.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:42.073: Robot 9 has turned its BOM on.
+2:42.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:42.241: Robot 1 has turned its BOM on.
+2:42.297: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:42.353: Robot 2 has turned its BOM on.
+2:42.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:42.517: Robot 3 has turned its BOM on.
+2:42.633: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:42.689: Robot 7 has turned its BOM on.
+2:42.801: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:42.857: Robot 9 has turned its BOM on.
+2:42.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:43.017: Robot 1 has turned its BOM on.
+2:43.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:43.185: Robot 2 has turned its BOM on.
+2:43.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:43.297: Robot 3 has turned its BOM on.
+2:43.409: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:43.461: Robot 7 has turned its BOM on.
+2:43.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:43.633: Robot 9 has turned its BOM on.
+2:43.745: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:43.801: Robot 1 has turned its BOM on.
+2:43.913: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:43.961: Robot 2 has turned its BOM on.
+2:44.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:44.129: Robot 3 has turned its BOM on.
+2:44.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:44.241: Robot 7 has turned its BOM on.
+2:44.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:44.409: Robot 9 has turned its BOM on.
+2:44.521: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:44.577: Robot 1 has turned its BOM on.
+2:44.689: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:44.745: Robot 2 has turned its BOM on.
+2:44.857: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:44.913: Robot 3 has turned its BOM on.
+2:45.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:45.073: Robot 7 has turned its BOM on.
+2:45.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:45.185: Robot 9 has turned its BOM on.
+2:45.297: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:45.353: Robot 1 has turned its BOM on.
+2:45.465: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:45.521: Robot 2 has turned its BOM on.
+2:45.633: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:45.689: Robot 3 has turned its BOM on.
+2:45.801: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:45.857: Robot 7 has turned its BOM on.
+2:45.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:46.017: Robot 9 has turned its BOM on.
+2:46.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:46.185: Robot 1 has turned its BOM on.
+2:46.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:46.297: Robot 2 has turned its BOM on.
+2:46.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:46.461: Robot 3 has turned its BOM on.
+2:46.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:46.629: Robot 7 has turned its BOM on.
+2:46.745: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+2:46.801: Robot 9 has turned its BOM on.
+2:46.913: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:46.961: Robot 1 has turned its BOM on.
+2:47.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:47.129: Robot 2 has turned its BOM on.
+2:47.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:47.297: Robot 3 has turned its BOM on.
+2:47.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:47.409: Robot 7 has turned its BOM on.
+2:47.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:47.573: Robot 9 has turned its BOM on.
+2:47.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:47.745: Robot 1 has turned its BOM on.
+2:47.857: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:47.913: Robot 2 has turned its BOM on.
+2:49.857: Robot 1 passed the token to robot 3. Sensor matrix:
+(3 2)(7 2)(9 2)
+2:49.913: Robot 2 has requested to join the token ring.
+2:50.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(7 1)(9 255)
+2:50.073: Robot 7 has turned its BOM on.
+2:50.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(3 9)(9 0)
+2:50.185: Robot 9 has turned its BOM on.
+2:50.301: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(3 4)(7 8)
+2:50.357: Robot 1 has turned its BOM on.
+2:50.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:50.517: Robot 2 has turned its BOM on.
+2:50.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:50.685: Robot 3 has turned its BOM on.
+2:50.801: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:50.857: Robot 7 has turned its BOM on.
+2:50.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:51.017: Robot 9 has turned its BOM on.
+2:51.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:51.129: Robot 1 has turned its BOM on.
+2:51.245: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:51.301: Robot 2 has turned its BOM on.
+2:51.417: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:51.461: Robot 3 has turned its BOM on.
+2:51.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:51.629: Robot 7 has turned its BOM on.
+2:51.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:51.797: Robot 9 has turned its BOM on.
+2:51.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:51.961: Robot 1 has turned its BOM on.
+2:52.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:52.129: Robot 2 has turned its BOM on.
+2:52.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:52.241: Robot 3 has turned its BOM on.
+2:52.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:52.409: Robot 7 has turned its BOM on.
+2:52.521: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:52.577: Robot 9 has turned its BOM on.
+2:52.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:52.745: Robot 1 has turned its BOM on.
+2:52.857: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:52.913: Robot 2 has turned its BOM on.
+2:53.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:53.073: Robot 3 has turned its BOM on.
+2:53.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:53.185: Robot 7 has turned its BOM on.
+2:53.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:53.353: Robot 9 has turned its BOM on.
+2:53.465: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:53.521: Robot 1 has turned its BOM on.
+2:53.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:53.689: Robot 2 has turned its BOM on.
+2:53.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:53.857: Robot 3 has turned its BOM on.
+2:53.913: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:53.961: Robot 7 has turned its BOM on.
+2:54.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:54.129: Robot 9 has turned its BOM on.
+2:54.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:54.297: Robot 1 has turned its BOM on.
+2:54.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:54.461: Robot 2 has turned its BOM on.
+2:54.577: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:54.633: Robot 3 has turned its BOM on.
+2:54.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:54.801: Robot 7 has turned its BOM on.
+2:54.857: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+2:54.913: Robot 9 has turned its BOM on.
+2:55.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:55.073: Robot 1 has turned its BOM on.
+2:55.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:55.241: Robot 2 has turned its BOM on.
+2:55.353: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:55.409: Robot 3 has turned its BOM on.
+2:55.517: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:55.573: Robot 7 has turned its BOM on.
+2:55.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+2:55.745: Robot 9 has turned its BOM on.
+2:55.857: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:55.913: Robot 1 has turned its BOM on.
+2:56.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:56.073: Robot 2 has turned its BOM on.
+2:56.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:56.185: Robot 3 has turned its BOM on.
+2:56.297: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:56.353: Robot 7 has turned its BOM on.
+2:56.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:56.517: Robot 9 has turned its BOM on.
+2:56.637: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:56.693: Robot 1 has turned its BOM on.
+2:56.805: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:56.861: Robot 2 has turned its BOM on.
+2:56.921: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:56.961: Robot 3 has turned its BOM on.
+2:57.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:57.185: Robot 7 has turned its BOM on.
+2:57.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:57.297: Robot 9 has turned its BOM on.
+2:57.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:57.461: Robot 1 has turned its BOM on.
+2:57.577: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:57.633: Robot 2 has turned its BOM on.
+2:57.749: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:57.805: Robot 3 has turned its BOM on.
+2:57.861: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:57.917: Robot 7 has turned its BOM on.
+2:58.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+2:58.129: Robot 9 has turned its BOM on.
+2:58.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:58.241: Robot 1 has turned its BOM on.
+2:58.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:58.409: Robot 2 has turned its BOM on.
+2:58.521: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+2:58.577: Robot 3 has turned its BOM on.
+2:58.689: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:58.745: Robot 7 has turned its BOM on.
+2:58.857: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+2:58.913: Robot 9 has turned its BOM on.
+2:58.965: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:59.021: Robot 1 has turned its BOM on.
+2:59.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:59.189: Robot 2 has turned its BOM on.
+2:59.309: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+2:59.365: Robot 3 has turned its BOM on.
+2:59.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:59.517: Robot 7 has turned its BOM on.
+2:59.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+2:59.685: Robot 9 has turned its BOM on.
+2:59.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:59.853: Robot 1 has turned its BOM on.
+2:59.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:59.961: Robot 2 has turned its BOM on.
+3:00.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:00.129: Robot 3 has turned its BOM on.
+3:00.241: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:00.297: Robot 7 has turned its BOM on.
+3:00.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:00.461: Robot 9 has turned its BOM on.
+3:00.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:00.629: Robot 1 has turned its BOM on.
+3:00.741: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:00.797: Robot 2 has turned its BOM on.
+3:00.909: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:00.961: Robot 3 has turned its BOM on.
+3:01.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:01.129: Robot 7 has turned its BOM on.
+3:01.193: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:01.249: Robot 9 has turned its BOM on.
+3:01.365: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:01.421: Robot 1 has turned its BOM on.
+3:01.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:01.573: Robot 2 has turned its BOM on.
+3:01.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:01.741: Robot 3 has turned its BOM on.
+3:01.853: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:01.909: Robot 7 has turned its BOM on.
+3:02.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:02.073: Robot 9 has turned its BOM on.
+3:02.137: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:02.193: Robot 1 has turned its BOM on.
+3:02.309: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:02.365: Robot 2 has turned its BOM on.
+3:02.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:02.517: Robot 3 has turned its BOM on.
+3:02.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:02.685: Robot 7 has turned its BOM on.
+3:02.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:02.853: Robot 9 has turned its BOM on.
+3:02.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:03.017: Robot 1 has turned its BOM on.
+3:03.077: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:03.133: Robot 2 has turned its BOM on.
+3:03.245: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:03.301: Robot 3 has turned its BOM on.
+3:03.413: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:03.461: Robot 7 has turned its BOM on.
+3:03.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:03.633: Robot 9 has turned its BOM on.
+3:03.745: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:03.801: Robot 1 has turned its BOM on.
+3:03.861: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:03.917: Robot 2 has turned its BOM on.
+3:04.021: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:04.077: Robot 3 has turned its BOM on.
+3:04.189: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:04.245: Robot 7 has turned its BOM on.
+3:04.357: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:04.413: Robot 9 has turned its BOM on.
+3:04.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:04.573: Robot 1 has turned its BOM on.
+3:04.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:04.741: Robot 2 has turned its BOM on.
+3:04.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:04.910: Robot 3 has turned its BOM on.
+3:04.965: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:05.021: Robot 7 has turned its BOM on.
+3:05.133: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:05.189: Robot 9 has turned its BOM on.
+3:05.301: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:05.357: Robot 1 has turned its BOM on.
+3:05.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:05.517: Robot 2 has turned its BOM on.
+3:05.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:05.685: Robot 3 has turned its BOM on.
+3:05.797: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:05.853: Robot 7 has turned its BOM on.
+3:05.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:06.017: Robot 9 has turned its BOM on.
+3:06.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:06.185: Robot 1 has turned its BOM on.
+3:06.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:06.297: Robot 2 has turned its BOM on.
+3:06.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:06.461: Robot 3 has turned its BOM on.
+3:06.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:06.629: Robot 7 has turned its BOM on.
+3:06.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:06.797: Robot 9 has turned its BOM on.
+3:06.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:06.961: Robot 1 has turned its BOM on.
+3:07.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:07.129: Robot 2 has turned its BOM on.
+3:07.189: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:07.245: Robot 3 has turned its BOM on.
+3:07.357: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:07.413: Robot 7 has turned its BOM on.
+3:07.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:07.573: Robot 9 has turned its BOM on.
+3:07.685: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:07.741: Robot 1 has turned its BOM on.
+3:07.853: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:07.909: Robot 2 has turned its BOM on.
+3:08.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:08.073: Robot 3 has turned its BOM on.
+3:08.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:08.185: Robot 7 has turned its BOM on.
+3:08.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:08.353: Robot 9 has turned its BOM on.
+3:08.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:08.517: Robot 1 has turned its BOM on.
+3:08.629: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:08.685: Robot 2 has turned its BOM on.
+3:08.805: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:08.861: Robot 3 has turned its BOM on.
+3:08.917: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:08.961: Robot 7 has turned its BOM on.
+3:09.081: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:09.137: Robot 9 has turned its BOM on.
+3:09.253: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:09.309: Robot 1 has turned its BOM on.
+3:09.421: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:09.461: Robot 2 has turned its BOM on.
+3:09.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:09.629: Robot 3 has turned its BOM on.
+3:09.741: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:09.797: Robot 7 has turned its BOM on.
+3:09.909: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:09.961: Robot 9 has turned its BOM on.
+3:10.025: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:10.081: Robot 1 has turned its BOM on.
+3:10.197: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:10.253: Robot 2 has turned its BOM on.
+3:10.365: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:10.421: Robot 3 has turned its BOM on.
+3:10.521: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:10.577: Robot 7 has turned its BOM on.
+3:10.693: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:10.749: Robot 9 has turned its BOM on.
+3:10.861: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:10.917: Robot 1 has turned its BOM on.
+3:11.021: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:11.077: Robot 2 has turned its BOM on.
+3:11.189: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:11.245: Robot 3 has turned its BOM on.
+3:11.301: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:11.357: Robot 7 has turned its BOM on.
+3:11.466: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:11.521: Robot 9 has turned its BOM on.
+3:11.637: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:11.693: Robot 1 has turned its BOM on.
+3:11.805: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:11.861: Robot 2 has turned its BOM on.
+3:11.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:12.017: Robot 3 has turned its BOM on.
+3:12.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:12.185: Robot 7 has turned its BOM on.
+3:12.245: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:12.301: Robot 9 has turned its BOM on.
+3:12.413: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:12.461: Robot 1 has turned its BOM on.
+3:12.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:12.629: Robot 2 has turned its BOM on.
+3:12.749: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:12.805: Robot 3 has turned its BOM on.
+3:12.917: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:12.961: Robot 7 has turned its BOM on.
+3:13.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:13.129: Robot 9 has turned its BOM on.
+3:13.189: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:13.245: Robot 1 has turned its BOM on.
+3:13.357: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:13.413: Robot 2 has turned its BOM on.
+3:13.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:13.573: Robot 3 has turned its BOM on.
+3:13.685: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 0)(9 255)
+3:13.741: Robot 7 has turned its BOM on.
+3:13.853: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:13.909: Robot 9 has turned its BOM on.
+3:14.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:14.073: Robot 1 has turned its BOM on.
+3:14.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:14.189: Robot 2 has turned its BOM on.
+3:14.301: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:14.357: Robot 3 has turned its BOM on.
+3:14.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:14.517: Robot 7 has turned its BOM on.
+3:14.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:14.685: Robot 9 has turned its BOM on.
+3:14.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:14.853: Robot 1 has turned its BOM on.
+3:14.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:15.017: Robot 2 has turned its BOM on.
+3:15.077: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:15.133: Robot 3 has turned its BOM on.
+3:15.245: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:15.301: Robot 7 has turned its BOM on.
+3:15.417: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:15.461: Robot 9 has turned its BOM on.
+3:15.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:15.629: Robot 1 has turned its BOM on.
+3:15.741: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:15.797: Robot 2 has turned its BOM on.
+3:15.909: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:15.961: Robot 3 has turned its BOM on.
+3:16.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:16.129: Robot 7 has turned its BOM on.
+3:16.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:16.297: Robot 9 has turned its BOM on.
+3:16.353: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:16.409: Robot 1 has turned its BOM on.
+3:16.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:16.573: Robot 2 has turned its BOM on.
+3:16.689: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:16.745: Robot 3 has turned its BOM on.
+3:16.857: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:16.913: Robot 7 has turned its BOM on.
+3:17.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:17.073: Robot 9 has turned its BOM on.
+3:17.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:17.241: Robot 1 has turned its BOM on.
+3:17.297: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:17.353: Robot 2 has turned its BOM on.
+3:17.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:17.517: Robot 3 has turned its BOM on.
+3:17.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:17.685: Robot 7 has turned its BOM on.
+3:17.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:17.853: Robot 9 has turned its BOM on.
+3:17.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:18.017: Robot 1 has turned its BOM on.
+3:18.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:18.185: Robot 2 has turned its BOM on.
+3:18.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:18.297: Robot 3 has turned its BOM on.
+3:18.409: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:18.461: Robot 7 has turned its BOM on.
+3:18.577: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:18.633: Robot 9 has turned its BOM on.
+3:18.745: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:18.801: Robot 1 has turned its BOM on.
+3:18.913: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:18.961: Robot 2 has turned its BOM on.
+3:19.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:19.129: Robot 3 has turned its BOM on.
+3:19.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:19.241: Robot 7 has turned its BOM on.
+3:19.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:19.409: Robot 9 has turned its BOM on.
+3:19.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:19.573: Robot 1 has turned its BOM on.
+3:19.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:19.741: Robot 2 has turned its BOM on.
+3:19.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:19.909: Robot 3 has turned its BOM on.
+3:20.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:20.073: Robot 7 has turned its BOM on.
+3:20.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:20.185: Robot 9 has turned its BOM on.
+3:20.297: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:20.353: Robot 1 has turned its BOM on.
+3:20.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:20.517: Robot 2 has turned its BOM on.
+3:20.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:20.685: Robot 3 has turned its BOM on.
+3:20.797: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:20.853: Robot 7 has turned its BOM on.
+3:20.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:21.017: Robot 9 has turned its BOM on.
+3:21.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:21.185: Robot 1 has turned its BOM on.
+3:21.297: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:21.353: Robot 2 has turned its BOM on.
+3:21.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:21.461: Robot 3 has turned its BOM on.
+3:21.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:21.629: Robot 7 has turned its BOM on.
+3:21.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:21.797: Robot 9 has turned its BOM on.
+3:21.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:21.961: Robot 1 has turned its BOM on.
+3:22.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:22.129: Robot 2 has turned its BOM on.
+3:22.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:22.297: Robot 3 has turned its BOM on.
+3:22.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:22.409: Robot 7 has turned its BOM on.
+3:22.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:22.573: Robot 9 has turned its BOM on.
+3:22.693: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:22.749: Robot 1 has turned its BOM on.
+3:22.861: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:22.917: Robot 2 has turned its BOM on.
+3:23.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:23.073: Robot 3 has turned its BOM on.
+3:23.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:23.241: Robot 7 has turned its BOM on.
+3:23.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:23.353: Robot 9 has turned its BOM on.
+3:23.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:23.517: Robot 1 has turned its BOM on.
+3:23.637: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:23.693: Robot 2 has turned its BOM on.
+3:23.805: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:23.861: Robot 3 has turned its BOM on.
+3:23.921: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:23.961: Robot 7 has turned its BOM on.
+3:24.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:24.185: Robot 9 has turned its BOM on.
+3:24.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:24.297: Robot 1 has turned its BOM on.
+3:24.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:24.461: Robot 2 has turned its BOM on.
+3:24.577: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:24.633: Robot 3 has turned its BOM on.
+3:24.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:24.801: Robot 7 has turned its BOM on.
+3:24.913: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:24.961: Robot 9 has turned its BOM on.
+3:25.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:25.129: Robot 1 has turned its BOM on.
+3:25.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:25.241: Robot 2 has turned its BOM on.
+3:25.353: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:25.409: Robot 3 has turned its BOM on.
+3:25.521: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:25.577: Robot 7 has turned its BOM on.
+3:25.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:25.745: Robot 9 has turned its BOM on.
+3:25.857: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:25.913: Robot 1 has turned its BOM on.
+3:26.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:26.073: Robot 2 has turned its BOM on.
+3:26.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:26.241: Robot 3 has turned its BOM on.
+3:26.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:26.409: Robot 7 has turned its BOM on.
+3:26.465: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:26.521: Robot 9 has turned its BOM on.
+3:26.633: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:26.689: Robot 1 has turned its BOM on.
+3:26.801: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:26.857: Robot 2 has turned its BOM on.
+3:26.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:27.017: Robot 3 has turned its BOM on.
+3:27.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:27.185: Robot 7 has turned its BOM on.
+3:27.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:27.353: Robot 9 has turned its BOM on.
+3:27.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:27.461: Robot 1 has turned its BOM on.
+3:27.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:27.629: Robot 2 has turned its BOM on.
+3:27.745: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:27.801: Robot 3 has turned its BOM on.
+3:27.913: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:27.961: Robot 7 has turned its BOM on.
+3:28.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:28.129: Robot 9 has turned its BOM on.
+3:28.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:28.297: Robot 1 has turned its BOM on.
+3:28.357: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:28.413: Robot 2 has turned its BOM on.
+3:28.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:28.573: Robot 3 has turned its BOM on.
+3:28.689: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:28.745: Robot 7 has turned its BOM on.
+3:28.869: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:28.925: Robot 9 has turned its BOM on.
+3:29.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:29.073: Robot 1 has turned its BOM on.
+3:29.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:29.241: Robot 2 has turned its BOM on.
+3:29.297: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:29.353: Robot 3 has turned its BOM on.
+3:29.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:29.517: Robot 7 has turned its BOM on.
+3:29.633: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:29.689: Robot 9 has turned its BOM on.
+3:29.801: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:29.857: Robot 1 has turned its BOM on.
+3:29.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:30.017: Robot 2 has turned its BOM on.
+3:30.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:30.185: Robot 3 has turned its BOM on.
+3:30.241: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:30.297: Robot 7 has turned its BOM on.
+3:30.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:30.461: Robot 9 has turned its BOM on.
+3:30.577: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:30.633: Robot 1 has turned its BOM on.
+3:30.745: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:30.801: Robot 2 has turned its BOM on.
+3:30.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:30.961: Robot 3 has turned its BOM on.
+3:31.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:31.130: Robot 7 has turned its BOM on.
+3:31.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:31.297: Robot 9 has turned its BOM on.
+3:31.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:31.461: Robot 1 has turned its BOM on.
+3:31.521: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:31.577: Robot 2 has turned its BOM on.
+3:31.689: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:31.745: Robot 3 has turned its BOM on.
+3:31.861: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:31.917: Robot 7 has turned its BOM on.
+3:32.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:32.073: Robot 9 has turned its BOM on.
+3:32.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:32.241: Robot 1 has turned its BOM on.
+3:32.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:32.409: Robot 2 has turned its BOM on.
+3:32.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:32.517: Robot 3 has turned its BOM on.
+3:32.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:32.685: Robot 7 has turned its BOM on.
+3:32.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:32.853: Robot 9 has turned its BOM on.
+3:32.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:33.017: Robot 1 has turned its BOM on.
+3:33.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:33.185: Robot 2 has turned its BOM on.
+3:33.245: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:33.301: Robot 3 has turned its BOM on.
+3:33.413: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:33.461: Robot 7 has turned its BOM on.
+3:33.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:33.629: Robot 9 has turned its BOM on.
+3:33.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:33.797: Robot 1 has turned its BOM on.
+3:33.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:33.961: Robot 2 has turned its BOM on.
+3:34.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:34.129: Robot 3 has turned its BOM on.
+3:34.189: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:34.245: Robot 7 has turned its BOM on.
+3:34.357: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:34.413: Robot 9 has turned its BOM on.
+3:34.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:34.573: Robot 1 has turned its BOM on.
+3:34.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:34.741: Robot 2 has turned its BOM on.
+3:34.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:34.909: Robot 3 has turned its BOM on.
+3:35.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:35.073: Robot 7 has turned its BOM on.
+3:35.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:35.245: Robot 9 has turned its BOM on.
+3:35.301: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:35.357: Robot 1 has turned its BOM on.
+3:35.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:35.517: Robot 2 has turned its BOM on.
+3:35.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:35.685: Robot 3 has turned its BOM on.
+3:35.797: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:35.853: Robot 7 has turned its BOM on.
+3:35.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:36.021: Robot 9 has turned its BOM on.
+3:36.133: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:36.189: Robot 1 has turned its BOM on.
+3:36.301: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:36.357: Robot 2 has turned its BOM on.
+3:36.413: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:36.461: Robot 3 has turned its BOM on.
+3:36.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:36.629: Robot 7 has turned its BOM on.
+3:36.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:36.797: Robot 9 has turned its BOM on.
+3:36.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:36.961: Robot 1 has turned its BOM on.
+3:37.077: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:37.133: Robot 2 has turned its BOM on.
+3:37.245: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:37.301: Robot 3 has turned its BOM on.
+3:37.357: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:37.413: Robot 7 has turned its BOM on.
+3:37.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:37.573: Robot 9 has turned its BOM on.
+3:37.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:37.741: Robot 1 has turned its BOM on.
+3:37.853: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:37.909: Robot 2 has turned its BOM on.
+3:38.021: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:38.077: Robot 3 has turned its BOM on.
+3:38.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:38.245: Robot 7 has turned its BOM on.
+3:38.301: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:38.357: Robot 9 has turned its BOM on.
+3:38.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:38.517: Robot 1 has turned its BOM on.
+3:38.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:38.685: Robot 2 has turned its BOM on.
+3:38.797: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:38.853: Robot 3 has turned its BOM on.
+3:38.961: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:39.017: Robot 7 has turned its BOM on.
+3:39.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:39.185: Robot 9 has turned its BOM on.
+3:39.245: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:39.301: Robot 1 has turned its BOM on.
+3:39.413: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:39.461: Robot 2 has turned its BOM on.
+3:39.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:39.629: Robot 3 has turned its BOM on.
+3:39.741: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:39.797: Robot 7 has turned its BOM on.
+3:39.909: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:39.961: Robot 9 has turned its BOM on.
+3:40.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:40.129: Robot 1 has turned its BOM on.
+3:40.245: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:40.301: Robot 2 has turned its BOM on.
+3:40.357: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:40.413: Robot 3 has turned its BOM on.
+3:40.517: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:40.573: Robot 7 has turned its BOM on.
+3:40.685: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:40.741: Robot 9 has turned its BOM on.
+3:40.853: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:40.909: Robot 1 has turned its BOM on.
+3:41.025: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:41.081: Robot 2 has turned its BOM on.
+3:41.193: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:41.249: Robot 3 has turned its BOM on.
+3:41.309: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:41.365: Robot 7 has turned its BOM on.
+3:41.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:41.573: Robot 9 has turned its BOM on.
+3:41.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:41.685: Robot 1 has turned its BOM on.
+3:41.797: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:41.853: Robot 2 has turned its BOM on.
+3:41.969: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:42.025: Robot 3 has turned its BOM on.
+3:42.137: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:42.193: Robot 7 has turned its BOM on.
+3:42.253: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:42.309: Robot 9 has turned its BOM on.
+3:42.421: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:42.461: Robot 1 has turned its BOM on.
+3:42.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:42.629: Robot 2 has turned its BOM on.
+3:42.741: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:42.797: Robot 3 has turned its BOM on.
+3:42.909: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:42.961: Robot 7 has turned its BOM on.
+3:43.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:43.129: Robot 9 has turned its BOM on.
+3:43.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:43.297: Robot 1 has turned its BOM on.
+3:43.357: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:43.413: Robot 2 has turned its BOM on.
+3:43.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:43.573: Robot 3 has turned its BOM on.
+3:43.685: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:43.741: Robot 7 has turned its BOM on.
+3:43.853: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:43.909: Robot 9 has turned its BOM on.
+3:44.025: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:44.081: Robot 1 has turned its BOM on.
+3:44.141: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:44.197: Robot 2 has turned its BOM on.
+3:44.309: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:44.365: Robot 3 has turned its BOM on.
+3:44.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:44.517: Robot 7 has turned its BOM on.
+3:44.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:44.685: Robot 9 has turned its BOM on.
+3:44.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:44.853: Robot 1 has turned its BOM on.
+3:44.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:45.017: Robot 2 has turned its BOM on.
+3:45.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:45.185: Robot 3 has turned its BOM on.
+3:45.301: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:45.357: Robot 7 has turned its BOM on.
+3:45.413: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:45.461: Robot 9 has turned its BOM on.
+3:45.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:45.629: Robot 1 has turned its BOM on.
+3:45.741: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:45.797: Robot 2 has turned its BOM on.
+3:45.909: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:45.961: Robot 3 has turned its BOM on.
+3:46.077: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:46.133: Robot 7 has turned its BOM on.
+3:46.249: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:46.305: Robot 9 has turned its BOM on.
+3:46.365: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:46.421: Robot 1 has turned its BOM on.
+3:46.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:46.629: Robot 2 has turned its BOM on.
+3:46.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:46.741: Robot 3 has turned its BOM on.
+3:46.853: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:46.909: Robot 7 has turned its BOM on.
+3:47.021: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:47.077: Robot 9 has turned its BOM on.
+3:47.193: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:47.249: Robot 1 has turned its BOM on.
+3:47.309: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:47.365: Robot 2 has turned its BOM on.
+3:47.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:47.573: Robot 3 has turned its BOM on.
+3:47.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:47.685: Robot 7 has turned its BOM on.
+3:47.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:47.853: Robot 9 has turned its BOM on.
+3:47.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:48.017: Robot 1 has turned its BOM on.
+3:48.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:48.189: Robot 2 has turned its BOM on.
+3:48.301: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:48.357: Robot 3 has turned its BOM on.
+3:48.413: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:48.461: Robot 7 has turned its BOM on.
+3:48.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:48.629: Robot 9 has turned its BOM on.
+3:48.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:48.797: Robot 1 has turned its BOM on.
+3:48.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:48.961: Robot 2 has turned its BOM on.
+3:49.077: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:49.133: Robot 3 has turned its BOM on.
+3:49.245: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:49.301: Robot 7 has turned its BOM on.
+3:49.357: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:49.413: Robot 9 has turned its BOM on.
+3:49.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:49.573: Robot 1 has turned its BOM on.
+3:49.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:49.741: Robot 2 has turned its BOM on.
+3:49.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:49.909: Robot 3 has turned its BOM on.
+3:50.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:50.073: Robot 7 has turned its BOM on.
+3:50.185: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:50.241: Robot 9 has turned its BOM on.
+3:50.353: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:50.409: Robot 1 has turned its BOM on.
+3:50.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:50.517: Robot 2 has turned its BOM on.
+3:50.633: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:50.689: Robot 3 has turned its BOM on.
+3:50.802: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:50.857: Robot 7 has turned its BOM on.
+3:50.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:51.017: Robot 9 has turned its BOM on.
+3:51.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:51.185: Robot 1 has turned its BOM on.
+3:51.297: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:51.353: Robot 2 has turned its BOM on.
+3:51.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:51.517: Robot 3 has turned its BOM on.
+3:51.577: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:51.633: Robot 7 has turned its BOM on.
+3:51.745: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:51.801: Robot 9 has turned its BOM on.
+3:51.913: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:51.961: Robot 1 has turned its BOM on.
+3:52.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:52.129: Robot 2 has turned its BOM on.
+3:52.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:52.297: Robot 3 has turned its BOM on.
+3:52.409: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:52.461: Robot 7 has turned its BOM on.
+3:52.521: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:52.577: Robot 9 has turned its BOM on.
+3:52.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:52.745: Robot 1 has turned its BOM on.
+3:52.857: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:52.913: Robot 2 has turned its BOM on.
+3:53.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:53.073: Robot 3 has turned its BOM on.
+3:53.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:53.241: Robot 7 has turned its BOM on.
+3:53.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:53.409: Robot 9 has turned its BOM on.
+3:53.465: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:53.521: Robot 1 has turned its BOM on.
+3:53.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:53.689: Robot 2 has turned its BOM on.
+3:53.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:53.857: Robot 3 has turned its BOM on.
+3:53.961: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:54.017: Robot 7 has turned its BOM on.
+3:54.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:54.185: Robot 9 has turned its BOM on.
+3:54.297: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:54.353: Robot 1 has turned its BOM on.
+3:54.413: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:54.461: Robot 2 has turned its BOM on.
+3:54.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:54.629: Robot 3 has turned its BOM on.
+3:54.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:54.801: Robot 7 has turned its BOM on.
+3:54.913: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:54.961: Robot 9 has turned its BOM on.
+3:55.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:55.129: Robot 1 has turned its BOM on.
+3:55.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:55.297: Robot 2 has turned its BOM on.
+3:55.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:55.461: Robot 3 has turned its BOM on.
+3:55.517: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:55.573: Robot 7 has turned its BOM on.
+3:55.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:55.745: Robot 9 has turned its BOM on.
+3:55.857: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:55.913: Robot 1 has turned its BOM on.
+3:56.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:56.073: Robot 2 has turned its BOM on.
+3:56.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:56.241: Robot 3 has turned its BOM on.
+3:56.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:56.409: Robot 7 has turned its BOM on.
+3:56.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:56.573: Robot 9 has turned its BOM on.
+3:56.633: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:56.689: Robot 1 has turned its BOM on.
+3:56.801: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:56.857: Robot 2 has turned its BOM on.
+3:56.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:57.017: Robot 3 has turned its BOM on.
+3:57.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:57.185: Robot 7 has turned its BOM on.
+3:57.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+3:57.354: Robot 9 has turned its BOM on.
+3:57.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:57.517: Robot 1 has turned its BOM on.
+3:57.581: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:57.637: Robot 2 has turned its BOM on.
+3:57.753: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:57.809: Robot 3 has turned its BOM on.
+3:57.921: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:57.962: Robot 7 has turned its BOM on.
+3:58.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+3:58.129: Robot 9 has turned its BOM on.
+3:58.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:58.298: Robot 1 has turned its BOM on.
+3:58.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:58.461: Robot 2 has turned its BOM on.
+3:58.521: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+3:58.577: Robot 3 has turned its BOM on.
+3:58.689: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:58.745: Robot 7 has turned its BOM on.
+3:58.857: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:58.913: Robot 9 has turned its BOM on.
+3:59.021: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:59.077: Robot 1 has turned its BOM on.
+3:59.189: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:59.245: Robot 2 has turned its BOM on.
+3:59.305: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+3:59.362: Robot 3 has turned its BOM on.
+3:59.465: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:59.521: Robot 7 has turned its BOM on.
+3:59.633: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+3:59.689: Robot 9 has turned its BOM on.
+3:59.801: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:59.857: Robot 1 has turned its BOM on.
+3:59.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:00.017: Robot 2 has turned its BOM on.
+4:00.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:00.185: Robot 3 has turned its BOM on.
+4:00.297: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:00.353: Robot 7 has turned its BOM on.
+4:00.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:00.517: Robot 9 has turned its BOM on.
+4:00.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:00.629: Robot 1 has turned its BOM on.
+4:00.745: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:00.801: Robot 2 has turned its BOM on.
+4:00.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:00.962: Robot 3 has turned its BOM on.
+4:01.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:01.129: Robot 7 has turned its BOM on.
+4:01.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:01.297: Robot 9 has turned its BOM on.
+4:01.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:01.461: Robot 1 has turned its BOM on.
+4:01.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:01.629: Robot 2 has turned its BOM on.
+4:01.690: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:01.745: Robot 3 has turned its BOM on.
+4:01.857: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:01.913: Robot 7 has turned its BOM on.
+4:02.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:02.073: Robot 9 has turned its BOM on.
+4:02.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:02.241: Robot 1 has turned its BOM on.
+4:02.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:02.409: Robot 2 has turned its BOM on.
+4:02.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:02.573: Robot 3 has turned its BOM on.
+4:02.633: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:02.690: Robot 7 has turned its BOM on.
+4:02.801: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:02.857: Robot 9 has turned its BOM on.
+4:02.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:03.017: Robot 1 has turned its BOM on.
+4:03.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:03.185: Robot 2 has turned its BOM on.
+4:03.297: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:03.354: Robot 3 has turned its BOM on.
+4:03.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:03.517: Robot 7 has turned its BOM on.
+4:03.633: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:03.690: Robot 9 has turned its BOM on.
+4:03.745: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:03.801: Robot 1 has turned its BOM on.
+4:03.914: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:03.962: Robot 2 has turned its BOM on.
+4:04.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:04.129: Robot 3 has turned its BOM on.
+4:04.242: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:04.297: Robot 7 has turned its BOM on.
+4:04.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:04.462: Robot 9 has turned its BOM on.
+4:04.525: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:04.581: Robot 1 has turned its BOM on.
+4:04.697: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:04.754: Robot 2 has turned its BOM on.
+4:04.866: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:04.922: Robot 3 has turned its BOM on.
+4:05.022: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:05.077: Robot 7 has turned its BOM on.
+4:05.190: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:05.246: Robot 9 has turned its BOM on.
+4:05.361: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:05.417: Robot 1 has turned its BOM on.
+4:05.522: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:05.577: Robot 2 has turned its BOM on.
+4:05.633: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:05.690: Robot 3 has turned its BOM on.
+4:05.802: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:05.858: Robot 7 has turned its BOM on.
+4:05.974: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:06.029: Robot 9 has turned its BOM on.
+4:06.146: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:06.202: Robot 1 has turned its BOM on.
+4:06.314: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:06.370: Robot 2 has turned its BOM on.
+4:06.426: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:06.462: Robot 3 has turned its BOM on.
+4:06.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:06.686: Robot 7 has turned its BOM on.
+4:06.746: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:06.802: Robot 9 has turned its BOM on.
+4:06.914: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:06.962: Robot 1 has turned its BOM on.
+4:07.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:07.130: Robot 2 has turned its BOM on.
+4:07.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:07.298: Robot 3 has turned its BOM on.
+4:07.414: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:07.462: Robot 7 has turned its BOM on.
+4:07.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:07.630: Robot 9 has turned its BOM on.
+4:07.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:07.742: Robot 1 has turned its BOM on.
+4:07.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:07.910: Robot 2 has turned its BOM on.
+4:08.026: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:08.082: Robot 3 has turned its BOM on.
+4:08.194: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:08.250: Robot 7 has turned its BOM on.
+4:08.310: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:08.366: Robot 9 has turned its BOM on.
+4:08.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:08.574: Robot 1 has turned its BOM on.
+4:08.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:08.686: Robot 2 has turned its BOM on.
+4:08.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:08.854: Robot 3 has turned its BOM on.
+4:08.966: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:09.022: Robot 7 has turned its BOM on.
+4:09.138: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:09.194: Robot 9 has turned its BOM on.
+4:09.306: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:09.362: Robot 1 has turned its BOM on.
+4:09.418: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:09.463: Robot 2 has turned its BOM on.
+4:09.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:09.630: Robot 3 has turned its BOM on.
+4:09.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:09.798: Robot 7 has turned its BOM on.
+4:09.910: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:09.962: Robot 9 has turned its BOM on.
+4:10.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:10.130: Robot 1 has turned its BOM on.
+4:10.246: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:10.302: Robot 2 has turned its BOM on.
+4:10.414: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:10.462: Robot 3 has turned its BOM on.
+4:10.574: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:10.630: Robot 7 has turned its BOM on.
+4:10.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:10.742: Robot 9 has turned its BOM on.
+4:10.854: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:10.910: Robot 1 has turned its BOM on.
+4:11.018: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:11.074: Robot 2 has turned its BOM on.
+4:11.190: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:11.246: Robot 3 has turned its BOM on.
+4:11.358: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:11.414: Robot 7 has turned its BOM on.
+4:11.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:11.574: Robot 9 has turned its BOM on.
+4:11.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:11.742: Robot 1 has turned its BOM on.
+4:11.798: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:11.854: Robot 2 has turned its BOM on.
+4:11.962: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:12.018: Robot 3 has turned its BOM on.
+4:12.134: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:12.190: Robot 7 has turned its BOM on.
+4:12.302: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:12.358: Robot 9 has turned its BOM on.
+4:12.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:12.518: Robot 1 has turned its BOM on.
+4:12.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:12.686: Robot 2 has turned its BOM on.
+4:12.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:12.798: Robot 3 has turned its BOM on.
+4:12.910: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:12.962: Robot 7 has turned its BOM on.
+4:13.078: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:13.134: Robot 9 has turned its BOM on.
+4:13.246: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:13.302: Robot 1 has turned its BOM on.
+4:13.414: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:13.462: Robot 2 has turned its BOM on.
+4:13.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:13.630: Robot 3 has turned its BOM on.
+4:13.686: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:13.742: Robot 7 has turned its BOM on.
+4:13.854: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:13.910: Robot 9 has turned its BOM on.
+4:14.022: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:14.078: Robot 1 has turned its BOM on.
+4:14.190: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:14.246: Robot 2 has turned its BOM on.
+4:14.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:14.414: Robot 3 has turned its BOM on.
+4:14.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:14.574: Robot 7 has turned its BOM on.
+4:14.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:14.686: Robot 9 has turned its BOM on.
+4:14.798: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:14.854: Robot 1 has turned its BOM on.
+4:14.966: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:15.022: Robot 2 has turned its BOM on.
+4:15.134: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:15.190: Robot 3 has turned its BOM on.
+4:15.302: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:15.358: Robot 7 has turned its BOM on.
+4:15.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:15.518: Robot 9 has turned its BOM on.
+4:15.630: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:15.686: Robot 1 has turned its BOM on.
+4:15.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:15.798: Robot 2 has turned its BOM on.
+4:15.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:15.962: Robot 3 has turned its BOM on.
+4:16.074: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:16.130: Robot 7 has turned its BOM on.
+4:16.246: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:16.302: Robot 9 has turned its BOM on.
+4:16.414: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:16.462: Robot 1 has turned its BOM on.
+4:16.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:16.630: Robot 2 has turned its BOM on.
+4:16.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:16.798: Robot 3 has turned its BOM on.
+4:16.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:16.910: Robot 7 has turned its BOM on.
+4:17.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:17.074: Robot 9 has turned its BOM on.
+4:17.190: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:17.246: Robot 1 has turned its BOM on.
+4:17.358: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:17.414: Robot 2 has turned its BOM on.
+4:17.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:17.574: Robot 3 has turned its BOM on.
+4:17.686: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:17.742: Robot 7 has turned its BOM on.
+4:17.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:17.854: Robot 9 has turned its BOM on.
+4:17.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:18.018: Robot 1 has turned its BOM on.
+4:18.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:18.186: Robot 2 has turned its BOM on.
+4:18.298: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:18.354: Robot 3 has turned its BOM on.
+4:18.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:18.518: Robot 7 has turned its BOM on.
+4:18.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:18.686: Robot 9 has turned its BOM on.
+4:18.746: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:18.802: Robot 1 has turned its BOM on.
+4:18.918: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:18.962: Robot 2 has turned its BOM on.
+4:19.078: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:19.134: Robot 3 has turned its BOM on.
+4:19.246: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:19.302: Robot 7 has turned its BOM on.
+4:19.414: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:19.462: Robot 9 has turned its BOM on.
+4:19.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:19.630: Robot 1 has turned its BOM on.
+4:19.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:19.742: Robot 2 has turned its BOM on.
+4:19.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:19.910: Robot 3 has turned its BOM on.
+4:20.022: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:20.078: Robot 7 has turned its BOM on.
+4:20.190: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:20.246: Robot 9 has turned its BOM on.
+4:20.358: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:20.414: Robot 1 has turned its BOM on.
+4:20.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:20.574: Robot 2 has turned its BOM on.
+4:20.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:20.742: Robot 3 has turned its BOM on.
+4:20.798: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:20.854: Robot 7 has turned its BOM on.
+4:20.966: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:21.022: Robot 9 has turned its BOM on.
+4:21.134: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:21.190: Robot 1 has turned its BOM on.
+4:21.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:21.358: Robot 2 has turned its BOM on.
+4:21.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:21.518: Robot 3 has turned its BOM on.
+4:21.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:21.686: Robot 7 has turned its BOM on.
+4:21.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:21.854: Robot 9 has turned its BOM on.
+4:21.910: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:21.962: Robot 1 has turned its BOM on.
+4:22.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:22.130: Robot 2 has turned its BOM on.
+4:22.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:22.302: Robot 3 has turned its BOM on.
+4:22.414: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:22.462: Robot 7 has turned its BOM on.
+4:22.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:22.630: Robot 9 has turned its BOM on.
+4:22.742: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:22.798: Robot 1 has turned its BOM on.
+4:22.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:22.910: Robot 2 has turned its BOM on.
+4:23.018: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:23.074: Robot 3 has turned its BOM on.
+4:23.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:23.246: Robot 7 has turned its BOM on.
+4:23.358: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:23.414: Robot 9 has turned its BOM on.
+4:23.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:23.574: Robot 1 has turned its BOM on.
+4:23.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:23.742: Robot 2 has turned its BOM on.
+4:23.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:23.854: Robot 3 has turned its BOM on.
+4:23.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:24.018: Robot 7 has turned its BOM on.
+4:24.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:24.190: Robot 9 has turned its BOM on.
+4:24.302: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:24.358: Robot 1 has turned its BOM on.
+4:24.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:24.518: Robot 2 has turned its BOM on.
+4:24.578: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:24.634: Robot 3 has turned its BOM on.
+4:24.746: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:24.802: Robot 7 has turned its BOM on.
+4:24.914: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:24.962: Robot 9 has turned its BOM on.
+4:25.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:25.130: Robot 1 has turned its BOM on.
+4:25.242: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:25.298: Robot 2 has turned its BOM on.
+4:25.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:25.462: Robot 3 has turned its BOM on.
+4:25.574: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:25.630: Robot 7 has turned its BOM on.
+4:25.742: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:25.798: Robot 9 has turned its BOM on.
+4:25.854: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:25.910: Robot 1 has turned its BOM on.
+4:26.018: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:26.074: Robot 2 has turned its BOM on.
+4:26.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:26.242: Robot 3 has turned its BOM on.
+4:26.358: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:26.414: Robot 7 has turned its BOM on.
+4:26.522: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:26.578: Robot 9 has turned its BOM on.
+4:26.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:26.746: Robot 1 has turned its BOM on.
+4:26.802: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:26.858: Robot 2 has turned its BOM on.
+4:26.962: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:27.018: Robot 3 has turned its BOM on.
+4:27.130: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:27.186: Robot 7 has turned its BOM on.
+4:27.298: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:27.354: Robot 9 has turned its BOM on.
+4:27.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:27.518: Robot 1 has turned its BOM on.
+4:27.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:27.686: Robot 2 has turned its BOM on.
+4:27.746: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:27.802: Robot 3 has turned its BOM on.
+4:27.914: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:27.962: Robot 7 has turned its BOM on.
+4:28.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:28.130: Robot 9 has turned its BOM on.
+4:28.242: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:28.298: Robot 1 has turned its BOM on.
+4:28.410: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:28.462: Robot 2 has turned its BOM on.
+4:28.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:28.630: Robot 3 has turned its BOM on.
+4:28.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:28.746: Robot 7 has turned its BOM on.
+4:28.858: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:28.914: Robot 9 has turned its BOM on.
+4:29.018: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:29.074: Robot 1 has turned its BOM on.
+4:29.186: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:29.242: Robot 2 has turned its BOM on.
+4:29.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:29.410: Robot 3 has turned its BOM on.
+4:29.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:29.574: Robot 7 has turned its BOM on.
+4:29.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:29.690: Robot 9 has turned its BOM on.
+4:29.802: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:29.858: Robot 1 has turned its BOM on.
+4:29.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:30.018: Robot 2 has turned its BOM on.
+4:30.130: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:30.186: Robot 3 has turned its BOM on.
+4:30.298: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:30.354: Robot 7 has turned its BOM on.
+4:30.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:30.518: Robot 9 has turned its BOM on.
+4:30.634: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:30.690: Robot 1 has turned its BOM on.
+4:30.802: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:30.858: Robot 2 has turned its BOM on.
+4:30.914: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:30.962: Robot 3 has turned its BOM on.
+4:31.074: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:31.130: Robot 7 has turned its BOM on.
+4:31.242: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:31.298: Robot 9 has turned its BOM on.
+4:31.410: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:31.462: Robot 1 has turned its BOM on.
+4:31.578: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:31.634: Robot 2 has turned its BOM on.
+4:31.746: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:31.802: Robot 3 has turned its BOM on.
+4:31.858: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:31.914: Robot 7 has turned its BOM on.
+4:32.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:32.074: Robot 9 has turned its BOM on.
+4:32.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:32.242: Robot 1 has turned its BOM on.
+4:32.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:32.410: Robot 2 has turned its BOM on.
+4:32.522: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:32.578: Robot 3 has turned its BOM on.
+4:32.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:32.746: Robot 7 has turned its BOM on.
+4:32.802: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:32.858: Robot 9 has turned its BOM on.
+4:32.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:33.018: Robot 1 has turned its BOM on.
+4:33.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:33.186: Robot 2 has turned its BOM on.
+4:33.298: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:33.354: Robot 3 has turned its BOM on.
+4:33.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:33.518: Robot 7 has turned its BOM on.
+4:33.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:33.686: Robot 9 has turned its BOM on.
+4:33.750: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:33.806: Robot 1 has turned its BOM on.
+4:33.922: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:33.962: Robot 2 has turned its BOM on.
+4:34.074: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:34.130: Robot 3 has turned its BOM on.
+4:34.246: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:34.302: Robot 7 has turned its BOM on.
+4:34.414: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:34.462: Robot 9 has turned its BOM on.
+4:34.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:34.630: Robot 1 has turned its BOM on.
+4:34.746: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:34.802: Robot 2 has turned its BOM on.
+4:34.858: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:34.914: Robot 3 has turned its BOM on.
+4:35.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:35.074: Robot 7 has turned its BOM on.
+4:35.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:35.242: Robot 9 has turned its BOM on.
+4:35.354: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:35.410: Robot 1 has turned its BOM on.
+4:35.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:35.574: Robot 2 has turned its BOM on.
+4:35.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:35.742: Robot 3 has turned its BOM on.
+4:35.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:35.910: Robot 7 has turned its BOM on.
+4:35.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:36.018: Robot 9 has turned its BOM on.
+4:36.134: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:36.190: Robot 1 has turned its BOM on.
+4:36.306: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:36.362: Robot 2 has turned its BOM on.
+4:36.466: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:36.522: Robot 3 has turned its BOM on.
+4:36.634: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:36.691: Robot 7 has turned its BOM on.
+4:36.802: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:36.858: Robot 9 has turned its BOM on.
+4:36.914: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:36.962: Robot 1 has turned its BOM on.
+4:37.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:37.130: Robot 2 has turned its BOM on.
+4:37.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:37.298: Robot 3 has turned its BOM on.
+4:37.410: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:37.462: Robot 7 has turned its BOM on.
+4:37.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:37.634: Robot 9 has turned its BOM on.
+4:37.746: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:37.802: Robot 1 has turned its BOM on.
+4:37.858: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:37.914: Robot 2 has turned its BOM on.
+4:38.018: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:38.074: Robot 3 has turned its BOM on.
+4:38.186: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:38.242: Robot 7 has turned its BOM on.
+4:38.354: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:38.410: Robot 9 has turned its BOM on.
+4:38.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:38.578: Robot 1 has turned its BOM on.
+4:38.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:38.746: Robot 2 has turned its BOM on.
+4:38.802: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:38.858: Robot 3 has turned its BOM on.
+4:38.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:39.018: Robot 7 has turned its BOM on.
+4:39.130: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:39.186: Robot 9 has turned its BOM on.
+4:39.298: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:39.354: Robot 1 has turned its BOM on.
+4:39.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:39.518: Robot 2 has turned its BOM on.
+4:39.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:39.686: Robot 3 has turned its BOM on.
+4:39.746: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:39.802: Robot 7 has turned its BOM on.
+4:39.914: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:39.962: Robot 9 has turned its BOM on.
+4:40.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:40.130: Robot 1 has turned its BOM on.
+4:40.242: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:40.298: Robot 2 has turned its BOM on.
+4:40.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:40.462: Robot 3 has turned its BOM on.
+4:40.578: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:40.634: Robot 7 has turned its BOM on.
+4:40.750: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:40.806: Robot 9 has turned its BOM on.
+4:40.866: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:40.922: Robot 1 has turned its BOM on.
+4:41.018: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:41.074: Robot 2 has turned its BOM on.
+4:41.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:41.242: Robot 3 has turned its BOM on.
+4:41.354: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:41.410: Robot 7 has turned its BOM on.
+4:41.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:41.574: Robot 9 has turned its BOM on.
+4:41.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:41.742: Robot 1 has turned its BOM on.
+4:41.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:41.910: Robot 2 has turned its BOM on.
+4:41.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:42.022: Robot 3 has turned its BOM on.
+4:42.134: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:42.190: Robot 7 has turned its BOM on.
+4:42.302: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:42.358: Robot 9 has turned its BOM on.
+4:42.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:42.518: Robot 1 has turned its BOM on.
+4:42.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:42.686: Robot 2 has turned its BOM on.
+4:42.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:42.854: Robot 3 has turned its BOM on.
+4:42.910: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:42.962: Robot 7 has turned its BOM on.
+4:43.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:43.130: Robot 9 has turned its BOM on.
+4:43.247: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:43.302: Robot 1 has turned its BOM on.
+4:43.414: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:43.462: Robot 2 has turned its BOM on.
+4:43.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:43.630: Robot 3 has turned its BOM on.
+4:43.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:43.798: Robot 7 has turned its BOM on.
+4:43.854: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:43.910: Robot 9 has turned its BOM on.
+4:44.018: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:44.074: Robot 1 has turned its BOM on.
+4:44.190: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:44.246: Robot 2 has turned its BOM on.
+4:44.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:44.414: Robot 3 has turned its BOM on.
+4:44.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:44.574: Robot 7 has turned its BOM on.
+4:44.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:44.742: Robot 9 has turned its BOM on.
+4:44.798: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:44.854: Robot 1 has turned its BOM on.
+4:44.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:45.018: Robot 2 has turned its BOM on.
+4:45.134: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:45.190: Robot 3 has turned its BOM on.
+4:45.302: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:45.358: Robot 7 has turned its BOM on.
+4:45.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:45.518: Robot 9 has turned its BOM on.
+4:45.634: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:45.690: Robot 1 has turned its BOM on.
+4:45.802: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:45.858: Robot 2 has turned its BOM on.
+4:45.918: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:45.962: Robot 3 has turned its BOM on.
+4:46.078: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:46.134: Robot 7 has turned its BOM on.
+4:46.246: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:46.302: Robot 9 has turned its BOM on.
+4:46.414: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:46.462: Robot 1 has turned its BOM on.
+4:46.578: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:46.634: Robot 2 has turned its BOM on.
+4:46.746: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:46.802: Robot 3 has turned its BOM on.
+4:46.862: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:46.918: Robot 7 has turned its BOM on.
+4:47.022: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:47.078: Robot 9 has turned its BOM on.
+4:47.190: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:47.246: Robot 1 has turned its BOM on.
+4:47.358: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:47.414: Robot 2 has turned its BOM on.
+4:47.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:47.574: Robot 3 has turned its BOM on.
+4:47.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:47.746: Robot 7 has turned its BOM on.
+4:47.802: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:47.858: Robot 9 has turned its BOM on.
+4:47.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:48.018: Robot 1 has turned its BOM on.
+4:48.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:48.186: Robot 2 has turned its BOM on.
+4:48.306: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:48.362: Robot 3 has turned its BOM on.
+4:48.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:48.518: Robot 7 has turned its BOM on.
+4:48.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:48.686: Robot 9 has turned its BOM on.
+4:48.798: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:48.854: Robot 1 has turned its BOM on.
+4:48.910: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:48.962: Robot 2 has turned its BOM on.
+4:49.074: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:49.130: Robot 3 has turned its BOM on.
+4:49.246: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:49.302: Robot 7 has turned its BOM on.
+4:49.414: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:49.462: Robot 9 has turned its BOM on.
+4:49.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:49.630: Robot 1 has turned its BOM on.
+4:49.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:49.799: Robot 2 has turned its BOM on.
+4:49.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:49.910: Robot 3 has turned its BOM on.
+4:50.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:50.074: Robot 7 has turned its BOM on.
+4:50.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:50.242: Robot 9 has turned its BOM on.
+4:50.354: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:50.410: Robot 1 has turned its BOM on.
+4:50.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:50.574: Robot 2 has turned its BOM on.
+4:50.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:50.742: Robot 3 has turned its BOM on.
+4:50.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:50.910: Robot 7 has turned its BOM on.
+4:51.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:51.074: Robot 9 has turned its BOM on.
+4:51.134: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:51.190: Robot 1 has turned its BOM on.
+4:51.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:51.358: Robot 2 has turned its BOM on.
+4:51.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:51.518: Robot 3 has turned its BOM on.
+4:51.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:51.686: Robot 7 has turned its BOM on.
+4:51.802: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:51.858: Robot 9 has turned its BOM on.
+4:51.918: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:51.962: Robot 1 has turned its BOM on.
+4:52.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:52.130: Robot 2 has turned its BOM on.
+4:52.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:52.298: Robot 3 has turned its BOM on.
+4:52.410: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:52.462: Robot 7 has turned its BOM on.
+4:52.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:52.630: Robot 9 has turned its BOM on.
+4:52.742: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:52.798: Robot 1 has turned its BOM on.
+4:52.910: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:52.962: Robot 2 has turned its BOM on.
+4:53.022: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:53.078: Robot 3 has turned its BOM on.
+4:53.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:53.246: Robot 7 has turned its BOM on.
+4:53.358: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:53.414: Robot 9 has turned its BOM on.
+4:53.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:53.574: Robot 1 has turned its BOM on.
+4:53.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:53.742: Robot 2 has turned its BOM on.
+4:53.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:53.910: Robot 3 has turned its BOM on.
+4:53.966: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:54.022: Robot 7 has turned its BOM on.
+4:54.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 0)
+4:54.190: Robot 9 has turned its BOM on.
+4:54.302: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:54.358: Robot 1 has turned its BOM on.
+4:54.466: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:54.522: Robot 2 has turned its BOM on.
+4:54.634: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:54.690: Robot 3 has turned its BOM on.
+4:54.806: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:54.862: Robot 7 has turned its BOM on.
+4:54.922: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:54.962: Robot 9 has turned its BOM on.
+4:55.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:55.130: Robot 1 has turned its BOM on.
+4:55.246: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:55.302: Robot 2 has turned its BOM on.
+4:55.414: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:55.462: Robot 3 has turned its BOM on.
+4:55.574: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:55.630: Robot 7 has turned its BOM on.
+4:55.742: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:55.798: Robot 9 has turned its BOM on.
+4:55.914: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:55.962: Robot 1 has turned its BOM on.
+4:56.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:56.130: Robot 2 has turned its BOM on.
+4:56.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:56.242: Robot 3 has turned its BOM on.
+4:56.354: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:56.410: Robot 7 has turned its BOM on.
+4:56.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:56.574: Robot 9 has turned its BOM on.
+4:56.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:56.746: Robot 1 has turned its BOM on.
+4:56.858: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:56.914: Robot 2 has turned its BOM on.
+4:57.018: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:57.074: Robot 3 has turned its BOM on.
+4:57.134: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:57.190: Robot 7 has turned its BOM on.
+4:57.306: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:57.362: Robot 9 has turned its BOM on.
+4:57.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:57.518: Robot 1 has turned its BOM on.
+4:57.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:57.686: Robot 2 has turned its BOM on.
+4:57.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:57.854: Robot 3 has turned its BOM on.
+4:57.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:58.018: Robot 7 has turned its BOM on.
+4:58.078: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:58.134: Robot 9 has turned its BOM on.
+4:58.246: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:58.302: Robot 1 has turned its BOM on.
+4:58.414: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:58.462: Robot 2 has turned its BOM on.
+4:58.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 1)
+4:58.630: Robot 3 has turned its BOM on.
+4:58.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:58.798: Robot 7 has turned its BOM on.
+4:58.858: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 0)
+4:58.914: Robot 9 has turned its BOM on.
+4:59.018: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:59.074: Robot 1 has turned its BOM on.
+4:59.186: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:59.242: Robot 2 has turned its BOM on.
+4:59.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 3)
+4:59.410: Robot 3 has turned its BOM on.
+4:59.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:59.574: Robot 7 has turned its BOM on.
+4:59.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 0)
+4:59.742: Robot 9 has turned its BOM on.
+4:59.858: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:59.914: Robot 1 has turned its BOM on.
+4:59.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+
Index: branches/scout/projects/libwireless/logger/tests/5robots100bom.analysis
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots100bom.analysis	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots100bom.analysis	(revision 1346)
@@ -0,0 +1,14 @@
+Robots:						5
+Time (seconds):					300
+Deaths:						2
+
+Deaths per Minute:				0.4
+Rejoin Time (seconds):				0.524
+Seconds Between BOM Flash and Token Sent:	0.102
+Seconds Between Token Sent and Token Returned:	0.63
+Seconds Between Token Sent and BOM Flash:	0.055
+
+Token Passes per Second:			6.21
+
+Deaths per Robot per Minute:			0.08
+Token Passes per Robot per Second:		1.2
Index: branches/scout/projects/libwireless/logger/tests/5robots50bom.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots50bom.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots50bom.test	(revision 1346)
@@ -0,0 +1,5606 @@
+0:00.624: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:00.680: Robot 3 has turned its BOM on.
+0:00.736: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:00.792: Robot 7 has turned its BOM on.
+0:00.904: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:00.960: Robot 9 has turned its BOM on.
+0:01.072: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:01.128: Robot 1 has turned its BOM on.
+0:01.240: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:01.296: Robot 2 has turned its BOM on.
+0:01.408: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:01.460: Robot 3 has turned its BOM on.
+0:01.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:01.572: Robot 7 has turned its BOM on.
+0:01.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:01.740: Robot 9 has turned its BOM on.
+0:01.856: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:01.912: Robot 1 has turned its BOM on.
+0:02.016: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:02.073: Robot 2 has turned its BOM on.
+0:02.184: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:02.240: Robot 3 has turned its BOM on.
+0:02.352: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:02.408: Robot 7 has turned its BOM on.
+0:02.464: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:02.520: Robot 9 has turned its BOM on.
+0:02.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:02.688: Robot 1 has turned its BOM on.
+0:02.800: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:02.856: Robot 2 has turned its BOM on.
+0:02.960: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:03.016: Robot 3 has turned its BOM on.
+0:03.128: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:03.184: Robot 7 has turned its BOM on.
+0:03.296: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:03.352: Robot 9 has turned its BOM on.
+0:03.460: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:03.516: Robot 1 has turned its BOM on.
+0:03.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:03.628: Robot 2 has turned its BOM on.
+0:03.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:03.800: Robot 3 has turned its BOM on.
+0:03.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:03.960: Robot 7 has turned its BOM on.
+0:04.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:04.128: Robot 9 has turned its BOM on.
+0:04.240: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:04.296: Robot 1 has turned its BOM on.
+0:04.408: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:04.460: Robot 2 has turned its BOM on.
+0:04.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:04.628: Robot 3 has turned its BOM on.
+0:04.684: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:04.740: Robot 7 has turned its BOM on.
+0:04.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:04.908: Robot 9 has turned its BOM on.
+0:05.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:05.072: Robot 1 has turned its BOM on.
+0:05.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:05.240: Robot 2 has turned its BOM on.
+0:05.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:05.408: Robot 3 has turned its BOM on.
+0:05.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:05.572: Robot 7 has turned its BOM on.
+0:05.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:05.684: Robot 9 has turned its BOM on.
+0:05.796: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:05.853: Robot 1 has turned its BOM on.
+0:05.964: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:06.020: Robot 2 has turned its BOM on.
+0:06.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:06.188: Robot 3 has turned its BOM on.
+0:06.300: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:06.357: Robot 7 has turned its BOM on.
+0:06.412: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:06.460: Robot 9 has turned its BOM on.
+0:06.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:06.628: Robot 1 has turned its BOM on.
+0:06.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:06.796: Robot 2 has turned its BOM on.
+0:06.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:06.960: Robot 3 has turned its BOM on.
+0:07.076: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:07.132: Robot 7 has turned its BOM on.
+0:07.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:07.300: Robot 9 has turned its BOM on.
+0:07.360: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:07.416: Robot 1 has turned its BOM on.
+0:07.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:07.572: Robot 2 has turned its BOM on.
+0:07.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:07.740: Robot 3 has turned its BOM on.
+0:07.852: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:07.908: Robot 7 has turned its BOM on.
+0:08.016: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:08.072: Robot 9 has turned its BOM on.
+0:08.184: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:08.240: Robot 1 has turned its BOM on.
+0:08.356: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:08.412: Robot 2 has turned its BOM on.
+0:08.460: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:08.516: Robot 3 has turned its BOM on.
+0:08.628: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:08.684: Robot 7 has turned its BOM on.
+0:08.800: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:08.856: Robot 9 has turned its BOM on.
+0:08.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:09.016: Robot 1 has turned its BOM on.
+0:09.132: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:09.188: Robot 2 has turned its BOM on.
+0:09.300: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:09.356: Robot 3 has turned its BOM on.
+0:09.460: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:09.516: Robot 7 has turned its BOM on.
+0:09.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:09.684: Robot 9 has turned its BOM on.
+0:09.740: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:09.796: Robot 1 has turned its BOM on.
+0:09.908: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:09.960: Robot 2 has turned its BOM on.
+0:10.076: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:10.132: Robot 3 has turned its BOM on.
+0:10.244: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:10.300: Robot 7 has turned its BOM on.
+0:10.412: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:10.460: Robot 9 has turned its BOM on.
+0:10.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:10.628: Robot 1 has turned its BOM on.
+0:10.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:10.740: Robot 2 has turned its BOM on.
+0:10.852: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:10.908: Robot 3 has turned its BOM on.
+0:11.020: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:11.076: Robot 7 has turned its BOM on.
+0:11.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:11.244: Robot 9 has turned its BOM on.
+0:11.356: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:11.412: Robot 1 has turned its BOM on.
+0:11.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:11.572: Robot 2 has turned its BOM on.
+0:11.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:11.684: Robot 3 has turned its BOM on.
+0:11.796: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:11.852: Robot 7 has turned its BOM on.
+0:11.964: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:12.020: Robot 9 has turned its BOM on.
+0:12.132: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:12.188: Robot 1 has turned its BOM on.
+0:12.300: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:12.356: Robot 2 has turned its BOM on.
+0:12.413: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:12.460: Robot 3 has turned its BOM on.
+0:12.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:12.628: Robot 7 has turned its BOM on.
+0:12.740: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:12.796: Robot 9 has turned its BOM on.
+0:12.908: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:12.960: Robot 1 has turned its BOM on.
+0:13.072: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:13.128: Robot 2 has turned its BOM on.
+0:13.240: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:13.296: Robot 3 has turned its BOM on.
+0:13.412: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:13.460: Robot 7 has turned its BOM on.
+0:13.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:13.572: Robot 9 has turned its BOM on.
+0:13.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:13.740: Robot 1 has turned its BOM on.
+0:13.852: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:13.908: Robot 2 has turned its BOM on.
+0:14.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:14.072: Robot 3 has turned its BOM on.
+0:14.184: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:14.240: Robot 7 has turned its BOM on.
+0:14.352: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:14.408: Robot 9 has turned its BOM on.
+0:14.516: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:14.572: Robot 1 has turned its BOM on.
+0:14.684: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:14.740: Robot 2 has turned its BOM on.
+0:14.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:14.852: Robot 3 has turned its BOM on.
+0:14.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:15.016: Robot 7 has turned its BOM on.
+0:15.136: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:15.192: Robot 9 has turned its BOM on.
+0:15.304: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:15.360: Robot 1 has turned its BOM on.
+0:15.420: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:15.460: Robot 2 has turned its BOM on.
+0:15.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:15.684: Robot 3 has turned its BOM on.
+0:15.740: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:15.796: Robot 7 has turned its BOM on.
+0:15.908: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:15.960: Robot 9 has turned its BOM on.
+0:16.072: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:16.128: Robot 1 has turned its BOM on.
+0:16.244: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:16.300: Robot 2 has turned its BOM on.
+0:16.412: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:16.460: Robot 3 has turned its BOM on.
+0:16.572: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:16.628: Robot 7 has turned its BOM on.
+0:16.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:16.744: Robot 9 has turned its BOM on.
+0:16.860: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:16.916: Robot 1 has turned its BOM on.
+0:17.020: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+0:17.076: Robot 2 has turned its BOM on.
+0:17.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:17.244: Robot 3 has turned its BOM on.
+0:17.356: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:17.412: Robot 7 has turned its BOM on.
+0:17.516: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:17.572: Robot 9 has turned its BOM on.
+0:17.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:17.684: Robot 1 has turned its BOM on.
+0:17.796: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:17.852: Robot 2 has turned its BOM on.
+0:17.964: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:18.020: Robot 3 has turned its BOM on.
+0:18.132: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:18.188: Robot 7 has turned its BOM on.
+0:18.300: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:18.356: Robot 9 has turned its BOM on.
+0:18.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:18.516: Robot 1 has turned its BOM on.
+0:18.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:18.628: Robot 2 has turned its BOM on.
+0:18.740: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:18.796: Robot 3 has turned its BOM on.
+0:18.908: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:18.960: Robot 7 has turned its BOM on.
+0:19.072: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:19.128: Robot 9 has turned its BOM on.
+0:19.244: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:19.300: Robot 1 has turned its BOM on.
+0:19.412: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:19.460: Robot 2 has turned its BOM on.
+0:19.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:19.628: Robot 3 has turned its BOM on.
+0:19.740: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:19.796: Robot 7 has turned its BOM on.
+0:19.852: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:19.908: Robot 9 has turned its BOM on.
+0:20.016: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:20.072: Robot 1 has turned its BOM on.
+0:20.184: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:20.240: Robot 2 has turned its BOM on.
+0:20.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:20.408: Robot 3 has turned its BOM on.
+0:20.516: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:20.572: Robot 7 has turned its BOM on.
+0:20.684: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:20.740: Robot 9 has turned its BOM on.
+0:20.796: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:20.852: Robot 1 has turned its BOM on.
+0:20.960: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:21.016: Robot 2 has turned its BOM on.
+0:21.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:21.188: Robot 3 has turned its BOM on.
+0:21.304: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:21.360: Robot 7 has turned its BOM on.
+0:21.420: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:21.460: Robot 9 has turned its BOM on.
+0:21.628: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:21.684: Robot 1 has turned its BOM on.
+0:21.740: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:21.796: Robot 2 has turned its BOM on.
+0:21.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:21.960: Robot 3 has turned its BOM on.
+0:22.076: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:22.132: Robot 7 has turned its BOM on.
+0:22.244: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:22.300: Robot 9 has turned its BOM on.
+0:22.412: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:22.460: Robot 1 has turned its BOM on.
+0:22.572: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:22.628: Robot 2 has turned its BOM on.
+0:22.688: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:22.744: Robot 3 has turned its BOM on.
+0:22.860: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:22.916: Robot 7 has turned its BOM on.
+0:23.016: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:23.072: Robot 9 has turned its BOM on.
+0:23.184: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:23.240: Robot 1 has turned its BOM on.
+0:23.352: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:23.408: Robot 2 has turned its BOM on.
+0:23.524: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:23.580: Robot 3 has turned its BOM on.
+0:23.636: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:23.692: Robot 7 has turned its BOM on.
+0:23.804: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 2)
+0:23.860: Robot 9 has turned its BOM on.
+0:23.960: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:24.016: Robot 1 has turned its BOM on.
+0:24.128: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:24.184: Robot 2 has turned its BOM on.
+0:24.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:24.352: Robot 3 has turned its BOM on.
+0:24.460: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:24.516: Robot 7 has turned its BOM on.
+0:24.628: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:24.684: Robot 9 has turned its BOM on.
+0:24.744: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:24.800: Robot 1 has turned its BOM on.
+0:24.912: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:24.960: Robot 2 has turned its BOM on.
+0:25.072: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:25.128: Robot 3 has turned its BOM on.
+0:25.240: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:25.296: Robot 7 has turned its BOM on.
+0:25.408: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:25.460: Robot 9 has turned its BOM on.
+0:25.572: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:25.628: Robot 1 has turned its BOM on.
+0:25.688: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:25.744: Robot 2 has turned its BOM on.
+0:25.856: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:25.912: Robot 3 has turned its BOM on.
+0:26.016: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:26.072: Robot 7 has turned its BOM on.
+0:26.184: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:26.240: Robot 9 has turned its BOM on.
+0:26.352: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:26.408: Robot 1 has turned its BOM on.
+0:26.516: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:26.572: Robot 2 has turned its BOM on.
+0:26.632: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:26.688: Robot 3 has turned its BOM on.
+0:26.800: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:26.856: Robot 7 has turned its BOM on.
+0:26.960: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:27.128: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:27.185: Robot 1 has turned its BOM on.
+0:27.296: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:27.352: Robot 2 has turned its BOM on.
+0:27.460: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:27.516: Robot 3 has turned its BOM on.
+0:27.580: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:27.636: Robot 7 has turned its BOM on.
+0:27.752: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:27.809: Robot 9 has turned its BOM on.
+0:27.920: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:27.960: Robot 1 has turned its BOM on.
+0:28.072: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:28.128: Robot 2 has turned its BOM on.
+0:28.240: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:28.296: Robot 3 has turned its BOM on.
+0:28.408: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:28.460: Robot 7 has turned its BOM on.
+0:28.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:28.628: Robot 9 has turned its BOM on.
+0:28.684: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:28.740: Robot 1 has turned its BOM on.
+0:28.856: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:28.912: Robot 2 has turned its BOM on.
+0:29.016: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:29.073: Robot 3 has turned its BOM on.
+0:29.184: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:29.240: Robot 7 has turned its BOM on.
+0:29.352: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:29.409: Robot 9 has turned its BOM on.
+0:29.520: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:29.577: Robot 1 has turned its BOM on.
+0:29.689: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:29.744: Robot 2 has turned its BOM on.
+0:29.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:29.857: Robot 3 has turned its BOM on.
+0:29.960: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:30.016: Robot 7 has turned its BOM on.
+0:30.128: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:30.184: Robot 9 has turned its BOM on.
+0:30.304: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:30.360: Robot 1 has turned its BOM on.
+0:30.460: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:30.516: Robot 2 has turned its BOM on.
+0:30.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:30.684: Robot 3 has turned its BOM on.
+0:30.744: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:30.801: Robot 7 has turned its BOM on.
+0:30.913: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:30.961: Robot 9 has turned its BOM on.
+0:31.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:31.128: Robot 1 has turned its BOM on.
+0:31.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:31.296: Robot 2 has turned its BOM on.
+0:31.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:31.461: Robot 3 has turned its BOM on.
+0:31.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:31.629: Robot 7 has turned its BOM on.
+0:31.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:31.745: Robot 9 has turned its BOM on.
+0:31.857: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:31.913: Robot 1 has turned its BOM on.
+0:32.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:32.073: Robot 2 has turned its BOM on.
+0:32.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:32.241: Robot 3 has turned its BOM on.
+0:32.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:32.409: Robot 7 has turned its BOM on.
+0:32.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:32.573: Robot 9 has turned its BOM on.
+0:32.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:32.685: Robot 1 has turned its BOM on.
+0:32.797: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:32.853: Robot 2 has turned its BOM on.
+0:32.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:33.017: Robot 3 has turned its BOM on.
+0:33.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:33.185: Robot 7 has turned its BOM on.
+0:33.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+0:33.353: Robot 9 has turned its BOM on.
+0:33.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:33.517: Robot 1 has turned its BOM on.
+0:33.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:33.689: Robot 2 has turned its BOM on.
+0:33.745: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:33.801: Robot 3 has turned its BOM on.
+0:33.913: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:33.961: Robot 7 has turned its BOM on.
+0:34.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:34.129: Robot 9 has turned its BOM on.
+0:34.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:34.297: Robot 1 has turned its BOM on.
+0:34.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:34.461: Robot 2 has turned its BOM on.
+0:34.577: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:34.633: Robot 3 has turned its BOM on.
+0:34.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:34.801: Robot 7 has turned its BOM on.
+0:34.857: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:34.913: Robot 9 has turned its BOM on.
+0:35.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:35.073: Robot 1 has turned its BOM on.
+0:35.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:35.241: Robot 2 has turned its BOM on.
+0:35.353: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:35.409: Robot 3 has turned its BOM on.
+0:35.521: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:35.577: Robot 7 has turned its BOM on.
+0:35.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:35.745: Robot 9 has turned its BOM on.
+0:35.801: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:35.857: Robot 1 has turned its BOM on.
+0:35.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:36.017: Robot 2 has turned its BOM on.
+0:36.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:36.185: Robot 3 has turned its BOM on.
+0:36.297: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:36.353: Robot 7 has turned its BOM on.
+0:36.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:36.517: Robot 9 has turned its BOM on.
+0:36.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:36.685: Robot 1 has turned its BOM on.
+0:36.745: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:36.801: Robot 2 has turned its BOM on.
+0:36.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:36.961: Robot 3 has turned its BOM on.
+0:37.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:37.129: Robot 7 has turned its BOM on.
+0:37.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:37.413: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:37.461: Robot 1 has turned its BOM on.
+0:37.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:37.629: Robot 2 has turned its BOM on.
+0:37.689: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+0:37.745: Robot 3 has turned its BOM on.
+0:37.857: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:37.913: Robot 7 has turned its BOM on.
+0:38.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+0:38.073: Robot 9 has turned its BOM on.
+0:38.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:38.241: Robot 1 has turned its BOM on.
+0:38.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:38.409: Robot 2 has turned its BOM on.
+0:38.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 2)
+0:38.573: Robot 3 has turned its BOM on.
+0:38.689: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+0:38.745: Robot 7 has turned its BOM on.
+0:38.801: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:38.857: Robot 9 has turned its BOM on.
+0:38.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:39.017: Robot 1 has turned its BOM on.
+0:39.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 1)(9 1)
+0:39.189: Robot 2 has turned its BOM on.
+0:39.305: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:39.361: Robot 3 has turned its BOM on.
+0:39.465: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:39.521: Robot 7 has turned its BOM on.
+0:39.633: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:39.689: Robot 9 has turned its BOM on.
+0:39.801: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:39.857: Robot 1 has turned its BOM on.
+0:39.913: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:39.961: Robot 2 has turned its BOM on.
+0:40.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:40.129: Robot 3 has turned its BOM on.
+0:40.249: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:40.305: Robot 7 has turned its BOM on.
+0:40.417: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:40.461: Robot 9 has turned its BOM on.
+0:40.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:40.629: Robot 1 has turned its BOM on.
+0:40.741: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:40.797: Robot 2 has turned its BOM on.
+0:40.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:40.909: Robot 3 has turned its BOM on.
+0:41.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 4)(2 8)(7 1)(9 1)
+0:41.073: Robot 7 has turned its BOM on.
+0:41.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:41.245: Robot 9 has turned its BOM on.
+0:41.357: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:41.413: Robot 1 has turned its BOM on.
+0:41.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:41.573: Robot 2 has turned its BOM on.
+0:41.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:41.741: Robot 3 has turned its BOM on.
+0:41.801: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 2)(2 8)(7 1)(9 1)
+0:41.857: Robot 7 has turned its BOM on.
+0:41.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:42.017: Robot 9 has turned its BOM on.
+0:42.133: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:42.189: Robot 1 has turned its BOM on.
+0:42.301: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:42.357: Robot 2 has turned its BOM on.
+0:42.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:42.517: Robot 3 has turned its BOM on.
+0:42.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 2)(2 8)(7 1)(9 2)
+0:42.685: Robot 7 has turned its BOM on.
+0:42.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:42.797: Robot 9 has turned its BOM on.
+0:42.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:42.961: Robot 1 has turned its BOM on.
+0:43.077: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:43.133: Robot 2 has turned its BOM on.
+0:43.245: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:43.301: Robot 3 has turned its BOM on.
+0:43.413: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:43.461: Robot 7 has turned its BOM on.
+0:43.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:43.629: Robot 9 has turned its BOM on.
+0:43.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:43.797: Robot 1 has turned its BOM on.
+0:43.853: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:43.909: Robot 2 has turned its BOM on.
+0:44.021: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:44.077: Robot 3 has turned its BOM on.
+0:44.189: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 4)(2 8)(7 1)(9 1)
+0:44.245: Robot 7 has turned its BOM on.
+0:44.357: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:44.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:44.573: Robot 1 has turned its BOM on.
+0:44.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:44.741: Robot 2 has turned its BOM on.
+0:44.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:44.909: Robot 3 has turned its BOM on.
+0:44.965: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 2)(2 8)(7 1)(9 1)
+0:45.021: Robot 7 has turned its BOM on.
+0:45.133: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:45.189: Robot 9 has turned its BOM on.
+0:45.305: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:45.361: Robot 1 has turned its BOM on.
+0:45.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 2)(9 2)
+0:45.517: Robot 2 has turned its BOM on.
+0:45.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:45.685: Robot 3 has turned its BOM on.
+0:45.797: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 2)
+0:45.853: Robot 7 has turned its BOM on.
+0:45.909: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:45.961: Robot 9 has turned its BOM on.
+0:46.129: Robot 1 has turned its BOM on.
+0:46.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:46.297: Robot 2 has turned its BOM on.
+0:46.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:46.461: Robot 3 has turned its BOM on.
+0:46.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:46.629: Robot 7 has turned its BOM on.
+0:46.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:46.797: Robot 9 has turned its BOM on.
+0:46.853: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:46.909: Robot 1 has turned its BOM on.
+0:47.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 1)
+0:47.073: Robot 2 has turned its BOM on.
+0:47.189: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:47.245: Robot 3 has turned its BOM on.
+0:47.357: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:47.413: Robot 7 has turned its BOM on.
+0:47.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:47.573: Robot 9 has turned its BOM on.
+0:47.685: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:47.741: Robot 1 has turned its BOM on.
+0:47.797: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:47.853: Robot 2 has turned its BOM on.
+0:47.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:48.017: Robot 3 has turned its BOM on.
+0:48.133: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 1)
+0:48.189: Robot 7 has turned its BOM on.
+0:48.301: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:48.461: Robot 1 has turned its BOM on.
+0:48.629: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:48.685: Robot 2 has turned its BOM on.
+0:48.797: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:48.853: Robot 3 has turned its BOM on.
+0:48.909: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 1)
+0:48.961: Robot 7 has turned its BOM on.
+0:49.077: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:49.133: Robot 9 has turned its BOM on.
+0:49.245: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:49.301: Robot 1 has turned its BOM on.
+0:49.413: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:49.461: Robot 2 has turned its BOM on.
+0:49.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:49.629: Robot 3 has turned its BOM on.
+0:49.741: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:49.797: Robot 7 has turned its BOM on.
+0:49.909: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:49.961: Robot 9 has turned its BOM on.
+0:50.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:50.073: Robot 1 has turned its BOM on.
+0:50.185: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:50.241: Robot 2 has turned its BOM on.
+0:50.357: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:50.413: Robot 3 has turned its BOM on.
+0:50.517: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 3)
+0:50.573: Robot 7 has turned its BOM on.
+0:50.685: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:50.741: Robot 9 has turned its BOM on.
+0:50.853: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:50.909: Robot 1 has turned its BOM on.
+0:50.965: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:51.021: Robot 2 has turned its BOM on.
+0:51.133: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:51.189: Robot 3 has turned its BOM on.
+0:51.301: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 1)
+0:51.357: Robot 7 has turned its BOM on.
+0:51.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:51.517: Robot 9 has turned its BOM on.
+0:51.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:51.685: Robot 1 has turned its BOM on.
+0:51.797: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:51.853: Robot 2 has turned its BOM on.
+0:51.909: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:51.961: Robot 3 has turned its BOM on.
+0:52.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 1)
+0:52.129: Robot 7 has turned its BOM on.
+0:52.245: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:52.301: Robot 9 has turned its BOM on.
+0:52.413: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:52.461: Robot 1 has turned its BOM on.
+0:52.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:52.629: Robot 2 has turned its BOM on.
+0:52.741: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:52.797: Robot 3 has turned its BOM on.
+0:52.853: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:52.909: Robot 7 has turned its BOM on.
+0:53.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:53.073: Robot 9 has turned its BOM on.
+0:53.189: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:53.245: Robot 1 has turned its BOM on.
+0:53.357: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:53.413: Robot 2 has turned its BOM on.
+0:53.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:53.573: Robot 3 has turned its BOM on.
+0:53.685: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:53.741: Robot 7 has turned its BOM on.
+0:53.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:53.853: Robot 9 has turned its BOM on.
+0:53.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:54.017: Robot 1 has turned its BOM on.
+0:54.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:54.185: Robot 2 has turned its BOM on.
+0:54.297: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:54.353: Robot 3 has turned its BOM on.
+0:54.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 4)(2 8)(7 1)(9 1)
+0:54.517: Robot 7 has turned its BOM on.
+0:54.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:54.685: Robot 9 has turned its BOM on.
+0:54.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:54.853: Robot 1 has turned its BOM on.
+0:54.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:55.017: Robot 2 has turned its BOM on.
+0:55.077: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:55.133: Robot 3 has turned its BOM on.
+0:55.245: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 1)
+0:55.301: Robot 7 has turned its BOM on.
+0:55.413: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:55.461: Robot 9 has turned its BOM on.
+0:55.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 11)(7 8)
+0:55.629: Robot 1 has turned its BOM on.
+0:55.741: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:55.797: Robot 2 has turned its BOM on.
+0:55.909: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:55.961: Robot 3 has turned its BOM on.
+0:56.021: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 3)
+0:56.077: Robot 7 has turned its BOM on.
+0:56.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:56.245: Robot 9 has turned its BOM on.
+0:56.357: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:56.413: Robot 1 has turned its BOM on.
+0:56.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+0:56.573: Robot 2 has turned its BOM on.
+0:56.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:56.741: Robot 3 has turned its BOM on.
+0:56.853: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 3)(2 8)(7 1)(9 3)
+0:56.909: Robot 7 has turned its BOM on.
+0:56.965: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:57.021: Robot 9 has turned its BOM on.
+0:57.133: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+0:57.189: Robot 1 has turned its BOM on.
+0:57.301: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:57.357: Robot 2 has turned its BOM on.
+0:57.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:57.517: Robot 3 has turned its BOM on.
+0:57.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 4)(2 8)(7 1)(9 1)
+0:57.685: Robot 7 has turned its BOM on.
+0:57.749: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:57.805: Robot 9 has turned its BOM on.
+0:57.925: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:57.961: Robot 1 has turned its BOM on.
+0:58.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:58.129: Robot 2 has turned its BOM on.
+0:58.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:58.297: Robot 3 has turned its BOM on.
+0:58.409: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 2)(2 8)(7 1)(9 1)
+0:58.461: Robot 7 has turned its BOM on.
+0:58.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:58.629: Robot 9 has turned its BOM on.
+0:58.745: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:58.801: Robot 1 has turned its BOM on.
+0:58.857: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:58.913: Robot 2 has turned its BOM on.
+0:59.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:59.073: Robot 3 has turned its BOM on.
+0:59.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 2)(2 8)(7 1)(9 2)
+0:59.241: Robot 7 has turned its BOM on.
+0:59.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+0:59.409: Robot 9 has turned its BOM on.
+0:59.521: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+0:59.577: Robot 1 has turned its BOM on.
+0:59.689: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 1)(7 1)(9 1)
+0:59.745: Robot 2 has turned its BOM on.
+0:59.857: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 2)(9 2)
+0:59.913: Robot 3 has turned its BOM on.
+1:00.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 3)
+1:00.073: Robot 7 has turned its BOM on.
+1:00.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:00.185: Robot 9 has turned its BOM on.
+1:00.297: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:00.353: Robot 1 has turned its BOM on.
+1:00.465: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:00.521: Robot 2 has turned its BOM on.
+1:00.633: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:00.689: Robot 3 has turned its BOM on.
+1:00.801: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:00.857: Robot 7 has turned its BOM on.
+1:00.913: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:00.961: Robot 9 has turned its BOM on.
+1:01.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:01.129: Robot 1 has turned its BOM on.
+1:01.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:01.297: Robot 2 has turned its BOM on.
+1:01.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:01.461: Robot 3 has turned its BOM on.
+1:01.577: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:01.633: Robot 7 has turned its BOM on.
+1:01.745: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:01.801: Robot 9 has turned its BOM on.
+1:01.861: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:01.917: Robot 1 has turned its BOM on.
+1:02.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:02.073: Robot 2 has turned its BOM on.
+1:02.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:02.241: Robot 3 has turned its BOM on.
+1:02.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:02.409: Robot 7 has turned its BOM on.
+1:02.521: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:02.577: Robot 9 has turned its BOM on.
+1:02.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:02.745: Robot 1 has turned its BOM on.
+1:02.801: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:02.857: Robot 2 has turned its BOM on.
+1:02.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:03.017: Robot 3 has turned its BOM on.
+1:03.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:03.185: Robot 7 has turned its BOM on.
+1:03.301: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:03.357: Robot 9 has turned its BOM on.
+1:03.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:03.517: Robot 1 has turned its BOM on.
+1:03.629: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:03.685: Robot 2 has turned its BOM on.
+1:03.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:03.857: Robot 3 has turned its BOM on.
+1:03.913: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:03.961: Robot 7 has turned its BOM on.
+1:04.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:04.129: Robot 9 has turned its BOM on.
+1:04.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:04.297: Robot 1 has turned its BOM on.
+1:04.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:04.461: Robot 2 has turned its BOM on.
+1:04.577: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:04.633: Robot 3 has turned its BOM on.
+1:04.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:04.801: Robot 7 has turned its BOM on.
+1:04.913: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:04.961: Robot 9 has turned its BOM on.
+1:05.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:05.129: Robot 1 has turned its BOM on.
+1:05.241: Robot 2 has turned its BOM on.
+1:05.353: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:05.409: Robot 3 has turned its BOM on.
+1:05.521: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:05.577: Robot 7 has turned its BOM on.
+1:05.693: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:05.749: Robot 9 has turned its BOM on.
+1:05.809: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:05.865: Robot 1 has turned its BOM on.
+1:06.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:06.073: Robot 2 has turned its BOM on.
+1:06.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:06.185: Robot 3 has turned its BOM on.
+1:06.297: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:06.354: Robot 7 has turned its BOM on.
+1:06.465: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:06.521: Robot 9 has turned its BOM on.
+1:06.633: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:06.689: Robot 1 has turned its BOM on.
+1:06.801: Robot 2 has turned its BOM on.
+1:06.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:06.961: Robot 3 has turned its BOM on.
+1:07.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:07.129: Robot 7 has turned its BOM on.
+1:07.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:07.297: Robot 9 has turned its BOM on.
+1:07.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:07.461: Robot 1 has turned its BOM on.
+1:07.577: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:07.633: Robot 2 has turned its BOM on.
+1:07.745: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:07.801: Robot 3 has turned its BOM on.
+1:07.857: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:07.913: Robot 7 has turned its BOM on.
+1:08.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:08.073: Robot 9 has turned its BOM on.
+1:08.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:08.241: Robot 1 has turned its BOM on.
+1:08.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:08.409: Robot 2 has turned its BOM on.
+1:08.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:08.573: Robot 3 has turned its BOM on.
+1:08.685: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:08.741: Robot 7 has turned its BOM on.
+1:08.861: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:08.917: Robot 9 has turned its BOM on.
+1:08.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:09.017: Robot 1 has turned its BOM on.
+1:09.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:09.185: Robot 2 has turned its BOM on.
+1:09.297: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:09.353: Robot 3 has turned its BOM on.
+1:09.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:09.517: Robot 7 has turned its BOM on.
+1:09.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:09.685: Robot 9 has turned its BOM on.
+1:09.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:09.853: Robot 1 has turned its BOM on.
+1:09.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:10.017: Robot 2 has turned its BOM on.
+1:10.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:10.185: Robot 3 has turned its BOM on.
+1:10.245: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:10.301: Robot 7 has turned its BOM on.
+1:10.417: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:10.461: Robot 9 has turned its BOM on.
+1:10.577: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:10.633: Robot 1 has turned its BOM on.
+1:10.745: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:10.801: Robot 2 has turned its BOM on.
+1:10.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:10.961: Robot 3 has turned its BOM on.
+1:11.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:11.129: Robot 7 has turned its BOM on.
+1:11.185: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:11.241: Robot 9 has turned its BOM on.
+1:11.353: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:11.409: Robot 1 has turned its BOM on.
+1:11.521: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:11.577: Robot 2 has turned its BOM on.
+1:11.689: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:11.745: Robot 3 has turned its BOM on.
+1:11.857: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:11.913: Robot 7 has turned its BOM on.
+1:12.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:12.073: Robot 9 has turned its BOM on.
+1:12.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:12.185: Robot 1 has turned its BOM on.
+1:12.297: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:12.353: Robot 2 has turned its BOM on.
+1:12.465: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:12.521: Robot 3 has turned its BOM on.
+1:12.633: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:12.689: Robot 7 has turned its BOM on.
+1:12.801: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:12.857: Robot 9 has turned its BOM on.
+1:12.913: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:12.961: Robot 1 has turned its BOM on.
+1:13.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:13.129: Robot 2 has turned its BOM on.
+1:13.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:13.297: Robot 3 has turned its BOM on.
+1:13.410: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:13.461: Robot 7 has turned its BOM on.
+1:13.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:13.629: Robot 9 has turned its BOM on.
+1:13.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:13.797: Robot 1 has turned its BOM on.
+1:13.909: Robot 2 has turned its BOM on.
+1:14.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:14.073: Robot 3 has turned its BOM on.
+1:14.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:14.241: Robot 7 has turned its BOM on.
+1:14.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:14.409: Robot 9 has turned its BOM on.
+1:14.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:14.573: Robot 1 has turned its BOM on.
+1:14.689: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:14.745: Robot 2 has turned its BOM on.
+1:14.857: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:14.913: Robot 3 has turned its BOM on.
+1:15.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:15.073: Robot 7 has turned its BOM on.
+1:15.185: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:15.241: Robot 9 has turned its BOM on.
+1:15.297: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:15.353: Robot 1 has turned its BOM on.
+1:15.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:15.517: Robot 2 has turned its BOM on.
+1:15.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:15.685: Robot 3 has turned its BOM on.
+1:15.797: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:15.853: Robot 7 has turned its BOM on.
+1:15.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:16.017: Robot 9 has turned its BOM on.
+1:16.077: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:16.133: Robot 1 has turned its BOM on.
+1:16.245: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:16.301: Robot 2 has turned its BOM on.
+1:16.413: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:16.461: Robot 3 has turned its BOM on.
+1:16.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:16.629: Robot 7 has turned its BOM on.
+1:16.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:16.797: Robot 9 has turned its BOM on.
+1:16.909: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:16.961: Robot 1 has turned its BOM on.
+1:17.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:17.073: Robot 2 has turned its BOM on.
+1:17.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:17.241: Robot 3 has turned its BOM on.
+1:17.357: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:17.413: Robot 7 has turned its BOM on.
+1:17.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:17.573: Robot 9 has turned its BOM on.
+1:17.685: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:17.741: Robot 1 has turned its BOM on.
+1:17.853: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:17.909: Robot 2 has turned its BOM on.
+1:17.965: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:18.021: Robot 3 has turned its BOM on.
+1:18.133: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:18.189: Robot 7 has turned its BOM on.
+1:18.301: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:18.357: Robot 9 has turned its BOM on.
+1:18.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:18.517: Robot 1 has turned its BOM on.
+1:18.629: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:18.685: Robot 2 has turned its BOM on.
+1:18.797: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:18.853: Robot 3 has turned its BOM on.
+1:18.909: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:18.961: Robot 7 has turned its BOM on.
+1:19.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:19.129: Robot 9 has turned its BOM on.
+1:19.245: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:19.301: Robot 1 has turned its BOM on.
+1:19.413: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:19.462: Robot 2 has turned its BOM on.
+1:19.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:19.629: Robot 3 has turned its BOM on.
+1:19.741: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:19.797: Robot 7 has turned its BOM on.
+1:19.909: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:19.961: Robot 9 has turned its BOM on.
+1:20.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:20.129: Robot 1 has turned its BOM on.
+1:20.189: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:20.245: Robot 2 has turned its BOM on.
+1:20.357: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:20.413: Robot 3 has turned its BOM on.
+1:20.517: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:20.573: Robot 7 has turned its BOM on.
+1:20.685: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:20.741: Robot 9 has turned its BOM on.
+1:20.853: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:20.909: Robot 1 has turned its BOM on.
+1:21.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:21.073: Robot 2 has turned its BOM on.
+1:21.133: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:21.189: Robot 3 has turned its BOM on.
+1:21.301: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:21.357: Robot 7 has turned its BOM on.
+1:21.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:21.517: Robot 9 has turned its BOM on.
+1:21.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:21.685: Robot 1 has turned its BOM on.
+1:21.797: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:21.853: Robot 2 has turned its BOM on.
+1:21.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:22.017: Robot 3 has turned its BOM on.
+1:22.081: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:22.137: Robot 7 has turned its BOM on.
+1:22.253: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:22.309: Robot 9 has turned its BOM on.
+1:22.421: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:22.461: Robot 1 has turned its BOM on.
+1:22.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:22.629: Robot 2 has turned its BOM on.
+1:22.741: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:22.797: Robot 3 has turned its BOM on.
+1:22.909: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:22.961: Robot 7 has turned its BOM on.
+1:23.025: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:23.081: Robot 9 has turned its BOM on.
+1:23.197: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:23.254: Robot 1 has turned its BOM on.
+1:23.365: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:23.421: Robot 2 has turned its BOM on.
+1:23.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:23.573: Robot 3 has turned its BOM on.
+1:23.685: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:23.741: Robot 7 has turned its BOM on.
+1:23.853: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:23.909: Robot 9 has turned its BOM on.
+1:23.965: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:24.021: Robot 1 has turned its BOM on.
+1:24.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:24.189: Robot 2 has turned its BOM on.
+1:24.301: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:24.357: Robot 3 has turned its BOM on.
+1:24.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:24.517: Robot 7 has turned its BOM on.
+1:24.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:24.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:24.853: Robot 1 has turned its BOM on.
+1:24.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:25.017: Robot 2 has turned its BOM on.
+1:25.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:25.185: Robot 3 has turned its BOM on.
+1:25.245: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:25.301: Robot 7 has turned its BOM on.
+1:25.413: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:25.461: Robot 9 has turned its BOM on.
+1:25.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:25.629: Robot 1 has turned its BOM on.
+1:25.741: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:25.797: Robot 2 has turned its BOM on.
+1:25.909: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:25.961: Robot 3 has turned its BOM on.
+1:26.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:26.129: Robot 7 has turned its BOM on.
+1:26.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:26.245: Robot 9 has turned its BOM on.
+1:26.357: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:26.413: Robot 1 has turned its BOM on.
+1:26.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:26.573: Robot 2 has turned its BOM on.
+1:26.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:26.741: Robot 3 has turned its BOM on.
+1:26.853: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:26.909: Robot 7 has turned its BOM on.
+1:27.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:27.073: Robot 9 has turned its BOM on.
+1:27.189: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:27.245: Robot 1 has turned its BOM on.
+1:27.301: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:27.357: Robot 2 has turned its BOM on.
+1:27.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 15)(9 3)
+1:27.517: Robot 3 has turned its BOM on.
+1:27.629: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:27.685: Robot 7 has turned its BOM on.
+1:27.797: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:27.853: Robot 9 has turned its BOM on.
+1:27.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:28.017: Robot 1 has turned its BOM on.
+1:28.077: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:28.133: Robot 2 has turned its BOM on.
+1:28.245: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 15)(9 3)
+1:28.301: Robot 3 has turned its BOM on.
+1:28.417: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:28.461: Robot 7 has turned its BOM on.
+1:28.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:28.629: Robot 9 has turned its BOM on.
+1:28.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:28.797: Robot 1 has turned its BOM on.
+1:28.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:28.961: Robot 2 has turned its BOM on.
+1:29.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:29.073: Robot 3 has turned its BOM on.
+1:29.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:29.241: Robot 7 has turned its BOM on.
+1:29.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:29.409: Robot 9 has turned its BOM on.
+1:29.517: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:29.573: Robot 1 has turned its BOM on.
+1:29.685: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:29.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:29.909: Robot 3 has turned its BOM on.
+1:30.021: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:30.077: Robot 7 has turned its BOM on.
+1:30.189: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:30.245: Robot 9 has turned its BOM on.
+1:30.301: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:30.357: Robot 1 has turned its BOM on.
+1:30.461: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:30.517: Robot 2 has turned its BOM on.
+1:30.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:30.685: Robot 3 has turned its BOM on.
+1:30.797: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:30.853: Robot 7 has turned its BOM on.
+1:30.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:31.017: Robot 9 has turned its BOM on.
+1:31.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:31.185: Robot 1 has turned its BOM on.
+1:31.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:31.297: Robot 2 has turned its BOM on.
+1:31.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:31.461: Robot 3 has turned its BOM on.
+1:31.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:31.629: Robot 7 has turned its BOM on.
+1:31.741: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:31.797: Robot 9 has turned its BOM on.
+1:31.914: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:31.961: Robot 1 has turned its BOM on.
+1:32.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:32.129: Robot 2 has turned its BOM on.
+1:32.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:32.241: Robot 3 has turned its BOM on.
+1:32.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:32.409: Robot 7 has turned its BOM on.
+1:32.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:32.574: Robot 9 has turned its BOM on.
+1:32.685: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:32.741: Robot 1 has turned its BOM on.
+1:32.853: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:32.909: Robot 2 has turned its BOM on.
+1:33.017: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:33.073: Robot 3 has turned its BOM on.
+1:33.297: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:33.353: Robot 9 has turned its BOM on.
+1:33.465: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:33.521: Robot 1 has turned its BOM on.
+1:33.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:33.689: Robot 2 has turned its BOM on.
+1:33.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:33.857: Robot 3 has turned its BOM on.
+1:33.961: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:34.017: Robot 7 has turned its BOM on.
+1:34.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:34.129: Robot 9 has turned its BOM on.
+1:34.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:34.297: Robot 1 has turned its BOM on.
+1:34.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:34.461: Robot 2 has turned its BOM on.
+1:34.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:34.629: Robot 3 has turned its BOM on.
+1:34.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:34.801: Robot 7 has turned its BOM on.
+1:34.913: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:34.961: Robot 9 has turned its BOM on.
+1:35.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:35.129: Robot 1 has turned its BOM on.
+1:35.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:35.297: Robot 2 has turned its BOM on.
+1:35.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:35.409: Robot 3 has turned its BOM on.
+1:35.517: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:35.573: Robot 7 has turned its BOM on.
+1:35.689: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:35.745: Robot 9 has turned its BOM on.
+1:35.857: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:35.913: Robot 1 has turned its BOM on.
+1:36.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:36.073: Robot 2 has turned its BOM on.
+1:36.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:36.241: Robot 3 has turned its BOM on.
+1:36.297: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:36.353: Robot 7 has turned its BOM on.
+1:36.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:36.517: Robot 9 has turned its BOM on.
+1:36.633: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:36.689: Robot 1 has turned its BOM on.
+1:36.801: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:36.857: Robot 2 has turned its BOM on.
+1:36.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:37.017: Robot 3 has turned its BOM on.
+1:37.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:37.185: Robot 7 has turned its BOM on.
+1:37.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:37.297: Robot 9 has turned its BOM on.
+1:37.409: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:37.461: Robot 1 has turned its BOM on.
+1:37.577: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:37.633: Robot 2 has turned its BOM on.
+1:37.745: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:37.801: Robot 3 has turned its BOM on.
+1:37.913: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:37.961: Robot 7 has turned its BOM on.
+1:38.073: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:38.129: Robot 9 has turned its BOM on.
+1:38.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:38.241: Robot 1 has turned its BOM on.
+1:38.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:38.409: Robot 2 has turned its BOM on.
+1:38.521: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:38.577: Robot 3 has turned its BOM on.
+1:38.689: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:38.745: Robot 7 has turned its BOM on.
+1:38.857: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:38.913: Robot 9 has turned its BOM on.
+1:39.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:39.073: Robot 1 has turned its BOM on.
+1:39.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:39.185: Robot 2 has turned its BOM on.
+1:39.297: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:39.353: Robot 3 has turned its BOM on.
+1:39.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:39.517: Robot 7 has turned its BOM on.
+1:39.629: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:39.685: Robot 9 has turned its BOM on.
+1:39.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:39.853: Robot 1 has turned its BOM on.
+1:39.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:40.017: Robot 2 has turned its BOM on.
+1:40.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:40.185: Robot 3 has turned its BOM on.
+1:40.241: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:40.297: Robot 7 has turned its BOM on.
+1:40.409: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:40.461: Robot 9 has turned its BOM on.
+1:40.573: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:40.629: Robot 1 has turned its BOM on.
+1:40.745: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:40.801: Robot 2 has turned its BOM on.
+1:40.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:40.961: Robot 3 has turned its BOM on.
+1:41.073: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:41.129: Robot 7 has turned its BOM on.
+1:41.241: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:41.297: Robot 9 has turned its BOM on.
+1:41.353: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:41.410: Robot 1 has turned its BOM on.
+1:41.517: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:41.573: Robot 2 has turned its BOM on.
+1:41.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:41.741: Robot 3 has turned its BOM on.
+1:41.853: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:41.909: Robot 7 has turned its BOM on.
+1:42.017: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:42.073: Robot 9 has turned its BOM on.
+1:42.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:42.241: Robot 1 has turned its BOM on.
+1:42.301: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:42.357: Robot 2 has turned its BOM on.
+1:42.461: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:42.517: Robot 3 has turned its BOM on.
+1:42.633: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:42.689: Robot 7 has turned its BOM on.
+1:42.801: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:42.857: Robot 9 has turned its BOM on.
+1:42.961: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:43.017: Robot 1 has turned its BOM on.
+1:43.129: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:43.185: Robot 2 has turned its BOM on.
+1:43.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:43.297: Robot 3 has turned its BOM on.
+1:43.409: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:43.461: Robot 7 has turned its BOM on.
+1:43.573: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:43.629: Robot 9 has turned its BOM on.
+1:43.741: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:43.797: Robot 1 has turned its BOM on.
+1:43.909: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:43.961: Robot 2 has turned its BOM on.
+1:44.073: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:44.129: Robot 3 has turned its BOM on.
+1:44.185: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:44.241: Robot 7 has turned its BOM on.
+1:44.353: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:44.409: Robot 9 has turned its BOM on.
+1:44.525: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:44.581: Robot 1 has turned its BOM on.
+1:44.697: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:44.753: Robot 2 has turned its BOM on.
+1:44.865: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:44.921: Robot 3 has turned its BOM on.
+1:45.017: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:45.073: Robot 7 has turned its BOM on.
+1:45.185: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:45.241: Robot 9 has turned its BOM on.
+1:45.297: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:45.353: Robot 1 has turned its BOM on.
+1:45.469: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:45.525: Robot 2 has turned its BOM on.
+1:45.641: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:45.697: Robot 3 has turned its BOM on.
+1:45.809: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:45.865: Robot 7 has turned its BOM on.
+1:45.961: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:46.017: Robot 9 has turned its BOM on.
+1:46.129: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:46.186: Robot 1 has turned its BOM on.
+1:46.297: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:46.353: Robot 2 has turned its BOM on.
+1:46.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:46.461: Robot 3 has turned its BOM on.
+1:46.573: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:46.629: Robot 7 has turned its BOM on.
+1:46.745: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:46.801: Robot 9 has turned its BOM on.
+1:46.913: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:46.961: Robot 1 has turned its BOM on.
+1:47.073: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:47.129: Robot 2 has turned its BOM on.
+1:47.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:47.297: Robot 3 has turned its BOM on.
+1:47.353: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:47.409: Robot 7 has turned its BOM on.
+1:47.517: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:47.573: Robot 9 has turned its BOM on.
+1:47.689: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:47.745: Robot 1 has turned its BOM on.
+1:47.857: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:47.913: Robot 2 has turned its BOM on.
+1:48.021: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:48.077: Robot 3 has turned its BOM on.
+1:48.137: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:48.193: Robot 7 has turned its BOM on.
+1:48.305: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:48.361: Robot 9 has turned its BOM on.
+1:48.461: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:48.517: Robot 1 has turned its BOM on.
+1:48.633: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:48.689: Robot 2 has turned its BOM on.
+1:48.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:48.857: Robot 3 has turned its BOM on.
+1:48.961: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:49.017: Robot 7 has turned its BOM on.
+1:49.129: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:49.185: Robot 9 has turned its BOM on.
+1:49.241: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:49.297: Robot 1 has turned its BOM on.
+1:49.409: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:49.461: Robot 2 has turned its BOM on.
+1:49.577: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:49.633: Robot 3 has turned its BOM on.
+1:49.745: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:49.801: Robot 7 has turned its BOM on.
+1:49.921: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:49.961: Robot 9 has turned its BOM on.
+1:50.073: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:50.129: Robot 1 has turned its BOM on.
+1:50.241: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:50.297: Robot 2 has turned its BOM on.
+1:50.361: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:50.417: Robot 3 has turned its BOM on.
+1:50.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:50.573: Robot 7 has turned its BOM on.
+1:50.685: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:50.741: Robot 9 has turned its BOM on.
+1:50.853: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:50.909: Robot 1 has turned its BOM on.
+1:51.017: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:51.073: Robot 2 has turned its BOM on.
+1:51.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:51.241: Robot 3 has turned its BOM on.
+1:51.297: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:51.353: Robot 7 has turned its BOM on.
+1:51.461: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:51.517: Robot 9 has turned its BOM on.
+1:51.629: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:51.685: Robot 1 has turned its BOM on.
+1:51.797: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:51.853: Robot 2 has turned its BOM on.
+1:51.961: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:52.018: Robot 3 has turned its BOM on.
+1:52.129: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:52.185: Robot 7 has turned its BOM on.
+1:52.245: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:52.302: Robot 9 has turned its BOM on.
+1:52.413: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:52.462: Robot 1 has turned its BOM on.
+1:52.573: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:52.629: Robot 2 has turned its BOM on.
+1:52.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:52.797: Robot 3 has turned its BOM on.
+1:52.909: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:52.961: Robot 7 has turned its BOM on.
+1:53.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:53.129: Robot 9 has turned its BOM on.
+1:53.185: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:53.242: Robot 1 has turned its BOM on.
+1:53.353: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:53.409: Robot 2 has turned its BOM on.
+1:53.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:53.574: Robot 3 has turned its BOM on.
+1:53.686: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:53.742: Robot 7 has turned its BOM on.
+1:53.853: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:53.909: Robot 9 has turned its BOM on.
+1:54.017: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:54.074: Robot 1 has turned its BOM on.
+1:54.133: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:54.189: Robot 2 has turned its BOM on.
+1:54.302: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:54.357: Robot 3 has turned its BOM on.
+1:54.461: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:54.517: Robot 7 has turned its BOM on.
+1:54.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:54.685: Robot 9 has turned its BOM on.
+1:54.797: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:54.854: Robot 1 has turned its BOM on.
+1:54.961: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:55.017: Robot 2 has turned its BOM on.
+1:55.138: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:55.193: Robot 3 has turned its BOM on.
+1:55.253: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:55.309: Robot 7 has turned its BOM on.
+1:55.421: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+1:55.462: Robot 9 has turned its BOM on.
+1:55.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:55.629: Robot 1 has turned its BOM on.
+1:55.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:55.798: Robot 2 has turned its BOM on.
+1:55.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:55.962: Robot 3 has turned its BOM on.
+1:56.078: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:56.134: Robot 7 has turned its BOM on.
+1:56.246: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+1:56.302: Robot 9 has turned its BOM on.
+1:56.358: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:56.414: Robot 1 has turned its BOM on.
+1:56.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:56.574: Robot 2 has turned its BOM on.
+1:56.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:56.742: Robot 3 has turned its BOM on.
+1:56.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:56.910: Robot 7 has turned its BOM on.
+1:57.022: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:57.078: Robot 9 has turned its BOM on.
+1:57.190: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+1:57.246: Robot 1 has turned its BOM on.
+1:57.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:57.358: Robot 2 has turned its BOM on.
+1:57.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:57.518: Robot 3 has turned its BOM on.
+1:57.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:57.686: Robot 7 has turned its BOM on.
+1:57.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:57.854: Robot 9 has turned its BOM on.
+1:57.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:58.018: Robot 1 has turned its BOM on.
+1:58.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:58.186: Robot 2 has turned its BOM on.
+1:58.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:58.302: Robot 3 has turned its BOM on.
+1:58.414: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:58.462: Robot 7 has turned its BOM on.
+1:58.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:58.742: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:58.798: Robot 1 has turned its BOM on.
+1:58.910: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+1:58.962: Robot 2 has turned its BOM on.
+1:59.074: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:59.130: Robot 3 has turned its BOM on.
+1:59.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+1:59.246: Robot 7 has turned its BOM on.
+1:59.358: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+1:59.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+1:59.574: Robot 1 has turned its BOM on.
+1:59.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+1:59.746: Robot 2 has turned its BOM on.
+1:59.862: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+1:59.918: Robot 3 has turned its BOM on.
+2:00.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:00.074: Robot 7 has turned its BOM on.
+2:00.190: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:00.246: Robot 9 has turned its BOM on.
+2:00.302: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:00.358: Robot 1 has turned its BOM on.
+2:00.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:00.518: Robot 2 has turned its BOM on.
+2:00.634: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:00.690: Robot 3 has turned its BOM on.
+2:00.806: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:00.862: Robot 7 has turned its BOM on.
+2:00.966: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:01.022: Robot 9 has turned its BOM on.
+2:01.134: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:01.190: Robot 1 has turned its BOM on.
+2:01.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:01.358: Robot 2 has turned its BOM on.
+2:01.414: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:01.462: Robot 3 has turned its BOM on.
+2:01.574: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:01.630: Robot 7 has turned its BOM on.
+2:01.742: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:01.798: Robot 9 has turned its BOM on.
+2:01.910: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:01.962: Robot 1 has turned its BOM on.
+2:02.078: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:02.134: Robot 2 has turned its BOM on.
+2:02.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:02.302: Robot 3 has turned its BOM on.
+2:02.362: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:02.418: Robot 7 has turned its BOM on.
+2:02.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:02.574: Robot 9 has turned its BOM on.
+2:02.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:02.742: Robot 1 has turned its BOM on.
+2:02.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+2:02.910: Robot 2 has turned its BOM on.
+2:03.022: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:03.078: Robot 3 has turned its BOM on.
+2:03.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:03.246: Robot 7 has turned its BOM on.
+2:03.302: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:03.358: Robot 9 has turned its BOM on.
+2:03.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:03.518: Robot 1 has turned its BOM on.
+2:03.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:03.686: Robot 2 has turned its BOM on.
+2:03.802: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:03.858: Robot 3 has turned its BOM on.
+2:03.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:04.018: Robot 7 has turned its BOM on.
+2:04.130: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:04.186: Robot 9 has turned its BOM on.
+2:04.302: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:04.358: Robot 1 has turned its BOM on.
+2:04.414: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:04.462: Robot 2 has turned its BOM on.
+2:04.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:04.630: Robot 3 has turned its BOM on.
+2:04.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:04.798: Robot 7 has turned its BOM on.
+2:04.910: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:04.962: Robot 9 has turned its BOM on.
+2:05.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:05.130: Robot 1 has turned its BOM on.
+2:05.246: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+2:05.302: Robot 2 has turned its BOM on.
+2:05.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:05.414: Robot 3 has turned its BOM on.
+2:05.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:05.574: Robot 7 has turned its BOM on.
+2:05.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+2:05.742: Robot 9 has turned its BOM on.
+2:05.854: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:05.910: Robot 1 has turned its BOM on.
+2:06.022: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+2:06.078: Robot 2 has turned its BOM on.
+2:06.190: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:06.246: Robot 3 has turned its BOM on.
+2:06.358: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:06.414: Robot 7 has turned its BOM on.
+2:06.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+2:06.574: Robot 9 has turned its BOM on.
+2:06.630: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:06.686: Robot 1 has turned its BOM on.
+2:06.798: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:06.854: Robot 2 has turned its BOM on.
+2:06.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:07.022: Robot 3 has turned its BOM on.
+2:07.134: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:07.190: Robot 7 has turned its BOM on.
+2:07.302: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:07.358: Robot 9 has turned its BOM on.
+2:07.414: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:07.462: Robot 1 has turned its BOM on.
+2:07.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:07.630: Robot 2 has turned its BOM on.
+2:07.750: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:07.806: Robot 3 has turned its BOM on.
+2:07.922: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:07.962: Robot 7 has turned its BOM on.
+2:08.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:08.130: Robot 9 has turned its BOM on.
+2:08.242: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:08.298: Robot 1 has turned its BOM on.
+2:08.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:08.410: Robot 2 has turned its BOM on.
+2:08.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:08.574: Robot 3 has turned its BOM on.
+2:08.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:08.746: Robot 7 has turned its BOM on.
+2:08.858: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:08.914: Robot 9 has turned its BOM on.
+2:09.022: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:09.078: Robot 1 has turned its BOM on.
+2:09.138: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:09.194: Robot 2 has turned its BOM on.
+2:09.306: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:09.362: Robot 3 has turned its BOM on.
+2:09.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:09.518: Robot 7 has turned its BOM on.
+2:09.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:09.690: Robot 9 has turned its BOM on.
+2:09.802: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:09.858: Robot 1 has turned its BOM on.
+2:09.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:10.018: Robot 2 has turned its BOM on.
+2:10.130: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:10.186: Robot 3 has turned its BOM on.
+2:10.242: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:10.298: Robot 7 has turned its BOM on.
+2:10.410: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:10.578: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:10.634: Robot 1 has turned its BOM on.
+2:10.746: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:10.802: Robot 2 has turned its BOM on.
+2:10.914: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:10.962: Robot 3 has turned its BOM on.
+2:11.074: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:11.130: Robot 7 has turned its BOM on.
+2:11.242: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:11.298: Robot 9 has turned its BOM on.
+2:11.410: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:11.462: Robot 1 has turned its BOM on.
+2:11.582: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:11.638: Robot 2 has turned its BOM on.
+2:11.698: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:11.754: Robot 3 has turned its BOM on.
+2:11.866: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:11.922: Robot 7 has turned its BOM on.
+2:12.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:12.074: Robot 9 has turned its BOM on.
+2:12.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:12.242: Robot 1 has turned its BOM on.
+2:12.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:12.410: Robot 2 has turned its BOM on.
+2:12.466: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:12.522: Robot 3 has turned its BOM on.
+2:12.634: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:12.690: Robot 7 has turned its BOM on.
+2:12.802: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:12.858: Robot 9 has turned its BOM on.
+2:12.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:13.018: Robot 1 has turned its BOM on.
+2:13.134: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:13.190: Robot 2 has turned its BOM on.
+2:13.250: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:13.306: Robot 3 has turned its BOM on.
+2:13.418: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:13.462: Robot 7 has turned its BOM on.
+2:13.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:13.630: Robot 9 has turned its BOM on.
+2:13.746: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:13.802: Robot 1 has turned its BOM on.
+2:13.914: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:13.962: Robot 2 has turned its BOM on.
+2:14.078: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:14.134: Robot 3 has turned its BOM on.
+2:14.194: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:14.250: Robot 7 has turned its BOM on.
+2:14.362: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:14.418: Robot 9 has turned its BOM on.
+2:14.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:14.574: Robot 1 has turned its BOM on.
+2:14.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:14.746: Robot 2 has turned its BOM on.
+2:14.858: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:14.914: Robot 3 has turned its BOM on.
+2:15.022: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:15.078: Robot 7 has turned its BOM on.
+2:15.194: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:15.250: Robot 9 has turned its BOM on.
+2:15.306: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:15.362: Robot 1 has turned its BOM on.
+2:15.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:15.518: Robot 2 has turned its BOM on.
+2:15.634: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:15.690: Robot 3 has turned its BOM on.
+2:15.802: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:15.858: Robot 7 has turned its BOM on.
+2:15.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:16.018: Robot 9 has turned its BOM on.
+2:16.130: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:16.186: Robot 1 has turned its BOM on.
+2:16.298: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:16.354: Robot 2 has turned its BOM on.
+2:16.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:16.518: Robot 3 has turned its BOM on.
+2:16.578: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:16.634: Robot 7 has turned its BOM on.
+2:16.746: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:16.802: Robot 9 has turned its BOM on.
+2:16.914: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:16.962: Robot 1 has turned its BOM on.
+2:17.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:17.130: Robot 2 has turned its BOM on.
+2:17.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:17.298: Robot 3 has turned its BOM on.
+2:17.410: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:17.462: Robot 7 has turned its BOM on.
+2:17.522: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:17.578: Robot 9 has turned its BOM on.
+2:17.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:17.746: Robot 1 has turned its BOM on.
+2:17.858: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:17.914: Robot 2 has turned its BOM on.
+2:18.018: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:18.074: Robot 3 has turned its BOM on.
+2:18.186: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:18.242: Robot 7 has turned its BOM on.
+2:18.354: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:18.410: Robot 9 has turned its BOM on.
+2:18.466: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:18.522: Robot 1 has turned its BOM on.
+2:18.634: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:18.690: Robot 2 has turned its BOM on.
+2:18.802: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:18.858: Robot 3 has turned its BOM on.
+2:18.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:19.018: Robot 7 has turned its BOM on.
+2:19.130: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:19.186: Robot 9 has turned its BOM on.
+2:19.298: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:19.354: Robot 1 has turned its BOM on.
+2:19.410: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:19.462: Robot 2 has turned its BOM on.
+2:19.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:19.630: Robot 3 has turned its BOM on.
+2:19.746: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:19.802: Robot 7 has turned its BOM on.
+2:19.914: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:19.962: Robot 9 has turned its BOM on.
+2:20.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:20.130: Robot 1 has turned its BOM on.
+2:20.242: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:20.298: Robot 2 has turned its BOM on.
+2:20.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:20.410: Robot 3 has turned its BOM on.
+2:20.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:20.574: Robot 7 has turned its BOM on.
+2:20.690: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:20.746: Robot 9 has turned its BOM on.
+2:20.858: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:20.914: Robot 1 has turned its BOM on.
+2:21.018: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:21.074: Robot 2 has turned its BOM on.
+2:21.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:21.242: Robot 3 has turned its BOM on.
+2:21.354: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:21.410: Robot 7 has turned its BOM on.
+2:21.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:21.574: Robot 9 has turned its BOM on.
+2:21.634: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:21.690: Robot 1 has turned its BOM on.
+2:21.802: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:21.858: Robot 2 has turned its BOM on.
+2:21.962: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:22.018: Robot 3 has turned its BOM on.
+2:22.130: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:22.186: Robot 7 has turned its BOM on.
+2:22.298: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:22.354: Robot 9 has turned its BOM on.
+2:22.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:22.518: Robot 1 has turned its BOM on.
+2:22.578: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:22.634: Robot 2 has turned its BOM on.
+2:22.746: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:22.802: Robot 3 has turned its BOM on.
+2:22.914: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:22.962: Robot 7 has turned its BOM on.
+2:23.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:23.130: Robot 9 has turned its BOM on.
+2:23.242: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:23.298: Robot 1 has turned its BOM on.
+2:23.410: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:23.462: Robot 2 has turned its BOM on.
+2:23.522: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:23.578: Robot 3 has turned its BOM on.
+2:23.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:23.746: Robot 7 has turned its BOM on.
+2:23.858: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:23.914: Robot 9 has turned its BOM on.
+2:24.018: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:24.074: Robot 1 has turned its BOM on.
+2:24.186: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:24.242: Robot 2 has turned its BOM on.
+2:24.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:24.410: Robot 3 has turned its BOM on.
+2:24.466: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:24.522: Robot 7 has turned its BOM on.
+2:24.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:24.690: Robot 9 has turned its BOM on.
+2:24.802: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:24.858: Robot 1 has turned its BOM on.
+2:24.966: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:25.022: Robot 2 has turned its BOM on.
+2:25.134: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:25.190: Robot 3 has turned its BOM on.
+2:25.306: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:25.362: Robot 7 has turned its BOM on.
+2:25.426: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:25.462: Robot 9 has turned its BOM on.
+2:25.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:25.630: Robot 1 has turned its BOM on.
+2:25.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:25.798: Robot 2 has turned its BOM on.
+2:25.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:25.962: Robot 3 has turned its BOM on.
+2:26.078: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:26.134: Robot 7 has turned its BOM on.
+2:26.246: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:26.302: Robot 9 has turned its BOM on.
+2:26.414: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:26.462: Robot 1 has turned its BOM on.
+2:26.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:26.630: Robot 2 has turned its BOM on.
+2:26.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:26.742: Robot 3 has turned its BOM on.
+2:26.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:26.910: Robot 7 has turned its BOM on.
+2:27.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:27.074: Robot 9 has turned its BOM on.
+2:27.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:27.242: Robot 1 has turned its BOM on.
+2:27.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:27.410: Robot 2 has turned its BOM on.
+2:27.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:27.574: Robot 3 has turned its BOM on.
+2:27.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:27.686: Robot 7 has turned its BOM on.
+2:27.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:27.854: Robot 9 has turned its BOM on.
+2:27.966: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:28.022: Robot 1 has turned its BOM on.
+2:28.138: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:28.194: Robot 2 has turned its BOM on.
+2:28.254: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:28.310: Robot 3 has turned its BOM on.
+2:28.422: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:28.462: Robot 7 has turned its BOM on.
+2:28.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:28.634: Robot 9 has turned its BOM on.
+2:28.750: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:28.806: Robot 1 has turned its BOM on.
+2:28.918: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+2:28.962: Robot 2 has turned its BOM on.
+2:29.078: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:29.134: Robot 3 has turned its BOM on.
+2:29.246: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:29.302: Robot 7 has turned its BOM on.
+2:29.358: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:29.414: Robot 9 has turned its BOM on.
+2:29.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:29.574: Robot 1 has turned its BOM on.
+2:29.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:29.742: Robot 2 has turned its BOM on.
+2:29.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:29.910: Robot 3 has turned its BOM on.
+2:30.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:30.074: Robot 7 has turned its BOM on.
+2:30.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:30.242: Robot 9 has turned its BOM on.
+2:30.358: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:30.414: Robot 1 has turned its BOM on.
+2:30.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:30.518: Robot 2 has turned its BOM on.
+2:30.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:30.686: Robot 3 has turned its BOM on.
+2:30.798: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:30.854: Robot 7 has turned its BOM on.
+2:30.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:31.018: Robot 9 has turned its BOM on.
+2:31.134: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:31.190: Robot 1 has turned its BOM on.
+2:31.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:31.358: Robot 2 has turned its BOM on.
+2:31.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:31.518: Robot 3 has turned its BOM on.
+2:31.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:31.686: Robot 7 has turned its BOM on.
+2:31.742: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:31.798: Robot 9 has turned its BOM on.
+2:31.910: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:31.962: Robot 1 has turned its BOM on.
+2:32.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:32.130: Robot 2 has turned its BOM on.
+2:32.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:32.298: Robot 3 has turned its BOM on.
+2:32.410: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:32.462: Robot 7 has turned its BOM on.
+2:32.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:32.630: Robot 9 has turned its BOM on.
+2:32.690: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:32.746: Robot 1 has turned its BOM on.
+2:32.862: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:32.918: Robot 2 has turned its BOM on.
+2:33.022: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:33.078: Robot 3 has turned its BOM on.
+2:33.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:33.246: Robot 7 has turned its BOM on.
+2:33.358: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:33.414: Robot 9 has turned its BOM on.
+2:33.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:33.574: Robot 1 has turned its BOM on.
+2:33.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:33.686: Robot 2 has turned its BOM on.
+2:33.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:33.854: Robot 3 has turned its BOM on.
+2:33.966: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:34.022: Robot 7 has turned its BOM on.
+2:34.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:34.190: Robot 9 has turned its BOM on.
+2:34.302: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:34.358: Robot 1 has turned its BOM on.
+2:34.414: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:34.462: Robot 2 has turned its BOM on.
+2:34.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:34.630: Robot 3 has turned its BOM on.
+2:34.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:34.798: Robot 7 has turned its BOM on.
+2:34.910: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:34.962: Robot 9 has turned its BOM on.
+2:35.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:35.130: Robot 1 has turned its BOM on.
+2:35.242: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:35.298: Robot 2 has turned its BOM on.
+2:35.414: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:35.462: Robot 3 has turned its BOM on.
+2:35.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:35.574: Robot 7 has turned its BOM on.
+2:35.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:35.742: Robot 9 has turned its BOM on.
+2:35.854: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:35.910: Robot 1 has turned its BOM on.
+2:36.018: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+2:36.074: Robot 2 has turned its BOM on.
+2:36.190: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:36.246: Robot 3 has turned its BOM on.
+2:36.358: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:36.414: Robot 7 has turned its BOM on.
+2:36.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:36.574: Robot 9 has turned its BOM on.
+2:36.686: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:36.742: Robot 1 has turned its BOM on.
+2:36.798: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:36.854: Robot 2 has turned its BOM on.
+2:36.962: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:37.018: Robot 3 has turned its BOM on.
+2:37.134: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:37.190: Robot 7 has turned its BOM on.
+2:37.302: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:37.358: Robot 9 has turned its BOM on.
+2:37.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:37.518: Robot 1 has turned its BOM on.
+2:37.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:37.686: Robot 2 has turned its BOM on.
+2:37.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:37.798: Robot 3 has turned its BOM on.
+2:37.910: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:37.962: Robot 7 has turned its BOM on.
+2:38.078: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:38.134: Robot 9 has turned its BOM on.
+2:38.246: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:38.302: Robot 1 has turned its BOM on.
+2:38.414: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:38.462: Robot 2 has turned its BOM on.
+2:38.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:38.630: Robot 3 has turned its BOM on.
+2:38.750: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:38.806: Robot 7 has turned its BOM on.
+2:38.862: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:38.918: Robot 9 has turned its BOM on.
+2:39.022: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:39.078: Robot 1 has turned its BOM on.
+2:39.190: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:39.246: Robot 2 has turned its BOM on.
+2:39.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:39.414: Robot 3 has turned its BOM on.
+2:39.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:39.574: Robot 7 has turned its BOM on.
+2:39.631: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:39.686: Robot 9 has turned its BOM on.
+2:39.798: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:39.854: Robot 1 has turned its BOM on.
+2:39.970: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:40.026: Robot 2 has turned its BOM on.
+2:40.138: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:40.194: Robot 3 has turned its BOM on.
+2:40.310: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:40.366: Robot 7 has turned its BOM on.
+2:40.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:40.518: Robot 9 has turned its BOM on.
+2:40.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:40.630: Robot 1 has turned its BOM on.
+2:40.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:40.798: Robot 2 has turned its BOM on.
+2:40.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:40.962: Robot 3 has turned its BOM on.
+2:41.074: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:41.130: Robot 7 has turned its BOM on.
+2:41.246: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:41.302: Robot 9 has turned its BOM on.
+2:41.414: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:41.462: Robot 1 has turned its BOM on.
+2:41.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:41.630: Robot 2 has turned its BOM on.
+2:41.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:41.798: Robot 3 has turned its BOM on.
+2:41.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:41.910: Robot 7 has turned its BOM on.
+2:42.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:42.074: Robot 9 has turned its BOM on.
+2:42.190: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:42.246: Robot 1 has turned its BOM on.
+2:42.358: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:42.414: Robot 2 has turned its BOM on.
+2:42.522: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:42.578: Robot 3 has turned its BOM on.
+2:42.638: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:42.694: Robot 7 has turned its BOM on.
+2:42.814: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:42.870: Robot 9 has turned its BOM on.
+2:42.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:43.018: Robot 1 has turned its BOM on.
+2:43.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:43.186: Robot 2 has turned its BOM on.
+2:43.298: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:43.354: Robot 3 has turned its BOM on.
+2:43.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:43.518: Robot 7 has turned its BOM on.
+2:43.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:43.690: Robot 9 has turned its BOM on.
+2:43.746: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:43.802: Robot 1 has turned its BOM on.
+2:43.914: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:43.962: Robot 2 has turned its BOM on.
+2:44.074: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:44.130: Robot 3 has turned its BOM on.
+2:44.242: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:44.298: Robot 7 has turned its BOM on.
+2:44.410: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+2:44.462: Robot 9 has turned its BOM on.
+2:44.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:44.578: Robot 1 has turned its BOM on.
+2:44.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:44.746: Robot 2 has turned its BOM on.
+2:44.858: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:44.914: Robot 3 has turned its BOM on.
+2:45.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:45.074: Robot 7 has turned its BOM on.
+2:45.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:45.242: Robot 9 has turned its BOM on.
+2:45.354: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:45.410: Robot 1 has turned its BOM on.
+2:45.522: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:45.578: Robot 2 has turned its BOM on.
+2:45.634: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:45.690: Robot 3 has turned its BOM on.
+2:45.802: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:45.858: Robot 7 has turned its BOM on.
+2:45.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:46.130: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:46.187: Robot 1 has turned its BOM on.
+2:46.298: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:46.354: Robot 2 has turned its BOM on.
+2:46.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:46.518: Robot 3 has turned its BOM on.
+2:46.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:46.686: Robot 7 has turned its BOM on.
+2:46.750: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:46.806: Robot 9 has turned its BOM on.
+2:46.922: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:46.962: Robot 1 has turned its BOM on.
+2:47.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:47.130: Robot 2 has turned its BOM on.
+2:47.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:47.298: Robot 3 has turned its BOM on.
+2:47.410: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:47.462: Robot 7 has turned its BOM on.
+2:47.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:47.742: Robot 1 has turned its BOM on.
+2:47.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:47.910: Robot 2 has turned its BOM on.
+2:48.018: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:48.074: Robot 3 has turned its BOM on.
+2:48.186: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:48.242: Robot 7 has turned its BOM on.
+2:48.354: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+2:48.410: Robot 9 has turned its BOM on.
+2:48.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:48.574: Robot 1 has turned its BOM on.
+2:48.634: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:48.690: Robot 2 has turned its BOM on.
+2:48.802: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:48.858: Robot 3 has turned its BOM on.
+2:48.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:49.018: Robot 7 has turned its BOM on.
+2:49.130: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:49.186: Robot 9 has turned its BOM on.
+2:49.298: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:49.354: Robot 1 has turned its BOM on.
+2:49.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:49.518: Robot 2 has turned its BOM on.
+2:49.578: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:49.634: Robot 3 has turned its BOM on.
+2:49.746: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:49.802: Robot 7 has turned its BOM on.
+2:49.914: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:50.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:50.130: Robot 1 has turned its BOM on.
+2:50.242: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:50.298: Robot 2 has turned its BOM on.
+2:50.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:50.462: Robot 3 has turned its BOM on.
+2:50.522: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:50.578: Robot 7 has turned its BOM on.
+2:50.690: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:50.858: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:50.914: Robot 1 has turned its BOM on.
+2:51.018: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:51.074: Robot 2 has turned its BOM on.
+2:51.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:51.242: Robot 3 has turned its BOM on.
+2:51.354: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:51.410: Robot 7 has turned its BOM on.
+2:51.526: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:51.642: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:51.698: Robot 1 has turned its BOM on.
+2:51.810: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:51.866: Robot 2 has turned its BOM on.
+2:51.962: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:52.018: Robot 3 has turned its BOM on.
+2:52.130: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:52.186: Robot 7 has turned its BOM on.
+2:52.298: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:52.354: Robot 9 has turned its BOM on.
+2:52.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:52.518: Robot 1 has turned its BOM on.
+2:52.630: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:52.686: Robot 2 has turned its BOM on.
+2:52.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:52.798: Robot 3 has turned its BOM on.
+2:52.910: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:52.962: Robot 7 has turned its BOM on.
+2:53.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:53.130: Robot 9 has turned its BOM on.
+2:53.243: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:53.298: Robot 1 has turned its BOM on.
+2:53.410: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:53.462: Robot 2 has turned its BOM on.
+2:53.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:53.630: Robot 3 has turned its BOM on.
+2:53.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:53.747: Robot 7 has turned its BOM on.
+2:53.858: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:53.914: Robot 9 has turned its BOM on.
+2:54.018: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:54.074: Robot 1 has turned its BOM on.
+2:54.186: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:54.242: Robot 2 has turned its BOM on.
+2:54.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:54.410: Robot 3 has turned its BOM on.
+2:54.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:54.574: Robot 7 has turned its BOM on.
+2:54.634: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:54.802: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:54.858: Robot 1 has turned its BOM on.
+2:54.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:55.018: Robot 2 has turned its BOM on.
+2:55.130: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:55.186: Robot 3 has turned its BOM on.
+2:55.298: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:55.354: Robot 7 has turned its BOM on.
+2:55.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:55.518: Robot 9 has turned its BOM on.
+2:55.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:55.630: Robot 1 has turned its BOM on.
+2:55.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:55.798: Robot 2 has turned its BOM on.
+2:55.914: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:55.962: Robot 3 has turned its BOM on.
+2:56.074: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:56.130: Robot 7 has turned its BOM on.
+2:56.242: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:56.298: Robot 9 has turned its BOM on.
+2:56.410: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:56.462: Robot 1 has turned its BOM on.
+2:56.578: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:56.634: Robot 2 has turned its BOM on.
+2:56.746: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:56.802: Robot 3 has turned its BOM on.
+2:56.858: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:56.914: Robot 7 has turned its BOM on.
+2:57.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:57.074: Robot 9 has turned its BOM on.
+2:57.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:57.242: Robot 1 has turned its BOM on.
+2:57.354: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:57.410: Robot 2 has turned its BOM on.
+2:57.522: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:57.578: Robot 3 has turned its BOM on.
+2:57.690: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:57.746: Robot 7 has turned its BOM on.
+2:57.802: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:57.858: Robot 9 has turned its BOM on.
+2:57.962: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:58.018: Robot 1 has turned its BOM on.
+2:58.130: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:58.186: Robot 2 has turned its BOM on.
+2:58.298: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:58.354: Robot 3 has turned its BOM on.
+2:58.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:58.518: Robot 7 has turned its BOM on.
+2:58.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:58.686: Robot 9 has turned its BOM on.
+2:58.746: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+2:58.802: Robot 1 has turned its BOM on.
+2:58.914: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:58.962: Robot 2 has turned its BOM on.
+2:59.074: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:59.130: Robot 3 has turned its BOM on.
+2:59.242: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+2:59.298: Robot 7 has turned its BOM on.
+2:59.410: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+2:59.462: Robot 9 has turned its BOM on.
+2:59.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+2:59.630: Robot 1 has turned its BOM on.
+2:59.690: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+2:59.746: Robot 2 has turned its BOM on.
+2:59.858: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+2:59.914: Robot 3 has turned its BOM on.
+3:00.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:00.074: Robot 7 has turned its BOM on.
+3:00.186: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:00.242: Robot 9 has turned its BOM on.
+3:00.354: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:00.410: Robot 1 has turned its BOM on.
+3:00.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:00.574: Robot 2 has turned its BOM on.
+3:00.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:00.686: Robot 3 has turned its BOM on.
+3:00.798: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:00.854: Robot 7 has turned its BOM on.
+3:00.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:01.130: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:01.186: Robot 1 has turned its BOM on.
+3:01.302: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:01.358: Robot 2 has turned its BOM on.
+3:01.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:01.518: Robot 3 has turned its BOM on.
+3:01.630: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:01.686: Robot 7 has turned its BOM on.
+3:01.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:01.854: Robot 9 has turned its BOM on.
+3:01.962: Robot 1 has turned its BOM on.
+3:02.074: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:02.130: Robot 2 has turned its BOM on.
+3:02.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:02.302: Robot 3 has turned its BOM on.
+3:02.414: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:02.462: Robot 7 has turned its BOM on.
+3:02.574: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:02.630: Robot 9 has turned its BOM on.
+3:02.742: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:02.798: Robot 1 has turned its BOM on.
+3:02.854: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:02.910: Robot 2 has turned its BOM on.
+3:03.018: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:03.074: Robot 3 has turned its BOM on.
+3:03.190: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:03.246: Robot 7 has turned its BOM on.
+3:03.358: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:03.414: Robot 9 has turned its BOM on.
+3:03.518: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:03.574: Robot 1 has turned its BOM on.
+3:03.686: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:03.742: Robot 2 has turned its BOM on.
+3:03.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:03.854: Robot 3 has turned its BOM on.
+3:03.962: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:04.018: Robot 7 has turned its BOM on.
+3:04.134: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:04.190: Robot 9 has turned its BOM on.
+3:04.302: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:04.358: Robot 1 has turned its BOM on.
+3:04.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:04.518: Robot 2 has turned its BOM on.
+3:04.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:04.686: Robot 3 has turned its BOM on.
+3:04.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:04.798: Robot 7 has turned its BOM on.
+3:04.910: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:04.962: Robot 9 has turned its BOM on.
+3:05.078: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:05.134: Robot 1 has turned its BOM on.
+3:05.246: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:05.302: Robot 2 has turned its BOM on.
+3:05.414: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:05.462: Robot 3 has turned its BOM on.
+3:05.574: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:05.630: Robot 7 has turned its BOM on.
+3:05.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:05.742: Robot 9 has turned its BOM on.
+3:05.854: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:05.910: Robot 1 has turned its BOM on.
+3:06.022: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:06.078: Robot 2 has turned its BOM on.
+3:06.190: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:06.246: Robot 3 has turned its BOM on.
+3:06.358: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:06.414: Robot 7 has turned its BOM on.
+3:06.518: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:06.574: Robot 9 has turned its BOM on.
+3:06.686: Robot 1 has turned its BOM on.
+3:06.798: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:06.855: Robot 2 has turned its BOM on.
+3:06.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:07.022: Robot 3 has turned its BOM on.
+3:07.134: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:07.190: Robot 7 has turned its BOM on.
+3:07.302: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:07.462: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:07.518: Robot 1 has turned its BOM on.
+3:07.631: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:07.686: Robot 2 has turned its BOM on.
+3:07.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:07.854: Robot 3 has turned its BOM on.
+3:07.910: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:07.962: Robot 7 has turned its BOM on.
+3:08.074: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:08.130: Robot 9 has turned its BOM on.
+3:08.242: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:08.298: Robot 1 has turned its BOM on.
+3:08.410: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:08.462: Robot 2 has turned its BOM on.
+3:08.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:08.630: Robot 3 has turned its BOM on.
+3:08.742: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:08.798: Robot 7 has turned its BOM on.
+3:08.854: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:08.910: Robot 9 has turned its BOM on.
+3:09.018: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:09.074: Robot 1 has turned its BOM on.
+3:09.190: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:09.246: Robot 2 has turned its BOM on.
+3:09.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:09.414: Robot 3 has turned its BOM on.
+3:09.518: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:09.574: Robot 7 has turned its BOM on.
+3:09.686: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:09.742: Robot 9 has turned its BOM on.
+3:09.798: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:09.854: Robot 1 has turned its BOM on.
+3:09.962: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:10.018: Robot 2 has turned its BOM on.
+3:10.134: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:10.190: Robot 3 has turned its BOM on.
+3:10.302: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:10.358: Robot 7 has turned its BOM on.
+3:10.462: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:10.518: Robot 9 has turned its BOM on.
+3:10.630: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:10.686: Robot 1 has turned its BOM on.
+3:10.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:10.798: Robot 2 has turned its BOM on.
+3:10.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:10.962: Robot 3 has turned its BOM on.
+3:11.078: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:11.134: Robot 7 has turned its BOM on.
+3:11.246: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:11.302: Robot 9 has turned its BOM on.
+3:11.414: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:11.462: Robot 1 has turned its BOM on.
+3:11.574: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:11.630: Robot 2 has turned its BOM on.
+3:11.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:11.798: Robot 3 has turned its BOM on.
+3:11.854: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:11.910: Robot 7 has turned its BOM on.
+3:12.018: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:12.074: Robot 9 has turned its BOM on.
+3:12.186: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:12.242: Robot 1 has turned its BOM on.
+3:12.358: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:12.414: Robot 2 has turned its BOM on.
+3:12.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:12.574: Robot 3 has turned its BOM on.
+3:12.686: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:12.742: Robot 7 has turned its BOM on.
+3:12.854: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:12.911: Robot 9 has turned its BOM on.
+3:12.966: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:13.022: Robot 1 has turned its BOM on.
+3:13.134: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:13.190: Robot 2 has turned its BOM on.
+3:13.302: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:13.358: Robot 3 has turned its BOM on.
+3:13.462: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:13.518: Robot 7 has turned its BOM on.
+3:13.630: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:13.686: Robot 9 has turned its BOM on.
+3:13.799: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:13.854: Robot 1 has turned its BOM on.
+3:13.910: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:13.962: Robot 2 has turned its BOM on.
+3:14.074: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:14.130: Robot 3 has turned its BOM on.
+3:14.246: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:14.302: Robot 7 has turned its BOM on.
+3:14.414: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:14.462: Robot 9 has turned its BOM on.
+3:14.574: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:14.630: Robot 1 has turned its BOM on.
+3:14.742: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:14.798: Robot 2 has turned its BOM on.
+3:14.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:14.910: Robot 3 has turned its BOM on.
+3:15.018: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:15.074: Robot 7 has turned its BOM on.
+3:15.194: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:15.250: Robot 9 has turned its BOM on.
+3:15.362: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:15.418: Robot 1 has turned its BOM on.
+3:15.518: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:15.574: Robot 2 has turned its BOM on.
+3:15.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:15.742: Robot 3 has turned its BOM on.
+3:15.798: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:15.854: Robot 7 has turned its BOM on.
+3:15.962: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:16.018: Robot 9 has turned its BOM on.
+3:16.138: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:16.194: Robot 1 has turned its BOM on.
+3:16.310: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:16.366: Robot 2 has turned its BOM on.
+3:16.462: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:16.518: Robot 3 has turned its BOM on.
+3:16.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:16.686: Robot 7 has turned its BOM on.
+3:16.798: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:16.854: Robot 9 has turned its BOM on.
+3:16.910: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:16.962: Robot 1 has turned its BOM on.
+3:17.078: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:17.134: Robot 2 has turned its BOM on.
+3:17.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:17.302: Robot 3 has turned its BOM on.
+3:17.414: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:17.463: Robot 7 has turned its BOM on.
+3:17.578: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 10)(3 9)(9 2)
+3:17.634: Robot 9 has turned its BOM on.
+3:17.746: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:17.802: Robot 1 has turned its BOM on.
+3:17.862: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:17.918: Robot 2 has turned its BOM on.
+3:18.019: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:18.074: Robot 3 has turned its BOM on.
+3:18.186: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:18.242: Robot 7 has turned its BOM on.
+3:18.354: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:18.411: Robot 9 has turned its BOM on.
+3:18.522: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:18.578: Robot 1 has turned its BOM on.
+3:18.691: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:18.746: Robot 2 has turned its BOM on.
+3:18.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:18.858: Robot 3 has turned its BOM on.
+3:18.963: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:19.018: Robot 7 has turned its BOM on.
+3:19.130: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:19.186: Robot 9 has turned its BOM on.
+3:19.299: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:19.354: Robot 1 has turned its BOM on.
+3:19.462: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:19.518: Robot 2 has turned its BOM on.
+3:19.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:19.686: Robot 3 has turned its BOM on.
+3:19.747: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:19.802: Robot 7 has turned its BOM on.
+3:19.914: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:19.963: Robot 9 has turned its BOM on.
+3:20.074: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:20.130: Robot 1 has turned its BOM on.
+3:20.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:20.299: Robot 2 has turned its BOM on.
+3:20.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:20.463: Robot 3 has turned its BOM on.
+3:20.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:20.631: Robot 7 has turned its BOM on.
+3:20.691: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:20.747: Robot 9 has turned its BOM on.
+3:20.859: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:20.915: Robot 1 has turned its BOM on.
+3:21.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:21.075: Robot 2 has turned its BOM on.
+3:21.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:21.243: Robot 3 has turned its BOM on.
+3:21.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:21.411: Robot 7 has turned its BOM on.
+3:21.519: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+3:21.575: Robot 9 has turned its BOM on.
+3:21.691: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:21.747: Robot 1 has turned its BOM on.
+3:21.803: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:21.859: Robot 2 has turned its BOM on.
+3:21.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:22.019: Robot 3 has turned its BOM on.
+3:22.131: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:22.187: Robot 7 has turned its BOM on.
+3:22.299: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+3:22.355: Robot 9 has turned its BOM on.
+3:22.467: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:22.523: Robot 1 has turned its BOM on.
+3:22.635: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:22.691: Robot 2 has turned its BOM on.
+3:22.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:22.859: Robot 3 has turned its BOM on.
+3:22.915: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:22.963: Robot 7 has turned its BOM on.
+3:23.079: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:23.135: Robot 9 has turned its BOM on.
+3:23.251: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:23.307: Robot 1 has turned its BOM on.
+3:23.419: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:23.463: Robot 2 has turned its BOM on.
+3:23.579: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:23.635: Robot 3 has turned its BOM on.
+3:23.747: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:23.803: Robot 7 has turned its BOM on.
+3:23.859: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:23.915: Robot 9 has turned its BOM on.
+3:24.019: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:24.075: Robot 1 has turned its BOM on.
+3:24.187: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:24.243: Robot 2 has turned its BOM on.
+3:24.355: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:24.411: Robot 3 has turned its BOM on.
+3:24.523: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:24.579: Robot 7 has turned its BOM on.
+3:24.691: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:24.747: Robot 9 has turned its BOM on.
+3:24.803: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:24.859: Robot 1 has turned its BOM on.
+3:24.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:25.019: Robot 2 has turned its BOM on.
+3:25.131: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:25.187: Robot 3 has turned its BOM on.
+3:25.299: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:25.355: Robot 7 has turned its BOM on.
+3:25.463: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:25.519: Robot 9 has turned its BOM on.
+3:25.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:25.687: Robot 1 has turned its BOM on.
+3:25.747: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:25.803: Robot 2 has turned its BOM on.
+3:25.915: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:25.963: Robot 3 has turned its BOM on.
+3:26.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:26.131: Robot 7 has turned its BOM on.
+3:26.243: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:26.299: Robot 9 has turned its BOM on.
+3:26.411: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:26.463: Robot 1 has turned its BOM on.
+3:26.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:26.631: Robot 2 has turned its BOM on.
+3:26.747: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:26.803: Robot 3 has turned its BOM on.
+3:26.859: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:26.915: Robot 7 has turned its BOM on.
+3:27.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:27.075: Robot 9 has turned its BOM on.
+3:27.187: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:27.243: Robot 1 has turned its BOM on.
+3:27.355: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:27.411: Robot 2 has turned its BOM on.
+3:27.523: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:27.579: Robot 3 has turned its BOM on.
+3:27.695: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:27.751: Robot 7 has turned its BOM on.
+3:27.811: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:27.867: Robot 9 has turned its BOM on.
+3:28.019: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:28.075: Robot 1 has turned its BOM on.
+3:28.131: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:28.187: Robot 2 has turned its BOM on.
+3:28.299: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:28.355: Robot 3 has turned its BOM on.
+3:28.467: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:28.523: Robot 7 has turned its BOM on.
+3:28.635: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:28.691: Robot 9 has turned its BOM on.
+3:28.803: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:28.859: Robot 1 has turned its BOM on.
+3:28.915: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:28.963: Robot 2 has turned its BOM on.
+3:29.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:29.131: Robot 3 has turned its BOM on.
+3:29.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:29.299: Robot 7 has turned its BOM on.
+3:29.411: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:29.463: Robot 9 has turned its BOM on.
+3:29.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:29.631: Robot 1 has turned its BOM on.
+3:29.743: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:29.799: Robot 2 has turned its BOM on.
+3:29.859: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:29.915: Robot 3 has turned its BOM on.
+3:30.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:30.075: Robot 7 has turned its BOM on.
+3:30.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:30.243: Robot 9 has turned its BOM on.
+3:30.355: Robot 1 has turned its BOM on.
+3:30.523: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:30.579: Robot 2 has turned its BOM on.
+3:30.691: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:30.747: Robot 3 has turned its BOM on.
+3:30.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:30.859: Robot 7 has turned its BOM on.
+3:30.963: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:31.019: Robot 9 has turned its BOM on.
+3:31.131: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:31.187: Robot 1 has turned its BOM on.
+3:31.299: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:31.355: Robot 2 has turned its BOM on.
+3:31.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:31.519: Robot 3 has turned its BOM on.
+3:31.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:31.687: Robot 7 has turned its BOM on.
+3:31.803: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:31.859: Robot 9 has turned its BOM on.
+3:31.915: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:31.963: Robot 1 has turned its BOM on.
+3:32.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:32.131: Robot 2 has turned its BOM on.
+3:32.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:32.299: Robot 3 has turned its BOM on.
+3:32.411: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:32.463: Robot 7 has turned its BOM on.
+3:32.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:32.631: Robot 9 has turned its BOM on.
+3:32.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:32.799: Robot 1 has turned its BOM on.
+3:32.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:32.963: Robot 2 has turned its BOM on.
+3:33.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:33.131: Robot 3 has turned its BOM on.
+3:33.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:33.243: Robot 7 has turned its BOM on.
+3:33.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:33.411: Robot 9 has turned its BOM on.
+3:33.523: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:33.579: Robot 1 has turned its BOM on.
+3:33.691: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:33.747: Robot 2 has turned its BOM on.
+3:33.859: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:33.915: Robot 3 has turned its BOM on.
+3:34.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:34.075: Robot 7 has turned its BOM on.
+3:34.131: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:34.187: Robot 9 has turned its BOM on.
+3:34.299: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:34.355: Robot 1 has turned its BOM on.
+3:34.463: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:34.519: Robot 2 has turned its BOM on.
+3:34.635: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:34.691: Robot 3 has turned its BOM on.
+3:34.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:34.859: Robot 7 has turned its BOM on.
+3:34.915: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:34.963: Robot 9 has turned its BOM on.
+3:35.075: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:35.131: Robot 1 has turned its BOM on.
+3:35.251: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:35.307: Robot 2 has turned its BOM on.
+3:35.419: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:35.463: Robot 3 has turned its BOM on.
+3:35.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:35.631: Robot 7 has turned its BOM on.
+3:35.743: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:35.799: Robot 9 has turned its BOM on.
+3:35.855: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:35.911: Robot 1 has turned its BOM on.
+3:36.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:36.075: Robot 2 has turned its BOM on.
+3:36.191: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:36.247: Robot 3 has turned its BOM on.
+3:36.359: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:36.415: Robot 7 has turned its BOM on.
+3:36.519: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:36.575: Robot 9 has turned its BOM on.
+3:36.687: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:36.743: Robot 1 has turned its BOM on.
+3:36.855: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:36.911: Robot 2 has turned its BOM on.
+3:36.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:37.019: Robot 3 has turned its BOM on.
+3:37.135: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:37.191: Robot 7 has turned its BOM on.
+3:37.303: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:37.359: Robot 9 has turned its BOM on.
+3:37.463: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:37.519: Robot 1 has turned its BOM on.
+3:37.631: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:37.687: Robot 2 has turned its BOM on.
+3:37.799: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:37.855: Robot 3 has turned its BOM on.
+3:37.963: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:38.019: Robot 7 has turned its BOM on.
+3:38.079: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:38.135: Robot 9 has turned its BOM on.
+3:38.247: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:38.303: Robot 1 has turned its BOM on.
+3:38.415: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:38.463: Robot 2 has turned its BOM on.
+3:38.575: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:38.631: Robot 3 has turned its BOM on.
+3:38.743: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:38.799: Robot 7 has turned its BOM on.
+3:38.911: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:38.963: Robot 9 has turned its BOM on.
+3:39.023: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:39.079: Robot 1 has turned its BOM on.
+3:39.191: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:39.247: Robot 2 has turned its BOM on.
+3:39.359: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:39.415: Robot 3 has turned its BOM on.
+3:39.519: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:39.575: Robot 7 has turned its BOM on.
+3:39.687: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:39.743: Robot 9 has turned its BOM on.
+3:39.855: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:39.911: Robot 1 has turned its BOM on.
+3:39.967: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:40.023: Robot 2 has turned its BOM on.
+3:40.135: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:40.191: Robot 3 has turned its BOM on.
+3:40.303: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:40.359: Robot 7 has turned its BOM on.
+3:40.463: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:40.519: Robot 9 has turned its BOM on.
+3:40.635: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:40.691: Robot 1 has turned its BOM on.
+3:40.751: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:40.807: Robot 2 has turned its BOM on.
+3:40.919: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:40.963: Robot 3 has turned its BOM on.
+3:41.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:41.131: Robot 7 has turned its BOM on.
+3:41.247: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:41.303: Robot 9 has turned its BOM on.
+3:41.415: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:41.463: Robot 1 has turned its BOM on.
+3:41.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:41.631: Robot 2 has turned its BOM on.
+3:41.743: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:41.799: Robot 3 has turned its BOM on.
+3:41.911: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:41.963: Robot 7 has turned its BOM on.
+3:42.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:42.075: Robot 9 has turned its BOM on.
+3:42.191: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:42.247: Robot 1 has turned its BOM on.
+3:42.359: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:42.415: Robot 2 has turned its BOM on.
+3:42.519: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:42.575: Robot 3 has turned its BOM on.
+3:42.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:42.743: Robot 7 has turned its BOM on.
+3:42.859: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:42.915: Robot 9 has turned its BOM on.
+3:43.023: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:43.079: Robot 1 has turned its BOM on.
+3:43.135: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:43.191: Robot 2 has turned its BOM on.
+3:43.303: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:43.359: Robot 3 has turned its BOM on.
+3:43.463: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:43.519: Robot 7 has turned its BOM on.
+3:43.631: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:43.687: Robot 9 has turned its BOM on.
+3:43.799: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:43.855: Robot 1 has turned its BOM on.
+3:43.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:44.019: Robot 2 has turned its BOM on.
+3:44.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:44.131: Robot 3 has turned its BOM on.
+3:44.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:44.299: Robot 7 has turned its BOM on.
+3:44.415: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:44.463: Robot 9 has turned its BOM on.
+3:44.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:44.631: Robot 1 has turned its BOM on.
+3:44.743: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:44.799: Robot 2 has turned its BOM on.
+3:44.911: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:44.963: Robot 3 has turned its BOM on.
+3:45.027: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:45.083: Robot 7 has turned its BOM on.
+3:45.199: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:45.255: Robot 9 has turned its BOM on.
+3:45.367: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:45.423: Robot 1 has turned its BOM on.
+3:45.519: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:45.575: Robot 2 has turned its BOM on.
+3:45.687: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:45.743: Robot 3 has turned its BOM on.
+3:45.855: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:45.911: Robot 7 has turned its BOM on.
+3:45.967: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:46.023: Robot 9 has turned its BOM on.
+3:46.135: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:46.191: Robot 1 has turned its BOM on.
+3:46.303: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:46.359: Robot 2 has turned its BOM on.
+3:46.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:46.519: Robot 3 has turned its BOM on.
+3:46.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:46.687: Robot 7 has turned its BOM on.
+3:46.799: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:46.855: Robot 9 has turned its BOM on.
+3:46.911: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:46.963: Robot 1 has turned its BOM on.
+3:47.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:47.131: Robot 2 has turned its BOM on.
+3:47.247: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:47.303: Robot 3 has turned its BOM on.
+3:47.415: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:47.463: Robot 7 has turned its BOM on.
+3:47.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:47.631: Robot 9 has turned its BOM on.
+3:47.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:47.799: Robot 1 has turned its BOM on.
+3:47.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:47.963: Robot 2 has turned its BOM on.
+3:48.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:48.131: Robot 3 has turned its BOM on.
+3:48.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:48.243: Robot 7 has turned its BOM on.
+3:48.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+3:48.411: Robot 9 has turned its BOM on.
+3:48.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:48.575: Robot 1 has turned its BOM on.
+3:48.687: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:48.743: Robot 2 has turned its BOM on.
+3:48.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:48.911: Robot 3 has turned its BOM on.
+3:49.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:49.075: Robot 7 has turned its BOM on.
+3:49.135: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:49.191: Robot 9 has turned its BOM on.
+3:49.303: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:49.359: Robot 1 has turned its BOM on.
+3:49.463: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:49.519: Robot 2 has turned its BOM on.
+3:49.631: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:49.687: Robot 3 has turned its BOM on.
+3:49.799: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:49.855: Robot 7 has turned its BOM on.
+3:49.963: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:50.019: Robot 9 has turned its BOM on.
+3:50.079: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:50.135: Robot 1 has turned its BOM on.
+3:50.247: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:50.303: Robot 2 has turned its BOM on.
+3:50.415: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:50.463: Robot 3 has turned its BOM on.
+3:50.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:50.631: Robot 7 has turned its BOM on.
+3:50.743: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+3:50.799: Robot 9 has turned its BOM on.
+3:50.911: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:50.963: Robot 1 has turned its BOM on.
+3:51.023: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:51.079: Robot 2 has turned its BOM on.
+3:51.191: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:51.247: Robot 3 has turned its BOM on.
+3:51.363: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:51.419: Robot 7 has turned its BOM on.
+3:51.519: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+3:51.575: Robot 9 has turned its BOM on.
+3:51.687: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:51.743: Robot 1 has turned its BOM on.
+3:51.855: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:51.911: Robot 2 has turned its BOM on.
+3:51.967: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:52.023: Robot 3 has turned its BOM on.
+3:52.135: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:52.191: Robot 7 has turned its BOM on.
+3:52.307: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+3:52.363: Robot 9 has turned its BOM on.
+3:52.463: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:52.519: Robot 1 has turned its BOM on.
+3:52.631: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:52.687: Robot 2 has turned its BOM on.
+3:52.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:52.859: Robot 3 has turned its BOM on.
+3:52.963: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:53.019: Robot 7 has turned its BOM on.
+3:53.131: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+3:53.187: Robot 9 has turned its BOM on.
+3:53.243: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:53.299: Robot 1 has turned its BOM on.
+3:53.411: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:53.463: Robot 2 has turned its BOM on.
+3:53.579: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:53.635: Robot 3 has turned its BOM on.
+3:53.747: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:53.803: Robot 7 has turned its BOM on.
+3:53.915: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:53.963: Robot 9 has turned its BOM on.
+3:54.075: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:54.131: Robot 1 has turned its BOM on.
+3:54.187: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:54.243: Robot 2 has turned its BOM on.
+3:54.355: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:54.411: Robot 3 has turned its BOM on.
+3:54.523: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:54.579: Robot 7 has turned its BOM on.
+3:54.691: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:54.747: Robot 9 has turned its BOM on.
+3:54.859: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:54.915: Robot 1 has turned its BOM on.
+3:55.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:55.075: Robot 2 has turned its BOM on.
+3:55.195: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:55.251: Robot 3 has turned its BOM on.
+3:55.307: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:55.363: Robot 7 has turned its BOM on.
+3:55.463: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+3:55.519: Robot 9 has turned its BOM on.
+3:55.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:55.687: Robot 1 has turned its BOM on.
+3:55.799: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:55.855: Robot 2 has turned its BOM on.
+3:55.915: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:55.963: Robot 3 has turned its BOM on.
+3:56.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:56.131: Robot 7 has turned its BOM on.
+3:56.243: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+3:56.299: Robot 9 has turned its BOM on.
+3:56.411: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:56.463: Robot 1 has turned its BOM on.
+3:56.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:56.631: Robot 2 has turned its BOM on.
+3:56.743: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:56.799: Robot 3 has turned its BOM on.
+3:56.911: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:56.963: Robot 7 has turned its BOM on.
+3:57.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+3:57.075: Robot 9 has turned its BOM on.
+3:57.187: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:57.243: Robot 1 has turned its BOM on.
+3:57.355: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:57.411: Robot 2 has turned its BOM on.
+3:57.519: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:57.575: Robot 3 has turned its BOM on.
+3:57.691: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:57.747: Robot 7 has turned its BOM on.
+3:57.859: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:57.915: Robot 9 has turned its BOM on.
+3:58.019: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+3:58.075: Robot 1 has turned its BOM on.
+3:58.187: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+3:58.243: Robot 2 has turned its BOM on.
+3:58.299: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:58.355: Robot 3 has turned its BOM on.
+3:58.463: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:58.519: Robot 7 has turned its BOM on.
+3:58.635: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+3:58.691: Robot 9 has turned its BOM on.
+3:58.803: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:58.859: Robot 1 has turned its BOM on.
+3:58.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+3:59.019: Robot 2 has turned its BOM on.
+3:59.131: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:59.187: Robot 3 has turned its BOM on.
+3:59.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+3:59.300: Robot 7 has turned its BOM on.
+3:59.411: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+3:59.463: Robot 9 has turned its BOM on.
+3:59.579: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+3:59.635: Robot 1 has turned its BOM on.
+3:59.747: Robot 2 has turned its BOM on.
+3:59.915: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+3:59.963: Robot 3 has turned its BOM on.
+4:00.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:00.131: Robot 7 has turned its BOM on.
+4:00.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:00.243: Robot 9 has turned its BOM on.
+4:00.355: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:00.523: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:00.579: Robot 2 has turned its BOM on.
+4:00.691: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:00.747: Robot 3 has turned its BOM on.
+4:00.859: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:00.915: Robot 7 has turned its BOM on.
+4:01.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:01.075: Robot 9 has turned its BOM on.
+4:01.131: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:01.355: Robot 2 has turned its BOM on.
+4:01.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:01.519: Robot 3 has turned its BOM on.
+4:01.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:01.687: Robot 7 has turned its BOM on.
+4:01.799: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:01.855: Robot 9 has turned its BOM on.
+4:01.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:02.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:02.131: Robot 2 has turned its BOM on.
+4:02.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:02.299: Robot 3 has turned its BOM on.
+4:02.411: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:02.463: Robot 7 has turned its BOM on.
+4:02.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:02.631: Robot 9 has turned its BOM on.
+4:02.747: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:02.803: Robot 1 has turned its BOM on.
+4:02.919: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:02.963: Robot 2 has turned its BOM on.
+4:03.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:03.131: Robot 3 has turned its BOM on.
+4:03.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:03.299: Robot 7 has turned its BOM on.
+4:03.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:03.411: Robot 9 has turned its BOM on.
+4:03.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:03.575: Robot 1 has turned its BOM on.
+4:03.691: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:03.747: Robot 2 has turned its BOM on.
+4:03.859: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:03.915: Robot 3 has turned its BOM on.
+4:04.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:04.075: Robot 7 has turned its BOM on.
+4:04.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:04.243: Robot 9 has turned its BOM on.
+4:04.303: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:04.359: Robot 1 has turned its BOM on.
+4:04.463: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:04.519: Robot 2 has turned its BOM on.
+4:04.635: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:04.691: Robot 3 has turned its BOM on.
+4:04.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:04.859: Robot 7 has turned its BOM on.
+4:04.963: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:05.019: Robot 9 has turned its BOM on.
+4:05.131: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:05.187: Robot 1 has turned its BOM on.
+4:05.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:05.299: Robot 2 has turned its BOM on.
+4:05.411: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:05.463: Robot 3 has turned its BOM on.
+4:05.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:05.631: Robot 7 has turned its BOM on.
+4:05.743: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:05.799: Robot 9 has turned its BOM on.
+4:05.911: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:05.963: Robot 1 has turned its BOM on.
+4:06.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:06.131: Robot 2 has turned its BOM on.
+4:06.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:06.243: Robot 3 has turned its BOM on.
+4:06.356: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:06.411: Robot 7 has turned its BOM on.
+4:06.523: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:06.579: Robot 9 has turned its BOM on.
+4:06.691: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:06.747: Robot 1 has turned its BOM on.
+4:06.860: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:06.915: Robot 2 has turned its BOM on.
+4:07.019: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:07.075: Robot 3 has turned its BOM on.
+4:07.131: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:07.187: Robot 7 has turned its BOM on.
+4:07.299: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:07.355: Robot 9 has turned its BOM on.
+4:07.467: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:07.523: Robot 1 has turned its BOM on.
+4:07.635: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:07.691: Robot 2 has turned its BOM on.
+4:07.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:07.859: Robot 3 has turned its BOM on.
+4:07.963: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:08.019: Robot 7 has turned its BOM on.
+4:08.131: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:08.187: Robot 9 has turned its BOM on.
+4:08.299: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:08.355: Robot 1 has turned its BOM on.
+4:08.411: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:08.463: Robot 2 has turned its BOM on.
+4:08.575: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:08.631: Robot 3 has turned its BOM on.
+4:08.743: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:08.799: Robot 7 has turned its BOM on.
+4:08.911: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:08.963: Robot 9 has turned its BOM on.
+4:09.075: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:09.131: Robot 1 has turned its BOM on.
+4:09.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:09.299: Robot 2 has turned its BOM on.
+4:09.355: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:09.411: Robot 3 has turned its BOM on.
+4:09.519: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:09.575: Robot 7 has turned its BOM on.
+4:09.691: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:09.747: Robot 9 has turned its BOM on.
+4:09.859: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:09.915: Robot 1 has turned its BOM on.
+4:10.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:10.075: Robot 2 has turned its BOM on.
+4:10.135: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:10.191: Robot 3 has turned its BOM on.
+4:10.303: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:10.359: Robot 7 has turned its BOM on.
+4:10.463: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:10.519: Robot 9 has turned its BOM on.
+4:10.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:10.687: Robot 1 has turned its BOM on.
+4:10.799: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:10.855: Robot 2 has turned its BOM on.
+4:10.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:11.019: Robot 3 has turned its BOM on.
+4:11.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:11.131: Robot 7 has turned its BOM on.
+4:11.243: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:11.299: Robot 9 has turned its BOM on.
+4:11.415: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:11.463: Robot 1 has turned its BOM on.
+4:11.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:11.631: Robot 2 has turned its BOM on.
+4:11.747: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:11.803: Robot 3 has turned its BOM on.
+4:11.919: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:11.963: Robot 7 has turned its BOM on.
+4:12.023: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:12.079: Robot 9 has turned its BOM on.
+4:12.191: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:12.247: Robot 1 has turned its BOM on.
+4:12.359: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:12.415: Robot 2 has turned its BOM on.
+4:12.519: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:12.575: Robot 3 has turned its BOM on.
+4:12.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:12.743: Robot 7 has turned its BOM on.
+4:12.863: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:12.919: Robot 9 has turned its BOM on.
+4:13.023: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:13.079: Robot 1 has turned its BOM on.
+4:13.191: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:13.247: Robot 2 has turned its BOM on.
+4:13.303: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:13.359: Robot 3 has turned its BOM on.
+4:13.463: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:13.519: Robot 7 has turned its BOM on.
+4:13.631: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:13.687: Robot 9 has turned its BOM on.
+4:13.799: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:13.855: Robot 1 has turned its BOM on.
+4:13.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:14.019: Robot 2 has turned its BOM on.
+4:14.131: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:14.187: Robot 3 has turned its BOM on.
+4:14.247: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:14.303: Robot 7 has turned its BOM on.
+4:14.415: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:14.463: Robot 9 has turned its BOM on.
+4:14.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:14.631: Robot 1 has turned its BOM on.
+4:14.743: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:14.799: Robot 2 has turned its BOM on.
+4:14.911: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:14.963: Robot 3 has turned its BOM on.
+4:15.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:15.131: Robot 7 has turned its BOM on.
+4:15.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:15.243: Robot 9 has turned its BOM on.
+4:15.355: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:15.411: Robot 1 has turned its BOM on.
+4:15.519: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:15.575: Robot 2 has turned its BOM on.
+4:15.687: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:15.743: Robot 3 has turned its BOM on.
+4:15.855: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:15.911: Robot 7 has turned its BOM on.
+4:16.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:16.075: Robot 9 has turned its BOM on.
+4:16.135: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:16.191: Robot 1 has turned its BOM on.
+4:16.303: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:16.359: Robot 2 has turned its BOM on.
+4:16.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:16.519: Robot 3 has turned its BOM on.
+4:16.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:16.687: Robot 7 has turned its BOM on.
+4:16.799: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:16.855: Robot 9 has turned its BOM on.
+4:16.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:17.019: Robot 1 has turned its BOM on.
+4:17.079: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:17.135: Robot 2 has turned its BOM on.
+4:17.247: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:17.303: Robot 3 has turned its BOM on.
+4:17.415: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:17.463: Robot 7 has turned its BOM on.
+4:17.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:17.631: Robot 9 has turned its BOM on.
+4:17.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:17.799: Robot 1 has turned its BOM on.
+4:17.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:17.963: Robot 2 has turned its BOM on.
+4:18.079: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:18.135: Robot 3 has turned its BOM on.
+4:18.247: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:18.303: Robot 7 has turned its BOM on.
+4:18.359: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:18.415: Robot 9 has turned its BOM on.
+4:18.519: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:20.639: Robot 9 passed the token to robot 2. Sensor matrix:
+(2 4)(3 5)(7 8)
+4:20.695: Robot 1 has requested to join the token ring.
+4:20.751: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 15)(7 3)(9 3)
+4:20.807: Robot 3 has turned its BOM on.
+4:20.919: Robot 3 passed the token to robot 7. Sensor matrix:
+(2 8)(7 1)(9 255)
+4:20.963: Robot 7 has turned its BOM on.
+4:21.075: Robot 7 passed the token to robot 9. Sensor matrix:
+(2 10)(3 9)(9 2)
+4:21.131: Robot 9 has turned its BOM on.
+4:21.191: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:21.247: Robot 1 has turned its BOM on.
+4:21.359: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:21.415: Robot 2 has turned its BOM on.
+4:21.519: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:21.575: Robot 3 has turned its BOM on.
+4:21.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:21.743: Robot 7 has turned its BOM on.
+4:21.855: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:21.911: Robot 9 has turned its BOM on.
+4:22.023: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:22.079: Robot 1 has turned its BOM on.
+4:22.135: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:22.191: Robot 2 has turned its BOM on.
+4:22.303: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:22.359: Robot 3 has turned its BOM on.
+4:22.463: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:22.519: Robot 7 has turned its BOM on.
+4:22.631: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:22.687: Robot 9 has turned its BOM on.
+4:22.799: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:22.855: Robot 1 has turned its BOM on.
+4:22.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:23.019: Robot 2 has turned its BOM on.
+4:23.135: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:23.191: Robot 3 has turned its BOM on.
+4:23.247: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:23.303: Robot 7 has turned its BOM on.
+4:23.415: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:23.463: Robot 9 has turned its BOM on.
+4:23.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:23.631: Robot 1 has turned its BOM on.
+4:23.743: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:23.799: Robot 2 has turned its BOM on.
+4:23.911: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:23.963: Robot 3 has turned its BOM on.
+4:24.079: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:24.135: Robot 7 has turned its BOM on.
+4:24.247: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:24.303: Robot 9 has turned its BOM on.
+4:24.359: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:24.415: Robot 1 has turned its BOM on.
+4:24.520: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:24.575: Robot 2 has turned its BOM on.
+4:24.687: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:24.743: Robot 3 has turned its BOM on.
+4:24.855: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:24.911: Robot 7 has turned its BOM on.
+4:25.023: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:25.079: Robot 9 has turned its BOM on.
+4:25.191: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:25.247: Robot 1 has turned its BOM on.
+4:25.303: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:25.359: Robot 2 has turned its BOM on.
+4:25.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:25.520: Robot 3 has turned its BOM on.
+4:25.631: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:25.687: Robot 7 has turned its BOM on.
+4:25.799: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:25.855: Robot 9 has turned its BOM on.
+4:25.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:26.019: Robot 1 has turned its BOM on.
+4:26.131: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:26.187: Robot 2 has turned its BOM on.
+4:26.247: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:26.303: Robot 3 has turned its BOM on.
+4:26.415: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:26.463: Robot 7 has turned its BOM on.
+4:26.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:26.631: Robot 9 has turned its BOM on.
+4:26.743: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:26.799: Robot 1 has turned its BOM on.
+4:26.911: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:26.963: Robot 2 has turned its BOM on.
+4:27.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:27.131: Robot 3 has turned its BOM on.
+4:27.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:27.243: Robot 7 has turned its BOM on.
+4:27.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:27.411: Robot 9 has turned its BOM on.
+4:27.523: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:27.579: Robot 1 has turned its BOM on.
+4:27.691: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:27.747: Robot 2 has turned its BOM on.
+4:27.859: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:27.915: Robot 3 has turned its BOM on.
+4:28.019: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:28.075: Robot 7 has turned its BOM on.
+4:28.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:28.243: Robot 9 has turned its BOM on.
+4:28.299: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:28.355: Robot 1 has turned its BOM on.
+4:28.467: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:28.523: Robot 2 has turned its BOM on.
+4:28.635: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:28.691: Robot 3 has turned its BOM on.
+4:28.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:28.859: Robot 7 has turned its BOM on.
+4:28.963: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:29.019: Robot 9 has turned its BOM on.
+4:29.131: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:29.187: Robot 1 has turned its BOM on.
+4:29.299: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:29.355: Robot 2 has turned its BOM on.
+4:29.411: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:29.463: Robot 3 has turned its BOM on.
+4:29.575: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:29.631: Robot 7 has turned its BOM on.
+4:29.747: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:29.803: Robot 9 has turned its BOM on.
+4:29.915: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:29.963: Robot 1 has turned its BOM on.
+4:30.075: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:30.131: Robot 2 has turned its BOM on.
+4:30.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:30.299: Robot 3 has turned its BOM on.
+4:30.359: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:30.415: Robot 7 has turned its BOM on.
+4:30.519: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:30.575: Robot 9 has turned its BOM on.
+4:30.691: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:30.747: Robot 1 has turned its BOM on.
+4:30.859: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:30.915: Robot 2 has turned its BOM on.
+4:31.019: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:31.076: Robot 3 has turned its BOM on.
+4:31.187: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:31.243: Robot 7 has turned its BOM on.
+4:31.299: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:31.355: Robot 9 has turned its BOM on.
+4:31.463: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:31.519: Robot 1 has turned its BOM on.
+4:31.635: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:31.691: Robot 2 has turned its BOM on.
+4:31.803: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:31.859: Robot 3 has turned its BOM on.
+4:31.963: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:32.019: Robot 7 has turned its BOM on.
+4:32.131: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:32.187: Robot 9 has turned its BOM on.
+4:32.243: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:32.299: Robot 1 has turned its BOM on.
+4:32.411: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:32.463: Robot 2 has turned its BOM on.
+4:32.579: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:32.635: Robot 3 has turned its BOM on.
+4:32.747: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:32.803: Robot 7 has turned its BOM on.
+4:32.915: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:32.963: Robot 9 has turned its BOM on.
+4:33.075: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:33.131: Robot 1 has turned its BOM on.
+4:33.243: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:33.299: Robot 2 has turned its BOM on.
+4:33.355: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:33.411: Robot 3 has turned its BOM on.
+4:33.523: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:33.579: Robot 7 has turned its BOM on.
+4:33.691: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:33.747: Robot 9 has turned its BOM on.
+4:33.859: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:33.915: Robot 1 has turned its BOM on.
+4:34.019: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:34.075: Robot 2 has turned its BOM on.
+4:34.187: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:34.243: Robot 3 has turned its BOM on.
+4:34.355: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:34.411: Robot 7 has turned its BOM on.
+4:34.463: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:34.519: Robot 9 has turned its BOM on.
+4:34.631: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:34.687: Robot 1 has turned its BOM on.
+4:34.799: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:34.855: Robot 2 has turned its BOM on.
+4:34.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:35.019: Robot 3 has turned its BOM on.
+4:35.131: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:35.187: Robot 7 has turned its BOM on.
+4:35.299: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:35.355: Robot 9 has turned its BOM on.
+4:35.411: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:35.463: Robot 1 has turned its BOM on.
+4:35.575: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:35.631: Robot 2 has turned its BOM on.
+4:35.751: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:35.807: Robot 3 has turned its BOM on.
+4:35.919: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:35.963: Robot 7 has turned its BOM on.
+4:36.075: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:36.131: Robot 9 has turned its BOM on.
+4:36.243: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:36.299: Robot 1 has turned its BOM on.
+4:36.355: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:36.411: Robot 2 has turned its BOM on.
+4:36.519: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:36.575: Robot 3 has turned its BOM on.
+4:36.687: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:36.743: Robot 7 has turned its BOM on.
+4:36.859: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:36.915: Robot 9 has turned its BOM on.
+4:37.019: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:37.075: Robot 1 has turned its BOM on.
+4:37.187: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:37.243: Robot 2 has turned its BOM on.
+4:37.299: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:37.355: Robot 3 has turned its BOM on.
+4:37.463: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:37.519: Robot 7 has turned its BOM on.
+4:37.635: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:37.692: Robot 9 has turned its BOM on.
+4:37.803: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:37.859: Robot 1 has turned its BOM on.
+4:37.963: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:38.019: Robot 2 has turned its BOM on.
+4:38.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:38.187: Robot 3 has turned its BOM on.
+4:38.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:38.299: Robot 7 has turned its BOM on.
+4:38.411: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:38.463: Robot 9 has turned its BOM on.
+4:38.575: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:38.631: Robot 1 has turned its BOM on.
+4:38.743: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:38.799: Robot 2 has turned its BOM on.
+4:38.911: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:38.963: Robot 3 has turned its BOM on.
+4:39.075: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:39.131: Robot 7 has turned its BOM on.
+4:39.243: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:39.299: Robot 9 has turned its BOM on.
+4:39.411: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:39.463: Robot 1 has turned its BOM on.
+4:39.519: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:39.575: Robot 2 has turned its BOM on.
+4:39.687: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:39.743: Robot 3 has turned its BOM on.
+4:39.859: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:39.915: Robot 7 has turned its BOM on.
+4:40.019: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:40.075: Robot 9 has turned its BOM on.
+4:40.188: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:40.243: Robot 1 has turned its BOM on.
+4:40.355: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:40.412: Robot 2 has turned its BOM on.
+4:40.471: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:40.527: Robot 3 has turned its BOM on.
+4:40.643: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:40.699: Robot 7 has turned its BOM on.
+4:40.811: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:40.867: Robot 9 has turned its BOM on.
+4:40.963: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:41.019: Robot 1 has turned its BOM on.
+4:41.131: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:41.187: Robot 2 has turned its BOM on.
+4:41.299: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:41.355: Robot 3 has turned its BOM on.
+4:41.412: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:41.463: Robot 7 has turned its BOM on.
+4:41.575: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:41.631: Robot 9 has turned its BOM on.
+4:41.747: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:41.803: Robot 1 has turned its BOM on.
+4:41.915: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:41.963: Robot 2 has turned its BOM on.
+4:42.075: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:42.131: Robot 3 has turned its BOM on.
+4:42.243: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:42.299: Robot 7 has turned its BOM on.
+4:42.355: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:42.411: Robot 9 has turned its BOM on.
+4:42.520: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:42.575: Robot 1 has turned its BOM on.
+4:42.687: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:42.743: Robot 2 has turned its BOM on.
+4:42.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:42.911: Robot 3 has turned its BOM on.
+4:43.020: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:43.075: Robot 7 has turned its BOM on.
+4:43.187: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:43.243: Robot 9 has turned its BOM on.
+4:43.303: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:43.359: Robot 1 has turned its BOM on.
+4:43.463: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:43.519: Robot 2 has turned its BOM on.
+4:43.635: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:43.691: Robot 3 has turned its BOM on.
+4:43.803: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:43.860: Robot 7 has turned its BOM on.
+4:43.964: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:44.019: Robot 9 has turned its BOM on.
+4:44.135: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:44.191: Robot 1 has turned its BOM on.
+4:44.304: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:44.360: Robot 2 has turned its BOM on.
+4:44.416: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:44.464: Robot 3 has turned its BOM on.
+4:44.576: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:44.632: Robot 7 has turned its BOM on.
+4:44.744: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:44.799: Robot 9 has turned its BOM on.
+4:44.912: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:44.964: Robot 1 has turned its BOM on.
+4:45.080: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:45.136: Robot 2 has turned its BOM on.
+4:45.248: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:45.304: Robot 3 has turned its BOM on.
+4:45.360: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:45.416: Robot 7 has turned its BOM on.
+4:45.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:45.576: Robot 9 has turned its BOM on.
+4:45.688: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:45.744: Robot 1 has turned its BOM on.
+4:45.856: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:45.912: Robot 2 has turned its BOM on.
+4:46.024: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:46.080: Robot 3 has turned its BOM on.
+4:46.192: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:46.248: Robot 7 has turned its BOM on.
+4:46.304: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:46.360: Robot 9 has turned its BOM on.
+4:46.468: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:46.524: Robot 1 has turned its BOM on.
+4:46.640: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:46.696: Robot 2 has turned its BOM on.
+4:46.808: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:46.864: Robot 3 has turned its BOM on.
+4:46.964: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:47.020: Robot 7 has turned its BOM on.
+4:47.132: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:47.188: Robot 9 has turned its BOM on.
+4:47.248: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:47.304: Robot 1 has turned its BOM on.
+4:47.416: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:47.464: Robot 2 has turned its BOM on.
+4:47.576: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:47.632: Robot 3 has turned its BOM on.
+4:47.744: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:47.800: Robot 7 has turned its BOM on.
+4:47.912: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:47.964: Robot 9 has turned its BOM on.
+4:48.076: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:48.132: Robot 1 has turned its BOM on.
+4:48.248: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:48.304: Robot 2 has turned its BOM on.
+4:48.360: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:48.416: Robot 3 has turned its BOM on.
+4:48.520: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:48.576: Robot 7 has turned its BOM on.
+4:48.688: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:48.744: Robot 9 has turned its BOM on.
+4:48.856: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:48.912: Robot 1 has turned its BOM on.
+4:49.028: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:49.084: Robot 2 has turned its BOM on.
+4:49.196: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:49.252: Robot 3 has turned its BOM on.
+4:49.312: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:49.368: Robot 7 has turned its BOM on.
+4:49.520: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:49.576: Robot 9 has turned its BOM on.
+4:49.632: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:49.688: Robot 1 has turned its BOM on.
+4:49.800: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:49.856: Robot 2 has turned its BOM on.
+4:49.964: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:50.020: Robot 3 has turned its BOM on.
+4:50.136: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:50.192: Robot 7 has turned its BOM on.
+4:50.304: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:50.360: Robot 9 has turned its BOM on.
+4:50.416: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:50.464: Robot 1 has turned its BOM on.
+4:50.576: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:50.632: Robot 2 has turned its BOM on.
+4:50.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:50.800: Robot 3 has turned its BOM on.
+4:50.912: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:50.964: Robot 7 has turned its BOM on.
+4:51.080: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:51.136: Robot 9 has turned its BOM on.
+4:51.248: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:51.304: Robot 1 has turned its BOM on.
+4:51.360: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:51.416: Robot 2 has turned its BOM on.
+4:51.520: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:51.576: Robot 3 has turned its BOM on.
+4:51.688: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:51.744: Robot 7 has turned its BOM on.
+4:51.856: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:51.912: Robot 9 has turned its BOM on.
+4:52.024: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:52.080: Robot 1 has turned its BOM on.
+4:52.192: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:52.248: Robot 2 has turned its BOM on.
+4:52.308: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:52.364: Robot 3 has turned its BOM on.
+4:52.464: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:52.520: Robot 7 has turned its BOM on.
+4:52.632: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:52.688: Robot 9 has turned its BOM on.
+4:52.800: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:52.856: Robot 1 has turned its BOM on.
+4:52.964: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:53.020: Robot 2 has turned its BOM on.
+4:53.132: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:53.188: Robot 3 has turned its BOM on.
+4:53.304: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:53.360: Robot 7 has turned its BOM on.
+4:53.416: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:53.464: Robot 9 has turned its BOM on.
+4:53.576: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:53.632: Robot 1 has turned its BOM on.
+4:53.748: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 1)(3 2)(7 2)(9 2)
+4:53.804: Robot 2 has turned its BOM on.
+4:53.920: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:53.964: Robot 3 has turned its BOM on.
+4:54.080: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:54.136: Robot 7 has turned its BOM on.
+4:54.248: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:54.304: Robot 9 has turned its BOM on.
+4:54.416: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:54.464: Robot 1 has turned its BOM on.
+4:54.576: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:54.632: Robot 2 has turned its BOM on.
+4:54.688: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:54.744: Robot 3 has turned its BOM on.
+4:54.856: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:54.912: Robot 7 has turned its BOM on.
+4:55.020: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 3)(2 3)(3 9)(9 2)
+4:55.076: Robot 9 has turned its BOM on.
+4:55.188: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:55.244: Robot 1 has turned its BOM on.
+4:55.356: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:55.412: Robot 2 has turned its BOM on.
+4:55.520: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:55.576: Robot 3 has turned its BOM on.
+4:55.632: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:55.688: Robot 7 has turned its BOM on.
+4:55.800: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:55.856: Robot 9 has turned its BOM on.
+4:55.968: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:56.024: Robot 1 has turned its BOM on.
+4:56.136: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:56.192: Robot 2 has turned its BOM on.
+4:56.304: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:56.360: Robot 3 has turned its BOM on.
+4:56.416: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:56.464: Robot 7 has turned its BOM on.
+4:56.576: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:56.632: Robot 9 has turned its BOM on.
+4:56.744: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:56.800: Robot 1 has turned its BOM on.
+4:56.912: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:56.964: Robot 2 has turned its BOM on.
+4:57.080: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:57.136: Robot 3 has turned its BOM on.
+4:57.248: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:57.304: Robot 7 has turned its BOM on.
+4:57.360: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:57.416: Robot 9 has turned its BOM on.
+4:57.520: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:57.576: Robot 1 has turned its BOM on.
+4:57.688: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:57.744: Robot 2 has turned its BOM on.
+4:57.856: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:57.912: Robot 3 has turned its BOM on.
+4:58.020: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:58.076: Robot 7 has turned its BOM on.
+4:58.188: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 3)(3 9)(9 2)
+4:58.244: Robot 9 has turned its BOM on.
+4:58.360: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 4)(7 8)
+4:58.416: Robot 1 has turned its BOM on.
+4:58.468: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:58.524: Robot 2 has turned its BOM on.
+4:58.640: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:58.696: Robot 3 has turned its BOM on.
+4:58.808: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:58.864: Robot 7 has turned its BOM on.
+4:58.964: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:59.020: Robot 9 has turned its BOM on.
+4:59.136: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:59.192: Robot 1 has turned its BOM on.
+4:59.304: Robot 1 passed the token to robot 2. Sensor matrix:
+(2 0)(3 2)(7 2)(9 2)
+4:59.360: Robot 2 has turned its BOM on.
+4:59.420: Robot 2 passed the token to robot 3. Sensor matrix:
+(1 8)(3 15)(7 3)(9 3)
+4:59.464: Robot 3 has turned its BOM on.
+4:59.576: Robot 3 passed the token to robot 7. Sensor matrix:
+(1 255)(2 8)(7 1)(9 255)
+4:59.632: Robot 7 has turned its BOM on.
+4:59.744: Robot 7 passed the token to robot 9. Sensor matrix:
+(1 10)(2 10)(3 9)(9 2)
+4:59.800: Robot 9 has turned its BOM on.
+4:59.912: Robot 9 passed the token to robot 1. Sensor matrix:
+(1 4)(2 4)(3 5)(7 8)
+4:59.964: Robot 1 has turned its BOM on.
Index: branches/scout/projects/libwireless/logger/tests/3robots5minutes.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/3robots5minutes.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/3robots5minutes.test	(revision 1346)
@@ -0,0 +1,3507 @@
+0:0.985: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:1.41: Robot 3 has turned its BOM on.
+0:1.209: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:1.265: Robot 4 has turned its BOM on.
+0:1.489: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:1.545: Robot 9 has turned its BOM on.
+0:1.713: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:1.769: Robot 3 has turned its BOM on.
+0:1.989: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:2.45: Robot 4 has turned its BOM on.
+0:2.213: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:2.489: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:2.545: Robot 3 has turned its BOM on.
+0:2.769: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:2.825: Robot 4 has turned its BOM on.
+0:2.989: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:3.45: Robot 9 has turned its BOM on.
+0:3.217: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:3.273: Robot 3 has turned its BOM on.
+0:3.489: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:3.545: Robot 4 has turned its BOM on.
+0:3.713: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:3.769: Robot 9 has turned its BOM on.
+0:3.989: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:4.45: Robot 3 has turned its BOM on.
+0:4.269: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:4.325: Robot 4 has turned its BOM on.
+0:4.489: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:4.545: Robot 9 has turned its BOM on.
+0:4.769: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:4.825: Robot 3 has turned its BOM on.
+0:4.993: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:5.49: Robot 4 has turned its BOM on.
+0:5.217: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:5.273: Robot 9 has turned its BOM on.
+0:5.489: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:5.545: Robot 3 has turned its BOM on.
+0:5.769: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:5.825: Robot 4 has turned its BOM on.
+0:5.989: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:6.45: Robot 9 has turned its BOM on.
+0:6.269: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:6.325: Robot 3 has turned its BOM on.
+0:6.489: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:6.545: Robot 4 has turned its BOM on.
+0:6.769: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:6.825: Robot 9 has turned its BOM on.
+0:6.993: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:7.49: Robot 3 has turned its BOM on.
+0:7.273: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:7.329: Robot 4 has turned its BOM on.
+0:7.489: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:7.545: Robot 9 has turned its BOM on.
+0:7.769: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:7.825: Robot 3 has turned its BOM on.
+0:7.989: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:8.45: Robot 4 has turned its BOM on.
+0:8.269: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:8.325: Robot 9 has turned its BOM on.
+0:8.489: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:8.545: Robot 3 has turned its BOM on.
+0:8.769: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:8.825: Robot 4 has turned its BOM on.
+0:8.993: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:9.49: Robot 9 has turned its BOM on.
+0:9.273: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:9.329: Robot 3 has turned its BOM on.
+0:9.489: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:9.545: Robot 4 has turned its BOM on.
+0:9.769: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:9.825: Robot 9 has turned its BOM on.
+0:9.989: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:10.45: Robot 3 has turned its BOM on.
+0:10.273: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:10.329: Robot 4 has turned its BOM on.
+0:10.545: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:10.601: Robot 9 has turned its BOM on.
+0:10.769: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:10.825: Robot 3 has turned its BOM on.
+0:10.993: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:11.49: Robot 4 has turned its BOM on.
+0:11.273: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:11.329: Robot 9 has turned its BOM on.
+0:11.489: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:11.545: Robot 3 has turned its BOM on.
+0:11.769: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:11.825: Robot 4 has turned its BOM on.
+0:12.45: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:12.101: Robot 9 has turned its BOM on.
+0:12.273: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:12.329: Robot 3 has turned its BOM on.
+0:12.545: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:12.601: Robot 4 has turned its BOM on.
+0:12.769: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:12.825: Robot 9 has turned its BOM on.
+0:13.49: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:13.105: Robot 3 has turned its BOM on.
+0:13.273: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:13.329: Robot 4 has turned its BOM on.
+0:13.545: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:13.601: Robot 9 has turned its BOM on.
+0:13.769: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:13.825: Robot 3 has turned its BOM on.
+0:14.45: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:14.101: Robot 4 has turned its BOM on.
+0:14.273: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:14.329: Robot 9 has turned its BOM on.
+0:14.545: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:14.601: Robot 3 has turned its BOM on.
+0:14.769: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:14.825: Robot 4 has turned its BOM on.
+0:15.49: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:15.105: Robot 9 has turned its BOM on.
+0:15.273: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:15.329: Robot 3 has turned its BOM on.
+0:15.545: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:15.601: Robot 4 has turned its BOM on.
+0:15.769: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:15.825: Robot 9 has turned its BOM on.
+0:16.45: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:16.101: Robot 3 has turned its BOM on.
+0:16.273: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:16.329: Robot 4 has turned its BOM on.
+0:16.549: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:16.605: Robot 9 has turned its BOM on.
+0:18.949: Robot 9 passed the token to robot 4. Sensor matrix:
+(4 6)
+0:19.5: Robot 3 has requested to join the token ring.
+0:19.61: Robot 4 has turned its BOM on.
+0:19.173: Robot 4 passed the token to robot 9. Sensor matrix:
+(9 13)
+0:19.229: Robot 9 has turned its BOM on.
+0:19.433: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:19.489: Robot 3 has turned its BOM on.
+0:19.661: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:19.717: Robot 4 has turned its BOM on.
+0:19.933: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+0:19.989: Robot 9 has turned its BOM on.
+0:20.157: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:20.213: Robot 3 has turned its BOM on.
+0:20.437: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:20.493: Robot 4 has turned its BOM on.
+0:20.661: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:20.717: Robot 9 has turned its BOM on.
+0:20.933: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:20.989: Robot 3 has turned its BOM on.
+0:21.157: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:21.213: Robot 4 has turned its BOM on.
+0:21.433: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:21.489: Robot 9 has turned its BOM on.
+0:21.661: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:21.717: Robot 3 has turned its BOM on.
+0:21.933: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:21.989: Robot 4 has turned its BOM on.
+0:22.157: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:22.213: Robot 9 has turned its BOM on.
+0:22.438: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:22.493: Robot 3 has turned its BOM on.
+0:22.661: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:22.717: Robot 4 has turned its BOM on.
+0:22.933: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:22.989: Robot 9 has turned its BOM on.
+0:23.45: Robot 4 has requested to join the token ring.
+0:23.157: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:23.213: Robot 3 has turned its BOM on.
+0:23.433: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:23.489: Robot 4 has turned its BOM on.
+0:23.657: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:23.713: Robot 9 has turned its BOM on.
+0:23.933: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:23.989: Robot 3 has turned its BOM on.
+0:24.157: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:24.213: Robot 4 has turned its BOM on.
+0:24.433: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:24.490: Robot 9 has turned its BOM on.
+0:24.657: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:24.713: Robot 3 has turned its BOM on.
+0:24.934: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:24.989: Robot 4 has turned its BOM on.
+0:25.213: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:25.269: Robot 9 has turned its BOM on.
+0:25.437: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:25.494: Robot 3 has turned its BOM on.
+0:25.662: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:25.717: Robot 4 has turned its BOM on.
+0:25.938: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:25.993: Robot 9 has turned its BOM on.
+0:26.162: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:26.217: Robot 3 has turned its BOM on.
+0:26.433: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:26.490: Robot 4 has turned its BOM on.
+0:26.713: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:26.769: Robot 9 has turned its BOM on.
+0:26.934: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:26.990: Robot 3 has turned its BOM on.
+0:27.214: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:27.270: Robot 4 has turned its BOM on.
+0:27.438: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:27.494: Robot 9 has turned its BOM on.
+0:27.662: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:27.718: Robot 3 has turned its BOM on.
+0:27.934: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:27.990: Robot 4 has turned its BOM on.
+0:28.214: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:28.270: Robot 9 has turned its BOM on.
+0:28.434: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:28.490: Robot 3 has turned its BOM on.
+0:28.714: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:28.770: Robot 4 has turned its BOM on.
+0:28.934: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:28.990: Robot 9 has turned its BOM on.
+0:29.214: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:29.270: Robot 3 has turned its BOM on.
+0:29.438: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:29.494: Robot 4 has turned its BOM on.
+0:29.718: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:29.774: Robot 9 has turned its BOM on.
+0:29.934: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:29.990: Robot 3 has turned its BOM on.
+0:30.218: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:30.274: Robot 4 has turned its BOM on.
+0:30.434: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:30.490: Robot 9 has turned its BOM on.
+0:30.714: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:30.770: Robot 3 has turned its BOM on.
+0:30.934: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:30.990: Robot 4 has turned its BOM on.
+0:31.214: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:31.270: Robot 9 has turned its BOM on.
+0:31.434: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:31.490: Robot 3 has turned its BOM on.
+0:31.718: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:31.774: Robot 4 has turned its BOM on.
+0:31.934: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:31.990: Robot 9 has turned its BOM on.
+0:32.214: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:32.270: Robot 3 has turned its BOM on.
+0:32.434: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:32.490: Robot 4 has turned its BOM on.
+0:32.718: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:32.774: Robot 9 has turned its BOM on.
+0:32.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:33.46: Robot 3 has turned its BOM on.
+0:33.214: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:33.270: Robot 4 has turned its BOM on.
+0:33.438: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:33.494: Robot 9 has turned its BOM on.
+0:33.718: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:33.774: Robot 3 has turned its BOM on.
+0:33.990: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:34.46: Robot 4 has turned its BOM on.
+0:34.218: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:34.274: Robot 9 has turned its BOM on.
+0:34.490: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:34.546: Robot 3 has turned its BOM on.
+0:34.714: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:34.770: Robot 4 has turned its BOM on.
+0:34.938: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:34.994: Robot 9 has turned its BOM on.
+0:35.218: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:35.274: Robot 3 has turned its BOM on.
+0:35.490: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:35.546: Robot 4 has turned its BOM on.
+0:35.714: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:35.770: Robot 9 has turned its BOM on.
+0:35.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:36.46: Robot 3 has turned its BOM on.
+0:36.218: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:36.274: Robot 4 has turned its BOM on.
+0:36.490: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:36.546: Robot 9 has turned its BOM on.
+0:36.718: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:36.774: Robot 3 has turned its BOM on.
+0:36.994: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:37.50: Robot 4 has turned its BOM on.
+0:37.218: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:37.274: Robot 9 has turned its BOM on.
+0:37.490: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:37.546: Robot 3 has turned its BOM on.
+0:37.714: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:37.770: Robot 4 has turned its BOM on.
+0:37.990: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:38.46: Robot 9 has turned its BOM on.
+0:38.218: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:38.274: Robot 3 has turned its BOM on.
+0:38.490: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:38.546: Robot 4 has turned its BOM on.
+0:38.714: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:38.770: Robot 9 has turned its BOM on.
+0:38.994: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:39.50: Robot 3 has turned its BOM on.
+0:39.218: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:39.274: Robot 4 has turned its BOM on.
+0:39.490: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+0:39.546: Robot 9 has turned its BOM on.
+0:39.714: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:39.770: Robot 3 has turned its BOM on.
+0:39.994: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:40.50: Robot 4 has turned its BOM on.
+0:40.218: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:40.274: Robot 9 has turned its BOM on.
+0:40.490: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:40.546: Robot 3 has turned its BOM on.
+0:40.714: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:40.770: Robot 4 has turned its BOM on.
+0:40.990: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:41.46: Robot 9 has turned its BOM on.
+0:41.214: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:41.270: Robot 3 has turned its BOM on.
+0:41.490: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:41.546: Robot 4 has turned its BOM on.
+0:41.770: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:41.826: Robot 9 has turned its BOM on.
+0:41.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:42.46: Robot 3 has turned its BOM on.
+0:42.214: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:42.270: Robot 4 has turned its BOM on.
+0:42.490: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+0:42.546: Robot 9 has turned its BOM on.
+0:42.770: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:42.826: Robot 3 has turned its BOM on.
+0:42.990: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:43.46: Robot 4 has turned its BOM on.
+0:43.270: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:43.326: Robot 9 has turned its BOM on.
+0:43.490: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:43.546: Robot 3 has turned its BOM on.
+0:43.770: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:43.826: Robot 4 has turned its BOM on.
+0:43.994: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:44.50: Robot 9 has turned its BOM on.
+0:44.274: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:44.330: Robot 3 has turned its BOM on.
+0:44.490: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:44.546: Robot 4 has turned its BOM on.
+0:44.770: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:44.826: Robot 9 has turned its BOM on.
+0:44.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:47.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:47.102: Robot 9 has requested to join the token ring.
+0:47.274: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:47.330: Robot 3 has requested to join the token ring.
+0:47.378: Robot 3 has turned its BOM on.
+0:47.546: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:47.602: Robot 4 has turned its BOM on.
+0:47.770: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:47.826: Robot 3 has turned its BOM on.
+0:48.50: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:48.106: Robot 4 has turned its BOM on.
+0:48.274: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:48.330: Robot 3 has turned its BOM on.
+0:48.546: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:48.602: Robot 4 has turned its BOM on.
+0:48.770: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:48.826: Robot 3 has turned its BOM on.
+0:49.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:49.102: Robot 4 has turned its BOM on.
+0:49.274: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:49.330: Robot 3 has turned its BOM on.
+0:49.546: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:49.602: Robot 4 has turned its BOM on.
+0:49.770: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:49.826: Robot 3 has turned its BOM on.
+0:49.994: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:50.50: Robot 4 has turned its BOM on.
+0:50.274: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:50.330: Robot 3 has turned its BOM on.
+0:50.490: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:50.546: Robot 4 has turned its BOM on.
+0:50.770: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:50.826: Robot 3 has turned its BOM on.
+0:50.990: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:51.46: Robot 4 has turned its BOM on.
+0:51.270: Robot 4 passed the token to robot 3. Sensor matrix:
+(3 12)
+0:51.326: Robot 3 has turned its BOM on.
+0:51.378: Robot 9 has requested to join the token ring.
+0:51.494: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)
+0:51.550: Robot 4 has turned its BOM on.
+0:51.718: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:51.774: Robot 9 has turned its BOM on.
+0:51.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:52.46: Robot 3 has turned its BOM on.
+0:52.214: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:52.270: Robot 4 has turned its BOM on.
+0:52.490: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:52.546: Robot 9 has turned its BOM on.
+0:52.770: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:52.826: Robot 3 has turned its BOM on.
+0:52.990: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:53.46: Robot 4 has turned its BOM on.
+0:53.270: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:53.326: Robot 9 has turned its BOM on.
+0:53.494: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:53.551: Robot 3 has turned its BOM on.
+0:53.718: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:53.774: Robot 4 has turned its BOM on.
+0:53.990: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:54.46: Robot 9 has turned its BOM on.
+0:54.270: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:54.326: Robot 3 has turned its BOM on.
+0:54.490: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:54.546: Robot 4 has turned its BOM on.
+0:54.770: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:54.826: Robot 9 has turned its BOM on.
+0:54.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:55.46: Robot 3 has turned its BOM on.
+0:55.270: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:55.326: Robot 4 has turned its BOM on.
+0:55.494: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:55.550: Robot 9 has turned its BOM on.
+0:55.774: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:55.830: Robot 3 has turned its BOM on.
+0:55.990: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:56.46: Robot 4 has turned its BOM on.
+0:56.274: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:56.330: Robot 9 has turned its BOM on.
+0:56.490: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:56.546: Robot 3 has turned its BOM on.
+0:56.770: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:56.826: Robot 4 has turned its BOM on.
+0:56.990: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:57.46: Robot 9 has turned its BOM on.
+0:57.270: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:57.326: Robot 3 has turned its BOM on.
+0:57.494: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:57.550: Robot 4 has turned its BOM on.
+0:57.774: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:57.830: Robot 9 has turned its BOM on.
+0:57.990: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:58.46: Robot 3 has turned its BOM on.
+0:58.270: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:58.326: Robot 4 has turned its BOM on.
+0:58.490: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:58.546: Robot 9 has turned its BOM on.
+0:58.774: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:58.830: Robot 3 has turned its BOM on.
+0:59.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:59.102: Robot 4 has turned its BOM on.
+0:59.270: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+0:59.326: Robot 9 has turned its BOM on.
+0:59.498: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+0:59.554: Robot 3 has turned its BOM on.
+0:59.778: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+0:59.834: Robot 4 has turned its BOM on.
+0:59.990: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:0.46: Robot 9 has turned its BOM on.
+1:0.270: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:0.326: Robot 3 has turned its BOM on.
+1:0.546: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:0.602: Robot 4 has turned its BOM on.
+1:0.770: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:0.826: Robot 9 has turned its BOM on.
+1:1.46: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:1.102: Robot 3 has turned its BOM on.
+1:1.270: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:1.326: Robot 4 has turned its BOM on.
+1:1.550: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:1.606: Robot 9 has turned its BOM on.
+1:1.774: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:1.830: Robot 3 has turned its BOM on.
+1:2.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:2.102: Robot 4 has turned its BOM on.
+1:2.270: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:2.326: Robot 9 has turned its BOM on.
+1:2.546: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:2.602: Robot 3 has turned its BOM on.
+1:2.774: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:2.830: Robot 4 has turned its BOM on.
+1:3.46: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:3.102: Robot 9 has turned its BOM on.
+1:3.270: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:3.326: Robot 3 has turned its BOM on.
+1:3.550: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:3.606: Robot 4 has turned its BOM on.
+1:3.774: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:3.830: Robot 9 has turned its BOM on.
+1:4.46: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:4.102: Robot 3 has turned its BOM on.
+1:4.270: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:4.326: Robot 4 has turned its BOM on.
+1:4.546: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:4.602: Robot 9 has turned its BOM on.
+1:4.770: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:4.826: Robot 3 has turned its BOM on.
+1:5.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:5.102: Robot 4 has turned its BOM on.
+1:5.270: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:5.326: Robot 9 has turned its BOM on.
+1:5.554: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:5.610: Robot 3 has turned its BOM on.
+1:5.782: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:5.838: Robot 4 has turned its BOM on.
+1:6.46: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:6.102: Robot 9 has turned its BOM on.
+1:6.326: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:6.378: Robot 3 has turned its BOM on.
+1:6.550: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:6.606: Robot 4 has turned its BOM on.
+1:6.774: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:6.830: Robot 9 has turned its BOM on.
+1:7.50: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:7.106: Robot 3 has turned its BOM on.
+1:7.274: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:7.330: Robot 4 has turned its BOM on.
+1:7.546: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:7.602: Robot 9 has turned its BOM on.
+1:7.826: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:7.878: Robot 3 has turned its BOM on.
+1:8.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:8.102: Robot 4 has turned its BOM on.
+1:8.326: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:8.378: Robot 9 has turned its BOM on.
+1:8.550: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:8.606: Robot 3 has turned its BOM on.
+1:8.778: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:8.834: Robot 4 has turned its BOM on.
+1:9.46: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:9.102: Robot 9 has turned its BOM on.
+1:9.326: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:9.378: Robot 3 has turned its BOM on.
+1:9.546: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:9.602: Robot 4 has turned its BOM on.
+1:9.826: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:9.878: Robot 9 has turned its BOM on.
+1:10.50: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:10.106: Robot 3 has turned its BOM on.
+1:10.274: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:10.330: Robot 4 has turned its BOM on.
+1:10.546: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:10.602: Robot 9 has turned its BOM on.
+1:10.826: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:10.878: Robot 3 has turned its BOM on.
+1:11.46: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:11.102: Robot 4 has turned its BOM on.
+1:11.326: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:11.378: Robot 9 has turned its BOM on.
+1:11.546: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:11.602: Robot 3 has turned its BOM on.
+1:11.826: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:11.878: Robot 4 has turned its BOM on.
+1:12.50: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:12.106: Robot 9 has turned its BOM on.
+1:12.330: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:12.378: Robot 3 has turned its BOM on.
+1:12.546: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:12.602: Robot 4 has turned its BOM on.
+1:12.826: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:12.878: Robot 9 has turned its BOM on.
+1:13.46: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:13.102: Robot 3 has turned its BOM on.
+1:13.326: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:13.378: Robot 4 has turned its BOM on.
+1:13.546: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:13.602: Robot 9 has turned its BOM on.
+1:13.826: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:13.878: Robot 3 has turned its BOM on.
+1:14.54: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:14.110: Robot 4 has turned its BOM on.
+1:14.334: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:14.378: Robot 9 has turned its BOM on.
+1:14.546: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:14.602: Robot 3 has turned its BOM on.
+1:14.826: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:14.878: Robot 4 has turned its BOM on.
+1:15.46: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:15.102: Robot 9 has turned its BOM on.
+1:15.326: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:15.378: Robot 3 has turned its BOM on.
+1:15.602: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:15.658: Robot 4 has turned its BOM on.
+1:15.826: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:15.878: Robot 9 has turned its BOM on.
+1:16.50: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:16.106: Robot 3 has turned its BOM on.
+1:16.330: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:16.378: Robot 4 has turned its BOM on.
+1:16.602: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:16.658: Robot 9 has turned its BOM on.
+1:16.826: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:16.878: Robot 3 has turned its BOM on.
+1:17.102: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:17.158: Robot 4 has turned its BOM on.
+1:17.330: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:17.378: Robot 9 has turned its BOM on.
+1:17.602: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:17.658: Robot 3 has turned its BOM on.
+1:17.826: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:17.878: Robot 4 has turned its BOM on.
+1:18.106: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+1:18.162: Robot 9 has turned its BOM on.
+1:18.330: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:18.378: Robot 3 has turned its BOM on.
+1:18.602: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:18.658: Robot 4 has turned its BOM on.
+1:18.826: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:18.878: Robot 9 has turned its BOM on.
+1:19.102: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:19.158: Robot 3 has turned its BOM on.
+1:19.330: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:19.378: Robot 4 has turned its BOM on.
+1:19.602: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:19.658: Robot 9 has turned its BOM on.
+1:19.826: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:19.878: Robot 3 has turned its BOM on.
+1:20.110: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:20.166: Robot 4 has turned its BOM on.
+1:20.338: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:20.378: Robot 9 has turned its BOM on.
+1:20.602: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:20.658: Robot 3 has turned its BOM on.
+1:20.826: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:20.878: Robot 4 has turned its BOM on.
+1:21.106: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:21.162: Robot 9 has turned its BOM on.
+1:21.330: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:21.378: Robot 3 has turned its BOM on.
+1:21.606: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:21.662: Robot 4 has turned its BOM on.
+1:21.830: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:21.878: Robot 9 has turned its BOM on.
+1:22.102: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:22.158: Robot 3 has turned its BOM on.
+1:22.326: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:22.378: Robot 4 has turned its BOM on.
+1:22.602: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:22.658: Robot 9 has turned its BOM on.
+1:22.878: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:22.934: Robot 3 has turned its BOM on.
+1:23.106: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:23.162: Robot 4 has turned its BOM on.
+1:23.330: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:23.378: Robot 9 has turned its BOM on.
+1:23.602: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:23.658: Robot 3 has turned its BOM on.
+1:23.826: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:23.878: Robot 4 has turned its BOM on.
+1:24.102: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:24.158: Robot 9 has turned its BOM on.
+1:24.378: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:24.434: Robot 3 has turned its BOM on.
+1:24.602: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:24.658: Robot 4 has turned its BOM on.
+1:24.878: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:24.934: Robot 9 has turned its BOM on.
+1:25.106: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:25.162: Robot 3 has turned its BOM on.
+1:25.378: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:25.434: Robot 4 has turned its BOM on.
+1:25.602: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:25.658: Robot 9 has turned its BOM on.
+1:25.878: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:25.934: Robot 3 has turned its BOM on.
+1:26.102: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:26.158: Robot 4 has turned its BOM on.
+1:26.378: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:26.434: Robot 9 has turned its BOM on.
+1:26.610: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:26.666: Robot 3 has turned its BOM on.
+1:26.878: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:26.934: Robot 4 has turned its BOM on.
+1:27.102: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:27.158: Robot 9 has turned its BOM on.
+1:27.378: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:27.434: Robot 3 has turned its BOM on.
+1:27.602: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:27.658: Robot 4 has turned its BOM on.
+1:27.878: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:27.934: Robot 9 has turned its BOM on.
+1:28.102: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:28.158: Robot 3 has turned its BOM on.
+1:28.378: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:28.434: Robot 4 has turned its BOM on.
+1:28.606: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:28.662: Robot 9 has turned its BOM on.
+1:28.878: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:28.934: Robot 3 has turned its BOM on.
+1:29.102: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:29.158: Robot 4 has turned its BOM on.
+1:29.378: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:29.434: Robot 9 has turned its BOM on.
+1:29.602: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:29.658: Robot 3 has turned its BOM on.
+1:29.878: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:29.934: Robot 4 has turned its BOM on.
+1:30.158: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:30.214: Robot 9 has turned its BOM on.
+1:30.382: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:30.438: Robot 3 has turned its BOM on.
+1:30.606: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:30.662: Robot 4 has turned its BOM on.
+1:30.878: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:30.934: Robot 9 has turned its BOM on.
+1:31.102: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:31.158: Robot 3 has turned its BOM on.
+1:31.378: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:31.434: Robot 4 has turned its BOM on.
+1:31.658: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:31.714: Robot 9 has turned its BOM on.
+1:31.878: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:31.934: Robot 3 has turned its BOM on.
+1:32.158: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:32.214: Robot 4 has turned its BOM on.
+1:32.382: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:32.438: Robot 9 has turned its BOM on.
+1:32.606: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:32.662: Robot 3 has turned its BOM on.
+1:32.878: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:32.934: Robot 4 has turned its BOM on.
+1:33.158: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:33.214: Robot 9 has turned its BOM on.
+1:33.378: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:33.434: Robot 3 has turned its BOM on.
+1:33.658: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:33.714: Robot 4 has turned its BOM on.
+1:33.878: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:33.934: Robot 9 has turned its BOM on.
+1:34.158: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:34.214: Robot 3 has turned its BOM on.
+1:34.386: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:34.442: Robot 4 has turned its BOM on.
+1:34.666: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:34.722: Robot 9 has turned its BOM on.
+1:34.879: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:34.934: Robot 3 has turned its BOM on.
+1:35.158: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:35.214: Robot 4 has turned its BOM on.
+1:35.378: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:35.434: Robot 9 has turned its BOM on.
+1:35.658: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:35.714: Robot 3 has turned its BOM on.
+1:35.878: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:35.934: Robot 4 has turned its BOM on.
+1:36.158: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:36.214: Robot 9 has turned its BOM on.
+1:36.382: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:36.438: Robot 3 has turned its BOM on.
+1:36.662: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:36.718: Robot 4 has turned its BOM on.
+1:36.878: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:36.934: Robot 9 has turned its BOM on.
+1:37.158: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:37.214: Robot 3 has turned its BOM on.
+1:37.378: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:37.434: Robot 4 has turned its BOM on.
+1:37.662: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:37.718: Robot 9 has turned its BOM on.
+1:37.879: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:37.934: Robot 3 has turned its BOM on.
+1:38.158: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:38.214: Robot 4 has turned its BOM on.
+1:38.387: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:38.442: Robot 9 has turned its BOM on.
+1:38.666: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:38.722: Robot 3 has turned its BOM on.
+1:38.878: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:38.934: Robot 4 has turned its BOM on.
+1:39.158: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:39.214: Robot 9 has turned its BOM on.
+1:39.434: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:39.490: Robot 3 has turned its BOM on.
+1:39.662: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:39.718: Robot 4 has turned its BOM on.
+1:39.934: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:39.990: Robot 9 has turned its BOM on.
+1:40.158: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:40.214: Robot 3 has turned its BOM on.
+1:40.438: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:40.494: Robot 4 has turned its BOM on.
+1:40.662: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:40.718: Robot 9 has turned its BOM on.
+1:40.934: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:40.990: Robot 3 has turned its BOM on.
+1:41.158: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:41.214: Robot 4 has turned its BOM on.
+1:41.434: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:41.490: Robot 9 has turned its BOM on.
+1:41.666: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:41.722: Robot 3 has turned its BOM on.
+1:41.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:41.990: Robot 4 has turned its BOM on.
+1:42.158: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:42.214: Robot 9 has turned its BOM on.
+1:42.439: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:42.494: Robot 3 has turned its BOM on.
+1:42.662: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:42.718: Robot 4 has turned its BOM on.
+1:42.934: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:42.990: Robot 9 has turned its BOM on.
+1:43.162: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:43.218: Robot 3 has turned its BOM on.
+1:43.434: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:43.490: Robot 4 has turned its BOM on.
+1:43.658: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:43.714: Robot 9 has turned its BOM on.
+1:43.938: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:43.994: Robot 3 has turned its BOM on.
+1:44.162: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:44.218: Robot 4 has turned its BOM on.
+1:44.434: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:44.491: Robot 9 has turned its BOM on.
+1:44.658: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:44.714: Robot 3 has turned its BOM on.
+1:44.938: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:44.994: Robot 4 has turned its BOM on.
+1:45.162: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:45.219: Robot 9 has turned its BOM on.
+1:45.434: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:45.490: Robot 3 has turned its BOM on.
+1:45.659: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:45.714: Robot 4 has turned its BOM on.
+1:45.934: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:45.990: Robot 9 has turned its BOM on.
+1:46.158: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:46.214: Robot 3 has turned its BOM on.
+1:46.434: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:46.490: Robot 4 has turned its BOM on.
+1:46.714: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:46.770: Robot 9 has turned its BOM on.
+1:46.938: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:46.994: Robot 3 has turned its BOM on.
+1:47.162: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:47.218: Robot 4 has turned its BOM on.
+1:47.434: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:47.490: Robot 9 has turned its BOM on.
+1:47.658: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:47.714: Robot 3 has turned its BOM on.
+1:47.934: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:47.990: Robot 4 has turned its BOM on.
+1:48.215: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:48.270: Robot 9 has turned its BOM on.
+1:48.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:48.490: Robot 3 has turned its BOM on.
+1:48.714: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:48.770: Robot 4 has turned its BOM on.
+1:48.942: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:48.998: Robot 9 has turned its BOM on.
+1:49.166: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:49.222: Robot 3 has turned its BOM on.
+1:49.435: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:49.491: Robot 4 has turned its BOM on.
+1:49.714: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:49.770: Robot 9 has turned its BOM on.
+1:49.935: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:49.990: Robot 3 has turned its BOM on.
+1:50.214: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:50.271: Robot 4 has turned its BOM on.
+1:50.434: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:50.490: Robot 9 has turned its BOM on.
+1:50.714: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:50.770: Robot 3 has turned its BOM on.
+1:50.939: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:50.994: Robot 4 has turned its BOM on.
+1:51.218: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:51.274: Robot 9 has turned its BOM on.
+1:51.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:51.491: Robot 3 has turned its BOM on.
+1:51.715: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:51.771: Robot 4 has turned its BOM on.
+1:51.935: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:51.991: Robot 9 has turned its BOM on.
+1:52.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:52.271: Robot 3 has turned its BOM on.
+1:52.435: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:52.491: Robot 4 has turned its BOM on.
+1:52.715: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:52.771: Robot 9 has turned its BOM on.
+1:52.939: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:52.995: Robot 3 has turned its BOM on.
+1:53.227: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:53.283: Robot 4 has turned its BOM on.
+1:53.435: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:53.491: Robot 9 has turned its BOM on.
+1:53.715: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:53.771: Robot 3 has turned its BOM on.
+1:53.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:53.991: Robot 4 has turned its BOM on.
+1:54.219: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:54.275: Robot 9 has turned its BOM on.
+1:54.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:54.547: Robot 3 has turned its BOM on.
+1:54.715: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:54.771: Robot 4 has turned its BOM on.
+1:54.939: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:54.995: Robot 9 has turned its BOM on.
+1:55.219: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:55.275: Robot 3 has turned its BOM on.
+1:55.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:55.547: Robot 4 has turned its BOM on.
+1:55.715: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:55.771: Robot 9 has turned its BOM on.
+1:55.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:56.47: Robot 3 has turned its BOM on.
+1:56.219: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:56.275: Robot 4 has turned its BOM on.
+1:56.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:56.547: Robot 9 has turned its BOM on.
+1:56.719: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:56.775: Robot 3 has turned its BOM on.
+1:56.995: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:57.51: Robot 4 has turned its BOM on.
+1:57.219: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:57.275: Robot 9 has turned its BOM on.
+1:57.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:57.547: Robot 3 has turned its BOM on.
+1:57.715: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:57.771: Robot 4 has turned its BOM on.
+1:57.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+1:58.47: Robot 9 has turned its BOM on.
+1:58.219: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:58.275: Robot 3 has turned its BOM on.
+1:58.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:58.547: Robot 4 has turned its BOM on.
+1:58.715: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:58.771: Robot 9 has turned its BOM on.
+1:58.995: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:59.51: Robot 3 has turned its BOM on.
+1:59.219: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+1:59.275: Robot 4 has turned its BOM on.
+1:59.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+1:59.547: Robot 9 has turned its BOM on.
+1:59.715: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+1:59.771: Robot 3 has turned its BOM on.
+1:59.991: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:0.47: Robot 4 has turned its BOM on.
+2:0.215: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:0.271: Robot 9 has turned its BOM on.
+2:0.495: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:0.551: Robot 3 has turned its BOM on.
+2:0.719: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:0.775: Robot 4 has turned its BOM on.
+2:0.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:1.47: Robot 9 has turned its BOM on.
+2:1.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:1.271: Robot 3 has turned its BOM on.
+2:1.495: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:1.551: Robot 4 has turned its BOM on.
+2:1.719: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:1.775: Robot 9 has turned its BOM on.
+2:1.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:2.47: Robot 3 has turned its BOM on.
+2:2.219: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:2.275: Robot 4 has turned its BOM on.
+2:2.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:2.547: Robot 9 has turned its BOM on.
+2:2.715: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:2.771: Robot 3 has turned its BOM on.
+2:2.991: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:3.47: Robot 4 has turned its BOM on.
+2:3.271: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:3.327: Robot 9 has turned its BOM on.
+2:3.495: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:3.551: Robot 3 has turned its BOM on.
+2:3.719: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:3.775: Robot 4 has turned its BOM on.
+2:3.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:4.47: Robot 9 has turned its BOM on.
+2:4.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:4.327: Robot 3 has turned its BOM on.
+2:4.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:4.547: Robot 4 has turned its BOM on.
+2:4.775: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:4.831: Robot 9 has turned its BOM on.
+2:4.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:5.47: Robot 3 has turned its BOM on.
+2:5.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:5.327: Robot 4 has turned its BOM on.
+2:5.495: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:5.551: Robot 9 has turned its BOM on.
+2:5.775: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:5.831: Robot 3 has turned its BOM on.
+2:5.999: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:6.55: Robot 4 has turned its BOM on.
+2:6.279: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:6.335: Robot 9 has turned its BOM on.
+2:6.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:6.547: Robot 3 has turned its BOM on.
+2:6.771: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:6.827: Robot 4 has turned its BOM on.
+2:6.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:7.47: Robot 9 has turned its BOM on.
+2:7.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:7.327: Robot 3 has turned its BOM on.
+2:7.495: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:7.551: Robot 4 has turned its BOM on.
+2:7.775: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:7.831: Robot 9 has turned its BOM on.
+2:7.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:8.47: Robot 3 has turned its BOM on.
+2:8.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:8.327: Robot 4 has turned its BOM on.
+2:8.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:8.547: Robot 9 has turned its BOM on.
+2:8.771: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:8.827: Robot 3 has turned its BOM on.
+2:9.47: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:9.103: Robot 4 has turned its BOM on.
+2:9.271: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:9.327: Robot 9 has turned its BOM on.
+2:9.495: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:9.551: Robot 3 has turned its BOM on.
+2:9.775: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:9.831: Robot 4 has turned its BOM on.
+2:9.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:10.47: Robot 9 has turned its BOM on.
+2:10.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:10.327: Robot 3 has turned its BOM on.
+2:10.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:10.603: Robot 4 has turned its BOM on.
+2:10.775: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:10.831: Robot 9 has turned its BOM on.
+2:11.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:11.103: Robot 3 has turned its BOM on.
+2:11.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:11.327: Robot 4 has turned its BOM on.
+2:11.495: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:11.551: Robot 9 has turned its BOM on.
+2:11.775: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:11.831: Robot 3 has turned its BOM on.
+2:12.47: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:12.103: Robot 4 has turned its BOM on.
+2:12.271: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:12.327: Robot 9 has turned its BOM on.
+2:12.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:12.603: Robot 3 has turned its BOM on.
+2:12.779: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:12.835: Robot 4 has turned its BOM on.
+2:13.47: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:13.103: Robot 9 has turned its BOM on.
+2:13.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:13.327: Robot 3 has turned its BOM on.
+2:13.551: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:13.607: Robot 4 has turned its BOM on.
+2:13.775: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:13.831: Robot 9 has turned its BOM on.
+2:14.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:14.103: Robot 3 has turned its BOM on.
+2:14.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:14.327: Robot 4 has turned its BOM on.
+2:14.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:14.603: Robot 9 has turned its BOM on.
+2:14.775: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:14.831: Robot 3 has turned its BOM on.
+2:15.47: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:15.103: Robot 4 has turned its BOM on.
+2:15.275: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:15.331: Robot 9 has turned its BOM on.
+2:15.551: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:15.607: Robot 3 has turned its BOM on.
+2:15.775: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:15.831: Robot 4 has turned its BOM on.
+2:16.47: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:16.103: Robot 9 has turned its BOM on.
+2:16.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:16.327: Robot 3 has turned its BOM on.
+2:16.551: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:16.607: Robot 4 has turned its BOM on.
+2:16.775: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:16.831: Robot 9 has turned its BOM on.
+2:17.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:17.103: Robot 3 has turned its BOM on.
+2:17.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:17.327: Robot 4 has turned its BOM on.
+2:17.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:17.603: Robot 9 has turned its BOM on.
+2:17.827: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:17.879: Robot 3 has turned its BOM on.
+2:18.47: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:18.103: Robot 4 has turned its BOM on.
+2:18.271: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:18.327: Robot 9 has turned its BOM on.
+2:18.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:18.603: Robot 3 has turned its BOM on.
+2:18.771: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:18.827: Robot 4 has turned its BOM on.
+2:19.47: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:19.103: Robot 9 has turned its BOM on.
+2:19.327: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:19.379: Robot 3 has turned its BOM on.
+2:19.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:19.603: Robot 4 has turned its BOM on.
+2:19.827: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:19.879: Robot 9 has turned its BOM on.
+2:20.51: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:20.107: Robot 3 has turned its BOM on.
+2:20.275: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:20.331: Robot 4 has turned its BOM on.
+2:20.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:20.603: Robot 9 has turned its BOM on.
+2:20.831: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:20.879: Robot 3 has turned its BOM on.
+2:21.47: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:21.103: Robot 4 has turned its BOM on.
+2:21.327: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:21.379: Robot 9 has turned its BOM on.
+2:21.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:21.603: Robot 3 has turned its BOM on.
+2:21.827: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:21.879: Robot 4 has turned its BOM on.
+2:22.51: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+2:22.107: Robot 9 has turned its BOM on.
+2:22.331: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:22.379: Robot 3 has turned its BOM on.
+2:22.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:22.603: Robot 4 has turned its BOM on.
+2:22.827: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:22.879: Robot 9 has turned its BOM on.
+2:23.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:23.103: Robot 3 has turned its BOM on.
+2:23.327: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:23.379: Robot 4 has turned its BOM on.
+2:23.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:23.603: Robot 9 has turned its BOM on.
+2:23.827: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:23.879: Robot 3 has turned its BOM on.
+2:24.51: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:24.107: Robot 4 has turned its BOM on.
+2:24.335: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:24.379: Robot 9 has turned its BOM on.
+2:24.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:24.603: Robot 3 has turned its BOM on.
+2:24.827: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:24.879: Robot 4 has turned its BOM on.
+2:25.47: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+2:25.103: Robot 9 has turned its BOM on.
+2:25.327: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:27.463: Robot 9 passed the token to robot 4. Sensor matrix:
+(4 6)
+2:27.519: Robot 3 has requested to join the token ring.
+2:27.575: Robot 4 has turned its BOM on.
+2:27.635: Robot 4 passed the token to robot 9. Sensor matrix:
+(9 13)
+2:27.691: Robot 9 has turned its BOM on.
+2:27.879: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:27.935: Robot 3 has turned its BOM on.
+2:28.159: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:28.215: Robot 4 has turned its BOM on.
+2:28.379: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:28.435: Robot 9 has turned its BOM on.
+2:28.659: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:28.715: Robot 3 has turned its BOM on.
+2:28.883: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:28.939: Robot 4 has turned its BOM on.
+2:29.163: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:29.219: Robot 9 has turned its BOM on.
+2:29.379: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:29.435: Robot 3 has turned its BOM on.
+2:29.659: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:29.715: Robot 4 has turned its BOM on.
+2:29.879: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:29.935: Robot 9 has turned its BOM on.
+2:30.163: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:30.219: Robot 3 has turned its BOM on.
+2:30.435: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:30.491: Robot 4 has turned its BOM on.
+2:30.659: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:30.715: Robot 9 has turned its BOM on.
+2:30.887: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:30.943: Robot 3 has turned its BOM on.
+2:31.167: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:31.223: Robot 4 has turned its BOM on.
+2:31.379: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:31.435: Robot 9 has turned its BOM on.
+2:31.659: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:31.715: Robot 3 has turned its BOM on.
+2:31.771: Robot 4 has requested to join the token ring.
+2:31.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:31.991: Robot 4 has turned its BOM on.
+2:32.163: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:32.219: Robot 9 has turned its BOM on.
+2:32.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:32.491: Robot 3 has turned its BOM on.
+2:32.659: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:32.715: Robot 4 has turned its BOM on.
+2:32.883: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:32.939: Robot 9 has turned its BOM on.
+2:33.163: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:33.219: Robot 3 has turned its BOM on.
+2:33.435: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:33.491: Robot 4 has turned its BOM on.
+2:33.659: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:33.715: Robot 9 has turned its BOM on.
+2:33.935: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:33.991: Robot 3 has turned its BOM on.
+2:34.163: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:34.219: Robot 4 has turned its BOM on.
+2:34.439: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:34.495: Robot 9 has turned its BOM on.
+2:34.663: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:34.719: Robot 3 has turned its BOM on.
+2:34.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:34.991: Robot 4 has turned its BOM on.
+2:35.159: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:35.215: Robot 9 has turned its BOM on.
+2:35.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:35.491: Robot 3 has turned its BOM on.
+2:35.663: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:35.719: Robot 4 has turned its BOM on.
+2:35.935: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:35.991: Robot 9 has turned its BOM on.
+2:36.159: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:36.215: Robot 3 has turned its BOM on.
+2:36.439: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:36.495: Robot 4 has turned its BOM on.
+2:36.663: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:36.719: Robot 9 has turned its BOM on.
+2:36.935: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:36.991: Robot 3 has turned its BOM on.
+2:37.159: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:37.215: Robot 4 has turned its BOM on.
+2:37.435: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:37.491: Robot 9 has turned its BOM on.
+2:37.659: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:37.715: Robot 3 has turned its BOM on.
+2:37.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:37.991: Robot 4 has turned its BOM on.
+2:38.159: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:38.215: Robot 9 has turned its BOM on.
+2:38.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:38.491: Robot 3 has turned its BOM on.
+2:38.659: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:38.715: Robot 4 has turned its BOM on.
+2:38.935: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:38.991: Robot 9 has turned its BOM on.
+2:39.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:39.271: Robot 3 has turned its BOM on.
+2:39.443: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:39.499: Robot 4 has turned its BOM on.
+2:39.667: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:39.723: Robot 9 has turned its BOM on.
+2:39.935: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:39.991: Robot 3 has turned its BOM on.
+2:40.159: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:40.215: Robot 4 has turned its BOM on.
+2:40.435: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:40.491: Robot 9 has turned its BOM on.
+2:40.715: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:40.771: Robot 3 has turned its BOM on.
+2:40.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:40.991: Robot 4 has turned its BOM on.
+2:41.215: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:41.271: Robot 9 has turned its BOM on.
+2:41.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:41.491: Robot 3 has turned its BOM on.
+2:41.663: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:41.719: Robot 4 has turned its BOM on.
+2:41.936: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:41.991: Robot 9 has turned its BOM on.
+2:42.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:42.271: Robot 3 has turned its BOM on.
+2:42.435: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:42.491: Robot 4 has turned its BOM on.
+2:42.715: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:42.771: Robot 9 has turned its BOM on.
+2:42.935: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:42.991: Robot 3 has turned its BOM on.
+2:43.215: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:43.271: Robot 4 has turned its BOM on.
+2:43.439: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:43.495: Robot 9 has turned its BOM on.
+2:43.719: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:43.775: Robot 3 has turned its BOM on.
+2:43.935: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:43.991: Robot 4 has turned its BOM on.
+2:44.215: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:44.271: Robot 9 has turned its BOM on.
+2:44.435: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:44.491: Robot 3 has turned its BOM on.
+2:44.715: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:44.771: Robot 4 has turned its BOM on.
+2:44.935: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:44.991: Robot 9 has turned its BOM on.
+2:45.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:45.271: Robot 3 has turned its BOM on.
+2:45.439: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:45.495: Robot 4 has turned its BOM on.
+2:45.719: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:45.775: Robot 9 has turned its BOM on.
+2:45.935: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:45.991: Robot 3 has turned its BOM on.
+2:46.215: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:46.271: Robot 4 has turned its BOM on.
+2:46.435: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:46.491: Robot 9 has turned its BOM on.
+2:46.723: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:46.779: Robot 3 has turned its BOM on.
+2:46.991: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:47.47: Robot 4 has turned its BOM on.
+2:47.215: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:47.271: Robot 9 has turned its BOM on.
+2:47.439: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:47.495: Robot 3 has turned its BOM on.
+2:47.719: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:47.775: Robot 4 has turned its BOM on.
+2:47.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+2:48.47: Robot 9 has turned its BOM on.
+2:48.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:48.271: Robot 3 has turned its BOM on.
+2:48.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:48.547: Robot 4 has turned its BOM on.
+2:48.719: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:48.775: Robot 9 has turned its BOM on.
+2:48.992: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:49.47: Robot 3 has turned its BOM on.
+2:49.215: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:49.271: Robot 4 has turned its BOM on.
+2:49.496: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:49.551: Robot 9 has turned its BOM on.
+2:49.719: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:49.775: Robot 3 has turned its BOM on.
+2:49.991: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:50.47: Robot 4 has turned its BOM on.
+2:50.215: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:50.271: Robot 9 has turned its BOM on.
+2:50.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:50.547: Robot 3 has turned its BOM on.
+2:50.719: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:50.775: Robot 4 has turned its BOM on.
+2:50.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:51.47: Robot 9 has turned its BOM on.
+2:51.215: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:51.271: Robot 3 has turned its BOM on.
+2:51.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:51.547: Robot 4 has turned its BOM on.
+2:51.715: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:51.771: Robot 9 has turned its BOM on.
+2:51.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:52.47: Robot 3 has turned its BOM on.
+2:52.215: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:52.271: Robot 4 has turned its BOM on.
+2:52.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:52.547: Robot 9 has turned its BOM on.
+2:52.715: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:52.771: Robot 3 has turned its BOM on.
+2:52.995: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:53.51: Robot 4 has turned its BOM on.
+2:53.219: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:53.275: Robot 9 has turned its BOM on.
+2:53.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:53.547: Robot 3 has turned its BOM on.
+2:53.715: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:53.771: Robot 4 has turned its BOM on.
+2:53.995: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:54.51: Robot 9 has turned its BOM on.
+2:54.219: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:54.275: Robot 3 has turned its BOM on.
+2:54.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:54.547: Robot 4 has turned its BOM on.
+2:54.715: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:54.771: Robot 9 has turned its BOM on.
+2:54.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:55.47: Robot 3 has turned its BOM on.
+2:55.215: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:55.271: Robot 4 has turned its BOM on.
+2:55.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:55.547: Robot 9 has turned its BOM on.
+2:55.771: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:55.827: Robot 3 has turned its BOM on.
+2:55.995: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:56.51: Robot 4 has turned its BOM on.
+2:56.219: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:56.275: Robot 9 has turned its BOM on.
+2:56.495: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:56.552: Robot 3 has turned its BOM on.
+2:56.719: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:56.775: Robot 4 has turned its BOM on.
+2:56.991: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:57.47: Robot 9 has turned its BOM on.
+2:57.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:57.327: Robot 3 has turned its BOM on.
+2:57.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:57.547: Robot 4 has turned its BOM on.
+2:57.771: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:57.827: Robot 9 has turned its BOM on.
+2:57.995: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:58.51: Robot 3 has turned its BOM on.
+2:58.275: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:58.331: Robot 4 has turned its BOM on.
+2:58.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:58.547: Robot 9 has turned its BOM on.
+2:58.771: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:58.827: Robot 3 has turned its BOM on.
+2:58.991: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:59.47: Robot 4 has turned its BOM on.
+2:59.271: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+2:59.327: Robot 9 has turned its BOM on.
+2:59.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+2:59.547: Robot 3 has turned its BOM on.
+2:59.771: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+2:59.827: Robot 4 has turned its BOM on.
+2:59.995: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:0.51: Robot 9 has turned its BOM on.
+3:0.275: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:0.331: Robot 3 has turned its BOM on.
+3:0.491: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:0.547: Robot 4 has turned its BOM on.
+3:0.771: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:0.827: Robot 9 has turned its BOM on.
+3:0.991: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:1.47: Robot 3 has turned its BOM on.
+3:1.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:1.327: Robot 4 has turned its BOM on.
+3:1.491: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:1.547: Robot 9 has turned its BOM on.
+3:1.771: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:1.827: Robot 3 has turned its BOM on.
+3:1.995: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:2.51: Robot 4 has turned its BOM on.
+3:2.275: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:2.331: Robot 9 has turned its BOM on.
+3:2.491: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:2.547: Robot 3 has turned its BOM on.
+3:2.771: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:2.827: Robot 4 has turned its BOM on.
+3:3.47: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:3.104: Robot 9 has turned its BOM on.
+3:3.275: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:3.331: Robot 3 has turned its BOM on.
+3:3.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:3.603: Robot 4 has turned its BOM on.
+3:3.771: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:3.827: Robot 9 has turned its BOM on.
+3:3.995: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:4.51: Robot 3 has turned its BOM on.
+3:4.275: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:4.331: Robot 4 has turned its BOM on.
+3:4.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:4.603: Robot 9 has turned its BOM on.
+3:4.771: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:4.827: Robot 3 has turned its BOM on.
+3:5.47: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:5.103: Robot 4 has turned its BOM on.
+3:5.275: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:5.331: Robot 9 has turned its BOM on.
+3:5.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:5.603: Robot 3 has turned its BOM on.
+3:5.775: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:5.831: Robot 4 has turned its BOM on.
+3:6.51: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:6.107: Robot 9 has turned its BOM on.
+3:6.275: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:6.331: Robot 3 has turned its BOM on.
+3:6.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:6.604: Robot 4 has turned its BOM on.
+3:6.771: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:6.827: Robot 9 has turned its BOM on.
+3:7.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:7.103: Robot 3 has turned its BOM on.
+3:7.275: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:7.331: Robot 4 has turned its BOM on.
+3:7.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:7.603: Robot 9 has turned its BOM on.
+3:7.772: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:7.827: Robot 3 has turned its BOM on.
+3:8.51: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:8.107: Robot 4 has turned its BOM on.
+3:8.275: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:8.331: Robot 9 has turned its BOM on.
+3:8.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:8.603: Robot 3 has turned its BOM on.
+3:8.779: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:8.835: Robot 4 has turned its BOM on.
+3:9.47: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:9.103: Robot 9 has turned its BOM on.
+3:9.271: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:9.327: Robot 3 has turned its BOM on.
+3:9.551: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:9.607: Robot 4 has turned its BOM on.
+3:9.775: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:9.831: Robot 9 has turned its BOM on.
+3:10.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:10.103: Robot 3 has turned its BOM on.
+3:10.271: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:10.327: Robot 4 has turned its BOM on.
+3:10.551: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:10.607: Robot 9 has turned its BOM on.
+3:10.775: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:10.831: Robot 3 has turned its BOM on.
+3:11.59: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:11.115: Robot 4 has turned its BOM on.
+3:11.287: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:11.343: Robot 9 has turned its BOM on.
+3:11.547: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:11.603: Robot 3 has turned its BOM on.
+3:11.827: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:11.880: Robot 4 has turned its BOM on.
+3:12.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:12.103: Robot 9 has turned its BOM on.
+3:12.327: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:12.379: Robot 3 has turned its BOM on.
+3:12.551: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:12.607: Robot 4 has turned its BOM on.
+3:12.776: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:12.831: Robot 9 has turned its BOM on.
+3:13.47: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:13.103: Robot 3 has turned its BOM on.
+3:13.327: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:13.380: Robot 4 has turned its BOM on.
+3:13.547: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:13.603: Robot 9 has turned its BOM on.
+3:13.827: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:13.880: Robot 3 has turned its BOM on.
+3:14.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:14.103: Robot 4 has turned its BOM on.
+3:14.327: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:14.380: Robot 9 has turned its BOM on.
+3:14.551: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:14.607: Robot 3 has turned its BOM on.
+3:14.832: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:14.880: Robot 4 has turned its BOM on.
+3:15.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:15.104: Robot 9 has turned its BOM on.
+3:15.327: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:15.380: Robot 3 has turned its BOM on.
+3:15.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:15.603: Robot 4 has turned its BOM on.
+3:15.828: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+3:15.880: Robot 9 has turned its BOM on.
+3:16.48: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:16.104: Robot 3 has turned its BOM on.
+3:16.328: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:16.380: Robot 4 has turned its BOM on.
+3:16.552: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:16.608: Robot 9 has turned its BOM on.
+3:16.832: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:16.880: Robot 3 has turned its BOM on.
+3:17.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:17.104: Robot 4 has turned its BOM on.
+3:17.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:17.380: Robot 9 has turned its BOM on.
+3:17.548: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:17.604: Robot 3 has turned its BOM on.
+3:17.832: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:17.880: Robot 4 has turned its BOM on.
+3:18.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:18.160: Robot 9 has turned its BOM on.
+3:18.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:18.380: Robot 3 has turned its BOM on.
+3:18.548: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:18.604: Robot 4 has turned its BOM on.
+3:18.828: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:18.880: Robot 9 has turned its BOM on.
+3:19.52: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:19.108: Robot 3 has turned its BOM on.
+3:19.332: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:19.380: Robot 4 has turned its BOM on.
+3:19.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:19.660: Robot 9 has turned its BOM on.
+3:19.832: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:19.880: Robot 3 has turned its BOM on.
+3:20.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:20.160: Robot 4 has turned its BOM on.
+3:20.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:20.380: Robot 9 has turned its BOM on.
+3:20.552: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:20.608: Robot 3 has turned its BOM on.
+3:20.832: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:21.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:21.160: Robot 9 has turned its BOM on.
+3:21.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:21.380: Robot 3 has turned its BOM on.
+3:21.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:21.660: Robot 4 has turned its BOM on.
+3:21.832: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+3:21.880: Robot 9 has turned its BOM on.
+3:22.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:22.160: Robot 3 has turned its BOM on.
+3:22.328: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:22.380: Robot 4 has turned its BOM on.
+3:22.608: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:22.664: Robot 9 has turned its BOM on.
+3:22.832: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:22.880: Robot 3 has turned its BOM on.
+3:23.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:23.160: Robot 4 has turned its BOM on.
+3:23.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:23.380: Robot 9 has turned its BOM on.
+3:23.604: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:23.660: Robot 3 has turned its BOM on.
+3:23.832: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:23.880: Robot 4 has turned its BOM on.
+3:24.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:24.160: Robot 9 has turned its BOM on.
+3:24.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:24.380: Robot 3 has turned its BOM on.
+3:24.612: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:24.668: Robot 4 has turned its BOM on.
+3:24.840: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:24.880: Robot 9 has turned its BOM on.
+3:25.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:25.160: Robot 3 has turned its BOM on.
+3:25.328: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:25.380: Robot 4 has turned its BOM on.
+3:25.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:25.660: Robot 9 has turned its BOM on.
+3:25.828: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:25.880: Robot 3 has turned its BOM on.
+3:26.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:26.160: Robot 4 has turned its BOM on.
+3:26.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:26.380: Robot 9 has turned its BOM on.
+3:26.604: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:26.880: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:26.936: Robot 4 has turned its BOM on.
+3:27.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:27.160: Robot 9 has turned its BOM on.
+3:27.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:27.380: Robot 3 has turned its BOM on.
+3:27.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:27.660: Robot 4 has turned its BOM on.
+3:27.828: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:27.880: Robot 9 has turned its BOM on.
+3:28.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:28.160: Robot 3 has turned its BOM on.
+3:28.380: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:28.436: Robot 4 has turned its BOM on.
+3:28.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:28.660: Robot 9 has turned its BOM on.
+3:28.880: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:28.936: Robot 3 has turned its BOM on.
+3:29.108: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:29.164: Robot 4 has turned its BOM on.
+3:29.332: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:29.380: Robot 9 has turned its BOM on.
+3:29.604: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:29.660: Robot 3 has turned its BOM on.
+3:29.880: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:29.936: Robot 4 has turned its BOM on.
+3:30.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:30.160: Robot 9 has turned its BOM on.
+3:30.380: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:30.436: Robot 3 has turned its BOM on.
+3:30.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:30.660: Robot 4 has turned its BOM on.
+3:30.880: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:30.936: Robot 9 has turned its BOM on.
+3:31.108: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:31.164: Robot 3 has turned its BOM on.
+3:31.380: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:31.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:31.660: Robot 9 has turned its BOM on.
+3:31.880: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:31.936: Robot 3 has turned its BOM on.
+3:32.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:32.160: Robot 4 has turned its BOM on.
+3:32.380: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:32.436: Robot 9 has turned its BOM on.
+3:32.604: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:32.660: Robot 3 has turned its BOM on.
+3:32.884: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:32.940: Robot 4 has turned its BOM on.
+3:33.108: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:33.164: Robot 9 has turned its BOM on.
+3:33.380: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:33.436: Robot 3 has turned its BOM on.
+3:33.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:33.660: Robot 4 has turned its BOM on.
+3:33.880: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:33.936: Robot 9 has turned its BOM on.
+3:34.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:34.160: Robot 3 has turned its BOM on.
+3:34.380: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:34.436: Robot 4 has turned its BOM on.
+3:34.660: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:34.716: Robot 9 has turned its BOM on.
+3:34.884: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:34.940: Robot 3 has turned its BOM on.
+3:35.108: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:35.164: Robot 4 has turned its BOM on.
+3:35.385: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:35.440: Robot 9 has turned its BOM on.
+3:35.664: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:35.720: Robot 3 has turned its BOM on.
+3:35.880: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:35.936: Robot 4 has turned its BOM on.
+3:36.160: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:36.216: Robot 9 has turned its BOM on.
+3:36.380: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:36.436: Robot 3 has turned its BOM on.
+3:36.660: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:36.716: Robot 4 has turned its BOM on.
+3:36.884: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:36.940: Robot 9 has turned its BOM on.
+3:37.168: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:37.224: Robot 3 has turned its BOM on.
+3:37.380: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:37.436: Robot 4 has turned its BOM on.
+3:37.660: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:37.716: Robot 9 has turned its BOM on.
+3:37.880: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:37.936: Robot 3 has turned its BOM on.
+3:38.160: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:38.216: Robot 4 has turned its BOM on.
+3:38.380: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+3:38.436: Robot 9 has turned its BOM on.
+3:38.660: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:38.716: Robot 3 has turned its BOM on.
+3:38.884: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:38.940: Robot 4 has turned its BOM on.
+3:39.164: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:39.220: Robot 9 has turned its BOM on.
+3:39.380: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:39.436: Robot 3 has turned its BOM on.
+3:39.660: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:39.716: Robot 4 has turned its BOM on.
+3:39.880: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:39.936: Robot 9 has turned its BOM on.
+3:40.164: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:40.220: Robot 3 has turned its BOM on.
+3:40.436: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:40.492: Robot 4 has turned its BOM on.
+3:40.660: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:40.716: Robot 9 has turned its BOM on.
+3:40.884: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:40.940: Robot 3 has turned its BOM on.
+3:41.164: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:41.220: Robot 4 has turned its BOM on.
+3:41.380: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:41.437: Robot 9 has turned its BOM on.
+3:41.660: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:41.716: Robot 3 has turned its BOM on.
+3:41.936: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:41.992: Robot 4 has turned its BOM on.
+3:42.164: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+3:42.220: Robot 9 has turned its BOM on.
+3:42.436: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:42.492: Robot 3 has turned its BOM on.
+3:42.660: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:42.716: Robot 4 has turned its BOM on.
+3:42.880: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:42.936: Robot 9 has turned its BOM on.
+3:43.160: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:43.216: Robot 3 has turned its BOM on.
+3:43.436: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:43.492: Robot 4 has turned its BOM on.
+3:43.664: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:43.720: Robot 9 has turned its BOM on.
+3:43.936: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:43.992: Robot 3 has turned its BOM on.
+3:44.164: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:44.220: Robot 4 has turned its BOM on.
+3:44.440: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:44.496: Robot 9 has turned its BOM on.
+3:44.664: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:44.720: Robot 3 has turned its BOM on.
+3:44.936: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:44.992: Robot 4 has turned its BOM on.
+3:45.160: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:45.216: Robot 9 has turned its BOM on.
+3:45.436: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:45.492: Robot 3 has turned its BOM on.
+3:45.664: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:45.720: Robot 4 has turned its BOM on.
+3:45.936: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:45.992: Robot 9 has turned its BOM on.
+3:46.160: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:46.216: Robot 3 has turned its BOM on.
+3:46.440: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:46.496: Robot 4 has turned its BOM on.
+3:46.664: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:46.720: Robot 9 has turned its BOM on.
+3:46.936: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:46.992: Robot 3 has turned its BOM on.
+3:47.160: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:47.216: Robot 4 has turned its BOM on.
+3:47.436: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:47.492: Robot 9 has turned its BOM on.
+3:47.660: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:47.716: Robot 3 has turned its BOM on.
+3:47.936: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:47.992: Robot 4 has turned its BOM on.
+3:48.160: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:48.216: Robot 9 has turned its BOM on.
+3:48.436: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:48.493: Robot 3 has turned its BOM on.
+3:48.660: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:48.716: Robot 4 has turned its BOM on.
+3:48.936: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:48.992: Robot 9 has turned its BOM on.
+3:49.216: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:49.272: Robot 3 has turned its BOM on.
+3:49.440: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:49.496: Robot 4 has turned its BOM on.
+3:49.664: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:49.720: Robot 9 has turned its BOM on.
+3:49.936: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:49.992: Robot 3 has turned its BOM on.
+3:50.160: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:50.216: Robot 4 has turned its BOM on.
+3:50.436: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:50.492: Robot 9 has turned its BOM on.
+3:50.716: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:50.772: Robot 3 has turned its BOM on.
+3:50.936: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:50.992: Robot 4 has turned its BOM on.
+3:51.216: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:51.272: Robot 9 has turned its BOM on.
+3:51.436: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:51.492: Robot 3 has turned its BOM on.
+3:51.664: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:51.720: Robot 4 has turned its BOM on.
+3:51.936: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:51.992: Robot 9 has turned its BOM on.
+3:52.216: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:52.272: Robot 3 has turned its BOM on.
+3:52.436: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:52.492: Robot 4 has turned its BOM on.
+3:52.716: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:52.772: Robot 9 has turned its BOM on.
+3:52.936: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:52.992: Robot 3 has turned its BOM on.
+3:53.216: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:53.272: Robot 4 has turned its BOM on.
+3:53.440: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:53.496: Robot 9 has turned its BOM on.
+3:53.720: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:53.776: Robot 3 has turned its BOM on.
+3:53.940: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:53.996: Robot 4 has turned its BOM on.
+3:54.220: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:54.276: Robot 9 has turned its BOM on.
+3:54.436: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:54.492: Robot 3 has turned its BOM on.
+3:54.716: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:54.772: Robot 4 has turned its BOM on.
+3:54.936: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:54.992: Robot 9 has turned its BOM on.
+3:55.216: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:55.272: Robot 3 has turned its BOM on.
+3:55.440: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:55.496: Robot 4 has turned its BOM on.
+3:55.720: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:55.776: Robot 9 has turned its BOM on.
+3:55.936: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:55.992: Robot 3 has turned its BOM on.
+3:56.216: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:56.272: Robot 4 has turned its BOM on.
+3:56.436: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:56.492: Robot 9 has turned its BOM on.
+3:56.716: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:56.772: Robot 3 has turned its BOM on.
+3:56.992: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:57.48: Robot 4 has turned its BOM on.
+3:57.216: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:57.272: Robot 9 has turned its BOM on.
+3:57.440: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:57.496: Robot 3 has turned its BOM on.
+3:57.720: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:57.776: Robot 4 has turned its BOM on.
+3:57.992: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:58.48: Robot 9 has turned its BOM on.
+3:58.216: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:58.272: Robot 3 has turned its BOM on.
+3:58.492: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:58.548: Robot 4 has turned its BOM on.
+3:58.716: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:58.992: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:59.48: Robot 3 has turned its BOM on.
+3:59.216: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+3:59.272: Robot 4 has turned its BOM on.
+3:59.496: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+3:59.552: Robot 9 has turned its BOM on.
+3:59.724: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+3:59.780: Robot 3 has turned its BOM on.
+3:59.992: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:0.48: Robot 4 has turned its BOM on.
+4:0.220: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:0.276: Robot 9 has turned its BOM on.
+4:0.492: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:0.548: Robot 3 has turned its BOM on.
+4:0.716: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:0.772: Robot 4 has turned its BOM on.
+4:0.996: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:1.52: Robot 9 has turned its BOM on.
+4:1.220: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:1.276: Robot 3 has turned its BOM on.
+4:1.492: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:1.548: Robot 4 has turned its BOM on.
+4:1.716: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:1.772: Robot 9 has turned its BOM on.
+4:1.992: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:2.48: Robot 3 has turned its BOM on.
+4:2.224: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:2.280: Robot 4 has turned its BOM on.
+4:2.492: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:2.548: Robot 9 has turned its BOM on.
+4:2.780: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:2.836: Robot 3 has turned its BOM on.
+4:2.992: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:3.48: Robot 4 has turned its BOM on.
+4:3.216: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:3.272: Robot 9 has turned its BOM on.
+4:3.492: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:3.548: Robot 3 has turned its BOM on.
+4:3.716: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:3.772: Robot 4 has turned its BOM on.
+4:3.996: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:4.52: Robot 9 has turned its BOM on.
+4:4.220: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:4.276: Robot 3 has turned its BOM on.
+4:4.492: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:4.548: Robot 4 has turned its BOM on.
+4:4.716: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:4.772: Robot 9 has turned its BOM on.
+4:4.992: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:5.48: Robot 3 has turned its BOM on.
+4:5.216: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:5.272: Robot 4 has turned its BOM on.
+4:5.492: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:5.548: Robot 9 has turned its BOM on.
+4:5.772: Robot 3 has turned its BOM on.
+4:5.992: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:6.48: Robot 4 has turned its BOM on.
+4:6.220: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:6.276: Robot 9 has turned its BOM on.
+4:6.492: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:6.548: Robot 3 has turned its BOM on.
+4:6.716: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:6.772: Robot 4 has turned its BOM on.
+4:6.992: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+4:7.48: Robot 9 has turned its BOM on.
+4:7.272: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:7.328: Robot 3 has turned its BOM on.
+4:7.492: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:7.548: Robot 4 has turned its BOM on.
+4:7.772: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:7.828: Robot 9 has turned its BOM on.
+4:7.996: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:8.52: Robot 3 has turned its BOM on.
+4:8.276: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:8.332: Robot 4 has turned its BOM on.
+4:8.492: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:8.548: Robot 9 has turned its BOM on.
+4:8.772: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:8.828: Robot 3 has turned its BOM on.
+4:8.992: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:9.48: Robot 4 has turned its BOM on.
+4:9.272: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:9.328: Robot 9 has turned its BOM on.
+4:9.492: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:9.548: Robot 3 has turned its BOM on.
+4:9.772: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:9.828: Robot 4 has turned its BOM on.
+4:9.996: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:10.52: Robot 9 has turned its BOM on.
+4:10.276: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:10.332: Robot 3 has turned its BOM on.
+4:10.492: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:10.548: Robot 4 has turned its BOM on.
+4:10.772: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:10.828: Robot 9 has turned its BOM on.
+4:10.992: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:11.48: Robot 3 has turned its BOM on.
+4:11.272: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:11.328: Robot 4 has turned its BOM on.
+4:11.548: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:11.604: Robot 9 has turned its BOM on.
+4:11.772: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:11.828: Robot 3 has turned its BOM on.
+4:11.996: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:12.52: Robot 4 has turned its BOM on.
+4:12.276: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:12.332: Robot 9 has turned its BOM on.
+4:12.492: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:12.548: Robot 3 has turned its BOM on.
+4:12.772: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:12.828: Robot 4 has turned its BOM on.
+4:13.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:13.104: Robot 9 has turned its BOM on.
+4:13.276: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:13.332: Robot 3 has turned its BOM on.
+4:13.548: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:13.604: Robot 4 has turned its BOM on.
+4:13.772: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:13.828: Robot 9 has turned its BOM on.
+4:13.996: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:14.52: Robot 3 has turned its BOM on.
+4:14.276: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:14.332: Robot 4 has turned its BOM on.
+4:14.548: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:14.604: Robot 9 has turned its BOM on.
+4:14.772: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:14.828: Robot 3 has turned its BOM on.
+4:15.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:15.104: Robot 4 has turned its BOM on.
+4:15.276: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:15.332: Robot 9 has turned its BOM on.
+4:15.548: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:15.604: Robot 3 has turned its BOM on.
+4:15.772: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:15.828: Robot 4 has turned its BOM on.
+4:16.52: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:16.108: Robot 9 has turned its BOM on.
+4:16.276: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:16.332: Robot 3 has turned its BOM on.
+4:16.548: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:16.604: Robot 4 has turned its BOM on.
+4:16.772: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+4:16.828: Robot 9 has turned its BOM on.
+4:17.48: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:17.104: Robot 3 has turned its BOM on.
+4:17.272: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:17.328: Robot 4 has turned its BOM on.
+4:17.552: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:17.608: Robot 9 has turned its BOM on.
+4:17.776: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:17.832: Robot 3 has turned its BOM on.
+4:18.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:18.104: Robot 4 has turned its BOM on.
+4:18.272: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:18.328: Robot 9 has turned its BOM on.
+4:18.548: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:18.604: Robot 3 has turned its BOM on.
+4:18.776: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:18.832: Robot 4 has turned its BOM on.
+4:19.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:19.104: Robot 9 has turned its BOM on.
+4:19.272: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:19.328: Robot 3 has turned its BOM on.
+4:19.552: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:19.608: Robot 4 has turned its BOM on.
+4:19.776: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:19.832: Robot 9 has turned its BOM on.
+4:20.48: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:20.104: Robot 3 has turned its BOM on.
+4:20.272: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:20.328: Robot 4 has turned its BOM on.
+4:20.552: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:20.608: Robot 9 has turned its BOM on.
+4:20.776: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:20.832: Robot 3 has turned its BOM on.
+4:21.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:21.104: Robot 4 has turned its BOM on.
+4:21.272: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:21.328: Robot 9 has turned its BOM on.
+4:21.548: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:21.604: Robot 3 has turned its BOM on.
+4:21.772: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:21.828: Robot 4 has turned its BOM on.
+4:22.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:22.104: Robot 9 has turned its BOM on.
+4:22.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:22.380: Robot 3 has turned its BOM on.
+4:22.552: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:22.608: Robot 4 has turned its BOM on.
+4:22.776: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:22.832: Robot 9 has turned its BOM on.
+4:23.48: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:23.104: Robot 3 has turned its BOM on.
+4:23.328: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:23.380: Robot 4 has turned its BOM on.
+4:23.548: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:23.604: Robot 9 has turned its BOM on.
+4:23.828: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:23.880: Robot 3 has turned its BOM on.
+4:24.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:24.104: Robot 4 has turned its BOM on.
+4:24.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:24.380: Robot 9 has turned its BOM on.
+4:24.552: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:24.608: Robot 3 has turned its BOM on.
+4:24.832: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:24.880: Robot 4 has turned its BOM on.
+4:25.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:25.104: Robot 9 has turned its BOM on.
+4:25.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:25.380: Robot 3 has turned its BOM on.
+4:25.556: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:25.612: Robot 4 has turned its BOM on.
+4:25.784: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:25.840: Robot 9 has turned its BOM on.
+4:26.48: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:26.104: Robot 3 has turned its BOM on.
+4:26.328: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:26.380: Robot 4 has turned its BOM on.
+4:26.548: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:26.604: Robot 9 has turned its BOM on.
+4:26.832: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:26.880: Robot 3 has turned its BOM on.
+4:27.48: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:27.104: Robot 4 has turned its BOM on.
+4:27.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:27.380: Robot 9 has turned its BOM on.
+4:27.548: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:27.604: Robot 3 has turned its BOM on.
+4:27.832: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:27.880: Robot 4 has turned its BOM on.
+4:28.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:28.160: Robot 9 has turned its BOM on.
+4:28.336: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:28.380: Robot 3 has turned its BOM on.
+4:28.552: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:28.608: Robot 4 has turned its BOM on.
+4:28.832: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:28.880: Robot 9 has turned its BOM on.
+4:29.48: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:29.104: Robot 3 has turned its BOM on.
+4:29.328: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:29.380: Robot 4 has turned its BOM on.
+4:29.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:29.660: Robot 9 has turned its BOM on.
+4:29.832: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:29.880: Robot 3 has turned its BOM on.
+4:30.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:30.160: Robot 4 has turned its BOM on.
+4:30.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:30.380: Robot 9 has turned its BOM on.
+4:30.556: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:30.612: Robot 3 has turned its BOM on.
+4:30.840: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:30.880: Robot 4 has turned its BOM on.
+4:31.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:31.160: Robot 9 has turned its BOM on.
+4:31.328: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:31.380: Robot 3 has turned its BOM on.
+4:31.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:31.660: Robot 4 has turned its BOM on.
+4:31.828: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:31.880: Robot 9 has turned its BOM on.
+4:32.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:32.160: Robot 3 has turned its BOM on.
+4:32.332: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:32.380: Robot 4 has turned its BOM on.
+4:32.608: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:32.664: Robot 9 has turned its BOM on.
+4:32.832: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:32.880: Robot 3 has turned its BOM on.
+4:33.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:33.160: Robot 4 has turned its BOM on.
+4:33.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:33.380: Robot 9 has turned its BOM on.
+4:33.604: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:33.660: Robot 3 has turned its BOM on.
+4:33.828: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:33.881: Robot 4 has turned its BOM on.
+4:34.108: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:34.164: Robot 9 has turned its BOM on.
+4:34.332: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:34.380: Robot 3 has turned its BOM on.
+4:34.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:34.660: Robot 4 has turned its BOM on.
+4:34.828: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:34.881: Robot 9 has turned its BOM on.
+4:35.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:35.160: Robot 3 has turned its BOM on.
+4:35.332: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:35.380: Robot 4 has turned its BOM on.
+4:35.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:35.660: Robot 9 has turned its BOM on.
+4:35.829: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:35.880: Robot 3 has turned its BOM on.
+4:36.104: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:36.160: Robot 4 has turned its BOM on.
+4:36.328: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:36.381: Robot 9 has turned its BOM on.
+4:36.604: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:36.660: Robot 3 has turned its BOM on.
+4:36.881: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:36.936: Robot 4 has turned its BOM on.
+4:37.108: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:37.164: Robot 9 has turned its BOM on.
+4:37.332: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:37.380: Robot 3 has turned its BOM on.
+4:37.604: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:37.660: Robot 4 has turned its BOM on.
+4:37.829: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:37.881: Robot 9 has turned its BOM on.
+4:38.104: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:38.160: Robot 3 has turned its BOM on.
+4:38.381: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:38.437: Robot 4 has turned its BOM on.
+4:38.604: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:38.660: Robot 9 has turned its BOM on.
+4:38.881: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:38.937: Robot 3 has turned its BOM on.
+4:39.112: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:39.169: Robot 4 has turned its BOM on.
+4:39.337: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:39.381: Robot 9 has turned its BOM on.
+4:39.605: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:39.660: Robot 3 has turned its BOM on.
+4:39.881: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:39.936: Robot 4 has turned its BOM on.
+4:40.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:40.161: Robot 9 has turned its BOM on.
+4:40.381: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:40.437: Robot 3 has turned its BOM on.
+4:40.605: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:40.661: Robot 4 has turned its BOM on.
+4:40.881: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:40.937: Robot 9 has turned its BOM on.
+4:41.109: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:41.165: Robot 3 has turned its BOM on.
+4:41.381: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:41.437: Robot 4 has turned its BOM on.
+4:41.605: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:41.661: Robot 9 has turned its BOM on.
+4:41.881: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:41.937: Robot 3 has turned its BOM on.
+4:42.105: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:42.161: Robot 4 has turned its BOM on.
+4:42.381: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:42.437: Robot 9 has turned its BOM on.
+4:42.605: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:42.661: Robot 3 has turned its BOM on.
+4:42.885: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:42.941: Robot 4 has turned its BOM on.
+4:43.109: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:43.165: Robot 9 has turned its BOM on.
+4:43.381: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:43.437: Robot 3 has turned its BOM on.
+4:43.605: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:43.661: Robot 4 has turned its BOM on.
+4:43.881: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:43.937: Robot 9 has turned its BOM on.
+4:44.105: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:44.161: Robot 3 has turned its BOM on.
+4:44.381: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:44.437: Robot 4 has turned its BOM on.
+4:44.661: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:44.717: Robot 9 has turned its BOM on.
+4:44.885: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:44.941: Robot 3 has turned its BOM on.
+4:45.109: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:45.165: Robot 4 has turned its BOM on.
+4:45.381: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:45.437: Robot 9 has turned its BOM on.
+4:45.605: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:45.661: Robot 3 has turned its BOM on.
+4:45.881: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:45.937: Robot 4 has turned its BOM on.
+4:46.161: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:46.217: Robot 9 has turned its BOM on.
+4:46.381: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:46.437: Robot 3 has turned its BOM on.
+4:46.661: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:46.717: Robot 4 has turned its BOM on.
+4:46.885: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:46.941: Robot 9 has turned its BOM on.
+4:47.165: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:47.221: Robot 3 has turned its BOM on.
+4:47.389: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:47.445: Robot 4 has turned its BOM on.
+4:47.669: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:47.725: Robot 9 has turned its BOM on.
+4:47.881: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:47.937: Robot 3 has turned its BOM on.
+4:48.161: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:48.217: Robot 4 has turned its BOM on.
+4:48.381: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:48.437: Robot 9 has turned its BOM on.
+4:48.661: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:48.717: Robot 3 has turned its BOM on.
+4:48.885: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:48.941: Robot 4 has turned its BOM on.
+4:49.165: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:49.221: Robot 9 has turned its BOM on.
+4:49.381: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:49.437: Robot 3 has turned its BOM on.
+4:49.661: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:49.717: Robot 4 has turned its BOM on.
+4:49.881: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:49.937: Robot 9 has turned its BOM on.
+4:50.161: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:50.217: Robot 3 has turned its BOM on.
+4:50.381: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:50.437: Robot 4 has turned its BOM on.
+4:50.665: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 14)
+4:50.721: Robot 9 has turned its BOM on.
+4:50.881: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:50.937: Robot 3 has turned its BOM on.
+4:51.161: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:51.217: Robot 4 has turned its BOM on.
+4:51.381: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:51.437: Robot 9 has turned its BOM on.
+4:51.665: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:51.721: Robot 3 has turned its BOM on.
+4:51.937: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:51.993: Robot 4 has turned its BOM on.
+4:52.161: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:52.217: Robot 9 has turned its BOM on.
+4:52.385: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:52.441: Robot 3 has turned its BOM on.
+4:52.665: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:52.721: Robot 4 has turned its BOM on.
+4:52.881: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:52.937: Robot 9 has turned its BOM on.
+4:53.161: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:53.217: Robot 3 has turned its BOM on.
+4:53.437: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:53.493: Robot 4 has turned its BOM on.
+4:53.669: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:53.725: Robot 9 has turned its BOM on.
+4:53.937: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:53.993: Robot 3 has turned its BOM on.
+4:54.161: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:54.217: Robot 4 has turned its BOM on.
+4:54.385: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:54.441: Robot 9 has turned its BOM on.
+4:54.665: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:54.721: Robot 3 has turned its BOM on.
+4:54.937: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:54.993: Robot 4 has turned its BOM on.
+4:55.161: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:55.217: Robot 9 has turned its BOM on.
+4:55.437: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:55.493: Robot 3 has turned its BOM on.
+4:55.665: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:55.721: Robot 4 has turned its BOM on.
+4:55.937: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:55.993: Robot 9 has turned its BOM on.
+4:56.165: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:56.221: Robot 3 has turned its BOM on.
+4:56.441: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:56.497: Robot 4 has turned its BOM on.
+4:56.665: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:56.721: Robot 9 has turned its BOM on.
+4:56.937: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:56.993: Robot 3 has turned its BOM on.
+4:57.161: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:57.217: Robot 4 has turned its BOM on.
+4:57.437: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:57.493: Robot 9 has turned its BOM on.
+4:57.665: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:57.721: Robot 3 has turned its BOM on.
+4:57.937: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:57.993: Robot 4 has turned its BOM on.
+4:58.165: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:58.221: Robot 9 has turned its BOM on.
+4:58.441: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:58.497: Robot 3 has turned its BOM on.
+4:58.665: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:58.721: Robot 4 has turned its BOM on.
+4:58.937: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:58.993: Robot 9 has turned its BOM on.
+4:59.161: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:59.217: Robot 3 has turned its BOM on.
+4:59.441: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 1)
+4:59.497: Robot 4 has turned its BOM on.
+4:59.665: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 13)
+4:59.721: Robot 9 has turned its BOM on.
+4:59.937: Robot 9 passed the token to robot 3. Sensor matrix:
+(3 10)(4 6)
+4:59.993: Robot 3 has turned its BOM on.
Index: branches/scout/projects/libwireless/logger/tests/4robots5minutes.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/4robots5minutes.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/4robots5minutes.test	(revision 1346)
@@ -0,0 +1,3427 @@
+0:0.862: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:0.918: Robot 3 has turned its BOM on.
+0:1.87: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:1.142: Robot 4 has turned its BOM on.
+0:1.370: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:1.426: Robot 9 has turned its BOM on.
+0:1.598: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:1.642: Robot 13 has turned its BOM on.
+0:1.866: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:1.922: Robot 3 has turned its BOM on.
+0:2.90: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:2.142: Robot 4 has turned its BOM on.
+0:2.366: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:2.422: Robot 9 has turned its BOM on.
+0:2.642: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:2.698: Robot 13 has turned its BOM on.
+0:2.866: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:2.922: Robot 3 has turned its BOM on.
+0:3.142: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:3.198: Robot 4 has turned its BOM on.
+0:3.422: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:3.478: Robot 9 has turned its BOM on.
+0:3.646: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:3.702: Robot 13 has turned its BOM on.
+0:3.926: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:3.982: Robot 3 has turned its BOM on.
+0:4.142: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:4.198: Robot 4 has turned its BOM on.
+0:4.422: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:4.478: Robot 9 has turned its BOM on.
+0:4.642: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:4.698: Robot 13 has turned its BOM on.
+0:4.926: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:4.982: Robot 3 has turned its BOM on.
+0:5.198: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:5.254: Robot 4 has turned its BOM on.
+0:5.422: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:5.478: Robot 9 has turned its BOM on.
+0:5.702: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:5.758: Robot 13 has turned its BOM on.
+0:5.926: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:5.982: Robot 3 has turned its BOM on.
+0:6.198: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:6.254: Robot 4 has turned its BOM on.
+0:6.478: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:6.534: Robot 9 has turned its BOM on.
+0:6.702: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:6.758: Robot 13 has turned its BOM on.
+0:6.982: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:7.38: Robot 3 has turned its BOM on.
+0:7.198: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:7.254: Robot 4 has turned its BOM on.
+0:7.478: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:7.534: Robot 9 has turned its BOM on.
+0:7.754: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:7.810: Robot 13 has turned its BOM on.
+0:7.982: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:8.38: Robot 3 has turned its BOM on.
+0:8.254: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:8.310: Robot 4 has turned its BOM on.
+0:8.478: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:8.534: Robot 9 has turned its BOM on.
+0:8.754: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:8.810: Robot 13 has turned its BOM on.
+0:9.34: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:9.90: Robot 3 has turned its BOM on.
+0:9.254: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:9.310: Robot 4 has turned its BOM on.
+0:9.534: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:9.590: Robot 9 has turned its BOM on.
+0:9.762: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:9.818: Robot 13 has turned its BOM on.
+0:10.42: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:10.98: Robot 3 has turned its BOM on.
+0:10.310: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:10.366: Robot 4 has turned its BOM on.
+0:10.534: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:10.590: Robot 9 has turned its BOM on.
+0:10.810: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:10.866: Robot 13 has turned its BOM on.
+0:11.38: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:11.94: Robot 3 has turned its BOM on.
+0:11.310: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:11.366: Robot 4 has turned its BOM on.
+0:11.534: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:11.590: Robot 9 has turned its BOM on.
+0:11.810: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:11.866: Robot 13 has turned its BOM on.
+0:12.90: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:12.142: Robot 3 has turned its BOM on.
+0:12.310: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:12.366: Robot 4 has turned its BOM on.
+0:12.590: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:12.642: Robot 9 has turned its BOM on.
+0:12.814: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:12.870: Robot 13 has turned its BOM on.
+0:13.94: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:13.142: Robot 3 has turned its BOM on.
+0:13.366: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:13.422: Robot 4 has turned its BOM on.
+0:13.590: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:13.642: Robot 9 has turned its BOM on.
+0:13.870: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:13.926: Robot 13 has turned its BOM on.
+0:14.94: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:14.142: Robot 3 has turned its BOM on.
+0:14.366: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:14.422: Robot 4 has turned its BOM on.
+0:14.642: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:14.698: Robot 9 has turned its BOM on.
+0:14.866: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:14.922: Robot 13 has turned its BOM on.
+0:15.142: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:15.199: Robot 3 has turned its BOM on.
+0:15.370: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:15.426: Robot 4 has turned its BOM on.
+0:15.642: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:15.698: Robot 9 has turned its BOM on.
+0:15.922: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:15.978: Robot 13 has turned its BOM on.
+0:16.142: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:16.198: Robot 3 has turned its BOM on.
+0:16.422: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:16.478: Robot 4 has turned its BOM on.
+0:16.698: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:16.754: Robot 9 has turned its BOM on.
+0:16.922: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+0:16.978: Robot 13 has turned its BOM on.
+0:17.142: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:17.198: Robot 3 has turned its BOM on.
+0:17.422: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:17.478: Robot 4 has turned its BOM on.
+0:17.698: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:17.754: Robot 9 has turned its BOM on.
+0:17.922: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:17.978: Robot 13 has turned its BOM on.
+0:18.202: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:18.258: Robot 3 has turned its BOM on.
+0:18.426: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:18.482: Robot 4 has turned its BOM on.
+0:18.698: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:18.754: Robot 9 has turned its BOM on.
+0:18.978: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:19.34: Robot 13 has turned its BOM on.
+0:19.198: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:19.254: Robot 3 has turned its BOM on.
+0:19.482: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:19.538: Robot 4 has turned its BOM on.
+0:19.754: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:19.810: Robot 9 has turned its BOM on.
+0:19.978: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:20.34: Robot 13 has turned its BOM on.
+0:20.254: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:20.310: Robot 3 has turned its BOM on.
+0:20.478: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:20.534: Robot 4 has turned its BOM on.
+0:20.754: Robot 9 has turned its BOM on.
+0:21.34: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:21.90: Robot 13 has turned its BOM on.
+0:21.258: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:21.314: Robot 3 has turned its BOM on.
+0:21.538: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:21.594: Robot 4 has turned its BOM on.
+0:21.755: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:21.810: Robot 9 has turned its BOM on.
+0:22.34: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:22.90: Robot 13 has turned its BOM on.
+0:22.310: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:22.366: Robot 3 has turned its BOM on.
+0:22.538: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:22.594: Robot 4 has turned its BOM on.
+0:22.810: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:22.866: Robot 9 has turned its BOM on.
+0:23.34: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:23.90: Robot 13 has turned its BOM on.
+0:23.314: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:23.370: Robot 3 has turned its BOM on.
+0:23.538: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:23.594: Robot 4 has turned its BOM on.
+0:23.810: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:23.866: Robot 9 has turned its BOM on.
+0:24.90: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:24.142: Robot 13 has turned its BOM on.
+0:24.314: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:24.370: Robot 3 has turned its BOM on.
+0:24.594: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:24.642: Robot 4 has turned its BOM on.
+0:24.810: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:24.866: Robot 9 has turned its BOM on.
+0:25.90: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:25.142: Robot 13 has turned its BOM on.
+0:25.366: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:25.422: Robot 3 has turned its BOM on.
+0:25.590: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:25.642: Robot 4 has turned its BOM on.
+0:25.866: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:25.922: Robot 9 has turned its BOM on.
+0:26.90: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:26.142: Robot 13 has turned its BOM on.
+0:26.366: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:26.422: Robot 3 has turned its BOM on.
+0:26.642: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:26.698: Robot 4 has turned its BOM on.
+0:26.866: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:26.922: Robot 9 has turned its BOM on.
+0:27.142: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:27.198: Robot 13 has turned its BOM on.
+0:27.370: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:27.426: Robot 3 has turned its BOM on.
+0:27.642: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:27.698: Robot 4 has turned its BOM on.
+0:27.922: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:27.978: Robot 9 has turned its BOM on.
+0:28.142: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:28.198: Robot 13 has turned its BOM on.
+0:28.422: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:28.478: Robot 3 has turned its BOM on.
+0:28.698: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:28.754: Robot 4 has turned its BOM on.
+0:28.926: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:28.982: Robot 9 has turned its BOM on.
+0:29.146: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:29.202: Robot 13 has turned its BOM on.
+0:29.426: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:29.482: Robot 3 has turned its BOM on.
+0:29.698: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:29.754: Robot 4 has turned its BOM on.
+0:29.922: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:29.978: Robot 9 has turned its BOM on.
+0:30.198: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:30.254: Robot 13 has turned its BOM on.
+0:30.422: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:30.478: Robot 3 has turned its BOM on.
+0:30.698: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:30.754: Robot 4 has turned its BOM on.
+0:30.978: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:31.34: Robot 9 has turned its BOM on.
+0:31.198: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:31.254: Robot 13 has turned its BOM on.
+0:31.478: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:31.534: Robot 3 has turned its BOM on.
+0:31.698: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:31.754: Robot 4 has turned its BOM on.
+0:31.978: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:32.34: Robot 9 has turned its BOM on.
+0:32.254: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:32.310: Robot 13 has turned its BOM on.
+0:32.478: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:32.534: Robot 3 has turned its BOM on.
+0:32.762: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:32.818: Robot 4 has turned its BOM on.
+0:32.986: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:33.42: Robot 9 has turned its BOM on.
+0:33.254: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:33.310: Robot 13 has turned its BOM on.
+0:33.534: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:33.590: Robot 3 has turned its BOM on.
+0:33.754: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:33.811: Robot 4 has turned its BOM on.
+0:34.34: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:34.90: Robot 9 has turned its BOM on.
+0:34.310: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:34.366: Robot 13 has turned its BOM on.
+0:34.534: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:34.590: Robot 3 has turned its BOM on.
+0:34.810: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:34.867: Robot 4 has turned its BOM on.
+0:35.34: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:35.90: Robot 9 has turned its BOM on.
+0:35.310: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:35.366: Robot 13 has turned its BOM on.
+0:35.534: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:35.590: Robot 3 has turned its BOM on.
+0:35.814: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:35.870: Robot 4 has turned its BOM on.
+0:36.38: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:36.94: Robot 9 has turned its BOM on.
+0:36.318: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:36.374: Robot 13 has turned its BOM on.
+0:36.598: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:36.642: Robot 3 has turned its BOM on.
+0:36.810: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:36.866: Robot 4 has turned its BOM on.
+0:37.94: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:37.142: Robot 9 has turned its BOM on.
+0:37.366: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:37.422: Robot 13 has turned its BOM on.
+0:37.590: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:37.642: Robot 3 has turned its BOM on.
+0:37.874: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:37.930: Robot 4 has turned its BOM on.
+0:38.102: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:38.142: Robot 9 has turned its BOM on.
+0:38.366: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:38.422: Robot 13 has turned its BOM on.
+0:38.642: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:38.698: Robot 3 has turned its BOM on.
+0:38.870: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:38.926: Robot 4 has turned its BOM on.
+0:39.142: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:39.198: Robot 9 has turned its BOM on.
+0:39.366: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:39.422: Robot 13 has turned its BOM on.
+0:39.642: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:39.698: Robot 3 has turned its BOM on.
+0:39.922: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:39.978: Robot 4 has turned its BOM on.
+0:40.142: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:40.198: Robot 9 has turned its BOM on.
+0:40.422: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:40.478: Robot 13 has turned its BOM on.
+0:40.646: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:40.702: Robot 3 has turned its BOM on.
+0:40.926: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:40.982: Robot 4 has turned its BOM on.
+0:41.198: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:41.254: Robot 9 has turned its BOM on.
+0:41.423: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:41.478: Robot 13 has turned its BOM on.
+0:41.698: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:41.754: Robot 3 has turned its BOM on.
+0:41.926: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:41.982: Robot 4 has turned its BOM on.
+0:42.198: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:42.254: Robot 9 has turned its BOM on.
+0:42.422: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:42.478: Robot 13 has turned its BOM on.
+0:42.698: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:42.754: Robot 3 has turned its BOM on.
+0:42.978: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:43.34: Robot 4 has turned its BOM on.
+0:43.198: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:43.254: Robot 9 has turned its BOM on.
+0:43.482: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:43.538: Robot 13 has turned its BOM on.
+0:43.702: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:43.758: Robot 3 has turned its BOM on.
+0:43.982: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:44.38: Robot 4 has turned its BOM on.
+0:44.262: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:44.318: Robot 9 has turned its BOM on.
+0:44.486: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:44.542: Robot 13 has turned its BOM on.
+0:44.758: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:44.815: Robot 3 has turned its BOM on.
+0:44.983: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:45.38: Robot 4 has turned its BOM on.
+0:45.254: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:45.310: Robot 9 has turned its BOM on.
+0:45.534: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:45.590: Robot 13 has turned its BOM on.
+0:45.754: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:45.810: Robot 3 has turned its BOM on.
+0:46.34: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:46.90: Robot 4 has turned its BOM on.
+0:46.310: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:46.366: Robot 9 has turned its BOM on.
+0:46.535: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:46.590: Robot 13 has turned its BOM on.
+0:46.815: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:46.870: Robot 3 has turned its BOM on.
+0:47.38: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:47.94: Robot 4 has turned its BOM on.
+0:47.310: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:47.366: Robot 9 has turned its BOM on.
+0:47.534: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:47.590: Robot 13 has turned its BOM on.
+0:47.814: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:47.870: Robot 3 has turned its BOM on.
+0:48.39: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:48.94: Robot 4 has turned its BOM on.
+0:48.311: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:48.366: Robot 9 has turned its BOM on.
+0:48.591: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:48.642: Robot 13 has turned its BOM on.
+0:48.811: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:48.866: Robot 3 has turned its BOM on.
+0:49.91: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:49.143: Robot 4 has turned its BOM on.
+0:49.310: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:49.366: Robot 9 has turned its BOM on.
+0:49.591: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:49.643: Robot 13 has turned its BOM on.
+0:49.867: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:49.923: Robot 3 has turned its BOM on.
+0:50.91: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:50.143: Robot 4 has turned its BOM on.
+0:50.371: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:50.427: Robot 9 has turned its BOM on.
+0:50.595: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:50.643: Robot 13 has turned its BOM on.
+0:50.867: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:50.923: Robot 3 has turned its BOM on.
+0:51.143: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:51.199: Robot 4 has turned its BOM on.
+0:51.367: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:51.423: Robot 9 has turned its BOM on.
+0:51.643: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:51.699: Robot 13 has turned its BOM on.
+0:51.923: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:51.979: Robot 3 has turned its BOM on.
+0:52.147: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:52.203: Robot 4 has turned its BOM on.
+0:52.427: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:52.483: Robot 9 has turned its BOM on.
+0:52.643: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:52.699: Robot 13 has turned its BOM on.
+0:52.923: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:52.979: Robot 3 has turned its BOM on.
+0:53.203: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:53.259: Robot 4 has turned its BOM on.
+0:53.427: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:53.483: Robot 9 has turned its BOM on.
+0:53.699: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:53.755: Robot 13 has turned its BOM on.
+0:53.923: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:53.979: Robot 3 has turned its BOM on.
+0:54.203: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:54.259: Robot 4 has turned its BOM on.
+0:54.427: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:54.483: Robot 9 has turned its BOM on.
+0:54.699: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:54.755: Robot 13 has turned its BOM on.
+0:54.979: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:55.35: Robot 3 has turned its BOM on.
+0:55.203: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:55.259: Robot 4 has turned its BOM on.
+0:55.487: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:55.543: Robot 9 has turned its BOM on.
+0:55.699: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:55.755: Robot 13 has turned its BOM on.
+0:55.979: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:56.35: Robot 3 has turned its BOM on.
+0:56.255: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:56.311: Robot 4 has turned its BOM on.
+0:56.483: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:56.539: Robot 9 has turned its BOM on.
+0:56.755: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:56.811: Robot 13 has turned its BOM on.
+0:56.979: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:57.35: Robot 3 has turned its BOM on.
+0:57.255: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:57.311: Robot 4 has turned its BOM on.
+0:57.535: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:57.591: Robot 9 has turned its BOM on.
+0:57.755: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:57.811: Robot 13 has turned its BOM on.
+0:58.35: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:58.91: Robot 3 has turned its BOM on.
+0:58.259: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:58.315: Robot 4 has turned its BOM on.
+0:58.539: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:58.595: Robot 9 has turned its BOM on.
+0:58.811: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:58.867: Robot 13 has turned its BOM on.
+0:59.35: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+0:59.91: Robot 3 has turned its BOM on.
+0:59.311: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+0:59.367: Robot 4 has turned its BOM on.
+0:59.539: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+0:59.595: Robot 9 has turned its BOM on.
+0:59.811: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+0:59.867: Robot 13 has turned its BOM on.
+1:0.35: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:0.91: Robot 3 has turned its BOM on.
+1:0.315: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:0.371: Robot 4 has turned its BOM on.
+1:0.595: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:0.643: Robot 9 has turned its BOM on.
+1:0.811: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:0.867: Robot 13 has turned its BOM on.
+1:1.91: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:1.143: Robot 3 has turned its BOM on.
+1:1.315: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:1.371: Robot 4 has turned its BOM on.
+1:1.595: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:1.643: Robot 9 has turned its BOM on.
+1:1.867: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:1.923: Robot 13 has turned its BOM on.
+1:2.91: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:2.143: Robot 3 has turned its BOM on.
+1:2.371: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:2.427: Robot 4 has turned its BOM on.
+1:2.595: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:2.643: Robot 9 has turned its BOM on.
+1:2.867: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:2.923: Robot 13 has turned its BOM on.
+1:3.143: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:3.199: Robot 3 has turned its BOM on.
+1:3.367: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:3.423: Robot 4 has turned its BOM on.
+1:3.643: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:3.699: Robot 9 has turned its BOM on.
+1:3.923: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:3.979: Robot 13 has turned its BOM on.
+1:4.147: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:4.203: Robot 3 has turned its BOM on.
+1:4.427: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:4.483: Robot 4 has turned its BOM on.
+1:4.643: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:4.699: Robot 9 has turned its BOM on.
+1:4.923: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:4.979: Robot 13 has turned its BOM on.
+1:5.199: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:5.255: Robot 3 has turned its BOM on.
+1:5.427: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:5.483: Robot 4 has turned its BOM on.
+1:5.699: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:5.755: Robot 9 has turned its BOM on.
+1:5.923: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:5.979: Robot 13 has turned its BOM on.
+1:6.199: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:6.255: Robot 3 has turned its BOM on.
+1:6.423: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:6.479: Robot 4 has turned its BOM on.
+1:6.703: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:6.759: Robot 9 has turned its BOM on.
+1:6.927: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:6.983: Robot 13 has turned its BOM on.
+1:7.199: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:7.255: Robot 3 has turned its BOM on.
+1:7.479: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:7.535: Robot 4 has turned its BOM on.
+1:7.699: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:7.755: Robot 9 has turned its BOM on.
+1:7.983: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:8.39: Robot 13 has turned its BOM on.
+1:8.255: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:8.311: Robot 3 has turned its BOM on.
+1:8.479: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:8.535: Robot 4 has turned its BOM on.
+1:8.759: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:8.815: Robot 9 has turned its BOM on.
+1:8.983: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:9.39: Robot 13 has turned its BOM on.
+1:9.255: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:9.311: Robot 3 has turned its BOM on.
+1:9.535: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:9.591: Robot 4 has turned its BOM on.
+1:9.755: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:9.811: Robot 9 has turned its BOM on.
+1:10.39: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:10.95: Robot 13 has turned its BOM on.
+1:10.255: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:10.311: Robot 3 has turned its BOM on.
+1:10.535: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:10.591: Robot 4 has turned its BOM on.
+1:10.811: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:10.867: Robot 9 has turned its BOM on.
+1:11.39: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:11.95: Robot 13 has turned its BOM on.
+1:11.311: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:11.367: Robot 3 has turned its BOM on.
+1:11.535: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:11.591: Robot 4 has turned its BOM on.
+1:11.815: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:11.871: Robot 9 has turned its BOM on.
+1:12.39: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:12.95: Robot 13 has turned its BOM on.
+1:12.311: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:12.367: Robot 3 has turned its BOM on.
+1:12.591: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:12.643: Robot 4 has turned its BOM on.
+1:12.815: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:12.871: Robot 9 has turned its BOM on.
+1:13.95: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:13.143: Robot 13 has turned its BOM on.
+1:13.311: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:13.367: Robot 3 has turned its BOM on.
+1:13.591: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:13.643: Robot 4 has turned its BOM on.
+1:13.867: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:13.923: Robot 9 has turned its BOM on.
+1:14.95: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:14.143: Robot 13 has turned its BOM on.
+1:14.367: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:14.423: Robot 3 has turned its BOM on.
+1:14.591: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:14.643: Robot 4 has turned its BOM on.
+1:14.867: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:14.923: Robot 9 has turned its BOM on.
+1:15.143: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:15.199: Robot 13 has turned its BOM on.
+1:15.367: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:15.423: Robot 3 has turned its BOM on.
+1:15.647: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:15.703: Robot 4 has turned its BOM on.
+1:15.871: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:15.927: Robot 9 has turned its BOM on.
+1:16.143: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:16.199: Robot 13 has turned its BOM on.
+1:16.423: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:16.479: Robot 3 has turned its BOM on.
+1:16.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:16.699: Robot 4 has turned its BOM on.
+1:16.923: Robot 9 has turned its BOM on.
+1:17.199: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:17.255: Robot 13 has turned its BOM on.
+1:17.423: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:17.479: Robot 3 has turned its BOM on.
+1:17.703: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:17.759: Robot 4 has turned its BOM on.
+1:17.927: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:17.983: Robot 9 has turned its BOM on.
+1:18.203: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:18.259: Robot 13 has turned its BOM on.
+1:18.427: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:18.483: Robot 3 has turned its BOM on.
+1:18.703: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:18.759: Robot 4 has turned its BOM on.
+1:18.931: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:18.987: Robot 9 has turned its BOM on.
+1:19.199: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:19.255: Robot 13 has turned its BOM on.
+1:19.479: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:19.535: Robot 3 has turned its BOM on.
+1:19.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:19.755: Robot 4 has turned its BOM on.
+1:19.983: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:20.39: Robot 9 has turned its BOM on.
+1:20.255: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:20.311: Robot 13 has turned its BOM on.
+1:20.479: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:20.535: Robot 3 has turned its BOM on.
+1:20.759: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:20.815: Robot 4 has turned its BOM on.
+1:20.983: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:21.39: Robot 9 has turned its BOM on.
+1:21.255: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:21.311: Robot 13 has turned its BOM on.
+1:21.535: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:21.591: Robot 3 has turned its BOM on.
+1:21.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:21.811: Robot 4 has turned its BOM on.
+1:22.39: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:22.95: Robot 9 has turned its BOM on.
+1:22.256: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:22.311: Robot 13 has turned its BOM on.
+1:22.535: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:22.591: Robot 3 has turned its BOM on.
+1:22.811: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:22.867: Robot 4 has turned its BOM on.
+1:23.39: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:23.95: Robot 9 has turned its BOM on.
+1:23.319: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:23.375: Robot 13 has turned its BOM on.
+1:23.547: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:23.603: Robot 3 has turned its BOM on.
+1:23.811: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:23.867: Robot 4 has turned its BOM on.
+1:24.91: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:24.143: Robot 9 has turned its BOM on.
+1:24.311: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:24.367: Robot 13 has turned its BOM on.
+1:24.535: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:24.591: Robot 3 has turned its BOM on.
+1:24.811: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:24.867: Robot 4 has turned its BOM on.
+1:25.91: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:25.143: Robot 9 has turned its BOM on.
+1:25.311: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:25.367: Robot 13 has turned its BOM on.
+1:25.595: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:25.643: Robot 3 has turned its BOM on.
+1:25.867: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:25.923: Robot 4 has turned its BOM on.
+1:26.91: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:26.143: Robot 9 has turned its BOM on.
+1:26.371: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:26.427: Robot 13 has turned its BOM on.
+1:26.595: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:26.643: Robot 3 has turned its BOM on.
+1:26.867: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:26.923: Robot 4 has turned its BOM on.
+1:27.143: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:27.199: Robot 9 has turned its BOM on.
+1:27.371: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:27.427: Robot 13 has turned its BOM on.
+1:27.643: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:27.699: Robot 3 has turned its BOM on.
+1:27.871: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:27.927: Robot 4 has turned its BOM on.
+1:28.143: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:28.199: Robot 9 has turned its BOM on.
+1:28.423: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:28.479: Robot 13 has turned its BOM on.
+1:28.643: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:28.699: Robot 3 has turned its BOM on.
+1:28.923: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:28.979: Robot 4 has turned its BOM on.
+1:29.147: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:29.203: Robot 9 has turned its BOM on.
+1:29.427: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:29.483: Robot 13 has turned its BOM on.
+1:29.699: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:29.755: Robot 3 has turned its BOM on.
+1:29.923: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:29.979: Robot 4 has turned its BOM on.
+1:30.199: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:30.255: Robot 9 has turned its BOM on.
+1:30.423: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:30.479: Robot 13 has turned its BOM on.
+1:30.699: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:30.755: Robot 3 has turned its BOM on.
+1:30.923: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:30.979: Robot 4 has turned its BOM on.
+1:31.199: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:31.255: Robot 9 has turned its BOM on.
+1:31.479: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:31.535: Robot 13 has turned its BOM on.
+1:31.699: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:31.755: Robot 3 has turned its BOM on.
+1:31.979: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:32.35: Robot 4 has turned its BOM on.
+1:32.207: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:32.263: Robot 9 has turned its BOM on.
+1:32.491: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:32.547: Robot 13 has turned its BOM on.
+1:32.755: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:32.811: Robot 3 has turned its BOM on.
+1:32.979: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:33.35: Robot 4 has turned its BOM on.
+1:33.259: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:33.315: Robot 9 has turned its BOM on.
+1:33.483: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:33.539: Robot 13 has turned its BOM on.
+1:33.755: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:33.811: Robot 3 has turned its BOM on.
+1:34.35: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:34.91: Robot 4 has turned its BOM on.
+1:34.255: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:34.311: Robot 9 has turned its BOM on.
+1:34.535: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:34.591: Robot 13 has turned its BOM on.
+1:34.811: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:34.868: Robot 3 has turned its BOM on.
+1:35.43: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:35.99: Robot 4 has turned its BOM on.
+1:35.315: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:35.372: Robot 9 has turned its BOM on.
+1:35.539: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:35.595: Robot 13 has turned its BOM on.
+1:35.811: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:35.867: Robot 3 has turned its BOM on.
+1:36.91: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:36.143: Robot 4 has turned its BOM on.
+1:36.315: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:36.371: Robot 9 has turned its BOM on.
+1:36.539: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:36.595: Robot 13 has turned its BOM on.
+1:36.811: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:36.867: Robot 3 has turned its BOM on.
+1:37.91: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:37.143: Robot 4 has turned its BOM on.
+1:37.311: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:37.367: Robot 9 has turned its BOM on.
+1:37.595: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:37.643: Robot 13 has turned its BOM on.
+1:37.867: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:37.923: Robot 3 has turned its BOM on.
+1:38.91: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:38.143: Robot 4 has turned its BOM on.
+1:38.371: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:38.427: Robot 9 has turned its BOM on.
+1:38.595: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:38.643: Robot 13 has turned its BOM on.
+1:38.867: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:38.923: Robot 3 has turned its BOM on.
+1:39.143: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:39.199: Robot 4 has turned its BOM on.
+1:39.371: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:39.427: Robot 9 has turned its BOM on.
+1:39.643: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:39.699: Robot 13 has turned its BOM on.
+1:39.867: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:39.923: Robot 3 has turned its BOM on.
+1:40.143: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:40.199: Robot 4 has turned its BOM on.
+1:40.423: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:40.479: Robot 9 has turned its BOM on.
+1:40.643: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:40.699: Robot 13 has turned its BOM on.
+1:40.931: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:40.987: Robot 3 has turned its BOM on.
+1:41.143: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:41.199: Robot 4 has turned its BOM on.
+1:41.423: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:41.479: Robot 9 has turned its BOM on.
+1:41.699: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:41.755: Robot 13 has turned its BOM on.
+1:41.924: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:41.979: Robot 3 has turned its BOM on.
+1:42.199: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:42.255: Robot 4 has turned its BOM on.
+1:42.423: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:42.479: Robot 9 has turned its BOM on.
+1:42.707: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:42.763: Robot 13 has turned its BOM on.
+1:42.932: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:42.987: Robot 3 has turned its BOM on.
+1:43.199: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:43.255: Robot 4 has turned its BOM on.
+1:43.479: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:43.535: Robot 9 has turned its BOM on.
+1:43.703: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:43.759: Robot 13 has turned its BOM on.
+1:43.983: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:44.39: Robot 3 has turned its BOM on.
+1:44.203: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:44.259: Robot 4 has turned its BOM on.
+1:44.487: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:44.543: Robot 9 has turned its BOM on.
+1:44.755: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:44.811: Robot 13 has turned its BOM on.
+1:44.983: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:45.39: Robot 3 has turned its BOM on.
+1:45.255: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:45.311: Robot 4 has turned its BOM on.
+1:45.479: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:45.535: Robot 9 has turned its BOM on.
+1:45.755: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:45.811: Robot 13 has turned its BOM on.
+1:46.35: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:46.91: Robot 3 has turned its BOM on.
+1:46.255: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:46.311: Robot 4 has turned its BOM on.
+1:46.535: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:46.591: Robot 9 has turned its BOM on.
+1:46.759: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:46.815: Robot 13 has turned its BOM on.
+1:47.39: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:47.95: Robot 3 has turned its BOM on.
+1:47.311: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:47.367: Robot 4 has turned its BOM on.
+1:47.535: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:47.591: Robot 9 has turned its BOM on.
+1:47.811: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:47.867: Robot 13 has turned its BOM on.
+1:48.39: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:48.95: Robot 3 has turned its BOM on.
+1:48.315: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:48.371: Robot 4 has turned its BOM on.
+1:48.595: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:48.643: Robot 9 has turned its BOM on.
+1:48.811: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:48.867: Robot 13 has turned its BOM on.
+1:49.91: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:49.143: Robot 3 has turned its BOM on.
+1:49.311: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:49.367: Robot 4 has turned its BOM on.
+1:49.591: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:49.643: Robot 9 has turned its BOM on.
+1:49.815: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:49.871: Robot 13 has turned its BOM on.
+1:50.95: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:50.143: Robot 3 has turned its BOM on.
+1:50.367: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:50.423: Robot 4 has turned its BOM on.
+1:50.591: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:50.643: Robot 9 has turned its BOM on.
+1:50.871: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:50.927: Robot 13 has turned its BOM on.
+1:51.95: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:51.143: Robot 3 has turned its BOM on.
+1:51.367: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:51.423: Robot 4 has turned its BOM on.
+1:51.643: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:51.699: Robot 9 has turned its BOM on.
+1:51.867: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:51.923: Robot 13 has turned its BOM on.
+1:52.143: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:52.199: Robot 3 has turned its BOM on.
+1:52.423: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:52.479: Robot 4 has turned its BOM on.
+1:52.647: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:52.703: Robot 9 has turned its BOM on.
+1:52.927: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:52.983: Robot 13 has turned its BOM on.
+1:53.143: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:53.199: Robot 3 has turned its BOM on.
+1:53.423: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:53.479: Robot 4 has turned its BOM on.
+1:53.699: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:53.755: Robot 9 has turned its BOM on.
+1:53.927: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:53.983: Robot 13 has turned its BOM on.
+1:54.199: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:54.255: Robot 3 has turned its BOM on.
+1:54.423: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:54.479: Robot 4 has turned its BOM on.
+1:54.703: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:54.759: Robot 9 has turned its BOM on.
+1:54.927: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:54.983: Robot 13 has turned its BOM on.
+1:55.199: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:55.255: Robot 3 has turned its BOM on.
+1:55.479: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:55.536: Robot 4 has turned its BOM on.
+1:55.703: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:55.759: Robot 9 has turned its BOM on.
+1:55.983: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:56.199: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:56.255: Robot 3 has turned its BOM on.
+1:56.479: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:56.535: Robot 4 has turned its BOM on.
+1:56.755: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:56.811: Robot 9 has turned its BOM on.
+1:56.983: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:57.39: Robot 13 has turned its BOM on.
+1:57.255: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:57.311: Robot 3 has turned its BOM on.
+1:57.479: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:57.535: Robot 4 has turned its BOM on.
+1:57.755: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:57.811: Robot 9 has turned its BOM on.
+1:58.35: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:58.91: Robot 13 has turned its BOM on.
+1:58.267: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:58.323: Robot 3 has turned its BOM on.
+1:58.547: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:58.603: Robot 4 has turned its BOM on.
+1:58.755: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:58.811: Robot 9 has turned its BOM on.
+1:59.35: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+1:59.91: Robot 13 has turned its BOM on.
+1:59.311: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+1:59.367: Robot 3 has turned its BOM on.
+1:59.539: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+1:59.595: Robot 4 has turned its BOM on.
+1:59.811: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+1:59.867: Robot 9 has turned its BOM on.
+2:0.35: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:0.91: Robot 13 has turned its BOM on.
+2:0.311: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:0.367: Robot 3 has turned its BOM on.
+2:0.591: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:0.643: Robot 4 has turned its BOM on.
+2:0.811: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:0.867: Robot 9 has turned its BOM on.
+2:1.91: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:1.143: Robot 13 has turned its BOM on.
+2:1.315: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:1.371: Robot 3 has turned its BOM on.
+2:1.595: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:1.643: Robot 4 has turned its BOM on.
+2:1.815: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:1.871: Robot 9 has turned its BOM on.
+2:2.99: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:2.143: Robot 13 has turned its BOM on.
+2:2.367: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:2.423: Robot 3 has turned its BOM on.
+2:2.595: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:2.643: Robot 4 has turned its BOM on.
+2:2.867: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:2.923: Robot 9 has turned its BOM on.
+2:3.91: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:3.143: Robot 13 has turned its BOM on.
+2:3.367: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:3.423: Robot 3 has turned its BOM on.
+2:3.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:3.699: Robot 4 has turned its BOM on.
+2:3.867: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:3.923: Robot 9 has turned its BOM on.
+2:4.147: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:4.203: Robot 13 has turned its BOM on.
+2:4.371: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:4.427: Robot 3 has turned its BOM on.
+2:4.643: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:4.699: Robot 4 has turned its BOM on.
+2:4.923: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:4.979: Robot 9 has turned its BOM on.
+2:5.143: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:5.199: Robot 13 has turned its BOM on.
+2:5.423: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:5.479: Robot 3 has turned its BOM on.
+2:5.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:5.755: Robot 4 has turned its BOM on.
+2:5.923: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:5.979: Robot 9 has turned its BOM on.
+2:6.203: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:6.259: Robot 13 has turned its BOM on.
+2:6.427: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:6.483: Robot 3 has turned its BOM on.
+2:6.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:6.755: Robot 4 has turned its BOM on.
+2:6.979: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:7.35: Robot 9 has turned its BOM on.
+2:7.199: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:7.255: Robot 13 has turned its BOM on.
+2:7.423: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:7.479: Robot 3 has turned its BOM on.
+2:7.699: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:7.755: Robot 4 has turned its BOM on.
+2:7.979: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:8.35: Robot 9 has turned its BOM on.
+2:8.199: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:8.255: Robot 13 has turned its BOM on.
+2:8.483: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:8.539: Robot 3 has turned its BOM on.
+2:8.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:8.811: Robot 4 has turned its BOM on.
+2:8.979: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:9.35: Robot 9 has turned its BOM on.
+2:9.259: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:9.315: Robot 13 has turned its BOM on.
+2:9.483: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:9.539: Robot 3 has turned its BOM on.
+2:9.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:9.811: Robot 4 has turned its BOM on.
+2:10.35: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:10.91: Robot 9 has turned its BOM on.
+2:10.255: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:10.311: Robot 13 has turned its BOM on.
+2:10.535: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:10.591: Robot 3 has turned its BOM on.
+2:10.755: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:10.811: Robot 4 has turned its BOM on.
+2:11.35: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:11.91: Robot 9 has turned its BOM on.
+2:11.311: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:11.367: Robot 13 has turned its BOM on.
+2:11.539: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:11.595: Robot 3 has turned its BOM on.
+2:11.811: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:11.867: Robot 4 has turned its BOM on.
+2:12.36: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:12.91: Robot 9 has turned its BOM on.
+2:12.311: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:12.367: Robot 13 has turned its BOM on.
+2:12.591: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:12.644: Robot 3 has turned its BOM on.
+2:12.811: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:12.868: Robot 4 has turned its BOM on.
+2:13.91: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:13.143: Robot 9 has turned its BOM on.
+2:13.315: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:13.371: Robot 13 has turned its BOM on.
+2:13.596: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:13.644: Robot 3 has turned its BOM on.
+2:13.816: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:13.871: Robot 4 has turned its BOM on.
+2:14.100: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:14.144: Robot 9 has turned its BOM on.
+2:14.368: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:14.424: Robot 13 has turned its BOM on.
+2:14.596: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:14.644: Robot 3 has turned its BOM on.
+2:14.876: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:14.932: Robot 4 has turned its BOM on.
+2:15.100: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:15.144: Robot 9 has turned its BOM on.
+2:15.368: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:15.424: Robot 13 has turned its BOM on.
+2:15.644: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:15.700: Robot 3 has turned its BOM on.
+2:15.876: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:15.932: Robot 4 has turned its BOM on.
+2:16.144: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:16.200: Robot 9 has turned its BOM on.
+2:16.368: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:16.424: Robot 13 has turned its BOM on.
+2:16.644: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:16.700: Robot 3 has turned its BOM on.
+2:16.924: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:16.980: Robot 4 has turned its BOM on.
+2:17.144: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:17.200: Robot 9 has turned its BOM on.
+2:17.424: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:17.480: Robot 13 has turned its BOM on.
+2:17.648: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:17.704: Robot 3 has turned its BOM on.
+2:17.928: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:17.984: Robot 4 has turned its BOM on.
+2:18.200: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:18.256: Robot 9 has turned its BOM on.
+2:18.424: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:18.480: Robot 13 has turned its BOM on.
+2:18.700: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:18.756: Robot 3 has turned its BOM on.
+2:18.928: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:18.984: Robot 4 has turned its BOM on.
+2:19.200: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:19.256: Robot 9 has turned its BOM on.
+2:19.480: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:19.536: Robot 13 has turned its BOM on.
+2:19.700: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:19.756: Robot 3 has turned its BOM on.
+2:19.980: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:20.36: Robot 4 has turned its BOM on.
+2:20.200: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:20.256: Robot 9 has turned its BOM on.
+2:20.480: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:20.536: Robot 13 has turned its BOM on.
+2:20.708: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:20.764: Robot 3 has turned its BOM on.
+2:20.992: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:21.48: Robot 4 has turned its BOM on.
+2:21.256: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:21.312: Robot 9 has turned its BOM on.
+2:21.480: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:21.536: Robot 13 has turned its BOM on.
+2:21.760: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:21.816: Robot 3 has turned its BOM on.
+2:21.984: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:22.40: Robot 4 has turned its BOM on.
+2:22.256: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:22.312: Robot 9 has turned its BOM on.
+2:22.536: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:22.592: Robot 13 has turned its BOM on.
+2:22.756: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:22.812: Robot 3 has turned its BOM on.
+2:23.44: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:23.100: Robot 4 has turned its BOM on.
+2:25.376: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:25.432: Robot 4 has requested to join the token ring.
+2:25.544: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:25.600: Robot 3 has turned its BOM on.
+2:25.812: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+2:25.868: Robot 9 has turned its BOM on.
+2:26.36: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:26.92: Robot 13 has turned its BOM on.
+2:26.312: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:26.368: Robot 3 has turned its BOM on.
+2:26.592: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+2:26.644: Robot 9 has turned its BOM on.
+2:26.816: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:26.872: Robot 13 has turned its BOM on.
+2:27.40: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:27.96: Robot 3 has turned its BOM on.
+2:27.312: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+2:27.368: Robot 9 has turned its BOM on.
+2:27.536: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:27.592: Robot 13 has turned its BOM on.
+2:27.812: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:27.868: Robot 3 has turned its BOM on.
+2:28.92: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+2:28.144: Robot 9 has turned its BOM on.
+2:28.312: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:28.368: Robot 13 has turned its BOM on.
+2:28.592: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:28.644: Robot 3 has turned its BOM on.
+2:28.816: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+2:28.872: Robot 9 has turned its BOM on.
+2:29.100: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:29.144: Robot 13 has turned its BOM on.
+2:29.312: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:29.368: Robot 3 has turned its BOM on.
+2:29.480: Robot 4 has requested to join the token ring.
+2:29.592: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+2:29.644: Robot 9 has turned its BOM on.
+2:29.812: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+2:29.868: Robot 13 has turned its BOM on.
+2:30.92: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+2:30.144: Robot 3 has turned its BOM on.
+2:30.312: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:30.368: Robot 4 has turned its BOM on.
+2:30.592: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:30.644: Robot 9 has turned its BOM on.
+2:30.816: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:30.872: Robot 13 has turned its BOM on.
+2:31.96: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:31.144: Robot 3 has turned its BOM on.
+2:31.368: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:31.424: Robot 4 has turned its BOM on.
+2:31.592: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:31.644: Robot 9 has turned its BOM on.
+2:31.876: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:31.932: Robot 13 has turned its BOM on.
+2:32.100: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:32.144: Robot 3 has turned its BOM on.
+2:32.368: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:32.424: Robot 4 has turned its BOM on.
+2:32.644: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:32.700: Robot 9 has turned its BOM on.
+2:32.868: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:32.924: Robot 13 has turned its BOM on.
+2:33.144: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:33.200: Robot 3 has turned its BOM on.
+2:33.376: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:33.432: Robot 4 has turned its BOM on.
+2:33.644: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:33.700: Robot 9 has turned its BOM on.
+2:33.924: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:33.980: Robot 13 has turned its BOM on.
+2:34.144: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:34.200: Robot 3 has turned its BOM on.
+2:34.424: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:34.480: Robot 4 has turned its BOM on.
+2:34.700: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:34.756: Robot 9 has turned its BOM on.
+2:34.924: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:34.980: Robot 13 has turned its BOM on.
+2:35.204: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:35.260: Robot 3 has turned its BOM on.
+2:35.428: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:35.484: Robot 4 has turned its BOM on.
+2:35.700: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:35.756: Robot 9 has turned its BOM on.
+2:35.924: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:35.980: Robot 13 has turned its BOM on.
+2:36.200: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:36.256: Robot 3 has turned its BOM on.
+2:36.431: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:36.484: Robot 4 has turned its BOM on.
+2:36.700: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:36.756: Robot 9 has turned its BOM on.
+2:36.980: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:37.36: Robot 13 has turned its BOM on.
+2:37.200: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:37.256: Robot 3 has turned its BOM on.
+2:37.484: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:37.540: Robot 4 has turned its BOM on.
+2:37.756: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:37.812: Robot 9 has turned its BOM on.
+2:37.984: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:38.40: Robot 13 has turned its BOM on.
+2:38.260: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:38.320: Robot 3 has turned its BOM on.
+2:38.492: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:38.548: Robot 4 has turned its BOM on.
+2:38.756: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:38.812: Robot 9 has turned its BOM on.
+2:39.36: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:39.92: Robot 13 has turned its BOM on.
+2:39.260: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:39.316: Robot 3 has turned its BOM on.
+2:39.540: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:39.596: Robot 4 has turned its BOM on.
+2:39.756: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:39.812: Robot 9 has turned its BOM on.
+2:40.36: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:40.92: Robot 13 has turned its BOM on.
+2:40.312: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:40.368: Robot 3 has turned its BOM on.
+2:40.540: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:40.596: Robot 4 has turned its BOM on.
+2:40.812: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:40.868: Robot 9 has turned its BOM on.
+2:41.52: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:41.108: Robot 13 has turned its BOM on.
+2:41.316: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:41.372: Robot 3 has turned its BOM on.
+2:41.540: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:41.596: Robot 4 has turned its BOM on.
+2:41.820: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:41.876: Robot 9 has turned its BOM on.
+2:42.44: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:42.100: Robot 13 has turned its BOM on.
+2:42.316: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:42.372: Robot 3 has turned its BOM on.
+2:42.596: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:42.644: Robot 4 has turned its BOM on.
+2:42.812: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:42.868: Robot 9 has turned its BOM on.
+2:43.92: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:43.144: Robot 13 has turned its BOM on.
+2:43.368: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:43.424: Robot 3 has turned its BOM on.
+2:43.596: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:43.644: Robot 4 has turned its BOM on.
+2:43.868: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:43.924: Robot 9 has turned its BOM on.
+2:44.92: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:44.144: Robot 13 has turned its BOM on.
+2:44.368: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:44.424: Robot 3 has turned its BOM on.
+2:44.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:44.700: Robot 4 has turned its BOM on.
+2:44.868: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:44.924: Robot 9 has turned its BOM on.
+2:45.144: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:45.200: Robot 13 has turned its BOM on.
+2:45.372: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:45.428: Robot 3 has turned its BOM on.
+2:45.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:45.700: Robot 4 has turned its BOM on.
+2:45.924: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:45.980: Robot 9 has turned its BOM on.
+2:46.144: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:46.200: Robot 13 has turned its BOM on.
+2:46.424: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:46.480: Robot 3 has turned its BOM on.
+2:46.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:46.756: Robot 4 has turned its BOM on.
+2:46.924: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:46.980: Robot 9 has turned its BOM on.
+2:47.200: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:47.256: Robot 13 has turned its BOM on.
+2:47.424: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:47.480: Robot 3 has turned its BOM on.
+2:47.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:47.756: Robot 4 has turned its BOM on.
+2:47.924: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:47.981: Robot 9 has turned its BOM on.
+2:48.204: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:48.260: Robot 13 has turned its BOM on.
+2:48.432: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:48.488: Robot 3 has turned its BOM on.
+2:48.700: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:48.756: Robot 4 has turned its BOM on.
+2:48.980: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:49.36: Robot 9 has turned its BOM on.
+2:49.200: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:49.256: Robot 13 has turned its BOM on.
+2:49.484: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:49.540: Robot 3 has turned its BOM on.
+2:49.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:49.812: Robot 4 has turned its BOM on.
+2:49.980: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:50.36: Robot 9 has turned its BOM on.
+2:50.260: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:50.316: Robot 13 has turned its BOM on.
+2:50.484: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:50.540: Robot 3 has turned its BOM on.
+2:50.764: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:50.820: Robot 4 has turned its BOM on.
+2:50.988: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:51.44: Robot 9 has turned its BOM on.
+2:51.256: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:51.312: Robot 13 has turned its BOM on.
+2:51.536: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:51.592: Robot 3 has turned its BOM on.
+2:51.756: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:51.812: Robot 4 has turned its BOM on.
+2:52.36: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:52.92: Robot 9 has turned its BOM on.
+2:52.312: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:52.368: Robot 13 has turned its BOM on.
+2:52.540: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:52.596: Robot 3 has turned its BOM on.
+2:52.820: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:52.876: Robot 4 has turned its BOM on.
+2:53.48: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:53.104: Robot 9 has turned its BOM on.
+2:53.312: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:53.368: Robot 13 has turned its BOM on.
+2:53.592: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:53.644: Robot 3 has turned its BOM on.
+2:53.816: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:53.872: Robot 4 has turned its BOM on.
+2:54.40: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:54.96: Robot 9 has turned its BOM on.
+2:54.312: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:54.368: Robot 13 has turned its BOM on.
+2:54.592: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:54.644: Robot 3 has turned its BOM on.
+2:54.812: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:54.868: Robot 4 has turned its BOM on.
+2:55.96: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:55.144: Robot 9 has turned its BOM on.
+2:55.368: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:55.424: Robot 13 has turned its BOM on.
+2:55.592: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:55.644: Robot 3 has turned its BOM on.
+2:55.876: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:55.932: Robot 4 has turned its BOM on.
+2:56.104: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:56.144: Robot 9 has turned its BOM on.
+2:56.368: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:56.424: Robot 13 has turned its BOM on.
+2:56.644: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:56.700: Robot 3 has turned its BOM on.
+2:56.872: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:56.928: Robot 4 has turned its BOM on.
+2:57.144: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:57.200: Robot 9 has turned its BOM on.
+2:57.372: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:57.428: Robot 13 has turned its BOM on.
+2:57.644: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:57.700: Robot 3 has turned its BOM on.
+2:57.924: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:57.980: Robot 4 has turned its BOM on.
+2:58.144: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:58.200: Robot 9 has turned its BOM on.
+2:58.424: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:58.480: Robot 13 has turned its BOM on.
+2:58.648: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:58.704: Robot 3 has turned its BOM on.
+2:58.928: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:59.200: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+2:59.256: Robot 9 has turned its BOM on.
+2:59.424: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+2:59.480: Robot 13 has turned its BOM on.
+2:59.700: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+2:59.756: Robot 3 has turned its BOM on.
+2:59.924: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+2:59.980: Robot 4 has turned its BOM on.
+3:0.200: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:0.256: Robot 9 has turned its BOM on.
+3:0.424: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:0.480: Robot 13 has turned its BOM on.
+3:0.700: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:0.756: Robot 3 has turned its BOM on.
+3:0.980: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:1.36: Robot 4 has turned its BOM on.
+3:1.200: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:1.256: Robot 9 has turned its BOM on.
+3:1.480: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:1.536: Robot 13 has turned its BOM on.
+3:1.700: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:1.756: Robot 3 has turned its BOM on.
+3:1.980: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:2.36: Robot 4 has turned its BOM on.
+3:2.256: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:2.312: Robot 9 has turned its BOM on.
+3:2.480: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:2.536: Robot 13 has turned its BOM on.
+3:2.760: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:2.816: Robot 3 has turned its BOM on.
+3:2.984: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:3.40: Robot 4 has turned its BOM on.
+3:3.256: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:3.312: Robot 9 has turned its BOM on.
+3:3.536: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:3.592: Robot 13 has turned its BOM on.
+3:3.756: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:3.812: Robot 3 has turned its BOM on.
+3:4.40: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:4.96: Robot 4 has turned its BOM on.
+3:4.312: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:4.368: Robot 9 has turned its BOM on.
+3:4.536: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:4.592: Robot 13 has turned its BOM on.
+3:4.816: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:4.872: Robot 3 has turned its BOM on.
+3:5.40: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:5.96: Robot 4 has turned its BOM on.
+3:5.312: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:5.368: Robot 9 has turned its BOM on.
+3:5.592: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:5.644: Robot 13 has turned its BOM on.
+3:5.816: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:5.872: Robot 3 has turned its BOM on.
+3:6.40: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:6.96: Robot 4 has turned its BOM on.
+3:6.312: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:6.368: Robot 9 has turned its BOM on.
+3:6.592: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:6.644: Robot 13 has turned its BOM on.
+3:6.812: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:6.868: Robot 3 has turned its BOM on.
+3:7.92: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:7.144: Robot 4 has turned its BOM on.
+3:7.368: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:7.424: Robot 9 has turned its BOM on.
+3:7.592: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:7.644: Robot 13 has turned its BOM on.
+3:7.872: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:7.928: Robot 3 has turned its BOM on.
+3:8.96: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:8.145: Robot 4 has turned its BOM on.
+3:8.376: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:8.432: Robot 9 has turned its BOM on.
+3:8.600: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:8.644: Robot 13 has turned its BOM on.
+3:8.868: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:8.924: Robot 3 has turned its BOM on.
+3:9.144: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:9.200: Robot 4 has turned its BOM on.
+3:9.368: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:9.424: Robot 9 has turned its BOM on.
+3:9.644: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:9.700: Robot 13 has turned its BOM on.
+3:9.924: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:9.980: Robot 3 has turned its BOM on.
+3:10.148: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:10.204: Robot 4 has turned its BOM on.
+3:10.428: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:10.484: Robot 9 has turned its BOM on.
+3:10.644: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:10.700: Robot 13 has turned its BOM on.
+3:10.924: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:10.980: Robot 3 has turned its BOM on.
+3:11.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:11.256: Robot 4 has turned its BOM on.
+3:11.424: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:11.480: Robot 9 has turned its BOM on.
+3:11.700: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:11.756: Robot 13 has turned its BOM on.
+3:11.924: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:11.980: Robot 3 has turned its BOM on.
+3:12.204: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:12.260: Robot 4 has turned its BOM on.
+3:12.428: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:12.484: Robot 9 has turned its BOM on.
+3:12.700: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:12.756: Robot 13 has turned its BOM on.
+3:12.980: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:13.36: Robot 3 has turned its BOM on.
+3:13.200: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:13.256: Robot 4 has turned its BOM on.
+3:13.480: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:13.536: Robot 9 has turned its BOM on.
+3:13.700: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:13.756: Robot 13 has turned its BOM on.
+3:13.980: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:14.36: Robot 3 has turned its BOM on.
+3:14.256: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:14.312: Robot 4 has turned its BOM on.
+3:14.484: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:14.540: Robot 9 has turned its BOM on.
+3:14.756: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:14.812: Robot 13 has turned its BOM on.
+3:14.980: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:15.36: Robot 3 has turned its BOM on.
+3:15.256: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:15.536: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:15.592: Robot 9 has turned its BOM on.
+3:15.756: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:15.812: Robot 13 has turned its BOM on.
+3:16.36: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:16.92: Robot 3 has turned its BOM on.
+3:16.260: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:16.316: Robot 4 has turned its BOM on.
+3:16.540: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:16.596: Robot 9 has turned its BOM on.
+3:16.812: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:16.868: Robot 13 has turned its BOM on.
+3:17.36: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:17.92: Robot 3 has turned its BOM on.
+3:17.312: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:17.368: Robot 4 has turned its BOM on.
+3:17.540: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:17.596: Robot 9 has turned its BOM on.
+3:17.812: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:17.868: Robot 13 has turned its BOM on.
+3:18.36: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:18.92: Robot 3 has turned its BOM on.
+3:18.312: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:18.368: Robot 4 has turned its BOM on.
+3:18.592: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:18.644: Robot 9 has turned its BOM on.
+3:18.812: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:18.868: Robot 13 has turned its BOM on.
+3:19.92: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:19.144: Robot 3 has turned its BOM on.
+3:19.316: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:19.372: Robot 4 has turned its BOM on.
+3:19.596: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:19.644: Robot 9 has turned its BOM on.
+3:19.868: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:19.924: Robot 13 has turned its BOM on.
+3:20.92: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:20.144: Robot 3 has turned its BOM on.
+3:20.368: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:20.424: Robot 4 has turned its BOM on.
+3:20.596: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:20.644: Robot 9 has turned its BOM on.
+3:20.868: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:20.924: Robot 13 has turned its BOM on.
+3:21.144: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:21.200: Robot 3 has turned its BOM on.
+3:21.368: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:21.424: Robot 4 has turned its BOM on.
+3:21.644: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:21.700: Robot 9 has turned its BOM on.
+3:21.924: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:21.980: Robot 13 has turned its BOM on.
+3:22.148: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:22.204: Robot 3 has turned its BOM on.
+3:22.428: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:22.484: Robot 4 has turned its BOM on.
+3:22.644: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:22.700: Robot 9 has turned its BOM on.
+3:22.924: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:22.980: Robot 13 has turned its BOM on.
+3:23.200: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:23.256: Robot 3 has turned its BOM on.
+3:23.428: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:23.484: Robot 4 has turned its BOM on.
+3:23.700: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:23.756: Robot 9 has turned its BOM on.
+3:23.924: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:23.980: Robot 13 has turned its BOM on.
+3:24.204: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:24.260: Robot 3 has turned its BOM on.
+3:24.428: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:24.484: Robot 4 has turned its BOM on.
+3:24.700: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:24.756: Robot 9 has turned its BOM on.
+3:24.980: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:25.36: Robot 13 has turned its BOM on.
+3:25.200: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:25.256: Robot 3 has turned its BOM on.
+3:25.484: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:25.540: Robot 4 has turned its BOM on.
+3:25.700: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:25.756: Robot 9 has turned its BOM on.
+3:25.984: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:26.40: Robot 13 has turned its BOM on.
+3:26.256: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:26.312: Robot 3 has turned its BOM on.
+3:26.480: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:26.536: Robot 4 has turned its BOM on.
+3:26.760: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:26.816: Robot 9 has turned its BOM on.
+3:26.984: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:27.40: Robot 13 has turned its BOM on.
+3:27.256: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:27.312: Robot 3 has turned its BOM on.
+3:27.536: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:27.592: Robot 4 has turned its BOM on.
+3:27.760: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:27.816: Robot 9 has turned its BOM on.
+3:28.40: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:28.96: Robot 13 has turned its BOM on.
+3:28.256: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:28.312: Robot 3 has turned its BOM on.
+3:28.536: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:28.592: Robot 4 has turned its BOM on.
+3:28.813: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:28.868: Robot 9 has turned its BOM on.
+3:29.44: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:29.100: Robot 13 has turned its BOM on.
+3:29.312: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:29.368: Robot 3 has turned its BOM on.
+3:29.536: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:29.592: Robot 4 has turned its BOM on.
+3:29.816: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:29.872: Robot 9 has turned its BOM on.
+3:30.40: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:30.96: Robot 13 has turned its BOM on.
+3:30.312: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:30.368: Robot 3 has turned its BOM on.
+3:30.592: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:30.644: Robot 4 has turned its BOM on.
+3:30.816: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:30.872: Robot 9 has turned its BOM on.
+3:31.96: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:31.144: Robot 13 has turned its BOM on.
+3:31.312: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:31.368: Robot 3 has turned its BOM on.
+3:31.592: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:31.644: Robot 4 has turned its BOM on.
+3:31.868: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:31.924: Robot 9 has turned its BOM on.
+3:32.96: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:32.144: Robot 13 has turned its BOM on.
+3:32.368: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:32.424: Robot 3 has turned its BOM on.
+3:32.592: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:32.644: Robot 4 has turned its BOM on.
+3:32.869: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:32.924: Robot 9 has turned its BOM on.
+3:33.144: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:33.200: Robot 13 has turned its BOM on.
+3:33.368: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:33.424: Robot 3 has turned its BOM on.
+3:33.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:33.700: Robot 4 has turned its BOM on.
+3:33.932: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:33.988: Robot 9 has turned its BOM on.
+3:34.144: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:34.200: Robot 13 has turned its BOM on.
+3:34.424: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:34.480: Robot 3 has turned its BOM on.
+3:34.644: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:34.700: Robot 4 has turned its BOM on.
+3:34.925: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:34.980: Robot 9 has turned its BOM on.
+3:35.200: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:35.256: Robot 13 has turned its BOM on.
+3:35.425: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:35.480: Robot 3 has turned its BOM on.
+3:35.704: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:35.760: Robot 4 has turned its BOM on.
+3:35.928: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:35.984: Robot 9 has turned its BOM on.
+3:36.200: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:36.256: Robot 13 has turned its BOM on.
+3:36.424: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:36.480: Robot 3 has turned its BOM on.
+3:36.704: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:36.760: Robot 4 has turned its BOM on.
+3:36.928: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:36.984: Robot 9 has turned its BOM on.
+3:37.200: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:37.256: Robot 13 has turned its BOM on.
+3:37.480: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:37.537: Robot 3 has turned its BOM on.
+3:39.601: Robot 13 passed the token to robot 4. Sensor matrix:
+(4 5)(9 4)
+3:39.645: Robot 3 has requested to join the token ring.
+3:39.701: Robot 4 has turned its BOM on.
+3:39.813: Robot 4 passed the token to robot 9. Sensor matrix:
+(9 1)(13 13)
+3:39.869: Robot 9 has turned its BOM on.
+3:40.93: Robot 9 passed the token to robot 13. Sensor matrix:
+(4 9)(13 12)
+3:40.145: Robot 13 has turned its BOM on.
+3:40.313: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:40.369: Robot 3 has turned its BOM on.
+3:40.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:40.645: Robot 4 has turned its BOM on.
+3:40.813: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:41.93: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:41.145: Robot 13 has turned its BOM on.
+3:41.369: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:41.425: Robot 3 has turned its BOM on.
+3:41.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:41.645: Robot 4 has turned its BOM on.
+3:41.869: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:41.925: Robot 9 has turned its BOM on.
+3:42.97: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:42.145: Robot 13 has turned its BOM on.
+3:42.369: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:42.425: Robot 3 has turned its BOM on.
+3:42.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:42.645: Robot 4 has turned its BOM on.
+3:42.869: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:42.925: Robot 9 has turned its BOM on.
+3:43.145: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:43.201: Robot 13 has turned its BOM on.
+3:43.377: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:43.433: Robot 3 has turned its BOM on.
+3:43.601: Robot 4 has requested to join the token ring.
+3:43.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:43.701: Robot 4 has turned its BOM on.
+3:43.757: Robot 9 has requested to join the token ring.
+3:43.873: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:43.929: Robot 9 has turned its BOM on.
+3:44.145: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:44.201: Robot 13 has turned its BOM on.
+3:44.425: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:44.481: Robot 3 has turned its BOM on.
+3:44.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:44.701: Robot 4 has turned its BOM on.
+3:44.925: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:44.981: Robot 9 has turned its BOM on.
+3:45.149: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:45.205: Robot 13 has turned its BOM on.
+3:45.429: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:45.485: Robot 3 has turned its BOM on.
+3:45.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:45.757: Robot 4 has turned its BOM on.
+3:45.925: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:45.981: Robot 9 has turned its BOM on.
+3:46.205: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:46.261: Robot 13 has turned its BOM on.
+3:46.317: Robot 9 has requested to join the token ring.
+3:46.429: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:46.485: Robot 3 has turned its BOM on.
+3:46.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:46.757: Robot 4 has turned its BOM on.
+3:46.981: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:47.37: Robot 9 has turned its BOM on.
+3:47.201: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:47.257: Robot 13 has turned its BOM on.
+3:47.481: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:47.537: Robot 3 has turned its BOM on.
+3:47.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:47.813: Robot 4 has turned its BOM on.
+3:47.981: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:48.37: Robot 9 has turned its BOM on.
+3:48.261: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:48.317: Robot 13 has turned its BOM on.
+3:48.485: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:48.541: Robot 3 has turned its BOM on.
+3:48.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:48.813: Robot 4 has turned its BOM on.
+3:49.37: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:49.93: Robot 9 has turned its BOM on.
+3:49.265: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:49.321: Robot 13 has turned its BOM on.
+3:49.489: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:49.545: Robot 3 has turned its BOM on.
+3:49.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:49.813: Robot 4 has turned its BOM on.
+3:50.37: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:50.93: Robot 9 has turned its BOM on.
+3:50.257: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:50.313: Robot 13 has turned its BOM on.
+3:50.537: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:50.593: Robot 3 has turned its BOM on.
+3:50.813: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:50.869: Robot 4 has turned its BOM on.
+3:51.37: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:51.93: Robot 9 has turned its BOM on.
+3:51.317: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:51.373: Robot 13 has turned its BOM on.
+3:51.541: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:51.597: Robot 3 has turned its BOM on.
+3:51.813: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:51.869: Robot 4 has turned its BOM on.
+3:52.93: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:52.145: Robot 9 has turned its BOM on.
+3:52.317: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:52.373: Robot 13 has turned its BOM on.
+3:52.605: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:52.645: Robot 3 has turned its BOM on.
+3:52.813: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:52.869: Robot 4 has turned its BOM on.
+3:53.93: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:53.145: Robot 9 has turned its BOM on.
+3:53.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:53.425: Robot 13 has turned its BOM on.
+3:53.597: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:53.645: Robot 3 has turned its BOM on.
+3:53.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:53.925: Robot 4 has turned its BOM on.
+3:54.93: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:54.145: Robot 9 has turned its BOM on.
+3:54.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:54.425: Robot 13 has turned its BOM on.
+3:54.645: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:54.701: Robot 3 has turned its BOM on.
+3:54.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:54.925: Robot 4 has turned its BOM on.
+3:55.145: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:55.201: Robot 9 has turned its BOM on.
+3:55.373: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+3:55.429: Robot 13 has turned its BOM on.
+3:55.645: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:55.701: Robot 3 has turned its BOM on.
+3:55.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:55.925: Robot 4 has turned its BOM on.
+3:56.145: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+3:56.201: Robot 9 has turned its BOM on.
+3:56.425: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 12)(4 9)(13 12)
+3:56.481: Robot 13 has turned its BOM on.
+3:56.645: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+3:56.701: Robot 3 has turned its BOM on.
+3:56.925: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:56.981: Robot 4 has turned its BOM on.
+3:59.105: Robot 3 passed the token to robot 9. Sensor matrix:
+(9 2)(13 0)
+3:59.145: Robot 9 has requested to join the token ring.
+3:59.201: Robot 9 has turned its BOM on.
+3:59.317: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(13 12)
+3:59.373: Robot 13 has turned its BOM on.
+3:59.541: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(9 4)
+3:59.597: Robot 3 has turned its BOM on.
+3:59.821: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+3:59.877: Robot 4 has turned its BOM on.
+4:0.45: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:0.101: Robot 9 has turned its BOM on.
+4:0.317: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:0.373: Robot 13 has turned its BOM on.
+4:0.541: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:0.597: Robot 3 has turned its BOM on.
+4:0.813: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:0.869: Robot 4 has turned its BOM on.
+4:1.93: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:1.145: Robot 9 has turned its BOM on.
+4:1.313: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:1.369: Robot 13 has turned its BOM on.
+4:1.593: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:1.645: Robot 3 has turned its BOM on.
+4:1.817: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:1.873: Robot 4 has turned its BOM on.
+4:2.97: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:2.145: Robot 9 has turned its BOM on.
+4:2.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:2.425: Robot 13 has turned its BOM on.
+4:2.593: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:2.645: Robot 3 has turned its BOM on.
+4:2.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:2.925: Robot 4 has turned its BOM on.
+4:3.97: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:3.145: Robot 9 has turned its BOM on.
+4:3.257: Robot 9 has requested to join the token ring.
+4:3.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:3.425: Robot 13 has turned its BOM on.
+4:3.645: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:3.701: Robot 3 has turned its BOM on.
+4:3.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:3.925: Robot 4 has turned its BOM on.
+4:4.145: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:4.201: Robot 9 has turned its BOM on.
+4:4.425: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:4.481: Robot 13 has turned its BOM on.
+4:4.649: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:4.705: Robot 3 has turned its BOM on.
+4:4.929: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:4.985: Robot 4 has turned its BOM on.
+4:5.145: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:5.201: Robot 9 has turned its BOM on.
+4:5.425: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:5.481: Robot 13 has turned its BOM on.
+4:5.701: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:5.757: Robot 3 has turned its BOM on.
+4:5.929: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:5.985: Robot 4 has turned its BOM on.
+4:6.201: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:6.257: Robot 9 has turned its BOM on.
+4:6.425: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:6.481: Robot 13 has turned its BOM on.
+4:6.701: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:6.757: Robot 3 has turned its BOM on.
+4:6.981: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:7.37: Robot 4 has turned its BOM on.
+4:7.201: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:7.257: Robot 9 has turned its BOM on.
+4:7.481: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:7.537: Robot 13 has turned its BOM on.
+4:7.705: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:7.761: Robot 3 has turned its BOM on.
+4:7.985: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:8.41: Robot 4 has turned its BOM on.
+4:8.201: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:8.257: Robot 9 has turned its BOM on.
+4:8.481: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:8.537: Robot 13 has turned its BOM on.
+4:8.757: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:8.813: Robot 3 has turned its BOM on.
+4:8.985: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:9.41: Robot 4 has turned its BOM on.
+4:9.257: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:9.313: Robot 9 has turned its BOM on.
+4:9.481: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:9.537: Robot 13 has turned its BOM on.
+4:9.757: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:9.813: Robot 3 has turned its BOM on.
+4:10.37: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:10.93: Robot 4 has turned its BOM on.
+4:10.257: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:10.313: Robot 9 has turned its BOM on.
+4:10.537: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:10.593: Robot 13 has turned its BOM on.
+4:10.765: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:10.821: Robot 3 has turned its BOM on.
+4:11.45: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:11.101: Robot 4 has turned its BOM on.
+4:11.313: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:11.369: Robot 9 has turned its BOM on.
+4:11.537: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:11.593: Robot 13 has turned its BOM on.
+4:11.817: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:11.873: Robot 3 has turned its BOM on.
+4:12.41: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:12.97: Robot 4 has turned its BOM on.
+4:12.313: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:12.369: Robot 9 has turned its BOM on.
+4:12.593: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:12.645: Robot 13 has turned its BOM on.
+4:12.813: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:12.869: Robot 3 has turned its BOM on.
+4:13.93: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:13.145: Robot 4 has turned its BOM on.
+4:13.369: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:13.425: Robot 9 has turned its BOM on.
+4:13.593: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:13.645: Robot 13 has turned its BOM on.
+4:13.873: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:13.929: Robot 3 has turned its BOM on.
+4:14.97: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:14.145: Robot 4 has turned its BOM on.
+4:14.369: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:14.425: Robot 9 has turned its BOM on.
+4:14.593: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:14.645: Robot 13 has turned its BOM on.
+4:14.873: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:14.929: Robot 3 has turned its BOM on.
+4:15.97: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:15.145: Robot 4 has turned its BOM on.
+4:15.369: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:15.425: Robot 9 has turned its BOM on.
+4:15.645: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:15.701: Robot 13 has turned its BOM on.
+4:15.869: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:15.925: Robot 3 has turned its BOM on.
+4:16.145: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:16.202: Robot 4 has turned its BOM on.
+4:16.425: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:16.481: Robot 9 has turned its BOM on.
+4:16.649: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:16.706: Robot 13 has turned its BOM on.
+4:16.929: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:16.985: Robot 3 has turned its BOM on.
+4:17.145: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:17.201: Robot 4 has turned its BOM on.
+4:17.425: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:17.481: Robot 9 has turned its BOM on.
+4:17.701: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:17.757: Robot 13 has turned its BOM on.
+4:17.929: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:17.985: Robot 3 has turned its BOM on.
+4:18.205: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:18.261: Robot 4 has turned its BOM on.
+4:18.485: Robot 9 has turned its BOM on.
+4:18.701: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:18.757: Robot 13 has turned its BOM on.
+4:18.981: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:19.37: Robot 3 has turned its BOM on.
+4:19.205: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:19.261: Robot 4 has turned its BOM on.
+4:19.489: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:19.545: Robot 9 has turned its BOM on.
+4:19.701: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:19.757: Robot 13 has turned its BOM on.
+4:19.981: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:20.37: Robot 3 has turned its BOM on.
+4:20.257: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:20.313: Robot 4 has turned its BOM on.
+4:20.485: Robot 9 has turned its BOM on.
+4:20.757: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:20.813: Robot 13 has turned its BOM on.
+4:20.981: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:21.37: Robot 3 has turned its BOM on.
+4:21.261: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:21.317: Robot 4 has turned its BOM on.
+4:21.485: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:21.541: Robot 9 has turned its BOM on.
+4:21.757: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:21.813: Robot 13 has turned its BOM on.
+4:22.37: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:22.93: Robot 3 has turned its BOM on.
+4:22.257: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:22.313: Robot 4 has turned its BOM on.
+4:22.537: Robot 9 has turned its BOM on.
+4:22.758: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:22.813: Robot 13 has turned its BOM on.
+4:23.37: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:23.93: Robot 3 has turned its BOM on.
+4:23.313: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:23.369: Robot 4 has turned its BOM on.
+4:23.541: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:23.597: Robot 9 has turned its BOM on.
+4:23.817: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:23.873: Robot 13 has turned its BOM on.
+4:24.41: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:24.97: Robot 3 has turned its BOM on.
+4:24.313: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:24.593: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:24.645: Robot 9 has turned its BOM on.
+4:24.813: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:24.869: Robot 13 has turned its BOM on.
+4:25.93: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:25.145: Robot 3 has turned its BOM on.
+4:25.317: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:25.373: Robot 4 has turned its BOM on.
+4:25.597: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:25.645: Robot 9 has turned its BOM on.
+4:25.869: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:25.925: Robot 13 has turned its BOM on.
+4:26.93: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:26.145: Robot 3 has turned its BOM on.
+4:26.369: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:26.425: Robot 4 has turned its BOM on.
+4:26.601: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:26.645: Robot 9 has turned its BOM on.
+4:26.869: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:26.925: Robot 13 has turned its BOM on.
+4:27.93: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:27.145: Robot 3 has turned its BOM on.
+4:27.369: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:27.425: Robot 4 has turned its BOM on.
+4:27.645: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:27.701: Robot 9 has turned its BOM on.
+4:27.869: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:27.925: Robot 13 has turned its BOM on.
+4:28.149: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:28.205: Robot 3 has turned its BOM on.
+4:28.373: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:28.429: Robot 4 has turned its BOM on.
+4:28.645: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:28.701: Robot 9 has turned its BOM on.
+4:28.925: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:28.981: Robot 13 has turned its BOM on.
+4:29.145: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:29.201: Robot 3 has turned its BOM on.
+4:29.429: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:29.485: Robot 4 has turned its BOM on.
+4:29.701: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:29.757: Robot 9 has turned its BOM on.
+4:29.925: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:29.981: Robot 13 has turned its BOM on.
+4:30.201: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:30.257: Robot 3 has turned its BOM on.
+4:30.425: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:30.481: Robot 4 has turned its BOM on.
+4:30.701: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:30.757: Robot 9 has turned its BOM on.
+4:30.981: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:31.37: Robot 13 has turned its BOM on.
+4:31.209: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:31.265: Robot 3 has turned its BOM on.
+4:31.489: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:31.545: Robot 4 has turned its BOM on.
+4:31.701: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:31.757: Robot 9 has turned its BOM on.
+4:31.981: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:32.37: Robot 13 has turned its BOM on.
+4:32.257: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:32.313: Robot 3 has turned its BOM on.
+4:32.485: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:32.541: Robot 4 has turned its BOM on.
+4:32.757: Robot 9 has turned its BOM on.
+4:32.981: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:33.37: Robot 13 has turned its BOM on.
+4:33.261: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:33.317: Robot 3 has turned its BOM on.
+4:33.485: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:33.541: Robot 4 has turned its BOM on.
+4:33.814: Robot 9 has turned its BOM on.
+4:34.37: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:34.93: Robot 13 has turned its BOM on.
+4:34.261: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:34.318: Robot 3 has turned its BOM on.
+4:34.541: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:34.597: Robot 4 has turned its BOM on.
+4:34.757: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:34.813: Robot 9 has turned its BOM on.
+4:35.37: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:35.93: Robot 13 has turned its BOM on.
+4:35.313: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:35.369: Robot 3 has turned its BOM on.
+4:35.541: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:35.597: Robot 4 has turned its BOM on.
+4:35.813: Robot 9 has turned its BOM on.
+4:36.37: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:36.93: Robot 13 has turned its BOM on.
+4:36.313: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:36.369: Robot 3 has turned its BOM on.
+4:36.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:36.645: Robot 4 has turned its BOM on.
+4:36.817: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:36.873: Robot 9 has turned its BOM on.
+4:37.97: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:37.145: Robot 13 has turned its BOM on.
+4:37.313: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:37.369: Robot 3 has turned its BOM on.
+4:37.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:37.645: Robot 4 has turned its BOM on.
+4:37.869: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:37.925: Robot 9 has turned its BOM on.
+4:38.97: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:38.145: Robot 13 has turned its BOM on.
+4:38.369: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:38.425: Robot 3 has turned its BOM on.
+4:38.593: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:38.645: Robot 4 has turned its BOM on.
+4:38.869: Robot 9 has turned its BOM on.
+4:39.145: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:39.201: Robot 13 has turned its BOM on.
+4:39.369: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:39.425: Robot 3 has turned its BOM on.
+4:39.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:39.701: Robot 4 has turned its BOM on.
+4:39.873: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:39.929: Robot 9 has turned its BOM on.
+4:40.145: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:40.201: Robot 13 has turned its BOM on.
+4:40.373: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:40.429: Robot 3 has turned its BOM on.
+4:40.645: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:40.701: Robot 4 has turned its BOM on.
+4:40.925: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:40.981: Robot 9 has turned its BOM on.
+4:41.145: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:41.201: Robot 13 has turned its BOM on.
+4:41.429: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:41.485: Robot 3 has turned its BOM on.
+4:41.649: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:41.705: Robot 4 has turned its BOM on.
+4:41.929: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:41.985: Robot 9 has turned its BOM on.
+4:42.201: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:42.257: Robot 13 has turned its BOM on.
+4:42.425: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:42.481: Robot 3 has turned its BOM on.
+4:42.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:42.757: Robot 4 has turned its BOM on.
+4:42.925: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:42.981: Robot 9 has turned its BOM on.
+4:43.201: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:43.257: Robot 13 has turned its BOM on.
+4:43.485: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:43.541: Robot 3 has turned its BOM on.
+4:43.701: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:43.757: Robot 4 has turned its BOM on.
+4:43.981: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:44.37: Robot 9 has turned its BOM on.
+4:44.257: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:44.313: Robot 13 has turned its BOM on.
+4:44.481: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:44.537: Robot 3 has turned its BOM on.
+4:44.761: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:44.817: Robot 4 has turned its BOM on.
+4:44.985: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:45.41: Robot 9 has turned its BOM on.
+4:45.257: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:45.313: Robot 13 has turned its BOM on.
+4:45.481: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:45.537: Robot 3 has turned its BOM on.
+4:45.761: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:45.817: Robot 4 has turned its BOM on.
+4:45.985: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:46.41: Robot 9 has turned its BOM on.
+4:46.257: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:46.313: Robot 13 has turned its BOM on.
+4:46.537: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:46.593: Robot 3 has turned its BOM on.
+4:46.757: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:46.813: Robot 4 has turned its BOM on.
+4:47.41: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:47.97: Robot 9 has turned its BOM on.
+4:47.313: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:47.369: Robot 13 has turned its BOM on.
+4:47.537: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:47.593: Robot 3 has turned its BOM on.
+4:47.817: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:47.873: Robot 4 has turned its BOM on.
+4:48.41: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:48.97: Robot 9 has turned its BOM on.
+4:48.369: Robot 13 has turned its BOM on.
+4:48.593: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:48.645: Robot 3 has turned its BOM on.
+4:48.817: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:48.873: Robot 4 has turned its BOM on.
+4:49.97: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:49.145: Robot 9 has turned its BOM on.
+4:49.313: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:49.369: Robot 13 has turned its BOM on.
+4:49.593: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:49.645: Robot 3 has turned its BOM on.
+4:49.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:49.925: Robot 4 has turned its BOM on.
+4:50.97: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:50.145: Robot 9 has turned its BOM on.
+4:50.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:50.425: Robot 13 has turned its BOM on.
+4:50.593: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:50.645: Robot 3 has turned its BOM on.
+4:50.869: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:50.925: Robot 4 has turned its BOM on.
+4:51.145: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:51.201: Robot 9 has turned its BOM on.
+4:51.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:51.425: Robot 13 has turned its BOM on.
+4:51.645: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:51.701: Robot 3 has turned its BOM on.
+4:51.873: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:51.929: Robot 4 has turned its BOM on.
+4:52.145: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:52.201: Robot 9 has turned its BOM on.
+4:52.369: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:52.425: Robot 13 has turned its BOM on.
+4:52.645: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:52.701: Robot 3 has turned its BOM on.
+4:52.925: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:52.981: Robot 4 has turned its BOM on.
+4:53.149: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:53.205: Robot 9 has turned its BOM on.
+4:53.429: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:53.485: Robot 13 has turned its BOM on.
+4:53.701: Robot 3 has turned its BOM on.
+4:53.925: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:53.981: Robot 4 has turned its BOM on.
+4:54.201: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:54.257: Robot 9 has turned its BOM on.
+4:54.429: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:54.485: Robot 13 has turned its BOM on.
+4:54.701: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:54.757: Robot 3 has turned its BOM on.
+4:54.925: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:54.981: Robot 4 has turned its BOM on.
+4:55.201: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:55.257: Robot 9 has turned its BOM on.
+4:55.481: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:55.537: Robot 13 has turned its BOM on.
+4:55.701: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:55.757: Robot 3 has turned its BOM on.
+4:55.981: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:56.37: Robot 4 has turned its BOM on.
+4:56.201: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:56.257: Robot 9 has turned its BOM on.
+4:56.481: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:56.538: Robot 13 has turned its BOM on.
+4:56.761: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:56.817: Robot 3 has turned its BOM on.
+4:56.989: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:57.45: Robot 4 has turned its BOM on.
+4:57.257: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:57.313: Robot 9 has turned its BOM on.
+4:57.489: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:57.757: Robot 3 has turned its BOM on.
+4:57.981: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:58.37: Robot 4 has turned its BOM on.
+4:58.257: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:58.313: Robot 9 has turned its BOM on.
+4:58.537: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:58.593: Robot 13 has turned its BOM on.
+4:58.757: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:58.813: Robot 3 has turned its BOM on.
+4:59.41: Robot 3 passed the token to robot 4. Sensor matrix:
+(4 3)(9 2)(13 0)
+4:59.97: Robot 4 has turned its BOM on.
+4:59.261: Robot 4 passed the token to robot 9. Sensor matrix:
+(3 12)(9 1)(13 13)
+4:59.317: Robot 9 has turned its BOM on.
+4:59.541: Robot 9 passed the token to robot 13. Sensor matrix:
+(3 10)(4 9)(13 12)
+4:59.598: Robot 13 has turned its BOM on.
+4:59.813: Robot 13 passed the token to robot 3. Sensor matrix:
+(3 8)(4 5)(9 4)
+4:59.869: Robot 3 has turned its BOM on.
Index: branches/scout/projects/libwireless/logger/tests/5robots5minutes.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots5minutes.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots5minutes.test	(revision 1346)
@@ -0,0 +1,3454 @@
+0:0.235: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:0.291: Robot 4 has turned its BOM on.
+0:0.515: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:0.571: Robot 9 has turned its BOM on.
+0:0.739: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+0:0.795: Robot 13 has turned its BOM on.
+0:1.15: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:1.71: Robot 2 has turned its BOM on.
+0:1.295: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:1.351: Robot 3 has turned its BOM on.
+0:1.519: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:1.575: Robot 4 has turned its BOM on.
+0:1.799: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:1.855: Robot 9 has turned its BOM on.
+0:2.71: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:2.127: Robot 13 has turned its BOM on.
+0:2.295: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:2.351: Robot 2 has turned its BOM on.
+0:2.575: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:2.631: Robot 3 has turned its BOM on.
+0:2.855: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:2.911: Robot 4 has turned its BOM on.
+0:3.71: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:3.127: Robot 9 has turned its BOM on.
+0:3.351: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:3.407: Robot 13 has turned its BOM on.
+0:3.627: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:3.683: Robot 2 has turned its BOM on.
+0:3.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:3.911: Robot 3 has turned its BOM on.
+0:4.127: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:4.183: Robot 4 has turned its BOM on.
+0:4.407: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:4.463: Robot 9 has turned its BOM on.
+0:4.627: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:4.683: Robot 13 has turned its BOM on.
+0:4.911: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:4.967: Robot 2 has turned its BOM on.
+0:5.183: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:5.239: Robot 3 has turned its BOM on.
+0:5.407: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:5.463: Robot 4 has turned its BOM on.
+0:5.683: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:5.739: Robot 9 has turned its BOM on.
+0:5.963: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+0:6.15: Robot 13 has turned its BOM on.
+0:6.239: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:6.295: Robot 2 has turned its BOM on.
+0:6.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:6.515: Robot 3 has turned its BOM on.
+0:6.743: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:6.799: Robot 4 has turned its BOM on.
+0:6.967: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:7.15: Robot 9 has turned its BOM on.
+0:7.239: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+0:7.296: Robot 13 has turned its BOM on.
+0:7.515: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:7.571: Robot 2 has turned its BOM on.
+0:7.743: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:7.800: Robot 3 has turned its BOM on.
+0:8.19: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:8.75: Robot 4 has turned its BOM on.
+0:8.299: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:8.355: Robot 9 has turned its BOM on.
+0:8.571: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:8.627: Robot 13 has turned its BOM on.
+0:8.803: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:8.859: Robot 2 has turned its BOM on.
+0:9.71: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:9.127: Robot 3 has turned its BOM on.
+0:9.295: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:9.351: Robot 4 has turned its BOM on.
+0:9.571: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:9.627: Robot 9 has turned its BOM on.
+0:9.851: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:9.907: Robot 13 has turned its BOM on.
+0:10.127: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:10.183: Robot 2 has turned its BOM on.
+0:10.351: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:10.407: Robot 3 has turned its BOM on.
+0:10.631: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:10.687: Robot 4 has turned its BOM on.
+0:10.911: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:10.967: Robot 9 has turned its BOM on.
+0:11.127: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:11.183: Robot 13 has turned its BOM on.
+0:11.407: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:11.463: Robot 2 has turned its BOM on.
+0:11.631: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:11.687: Robot 3 has turned its BOM on.
+0:11.911: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:11.967: Robot 4 has turned its BOM on.
+0:12.183: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:12.239: Robot 9 has turned its BOM on.
+0:12.463: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:12.515: Robot 13 has turned its BOM on.
+0:12.687: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:12.743: Robot 2 has turned its BOM on.
+0:12.967: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:13.15: Robot 3 has turned its BOM on.
+0:13.239: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:13.295: Robot 4 has turned its BOM on.
+0:13.463: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:13.515: Robot 9 has turned its BOM on.
+0:13.743: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:13.799: Robot 13 has turned its BOM on.
+0:13.967: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:14.15: Robot 2 has turned its BOM on.
+0:14.239: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:14.295: Robot 3 has turned its BOM on.
+0:14.515: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:14.571: Robot 4 has turned its BOM on.
+0:14.795: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:14.851: Robot 9 has turned its BOM on.
+0:15.15: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:15.71: Robot 13 has turned its BOM on.
+0:15.299: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:15.355: Robot 2 has turned its BOM on.
+0:15.575: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:15.631: Robot 3 has turned its BOM on.
+0:15.799: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:15.855: Robot 4 has turned its BOM on.
+0:16.71: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:16.127: Robot 9 has turned its BOM on.
+0:16.351: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:16.407: Robot 13 has turned its BOM on.
+0:16.575: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:16.631: Robot 2 has turned its BOM on.
+0:16.855: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:16.911: Robot 3 has turned its BOM on.
+0:17.127: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:17.183: Robot 4 has turned its BOM on.
+0:17.351: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:17.407: Robot 9 has turned its BOM on.
+0:17.631: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:17.687: Robot 13 has turned its BOM on.
+0:17.911: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:17.967: Robot 2 has turned its BOM on.
+0:18.127: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:18.183: Robot 3 has turned its BOM on.
+0:18.411: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:18.467: Robot 4 has turned its BOM on.
+0:18.683: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:18.739: Robot 9 has turned its BOM on.
+0:18.907: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:18.963: Robot 13 has turned its BOM on.
+0:19.183: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:19.239: Robot 2 has turned its BOM on.
+0:19.463: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:19.515: Robot 3 has turned its BOM on.
+0:19.683: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:19.739: Robot 4 has turned its BOM on.
+0:19.963: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:20.15: Robot 9 has turned its BOM on.
+0:20.243: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:20.299: Robot 13 has turned its BOM on.
+0:20.467: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:20.515: Robot 2 has turned its BOM on.
+0:20.739: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:20.795: Robot 3 has turned its BOM on.
+0:21.15: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:21.71: Robot 4 has turned its BOM on.
+0:21.243: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:21.299: Robot 9 has turned its BOM on.
+0:21.515: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:21.571: Robot 13 has turned its BOM on.
+0:21.795: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:21.851: Robot 2 has turned its BOM on.
+0:22.71: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:22.127: Robot 3 has turned its BOM on.
+0:22.303: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:22.359: Robot 4 has turned its BOM on.
+0:22.571: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:22.627: Robot 9 has turned its BOM on.
+0:22.795: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:22.851: Robot 13 has turned its BOM on.
+0:23.71: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:23.127: Robot 2 has turned its BOM on.
+0:23.351: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:23.407: Robot 3 has turned its BOM on.
+0:23.627: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:23.683: Robot 4 has turned its BOM on.
+0:23.851: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:23.907: Robot 9 has turned its BOM on.
+0:24.131: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:24.187: Robot 13 has turned its BOM on.
+0:24.411: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:24.467: Robot 2 has turned its BOM on.
+0:24.627: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:24.683: Robot 3 has turned its BOM on.
+0:24.907: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:24.963: Robot 4 has turned its BOM on.
+0:25.131: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:25.187: Robot 9 has turned its BOM on.
+0:25.411: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:25.467: Robot 13 has turned its BOM on.
+0:25.683: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:25.739: Robot 2 has turned its BOM on.
+0:25.963: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:26.15: Robot 3 has turned its BOM on.
+0:26.187: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:26.243: Robot 4 has turned its BOM on.
+0:26.467: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:26.515: Robot 9 has turned its BOM on.
+0:26.739: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:26.795: Robot 13 has turned its BOM on.
+0:26.964: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:27.15: Robot 2 has turned its BOM on.
+0:27.243: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:27.299: Robot 3 has turned its BOM on.
+0:27.468: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:27.515: Robot 4 has turned its BOM on.
+0:27.739: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:27.795: Robot 9 has turned its BOM on.
+0:28.15: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:28.71: Robot 13 has turned its BOM on.
+0:28.295: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:28.351: Robot 2 has turned its BOM on.
+0:28.515: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:28.571: Robot 3 has turned its BOM on.
+0:28.795: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:28.851: Robot 4 has turned its BOM on.
+0:29.75: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:29.131: Robot 9 has turned its BOM on.
+0:29.299: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:29.355: Robot 13 has turned its BOM on.
+0:29.571: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:29.627: Robot 2 has turned its BOM on.
+0:29.851: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:29.907: Robot 3 has turned its BOM on.
+0:30.75: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:30.131: Robot 4 has turned its BOM on.
+0:30.355: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:30.411: Robot 9 has turned its BOM on.
+0:30.627: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:30.683: Robot 13 has turned its BOM on.
+0:30.851: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:30.907: Robot 2 has turned its BOM on.
+0:31.131: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:31.187: Robot 3 has turned its BOM on.
+0:31.411: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:31.467: Robot 4 has turned its BOM on.
+0:31.627: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:31.683: Robot 9 has turned its BOM on.
+0:31.907: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:31.963: Robot 13 has turned its BOM on.
+0:32.183: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:32.239: Robot 2 has turned its BOM on.
+0:32.411: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:32.467: Robot 3 has turned its BOM on.
+0:32.683: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:32.739: Robot 4 has turned its BOM on.
+0:32.963: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:33.15: Robot 9 has turned its BOM on.
+0:33.183: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:33.239: Robot 13 has turned its BOM on.
+0:33.467: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:33.516: Robot 2 has turned its BOM on.
+0:33.739: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:33.795: Robot 3 has turned its BOM on.
+0:33.963: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:34.15: Robot 4 has turned its BOM on.
+0:34.239: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:34.295: Robot 9 has turned its BOM on.
+0:34.515: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:34.571: Robot 13 has turned its BOM on.
+0:34.795: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:34.851: Robot 2 has turned its BOM on.
+0:35.19: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:35.75: Robot 3 has turned its BOM on.
+0:35.299: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:35.355: Robot 4 has turned its BOM on.
+0:35.515: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:35.571: Robot 9 has turned its BOM on.
+0:35.799: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:35.855: Robot 13 has turned its BOM on.
+0:36.71: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:36.127: Robot 2 has turned its BOM on.
+0:36.295: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:36.351: Robot 3 has turned its BOM on.
+0:36.571: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:36.627: Robot 4 has turned its BOM on.
+0:36.851: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:36.907: Robot 9 has turned its BOM on.
+0:37.127: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:37.183: Robot 13 has turned its BOM on.
+0:37.352: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:37.407: Robot 2 has turned its BOM on.
+0:37.631: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:37.687: Robot 3 has turned its BOM on.
+0:37.911: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:37.967: Robot 4 has turned its BOM on.
+0:38.127: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:38.183: Robot 9 has turned its BOM on.
+0:38.407: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:38.463: Robot 13 has turned its BOM on.
+0:38.631: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:38.687: Robot 2 has turned its BOM on.
+0:38.911: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:38.967: Robot 3 has turned its BOM on.
+0:39.184: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:39.239: Robot 4 has turned its BOM on.
+0:39.463: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:39.515: Robot 9 has turned its BOM on.
+0:39.687: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:39.743: Robot 13 has turned its BOM on.
+0:39.967: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:40.15: Robot 2 has turned its BOM on.
+0:40.239: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:40.295: Robot 3 has turned its BOM on.
+0:40.463: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:40.515: Robot 4 has turned its BOM on.
+0:40.739: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:40.795: Robot 9 has turned its BOM on.
+0:40.963: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:41.15: Robot 13 has turned its BOM on.
+0:41.243: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:41.299: Robot 2 has turned its BOM on.
+0:41.515: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:41.571: Robot 3 has turned its BOM on.
+0:41.795: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:41.851: Robot 4 has turned its BOM on.
+0:42.15: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:42.71: Robot 9 has turned its BOM on.
+0:42.295: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:42.351: Robot 13 has turned its BOM on.
+0:42.575: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:42.631: Robot 2 has turned its BOM on.
+0:42.799: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:42.856: Robot 3 has turned its BOM on.
+0:43.71: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:43.127: Robot 4 has turned its BOM on.
+0:43.352: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:43.407: Robot 9 has turned its BOM on.
+0:43.575: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:43.631: Robot 13 has turned its BOM on.
+0:43.855: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:43.911: Robot 2 has turned its BOM on.
+0:44.127: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:44.184: Robot 3 has turned its BOM on.
+0:44.351: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:44.407: Robot 4 has turned its BOM on.
+0:44.628: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:44.683: Robot 9 has turned its BOM on.
+0:44.912: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:44.967: Robot 13 has turned its BOM on.
+0:45.128: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:45.183: Robot 2 has turned its BOM on.
+0:45.407: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:45.463: Robot 3 has turned its BOM on.
+0:45.684: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:45.739: Robot 4 has turned its BOM on.
+0:45.911: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:45.967: Robot 9 has turned its BOM on.
+0:46.184: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:46.239: Robot 13 has turned its BOM on.
+0:46.463: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:46.515: Robot 2 has turned its BOM on.
+0:46.683: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:46.739: Robot 3 has turned its BOM on.
+0:46.968: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:47.16: Robot 4 has turned its BOM on.
+0:47.240: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:47.295: Robot 9 has turned its BOM on.
+0:47.464: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:47.516: Robot 13 has turned its BOM on.
+0:47.740: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:47.796: Robot 2 has turned its BOM on.
+0:48.16: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:48.72: Robot 3 has turned its BOM on.
+0:48.296: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:48.352: Robot 4 has turned its BOM on.
+0:48.520: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:48.576: Robot 9 has turned its BOM on.
+0:48.800: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:48.856: Robot 13 has turned its BOM on.
+0:49.16: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:49.72: Robot 2 has turned its BOM on.
+0:49.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:49.352: Robot 3 has turned its BOM on.
+0:49.576: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:49.632: Robot 4 has turned its BOM on.
+0:49.800: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:49.856: Robot 9 has turned its BOM on.
+0:50.72: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:50.128: Robot 13 has turned its BOM on.
+0:50.352: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:50.408: Robot 2 has turned its BOM on.
+0:50.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:50.684: Robot 3 has turned its BOM on.
+0:50.856: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:50.912: Robot 4 has turned its BOM on.
+0:51.128: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:51.184: Robot 9 has turned its BOM on.
+0:51.412: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:51.468: Robot 13 has turned its BOM on.
+0:51.628: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:51.684: Robot 2 has turned its BOM on.
+0:51.912: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:51.968: Robot 3 has turned its BOM on.
+0:52.184: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:52.240: Robot 4 has turned its BOM on.
+0:52.408: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:52.464: Robot 9 has turned its BOM on.
+0:52.684: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:52.740: Robot 13 has turned its BOM on.
+0:52.964: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:53.16: Robot 2 has turned its BOM on.
+0:53.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:53.244: Robot 3 has turned its BOM on.
+0:53.468: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:53.516: Robot 4 has turned its BOM on.
+0:53.740: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:53.796: Robot 9 has turned its BOM on.
+0:53.964: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:54.16: Robot 13 has turned its BOM on.
+0:54.244: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:54.300: Robot 2 has turned its BOM on.
+0:54.468: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:54.516: Robot 3 has turned its BOM on.
+0:54.740: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:54.796: Robot 4 has turned its BOM on.
+0:55.16: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:55.72: Robot 9 has turned its BOM on.
+0:55.296: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:55.352: Robot 13 has turned its BOM on.
+0:55.516: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:55.572: Robot 2 has turned its BOM on.
+0:55.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:55.852: Robot 3 has turned its BOM on.
+0:56.76: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:56.132: Robot 4 has turned its BOM on.
+0:56.300: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:56.356: Robot 9 has turned its BOM on.
+0:56.572: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:56.628: Robot 13 has turned its BOM on.
+0:56.852: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:56.908: Robot 2 has turned its BOM on.
+0:57.76: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+0:57.132: Robot 3 has turned its BOM on.
+0:57.356: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:57.412: Robot 4 has turned its BOM on.
+0:57.628: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:57.684: Robot 9 has turned its BOM on.
+0:57.852: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:57.908: Robot 13 has turned its BOM on.
+0:58.132: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:58.188: Robot 2 has turned its BOM on.
+0:58.412: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:58.468: Robot 3 has turned its BOM on.
+0:58.628: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+0:58.684: Robot 4 has turned its BOM on.
+0:58.908: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+0:58.964: Robot 9 has turned its BOM on.
+0:59.184: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+0:59.240: Robot 13 has turned its BOM on.
+0:59.412: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+0:59.468: Robot 2 has turned its BOM on.
+0:59.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+0:59.740: Robot 3 has turned its BOM on.
+0:59.964: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:0.16: Robot 4 has turned its BOM on.
+1:0.184: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:0.240: Robot 9 has turned its BOM on.
+1:0.468: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:0.516: Robot 13 has turned its BOM on.
+1:0.740: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:0.796: Robot 2 has turned its BOM on.
+1:0.964: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:1.16: Robot 3 has turned its BOM on.
+1:1.240: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:1.296: Robot 4 has turned its BOM on.
+1:1.516: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:1.572: Robot 9 has turned its BOM on.
+1:1.796: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:1.852: Robot 13 has turned its BOM on.
+1:2.20: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:2.76: Robot 2 has turned its BOM on.
+1:2.300: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:2.356: Robot 3 has turned its BOM on.
+1:2.516: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:2.572: Robot 4 has turned its BOM on.
+1:2.796: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:2.852: Robot 9 has turned its BOM on.
+1:3.76: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:3.132: Robot 13 has turned its BOM on.
+1:3.300: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:3.356: Robot 2 has turned its BOM on.
+1:3.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:3.628: Robot 3 has turned its BOM on.
+1:3.852: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:3.908: Robot 4 has turned its BOM on.
+1:4.128: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:4.184: Robot 9 has turned its BOM on.
+1:4.356: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:4.412: Robot 13 has turned its BOM on.
+1:4.628: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:4.684: Robot 2 has turned its BOM on.
+1:4.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:4.964: Robot 3 has turned its BOM on.
+1:5.128: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:5.184: Robot 4 has turned its BOM on.
+1:5.412: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:5.468: Robot 9 has turned its BOM on.
+1:5.684: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:5.740: Robot 13 has turned its BOM on.
+1:5.908: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:5.964: Robot 2 has turned its BOM on.
+1:6.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:6.244: Robot 3 has turned its BOM on.
+1:6.468: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:6.516: Robot 4 has turned its BOM on.
+1:6.684: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:6.740: Robot 9 has turned its BOM on.
+1:6.964: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:7.16: Robot 13 has turned its BOM on.
+1:7.244: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:7.300: Robot 2 has turned its BOM on.
+1:7.468: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:7.516: Robot 3 has turned its BOM on.
+1:7.740: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:7.796: Robot 4 has turned its BOM on.
+1:8.16: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:8.72: Robot 9 has turned its BOM on.
+1:8.240: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:8.296: Robot 13 has turned its BOM on.
+1:8.516: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:8.572: Robot 2 has turned its BOM on.
+1:8.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:8.852: Robot 3 has turned its BOM on.
+1:9.16: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:9.72: Robot 4 has turned its BOM on.
+1:9.296: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:9.352: Robot 9 has turned its BOM on.
+1:9.576: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:9.632: Robot 13 has turned its BOM on.
+1:9.800: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:9.856: Robot 2 has turned its BOM on.
+1:10.72: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:10.128: Robot 3 has turned its BOM on.
+1:10.352: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:10.408: Robot 4 has turned its BOM on.
+1:10.576: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:10.632: Robot 9 has turned its BOM on.
+1:10.856: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:10.912: Robot 13 has turned its BOM on.
+1:11.128: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:11.184: Robot 2 has turned its BOM on.
+1:11.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:11.408: Robot 3 has turned its BOM on.
+1:11.628: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:11.684: Robot 4 has turned its BOM on.
+1:11.912: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:11.968: Robot 9 has turned its BOM on.
+1:12.128: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:12.184: Robot 13 has turned its BOM on.
+1:12.408: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:12.464: Robot 2 has turned its BOM on.
+1:12.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:12.740: Robot 3 has turned its BOM on.
+1:12.912: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:12.968: Robot 4 has turned its BOM on.
+1:13.184: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:13.240: Robot 9 has turned its BOM on.
+1:13.464: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:13.516: Robot 13 has turned its BOM on.
+1:13.684: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:13.740: Robot 2 has turned its BOM on.
+1:13.968: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:14.16: Robot 3 has turned its BOM on.
+1:14.240: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:14.296: Robot 4 has turned its BOM on.
+1:14.464: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:14.516: Robot 9 has turned its BOM on.
+1:14.740: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:14.796: Robot 13 has turned its BOM on.
+1:15.16: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:15.72: Robot 2 has turned its BOM on.
+1:15.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:15.352: Robot 3 has turned its BOM on.
+1:15.520: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:15.576: Robot 4 has turned its BOM on.
+1:15.800: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:16.16: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:16.72: Robot 13 has turned its BOM on.
+1:16.296: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:16.352: Robot 2 has turned its BOM on.
+1:16.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:16.628: Robot 3 has turned its BOM on.
+1:16.800: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:16.856: Robot 4 has turned its BOM on.
+1:17.72: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:17.128: Robot 9 has turned its BOM on.
+1:17.352: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:17.408: Robot 13 has turned its BOM on.
+1:17.628: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:17.684: Robot 2 has turned its BOM on.
+1:17.856: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:17.912: Robot 3 has turned its BOM on.
+1:18.128: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:18.184: Robot 4 has turned its BOM on.
+1:18.352: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:18.408: Robot 9 has turned its BOM on.
+1:18.628: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:18.684: Robot 13 has turned its BOM on.
+1:18.908: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:18.964: Robot 2 has turned its BOM on.
+1:19.184: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:19.240: Robot 3 has turned its BOM on.
+1:19.409: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:19.464: Robot 4 has turned its BOM on.
+1:19.688: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:19.744: Robot 9 has turned its BOM on.
+1:19.968: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:20.16: Robot 13 has turned its BOM on.
+1:20.184: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:20.240: Robot 2 has turned its BOM on.
+1:20.464: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:20.516: Robot 3 has turned its BOM on.
+1:20.748: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:20.804: Robot 4 has turned its BOM on.
+1:20.976: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:21.16: Robot 9 has turned its BOM on.
+1:21.240: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:21.296: Robot 13 has turned its BOM on.
+1:21.516: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:21.572: Robot 2 has turned its BOM on.
+1:21.744: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:21.800: Robot 3 has turned its BOM on.
+1:22.16: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:22.72: Robot 4 has turned its BOM on.
+1:22.296: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:22.352: Robot 9 has turned its BOM on.
+1:22.516: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:22.572: Robot 13 has turned its BOM on.
+1:22.800: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:22.856: Robot 2 has turned its BOM on.
+1:23.72: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:23.128: Robot 3 has turned its BOM on.
+1:23.296: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:23.352: Robot 4 has turned its BOM on.
+1:23.572: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:23.628: Robot 9 has turned its BOM on.
+1:23.852: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:23.908: Robot 13 has turned its BOM on.
+1:24.128: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:24.184: Robot 2 has turned its BOM on.
+1:24.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:24.408: Robot 3 has turned its BOM on.
+1:24.632: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:24.688: Robot 4 has turned its BOM on.
+1:24.856: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:24.912: Robot 9 has turned its BOM on.
+1:25.128: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:25.184: Robot 13 has turned its BOM on.
+1:25.408: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:25.464: Robot 2 has turned its BOM on.
+1:25.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:25.684: Robot 3 has turned its BOM on.
+1:25.908: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:25.964: Robot 4 has turned its BOM on.
+1:26.184: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:26.240: Robot 9 has turned its BOM on.
+1:26.412: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:26.468: Robot 13 has turned its BOM on.
+1:26.684: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:26.740: Robot 2 has turned its BOM on.
+1:26.964: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:27.16: Robot 3 has turned its BOM on.
+1:27.184: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:27.240: Robot 4 has turned its BOM on.
+1:27.468: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:27.516: Robot 9 has turned its BOM on.
+1:27.740: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+1:27.796: Robot 13 has turned its BOM on.
+1:27.964: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:28.16: Robot 2 has turned its BOM on.
+1:28.240: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:28.296: Robot 3 has turned its BOM on.
+1:28.516: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:28.572: Robot 4 has turned its BOM on.
+1:28.796: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:28.852: Robot 9 has turned its BOM on.
+1:29.20: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:29.76: Robot 13 has turned its BOM on.
+1:29.300: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:29.356: Robot 2 has turned its BOM on.
+1:29.516: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:29.572: Robot 3 has turned its BOM on.
+1:29.796: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:29.852: Robot 4 has turned its BOM on.
+1:30.72: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:30.128: Robot 9 has turned its BOM on.
+1:30.296: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:30.352: Robot 13 has turned its BOM on.
+1:30.572: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:30.628: Robot 2 has turned its BOM on.
+1:30.852: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:30.908: Robot 3 has turned its BOM on.
+1:31.128: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:31.184: Robot 4 has turned its BOM on.
+1:31.356: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:31.412: Robot 9 has turned its BOM on.
+1:31.628: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:31.684: Robot 13 has turned its BOM on.
+1:31.852: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:31.908: Robot 2 has turned its BOM on.
+1:32.128: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:32.184: Robot 3 has turned its BOM on.
+1:32.412: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:32.468: Robot 4 has turned its BOM on.
+1:32.684: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:32.740: Robot 9 has turned its BOM on.
+1:32.908: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:32.964: Robot 13 has turned its BOM on.
+1:33.188: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:33.244: Robot 2 has turned its BOM on.
+1:33.468: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:33.516: Robot 3 has turned its BOM on.
+1:33.684: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:33.740: Robot 4 has turned its BOM on.
+1:33.964: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:34.16: Robot 9 has turned its BOM on.
+1:34.184: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:34.240: Robot 13 has turned its BOM on.
+1:34.464: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:34.516: Robot 2 has turned its BOM on.
+1:34.740: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:34.796: Robot 3 has turned its BOM on.
+1:35.16: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:35.72: Robot 4 has turned its BOM on.
+1:35.240: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:35.296: Robot 9 has turned its BOM on.
+1:35.516: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:35.572: Robot 13 has turned its BOM on.
+1:35.796: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:35.852: Robot 2 has turned its BOM on.
+1:36.16: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:36.72: Robot 3 has turned its BOM on.
+1:36.300: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:36.356: Robot 4 has turned its BOM on.
+1:36.572: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:36.628: Robot 9 has turned its BOM on.
+1:36.796: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:36.852: Robot 13 has turned its BOM on.
+1:37.72: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:37.128: Robot 2 has turned its BOM on.
+1:37.352: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:37.408: Robot 3 has turned its BOM on.
+1:37.573: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:37.628: Robot 4 has turned its BOM on.
+1:37.852: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:37.908: Robot 9 has turned its BOM on.
+1:38.132: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:38.188: Robot 13 has turned its BOM on.
+1:38.356: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:38.412: Robot 2 has turned its BOM on.
+1:38.628: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:38.684: Robot 3 has turned its BOM on.
+1:38.908: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:38.964: Robot 4 has turned its BOM on.
+1:39.132: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:39.188: Robot 9 has turned its BOM on.
+1:39.412: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:39.468: Robot 13 has turned its BOM on.
+1:39.684: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:39.740: Robot 2 has turned its BOM on.
+1:39.964: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:40.16: Robot 3 has turned its BOM on.
+1:40.188: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:40.244: Robot 4 has turned its BOM on.
+1:40.468: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:40.516: Robot 9 has turned its BOM on.
+1:40.688: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:40.744: Robot 13 has turned its BOM on.
+1:40.972: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:41.16: Robot 2 has turned its BOM on.
+1:41.240: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:41.296: Robot 3 has turned its BOM on.
+1:41.468: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:41.516: Robot 4 has turned its BOM on.
+1:41.740: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:41.796: Robot 9 has turned its BOM on.
+1:42.16: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:42.72: Robot 13 has turned its BOM on.
+1:42.296: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:42.352: Robot 2 has turned its BOM on.
+1:42.516: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:42.572: Robot 3 has turned its BOM on.
+1:42.796: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:42.852: Robot 4 has turned its BOM on.
+1:43.24: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:43.80: Robot 9 has turned its BOM on.
+1:43.304: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:43.360: Robot 13 has turned its BOM on.
+1:43.572: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:43.628: Robot 2 has turned its BOM on.
+1:43.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:43.852: Robot 3 has turned its BOM on.
+1:44.72: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:44.128: Robot 4 has turned its BOM on.
+1:44.352: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:44.408: Robot 9 has turned its BOM on.
+1:44.629: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:44.684: Robot 13 has turned its BOM on.
+1:44.856: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:44.912: Robot 2 has turned its BOM on.
+1:45.128: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:45.184: Robot 3 has turned its BOM on.
+1:45.352: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+1:45.408: Robot 4 has turned its BOM on.
+1:45.628: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:45.684: Robot 9 has turned its BOM on.
+1:45.908: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:45.964: Robot 13 has turned its BOM on.
+1:46.184: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:46.240: Robot 2 has turned its BOM on.
+1:46.412: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+1:46.468: Robot 3 has turned its BOM on.
+1:46.688: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:46.744: Robot 4 has turned its BOM on.
+1:46.968: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:47.16: Robot 9 has turned its BOM on.
+1:47.184: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:47.240: Robot 13 has turned its BOM on.
+1:47.464: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:47.516: Robot 2 has turned its BOM on.
+1:47.688: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:47.744: Robot 3 has turned its BOM on.
+1:47.968: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:48.16: Robot 4 has turned its BOM on.
+1:48.240: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:48.296: Robot 9 has turned its BOM on.
+1:48.516: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:48.572: Robot 13 has turned its BOM on.
+1:48.748: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:48.804: Robot 2 has turned its BOM on.
+1:49.16: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:49.72: Robot 3 has turned its BOM on.
+1:49.296: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:49.352: Robot 4 has turned its BOM on.
+1:49.516: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:49.572: Robot 9 has turned its BOM on.
+1:49.800: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:49.856: Robot 13 has turned its BOM on.
+1:50.72: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:50.128: Robot 2 has turned its BOM on.
+1:50.296: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:50.352: Robot 3 has turned its BOM on.
+1:50.572: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:50.628: Robot 4 has turned its BOM on.
+1:50.852: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:50.908: Robot 9 has turned its BOM on.
+1:51.72: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:51.128: Robot 13 has turned its BOM on.
+1:51.352: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:51.408: Robot 2 has turned its BOM on.
+1:51.632: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:51.689: Robot 3 has turned its BOM on.
+1:51.856: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+1:51.912: Robot 4 has turned its BOM on.
+1:52.128: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:52.184: Robot 9 has turned its BOM on.
+1:52.408: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:52.464: Robot 13 has turned its BOM on.
+1:52.632: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:52.688: Robot 2 has turned its BOM on.
+1:52.912: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:52.968: Robot 3 has turned its BOM on.
+1:53.184: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:53.240: Robot 4 has turned its BOM on.
+1:53.464: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:53.516: Robot 9 has turned its BOM on.
+1:53.692: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:53.748: Robot 13 has turned its BOM on.
+1:53.972: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:54.16: Robot 2 has turned its BOM on.
+1:54.184: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:54.240: Robot 3 has turned its BOM on.
+1:54.464: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:54.516: Robot 4 has turned its BOM on.
+1:54.740: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:54.796: Robot 9 has turned its BOM on.
+1:54.968: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:55.16: Robot 13 has turned its BOM on.
+1:55.240: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:55.296: Robot 2 has turned its BOM on.
+1:55.516: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:55.572: Robot 3 has turned its BOM on.
+1:55.796: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:55.852: Robot 4 has turned its BOM on.
+1:56.16: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:56.72: Robot 9 has turned its BOM on.
+1:56.296: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:56.352: Robot 13 has turned its BOM on.
+1:56.520: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:56.576: Robot 2 has turned its BOM on.
+1:56.800: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:56.856: Robot 3 has turned its BOM on.
+1:57.72: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:57.128: Robot 4 has turned its BOM on.
+1:57.352: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:57.408: Robot 9 has turned its BOM on.
+1:57.576: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:57.632: Robot 13 has turned its BOM on.
+1:57.856: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:57.912: Robot 2 has turned its BOM on.
+1:58.128: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:58.184: Robot 3 has turned its BOM on.
+1:58.352: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+1:58.408: Robot 4 has turned its BOM on.
+1:58.632: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:58.688: Robot 9 has turned its BOM on.
+1:58.856: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+1:58.912: Robot 13 has turned its BOM on.
+1:59.128: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+1:59.184: Robot 2 has turned its BOM on.
+1:59.408: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+1:59.464: Robot 3 has turned its BOM on.
+1:59.684: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+1:59.740: Robot 4 has turned its BOM on.
+1:59.912: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+1:59.968: Robot 9 has turned its BOM on.
+2:0.184: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:0.240: Robot 13 has turned its BOM on.
+2:0.464: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:0.516: Robot 2 has turned its BOM on.
+2:0.684: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:0.740: Robot 3 has turned its BOM on.
+2:0.964: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:1.16: Robot 4 has turned its BOM on.
+2:1.188: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:1.244: Robot 9 has turned its BOM on.
+2:1.468: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:1.516: Robot 13 has turned its BOM on.
+2:1.740: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:1.796: Robot 2 has turned its BOM on.
+2:2.16: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:2.72: Robot 3 has turned its BOM on.
+2:2.244: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:2.300: Robot 4 has turned its BOM on.
+2:2.516: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:2.572: Robot 9 has turned its BOM on.
+2:2.796: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:2.852: Robot 13 has turned its BOM on.
+2:3.16: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:3.72: Robot 2 has turned its BOM on.
+2:3.300: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:3.356: Robot 3 has turned its BOM on.
+2:3.572: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:3.628: Robot 4 has turned its BOM on.
+2:3.796: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:3.852: Robot 9 has turned its BOM on.
+2:4.72: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:4.128: Robot 13 has turned its BOM on.
+2:4.352: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:4.408: Robot 2 has turned its BOM on.
+2:4.572: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:4.628: Robot 3 has turned its BOM on.
+2:4.852: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:4.908: Robot 4 has turned its BOM on.
+2:5.132: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:5.188: Robot 9 has turned its BOM on.
+2:5.356: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:5.412: Robot 13 has turned its BOM on.
+2:5.628: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:5.684: Robot 2 has turned its BOM on.
+2:5.908: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:5.964: Robot 3 has turned its BOM on.
+2:6.132: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:6.188: Robot 4 has turned its BOM on.
+2:6.412: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:6.468: Robot 9 has turned its BOM on.
+2:6.684: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:6.740: Robot 13 has turned its BOM on.
+2:6.908: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:6.964: Robot 2 has turned its BOM on.
+2:7.188: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:7.244: Robot 3 has turned its BOM on.
+2:7.468: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:7.516: Robot 4 has turned its BOM on.
+2:7.684: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:7.741: Robot 9 has turned its BOM on.
+2:7.964: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:8.16: Robot 13 has turned its BOM on.
+2:8.240: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:8.296: Robot 2 has turned its BOM on.
+2:8.468: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:8.516: Robot 3 has turned its BOM on.
+2:8.740: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:8.796: Robot 4 has turned its BOM on.
+2:9.16: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:9.72: Robot 9 has turned its BOM on.
+2:9.296: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:9.353: Robot 13 has turned its BOM on.
+2:9.516: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:9.572: Robot 2 has turned its BOM on.
+2:9.796: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:9.853: Robot 3 has turned its BOM on.
+2:10.20: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:10.77: Robot 4 has turned its BOM on.
+2:10.300: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:10.356: Robot 9 has turned its BOM on.
+2:10.572: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:10.628: Robot 13 has turned its BOM on.
+2:10.853: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:10.909: Robot 2 has turned its BOM on.
+2:11.76: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:11.132: Robot 3 has turned its BOM on.
+2:11.356: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:11.412: Robot 4 has turned its BOM on.
+2:11.629: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:11.685: Robot 9 has turned its BOM on.
+2:11.853: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:11.909: Robot 13 has turned its BOM on.
+2:12.137: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:12.193: Robot 2 has turned its BOM on.
+2:12.361: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:12.417: Robot 3 has turned its BOM on.
+2:12.629: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:12.685: Robot 4 has turned its BOM on.
+2:12.909: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:12.965: Robot 9 has turned its BOM on.
+2:13.185: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:13.241: Robot 13 has turned its BOM on.
+2:13.413: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:13.469: Robot 2 has turned its BOM on.
+2:13.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:13.741: Robot 3 has turned its BOM on.
+2:13.965: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:14.17: Robot 4 has turned its BOM on.
+2:14.185: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:14.241: Robot 9 has turned its BOM on.
+2:14.469: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:14.517: Robot 13 has turned its BOM on.
+2:14.741: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:14.797: Robot 2 has turned its BOM on.
+2:14.965: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:15.17: Robot 3 has turned its BOM on.
+2:15.241: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:15.297: Robot 4 has turned its BOM on.
+2:15.517: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:15.573: Robot 9 has turned its BOM on.
+2:15.741: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:15.797: Robot 13 has turned its BOM on.
+2:16.21: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:16.77: Robot 2 has turned its BOM on.
+2:16.301: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:16.357: Robot 3 has turned its BOM on.
+2:16.581: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:16.637: Robot 4 has turned its BOM on.
+2:16.805: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:16.861: Robot 9 has turned its BOM on.
+2:17.73: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:17.129: Robot 13 has turned its BOM on.
+2:17.301: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:17.357: Robot 2 has turned its BOM on.
+2:17.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:17.629: Robot 3 has turned its BOM on.
+2:17.853: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:17.909: Robot 4 has turned its BOM on.
+2:18.73: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:18.129: Robot 9 has turned its BOM on.
+2:18.357: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:18.413: Robot 13 has turned its BOM on.
+2:18.633: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:18.689: Robot 2 has turned its BOM on.
+2:18.857: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:18.913: Robot 3 has turned its BOM on.
+2:19.129: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:19.185: Robot 4 has turned its BOM on.
+2:19.409: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:19.465: Robot 9 has turned its BOM on.
+2:19.633: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:19.689: Robot 13 has turned its BOM on.
+2:19.913: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:19.969: Robot 2 has turned its BOM on.
+2:20.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:20.241: Robot 3 has turned its BOM on.
+2:20.409: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:20.465: Robot 4 has turned its BOM on.
+2:20.685: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:20.741: Robot 9 has turned its BOM on.
+2:20.969: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:21.17: Robot 13 has turned its BOM on.
+2:21.185: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:21.241: Robot 2 has turned its BOM on.
+2:21.465: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:21.517: Robot 3 has turned its BOM on.
+2:21.741: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:21.797: Robot 4 has turned its BOM on.
+2:21.969: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:22.17: Robot 9 has turned its BOM on.
+2:22.241: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:22.297: Robot 13 has turned its BOM on.
+2:22.517: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:22.573: Robot 2 has turned its BOM on.
+2:22.797: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:22.853: Robot 3 has turned its BOM on.
+2:23.17: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:23.73: Robot 4 has turned its BOM on.
+2:23.297: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:23.353: Robot 9 has turned its BOM on.
+2:23.521: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:23.577: Robot 13 has turned its BOM on.
+2:23.801: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:23.857: Robot 2 has turned its BOM on.
+2:24.73: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:24.129: Robot 3 has turned its BOM on.
+2:24.353: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:24.409: Robot 4 has turned its BOM on.
+2:24.577: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:24.633: Robot 9 has turned its BOM on.
+2:24.857: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:24.913: Robot 13 has turned its BOM on.
+2:25.129: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:25.185: Robot 2 has turned its BOM on.
+2:25.353: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:25.409: Robot 3 has turned its BOM on.
+2:25.633: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:25.689: Robot 4 has turned its BOM on.
+2:25.857: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:25.913: Robot 9 has turned its BOM on.
+2:26.129: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:26.185: Robot 13 has turned its BOM on.
+2:26.409: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:26.465: Robot 2 has turned its BOM on.
+2:26.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:26.741: Robot 3 has turned its BOM on.
+2:26.913: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:26.969: Robot 4 has turned its BOM on.
+2:27.185: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:27.241: Robot 9 has turned its BOM on.
+2:27.465: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:27.517: Robot 13 has turned its BOM on.
+2:27.685: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:27.741: Robot 2 has turned its BOM on.
+2:27.969: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:28.17: Robot 3 has turned its BOM on.
+2:28.241: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:28.297: Robot 4 has turned its BOM on.
+2:28.465: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:28.517: Robot 9 has turned its BOM on.
+2:28.741: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:28.797: Robot 13 has turned its BOM on.
+2:29.17: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:29.73: Robot 2 has turned its BOM on.
+2:29.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:29.297: Robot 3 has turned its BOM on.
+2:29.521: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:29.577: Robot 4 has turned its BOM on.
+2:29.801: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:29.857: Robot 9 has turned its BOM on.
+2:30.17: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:30.73: Robot 13 has turned its BOM on.
+2:30.297: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:30.353: Robot 2 has turned its BOM on.
+2:30.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:30.629: Robot 3 has turned its BOM on.
+2:30.801: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:30.857: Robot 4 has turned its BOM on.
+2:31.77: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:31.133: Robot 9 has turned its BOM on.
+2:31.357: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:31.413: Robot 13 has turned its BOM on.
+2:31.573: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:31.629: Robot 2 has turned its BOM on.
+2:31.857: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:31.913: Robot 3 has turned its BOM on.
+2:32.129: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:32.185: Robot 4 has turned its BOM on.
+2:32.353: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:32.409: Robot 9 has turned its BOM on.
+2:32.629: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:32.685: Robot 13 has turned its BOM on.
+2:32.909: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:32.965: Robot 2 has turned its BOM on.
+2:33.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:33.241: Robot 3 has turned its BOM on.
+2:33.409: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:33.465: Robot 4 has turned its BOM on.
+2:33.689: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:33.745: Robot 9 has turned its BOM on.
+2:33.913: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:33.969: Robot 13 has turned its BOM on.
+2:34.185: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:34.241: Robot 2 has turned its BOM on.
+2:34.465: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:34.517: Robot 3 has turned its BOM on.
+2:34.685: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:34.741: Robot 4 has turned its BOM on.
+2:34.965: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:35.17: Robot 9 has turned its BOM on.
+2:35.241: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:35.297: Robot 13 has turned its BOM on.
+2:35.469: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:35.517: Robot 2 has turned its BOM on.
+2:35.741: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:35.797: Robot 3 has turned its BOM on.
+2:36.17: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:36.73: Robot 4 has turned its BOM on.
+2:36.297: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:36.353: Robot 9 has turned its BOM on.
+2:36.517: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:36.573: Robot 13 has turned its BOM on.
+2:36.797: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:36.853: Robot 2 has turned its BOM on.
+2:37.21: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:37.77: Robot 3 has turned its BOM on.
+2:37.301: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:37.357: Robot 4 has turned its BOM on.
+2:37.573: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:37.629: Robot 9 has turned its BOM on.
+2:37.853: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:37.909: Robot 13 has turned its BOM on.
+2:38.77: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:38.133: Robot 2 has turned its BOM on.
+2:38.357: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:38.413: Robot 3 has turned its BOM on.
+2:38.629: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:38.685: Robot 4 has turned its BOM on.
+2:38.853: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:38.909: Robot 9 has turned its BOM on.
+2:39.133: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:39.189: Robot 13 has turned its BOM on.
+2:39.357: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:39.413: Robot 2 has turned its BOM on.
+2:39.629: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:39.685: Robot 3 has turned its BOM on.
+2:39.909: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:39.965: Robot 4 has turned its BOM on.
+2:40.185: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:40.241: Robot 9 has turned its BOM on.
+2:40.417: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:40.473: Robot 13 has turned its BOM on.
+2:40.685: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:40.741: Robot 2 has turned its BOM on.
+2:40.965: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:41.17: Robot 3 has turned its BOM on.
+2:41.185: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:41.241: Robot 4 has turned its BOM on.
+2:41.469: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:41.517: Robot 9 has turned its BOM on.
+2:41.741: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:41.797: Robot 13 has turned its BOM on.
+2:41.969: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:42.17: Robot 2 has turned its BOM on.
+2:42.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:42.297: Robot 3 has turned its BOM on.
+2:42.517: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:42.573: Robot 4 has turned its BOM on.
+2:42.741: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:42.797: Robot 9 has turned its BOM on.
+2:43.21: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:43.77: Robot 13 has turned its BOM on.
+2:43.301: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:43.357: Robot 2 has turned its BOM on.
+2:43.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:43.573: Robot 3 has turned its BOM on.
+2:43.797: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:43.853: Robot 4 has turned its BOM on.
+2:44.73: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:44.129: Robot 9 has turned its BOM on.
+2:44.301: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:44.357: Robot 13 has turned its BOM on.
+2:44.573: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:44.629: Robot 2 has turned its BOM on.
+2:44.853: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:44.909: Robot 3 has turned its BOM on.
+2:45.73: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:45.129: Robot 4 has turned its BOM on.
+2:45.357: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:45.413: Robot 9 has turned its BOM on.
+2:45.630: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:45.685: Robot 13 has turned its BOM on.
+2:45.853: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:45.909: Robot 2 has turned its BOM on.
+2:46.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:46.185: Robot 3 has turned its BOM on.
+2:46.409: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:46.465: Robot 4 has turned its BOM on.
+2:46.685: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:46.741: Robot 9 has turned its BOM on.
+2:46.913: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:46.969: Robot 13 has turned its BOM on.
+2:47.189: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:47.245: Robot 2 has turned its BOM on.
+2:47.413: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:47.469: Robot 3 has turned its BOM on.
+2:47.685: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:47.741: Robot 4 has turned its BOM on.
+2:47.965: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:48.17: Robot 9 has turned its BOM on.
+2:48.189: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:48.245: Robot 13 has turned its BOM on.
+2:48.469: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:48.517: Robot 2 has turned its BOM on.
+2:48.741: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:48.797: Robot 3 has turned its BOM on.
+2:49.17: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:49.73: Robot 4 has turned its BOM on.
+2:49.245: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:49.301: Robot 9 has turned its BOM on.
+2:49.517: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:49.573: Robot 13 has turned its BOM on.
+2:49.741: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:49.797: Robot 2 has turned its BOM on.
+2:50.17: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:50.73: Robot 3 has turned its BOM on.
+2:50.297: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:50.353: Robot 4 has turned its BOM on.
+2:50.573: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:50.629: Robot 9 has turned its BOM on.
+2:50.805: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:50.861: Robot 13 has turned its BOM on.
+2:51.77: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:51.133: Robot 2 has turned its BOM on.
+2:51.357: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:51.413: Robot 3 has turned its BOM on.
+2:51.577: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:51.633: Robot 4 has turned its BOM on.
+2:51.857: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:51.913: Robot 9 has turned its BOM on.
+2:52.129: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+2:52.185: Robot 13 has turned its BOM on.
+2:52.353: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:52.409: Robot 2 has turned its BOM on.
+2:52.633: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:52.689: Robot 3 has turned its BOM on.
+2:52.921: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:52.977: Robot 4 has turned its BOM on.
+2:53.129: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:53.185: Robot 9 has turned its BOM on.
+2:53.409: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:53.465: Robot 13 has turned its BOM on.
+2:53.685: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:53.741: Robot 2 has turned its BOM on.
+2:53.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:53.969: Robot 3 has turned its BOM on.
+2:54.189: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+2:54.245: Robot 4 has turned its BOM on.
+2:54.469: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:54.517: Robot 9 has turned its BOM on.
+2:54.685: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:54.741: Robot 13 has turned its BOM on.
+2:54.965: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:55.17: Robot 2 has turned its BOM on.
+2:55.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+2:55.297: Robot 3 has turned its BOM on.
+2:55.465: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:55.517: Robot 4 has turned its BOM on.
+2:55.741: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:55.797: Robot 9 has turned its BOM on.
+2:56.17: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:56.73: Robot 13 has turned its BOM on.
+2:56.241: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:56.297: Robot 2 has turned its BOM on.
+2:56.521: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:56.577: Robot 3 has turned its BOM on.
+2:56.801: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:56.857: Robot 4 has turned its BOM on.
+2:57.17: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:57.73: Robot 9 has turned its BOM on.
+2:57.297: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:57.353: Robot 13 has turned its BOM on.
+2:57.573: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:57.629: Robot 2 has turned its BOM on.
+2:57.801: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:57.857: Robot 3 has turned its BOM on.
+2:58.73: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:58.129: Robot 4 has turned its BOM on.
+2:58.353: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:58.409: Robot 9 has turned its BOM on.
+2:58.573: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:58.629: Robot 13 has turned its BOM on.
+2:58.857: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+2:58.913: Robot 2 has turned its BOM on.
+2:59.129: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+2:59.185: Robot 3 has turned its BOM on.
+2:59.353: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+2:59.409: Robot 4 has turned its BOM on.
+2:59.629: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+2:59.685: Robot 9 has turned its BOM on.
+2:59.909: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+2:59.965: Robot 13 has turned its BOM on.
+3:0.185: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:0.241: Robot 2 has turned its BOM on.
+3:0.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:0.465: Robot 3 has turned its BOM on.
+3:0.689: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+3:0.745: Robot 4 has turned its BOM on.
+3:0.913: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:0.969: Robot 9 has turned its BOM on.
+3:1.185: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:1.241: Robot 13 has turned its BOM on.
+3:1.469: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:1.517: Robot 2 has turned its BOM on.
+3:1.689: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:1.745: Robot 3 has turned its BOM on.
+3:1.969: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:2.17: Robot 4 has turned its BOM on.
+3:2.241: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:2.297: Robot 9 has turned its BOM on.
+3:2.517: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:2.573: Robot 13 has turned its BOM on.
+3:2.745: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:2.801: Robot 2 has turned its BOM on.
+3:3.17: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:3.73: Robot 3 has turned its BOM on.
+3:3.245: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:3.301: Robot 4 has turned its BOM on.
+3:3.517: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:3.573: Robot 9 has turned its BOM on.
+3:3.801: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:3.857: Robot 13 has turned its BOM on.
+3:4.73: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:4.129: Robot 2 has turned its BOM on.
+3:4.297: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:4.353: Robot 3 has turned its BOM on.
+3:4.577: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+3:4.633: Robot 4 has turned its BOM on.
+3:4.857: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:4.913: Robot 9 has turned its BOM on.
+3:5.73: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:5.129: Robot 13 has turned its BOM on.
+3:5.353: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:5.409: Robot 2 has turned its BOM on.
+3:5.637: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:5.693: Robot 3 has turned its BOM on.
+3:5.865: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:5.921: Robot 4 has turned its BOM on.
+3:6.129: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:6.185: Robot 9 has turned its BOM on.
+3:6.409: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:6.465: Robot 13 has turned its BOM on.
+3:6.633: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:6.689: Robot 2 has turned its BOM on.
+3:6.913: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:6.969: Robot 3 has turned its BOM on.
+3:7.185: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:7.241: Robot 4 has turned its BOM on.
+3:7.473: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:7.517: Robot 9 has turned its BOM on.
+3:7.689: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:7.745: Robot 13 has turned its BOM on.
+3:7.969: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:8.17: Robot 2 has turned its BOM on.
+3:8.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:8.241: Robot 3 has turned its BOM on.
+3:8.465: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:8.517: Robot 4 has turned its BOM on.
+3:8.741: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:8.797: Robot 9 has turned its BOM on.
+3:8.965: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:9.17: Robot 13 has turned its BOM on.
+3:9.241: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:9.297: Robot 2 has turned its BOM on.
+3:9.517: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:9.573: Robot 3 has turned its BOM on.
+3:9.741: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:9.797: Robot 4 has turned its BOM on.
+3:10.21: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:10.77: Robot 9 has turned its BOM on.
+3:10.309: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:10.365: Robot 13 has turned its BOM on.
+3:10.517: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:10.573: Robot 2 has turned its BOM on.
+3:10.797: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:10.853: Robot 3 has turned its BOM on.
+3:11.73: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:11.129: Robot 4 has turned its BOM on.
+3:11.297: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:11.353: Robot 9 has turned its BOM on.
+3:11.573: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:11.629: Robot 13 has turned its BOM on.
+3:11.853: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:11.909: Robot 2 has turned its BOM on.
+3:12.73: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:12.129: Robot 3 has turned its BOM on.
+3:12.357: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:12.413: Robot 4 has turned its BOM on.
+3:12.629: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:12.685: Robot 9 has turned its BOM on.
+3:12.854: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:12.909: Robot 13 has turned its BOM on.
+3:13.129: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:13.185: Robot 2 has turned its BOM on.
+3:13.409: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:13.465: Robot 3 has turned its BOM on.
+3:13.685: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:13.741: Robot 4 has turned its BOM on.
+3:13.913: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:13.969: Robot 9 has turned its BOM on.
+3:14.189: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:14.245: Robot 13 has turned its BOM on.
+3:14.413: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:14.469: Robot 2 has turned its BOM on.
+3:14.685: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:14.741: Robot 3 has turned its BOM on.
+3:14.965: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:15.17: Robot 4 has turned its BOM on.
+3:15.189: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:15.245: Robot 9 has turned its BOM on.
+3:15.469: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:15.517: Robot 13 has turned its BOM on.
+3:15.741: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:15.797: Robot 2 has turned its BOM on.
+3:16.17: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:16.73: Robot 3 has turned its BOM on.
+3:16.245: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:16.301: Robot 4 has turned its BOM on.
+3:16.517: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:16.573: Robot 9 has turned its BOM on.
+3:16.741: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:16.797: Robot 13 has turned its BOM on.
+3:17.17: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:17.73: Robot 2 has turned its BOM on.
+3:17.301: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:17.357: Robot 3 has turned its BOM on.
+3:17.573: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:17.629: Robot 4 has turned its BOM on.
+3:17.797: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:17.853: Robot 9 has turned its BOM on.
+3:18.77: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:18.133: Robot 13 has turned its BOM on.
+3:18.357: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:18.413: Robot 2 has turned its BOM on.
+3:18.573: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:18.629: Robot 3 has turned its BOM on.
+3:18.853: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:18.909: Robot 4 has turned its BOM on.
+3:19.81: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:19.137: Robot 9 has turned its BOM on.
+3:19.365: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:19.421: Robot 13 has turned its BOM on.
+3:19.629: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:19.685: Robot 2 has turned its BOM on.
+3:19.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:19.965: Robot 3 has turned its BOM on.
+3:20.133: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:20.189: Robot 4 has turned its BOM on.
+3:20.414: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:20.469: Robot 9 has turned its BOM on.
+3:20.685: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:20.741: Robot 13 has turned its BOM on.
+3:20.909: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:20.965: Robot 2 has turned its BOM on.
+3:21.189: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:21.245: Robot 3 has turned its BOM on.
+3:21.473: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:21.517: Robot 4 has turned its BOM on.
+3:21.685: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:21.741: Robot 9 has turned its BOM on.
+3:21.965: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:22.17: Robot 13 has turned its BOM on.
+3:22.241: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:22.297: Robot 2 has turned its BOM on.
+3:22.465: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:22.517: Robot 3 has turned its BOM on.
+3:22.741: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:22.797: Robot 4 has turned its BOM on.
+3:23.17: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:23.73: Robot 9 has turned its BOM on.
+3:23.241: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:23.297: Robot 13 has turned its BOM on.
+3:23.517: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:23.573: Robot 2 has turned its BOM on.
+3:23.797: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:23.853: Robot 3 has turned its BOM on.
+3:24.21: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:24.77: Robot 4 has turned its BOM on.
+3:24.301: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:24.357: Robot 9 has turned its BOM on.
+3:24.573: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:24.629: Robot 13 has turned its BOM on.
+3:24.853: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:24.909: Robot 2 has turned its BOM on.
+3:25.77: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:25.133: Robot 3 has turned its BOM on.
+3:25.357: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:25.413: Robot 4 has turned its BOM on.
+3:25.573: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:25.629: Robot 9 has turned its BOM on.
+3:25.857: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:25.913: Robot 13 has turned its BOM on.
+3:26.129: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:26.185: Robot 2 has turned its BOM on.
+3:26.353: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:26.409: Robot 3 has turned its BOM on.
+3:26.629: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:26.685: Robot 4 has turned its BOM on.
+3:26.909: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:26.966: Robot 9 has turned its BOM on.
+3:27.185: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:27.241: Robot 13 has turned its BOM on.
+3:27.409: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:27.465: Robot 2 has turned its BOM on.
+3:27.689: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:27.745: Robot 3 has turned its BOM on.
+3:27.913: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:27.969: Robot 4 has turned its BOM on.
+3:28.185: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:28.241: Robot 9 has turned its BOM on.
+3:28.465: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:28.517: Robot 13 has turned its BOM on.
+3:28.689: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:28.745: Robot 2 has turned its BOM on.
+3:28.969: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:29.17: Robot 3 has turned its BOM on.
+3:29.241: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:29.297: Robot 4 has turned its BOM on.
+3:29.517: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:29.573: Robot 9 has turned its BOM on.
+3:29.745: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:29.801: Robot 13 has turned its BOM on.
+3:30.17: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:30.73: Robot 2 has turned its BOM on.
+3:30.241: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:30.297: Robot 3 has turned its BOM on.
+3:30.517: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:30.573: Robot 4 has turned its BOM on.
+3:30.797: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:30.853: Robot 9 has turned its BOM on.
+3:31.74: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:31.129: Robot 13 has turned its BOM on.
+3:31.297: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:31.353: Robot 2 has turned its BOM on.
+3:31.577: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:31.633: Robot 3 has turned its BOM on.
+3:31.857: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:31.913: Robot 4 has turned its BOM on.
+3:32.73: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:32.129: Robot 9 has turned its BOM on.
+3:32.353: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:32.409: Robot 13 has turned its BOM on.
+3:32.577: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:32.634: Robot 2 has turned its BOM on.
+3:32.857: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:32.913: Robot 3 has turned its BOM on.
+3:33.129: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:33.185: Robot 4 has turned its BOM on.
+3:33.409: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:33.466: Robot 9 has turned its BOM on.
+3:33.633: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:33.689: Robot 13 has turned its BOM on.
+3:33.913: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:33.969: Robot 2 has turned its BOM on.
+3:34.185: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:34.241: Robot 3 has turned its BOM on.
+3:34.409: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:34.465: Robot 4 has turned its BOM on.
+3:34.689: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:34.745: Robot 9 has turned its BOM on.
+3:34.914: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:34.969: Robot 13 has turned its BOM on.
+3:35.189: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:35.245: Robot 2 has turned its BOM on.
+3:35.474: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:35.517: Robot 3 has turned its BOM on.
+3:35.741: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:35.797: Robot 4 has turned its BOM on.
+3:35.973: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:36.18: Robot 9 has turned its BOM on.
+3:36.242: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:36.297: Robot 13 has turned its BOM on.
+3:36.518: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:36.574: Robot 2 has turned its BOM on.
+3:36.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:36.798: Robot 3 has turned its BOM on.
+3:37.18: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:37.74: Robot 4 has turned its BOM on.
+3:37.298: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:37.354: Robot 9 has turned its BOM on.
+3:37.522: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:37.578: Robot 13 has turned its BOM on.
+3:37.802: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:37.858: Robot 2 has turned its BOM on.
+3:38.74: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:38.130: Robot 3 has turned its BOM on.
+3:38.298: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:38.354: Robot 4 has turned its BOM on.
+3:38.574: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:38.630: Robot 9 has turned its BOM on.
+3:38.858: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:38.914: Robot 13 has turned its BOM on.
+3:39.74: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:39.130: Robot 2 has turned its BOM on.
+3:39.354: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:39.410: Robot 3 has turned its BOM on.
+3:39.630: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:39.686: Robot 4 has turned its BOM on.
+3:39.858: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:39.914: Robot 9 has turned its BOM on.
+3:40.130: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:40.186: Robot 13 has turned its BOM on.
+3:40.410: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:40.466: Robot 2 has turned its BOM on.
+3:40.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:40.742: Robot 3 has turned its BOM on.
+3:40.914: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:40.970: Robot 4 has turned its BOM on.
+3:41.186: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:41.242: Robot 9 has turned its BOM on.
+3:41.410: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:41.466: Robot 13 has turned its BOM on.
+3:41.686: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:41.742: Robot 2 has turned its BOM on.
+3:41.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:42.18: Robot 3 has turned its BOM on.
+3:42.242: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:42.298: Robot 4 has turned its BOM on.
+3:42.466: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:42.742: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:42.798: Robot 13 has turned its BOM on.
+3:43.18: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:43.74: Robot 2 has turned its BOM on.
+3:43.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:43.302: Robot 3 has turned its BOM on.
+3:43.518: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:43.574: Robot 4 has turned its BOM on.
+3:43.746: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:43.802: Robot 9 has turned its BOM on.
+3:44.18: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:44.74: Robot 13 has turned its BOM on.
+3:44.298: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:44.354: Robot 2 has turned its BOM on.
+3:44.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:44.630: Robot 3 has turned its BOM on.
+3:44.798: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:44.854: Robot 4 has turned its BOM on.
+3:45.78: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:45.134: Robot 9 has turned its BOM on.
+3:45.358: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:45.414: Robot 13 has turned its BOM on.
+3:45.574: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:45.630: Robot 2 has turned its BOM on.
+3:45.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:45.910: Robot 3 has turned its BOM on.
+3:46.78: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:46.134: Robot 4 has turned its BOM on.
+3:46.358: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:46.414: Robot 9 has turned its BOM on.
+3:46.630: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:46.686: Robot 13 has turned its BOM on.
+3:46.910: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:46.966: Robot 2 has turned its BOM on.
+3:47.135: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:47.190: Robot 3 has turned its BOM on.
+3:47.414: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:47.470: Robot 4 has turned its BOM on.
+3:47.686: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:47.742: Robot 9 has turned its BOM on.
+3:47.910: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:47.966: Robot 13 has turned its BOM on.
+3:48.190: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:48.246: Robot 2 has turned its BOM on.
+3:48.414: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:48.470: Robot 3 has turned its BOM on.
+3:48.686: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:48.742: Robot 4 has turned its BOM on.
+3:48.966: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:49.18: Robot 9 has turned its BOM on.
+3:49.242: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:49.298: Robot 13 has turned its BOM on.
+3:49.470: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:49.518: Robot 2 has turned its BOM on.
+3:49.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:49.798: Robot 3 has turned its BOM on.
+3:50.18: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:50.74: Robot 4 has turned its BOM on.
+3:50.242: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:50.298: Robot 9 has turned its BOM on.
+3:50.518: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:50.574: Robot 13 has turned its BOM on.
+3:50.798: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:50.854: Robot 2 has turned its BOM on.
+3:51.78: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+3:51.134: Robot 3 has turned its BOM on.
+3:51.302: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:51.358: Robot 4 has turned its BOM on.
+3:51.574: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:51.630: Robot 9 has turned its BOM on.
+3:51.798: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:51.854: Robot 13 has turned its BOM on.
+3:52.78: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:52.134: Robot 2 has turned its BOM on.
+3:52.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:52.414: Robot 3 has turned its BOM on.
+3:52.574: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:52.630: Robot 4 has turned its BOM on.
+3:52.854: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:52.910: Robot 9 has turned its BOM on.
+3:53.130: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:53.186: Robot 13 has turned its BOM on.
+3:53.358: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:53.414: Robot 2 has turned its BOM on.
+3:53.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:53.686: Robot 3 has turned its BOM on.
+3:53.910: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:53.966: Robot 4 has turned its BOM on.
+3:54.186: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:54.242: Robot 9 has turned its BOM on.
+3:54.414: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:54.470: Robot 13 has turned its BOM on.
+3:54.686: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:54.742: Robot 2 has turned its BOM on.
+3:54.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:54.966: Robot 3 has turned its BOM on.
+3:55.186: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:55.242: Robot 4 has turned its BOM on.
+3:55.466: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:55.518: Robot 9 has turned its BOM on.
+3:55.742: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+3:55.798: Robot 13 has turned its BOM on.
+3:55.966: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:56.18: Robot 2 has turned its BOM on.
+3:56.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:56.302: Robot 3 has turned its BOM on.
+3:56.518: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:56.574: Robot 4 has turned its BOM on.
+3:56.742: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:56.798: Robot 9 has turned its BOM on.
+3:57.22: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:57.78: Robot 13 has turned its BOM on.
+3:57.246: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:57.302: Robot 2 has turned its BOM on.
+3:57.522: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:57.578: Robot 3 has turned its BOM on.
+3:57.802: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:57.858: Robot 4 has turned its BOM on.
+3:58.74: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:58.130: Robot 9 has turned its BOM on.
+3:58.302: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:58.358: Robot 13 has turned its BOM on.
+3:58.582: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:58.638: Robot 2 has turned its BOM on.
+3:58.862: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+3:58.918: Robot 3 has turned its BOM on.
+3:59.74: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+3:59.130: Robot 4 has turned its BOM on.
+3:59.358: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+3:59.414: Robot 9 has turned its BOM on.
+3:59.630: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+3:59.686: Robot 13 has turned its BOM on.
+3:59.854: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+3:59.910: Robot 2 has turned its BOM on.
+4:0.130: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:0.186: Robot 3 has turned its BOM on.
+4:0.410: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:0.466: Robot 4 has turned its BOM on.
+4:0.638: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:0.694: Robot 9 has turned its BOM on.
+4:0.918: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:0.974: Robot 13 has turned its BOM on.
+4:1.186: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:1.242: Robot 2 has turned its BOM on.
+4:1.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:1.466: Robot 3 has turned its BOM on.
+4:1.690: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:1.746: Robot 4 has turned its BOM on.
+4:1.914: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:1.970: Robot 9 has turned its BOM on.
+4:2.186: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:2.242: Robot 13 has turned its BOM on.
+4:2.466: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:2.518: Robot 2 has turned its BOM on.
+4:2.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:2.798: Robot 3 has turned its BOM on.
+4:2.970: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:3.18: Robot 4 has turned its BOM on.
+4:3.242: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:3.298: Robot 9 has turned its BOM on.
+4:3.518: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:3.574: Robot 13 has turned its BOM on.
+4:3.742: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:3.798: Robot 2 has turned its BOM on.
+4:4.18: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:4.74: Robot 3 has turned its BOM on.
+4:4.298: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:4.354: Robot 4 has turned its BOM on.
+4:4.522: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:4.578: Robot 9 has turned its BOM on.
+4:4.802: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:4.858: Robot 13 has turned its BOM on.
+4:5.74: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:5.130: Robot 2 has turned its BOM on.
+4:5.298: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:5.354: Robot 3 has turned its BOM on.
+4:5.574: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:5.630: Robot 4 has turned its BOM on.
+4:5.854: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:5.910: Robot 9 has turned its BOM on.
+4:6.74: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:6.130: Robot 13 has turned its BOM on.
+4:6.354: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:6.410: Robot 2 has turned its BOM on.
+4:6.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:6.686: Robot 3 has turned its BOM on.
+4:6.858: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:6.914: Robot 4 has turned its BOM on.
+4:7.130: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:7.186: Robot 9 has turned its BOM on.
+4:7.410: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:7.466: Robot 13 has turned its BOM on.
+4:7.630: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:7.686: Robot 2 has turned its BOM on.
+4:7.914: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:7.970: Robot 3 has turned its BOM on.
+4:8.186: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:8.242: Robot 4 has turned its BOM on.
+4:8.414: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:8.470: Robot 9 has turned its BOM on.
+4:8.686: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:8.742: Robot 13 has turned its BOM on.
+4:8.966: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:9.18: Robot 2 has turned its BOM on.
+4:9.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:9.298: Robot 3 has turned its BOM on.
+4:9.466: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:9.518: Robot 4 has turned its BOM on.
+4:9.746: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:9.802: Robot 9 has turned its BOM on.
+4:10.18: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:10.74: Robot 13 has turned its BOM on.
+4:10.242: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:10.298: Robot 2 has turned its BOM on.
+4:10.522: Robot 3 has turned its BOM on.
+4:10.746: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:10.802: Robot 4 has turned its BOM on.
+4:11.18: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:11.74: Robot 9 has turned its BOM on.
+4:11.298: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:11.354: Robot 13 has turned its BOM on.
+4:11.574: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:11.858: Robot 3 has turned its BOM on.
+4:12.74: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:12.130: Robot 4 has turned its BOM on.
+4:12.354: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:12.410: Robot 9 has turned its BOM on.
+4:12.574: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:12.630: Robot 13 has turned its BOM on.
+4:12.858: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:12.914: Robot 2 has turned its BOM on.
+4:13.130: Robot 3 has turned its BOM on.
+4:13.354: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:13.410: Robot 4 has turned its BOM on.
+4:13.630: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:13.686: Robot 9 has turned its BOM on.
+4:13.910: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:13.966: Robot 13 has turned its BOM on.
+4:14.130: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:14.186: Robot 2 has turned its BOM on.
+4:14.410: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:14.466: Robot 3 has turned its BOM on.
+4:14.690: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:14.746: Robot 4 has turned its BOM on.
+4:14.914: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:14.970: Robot 9 has turned its BOM on.
+4:15.186: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:15.242: Robot 13 has turned its BOM on.
+4:15.466: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:15.518: Robot 2 has turned its BOM on.
+4:15.690: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:15.746: Robot 3 has turned its BOM on.
+4:15.970: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:16.18: Robot 4 has turned its BOM on.
+4:16.242: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:16.298: Robot 9 has turned its BOM on.
+4:16.466: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:16.518: Robot 13 has turned its BOM on.
+4:16.742: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:16.798: Robot 2 has turned its BOM on.
+4:17.18: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:17.74: Robot 3 has turned its BOM on.
+4:17.242: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:17.298: Robot 4 has turned its BOM on.
+4:17.518: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:17.574: Robot 9 has turned its BOM on.
+4:17.798: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:17.854: Robot 13 has turned its BOM on.
+4:18.22: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:18.78: Robot 2 has turned its BOM on.
+4:18.302: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:18.358: Robot 3 has turned its BOM on.
+4:18.574: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:18.630: Robot 4 has turned its BOM on.
+4:18.798: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:18.854: Robot 9 has turned its BOM on.
+4:19.78: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:19.134: Robot 13 has turned its BOM on.
+4:19.358: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:19.414: Robot 2 has turned its BOM on.
+4:19.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:19.630: Robot 3 has turned its BOM on.
+4:19.854: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:19.910: Robot 4 has turned its BOM on.
+4:20.130: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:20.186: Robot 9 has turned its BOM on.
+4:20.358: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:20.414: Robot 13 has turned its BOM on.
+4:20.630: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:20.686: Robot 2 has turned its BOM on.
+4:20.910: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:20.966: Robot 3 has turned its BOM on.
+4:21.130: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:21.186: Robot 4 has turned its BOM on.
+4:21.415: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:21.470: Robot 9 has turned its BOM on.
+4:21.686: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:21.742: Robot 13 has turned its BOM on.
+4:21.910: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:21.966: Robot 2 has turned its BOM on.
+4:22.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:22.242: Robot 3 has turned its BOM on.
+4:22.466: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:22.518: Robot 4 has turned its BOM on.
+4:22.742: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:22.798: Robot 9 has turned its BOM on.
+4:22.966: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:23.18: Robot 13 has turned its BOM on.
+4:23.246: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:23.302: Robot 2 has turned its BOM on.
+4:23.518: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:23.574: Robot 3 has turned its BOM on.
+4:23.742: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:23.798: Robot 4 has turned its BOM on.
+4:24.22: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:24.78: Robot 9 has turned its BOM on.
+4:24.250: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:24.306: Robot 13 has turned its BOM on.
+4:24.518: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:24.574: Robot 2 has turned its BOM on.
+4:24.798: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:24.854: Robot 3 has turned its BOM on.
+4:25.74: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:25.130: Robot 4 has turned its BOM on.
+4:25.302: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:25.358: Robot 9 has turned its BOM on.
+4:25.574: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:25.630: Robot 13 has turned its BOM on.
+4:25.858: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:25.914: Robot 2 has turned its BOM on.
+4:26.74: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:26.130: Robot 3 has turned its BOM on.
+4:26.358: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:26.414: Robot 4 has turned its BOM on.
+4:26.630: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:26.686: Robot 9 has turned its BOM on.
+4:26.854: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:26.910: Robot 13 has turned its BOM on.
+4:27.130: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:27.186: Robot 2 has turned its BOM on.
+4:27.410: Robot 3 has turned its BOM on.
+4:27.630: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:27.686: Robot 4 has turned its BOM on.
+4:27.910: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:27.967: Robot 9 has turned its BOM on.
+4:28.190: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:28.246: Robot 13 has turned its BOM on.
+4:28.414: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:28.471: Robot 2 has turned its BOM on.
+4:28.686: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:28.742: Robot 3 has turned its BOM on.
+4:28.966: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:29.18: Robot 4 has turned its BOM on.
+4:29.194: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:29.250: Robot 9 has turned its BOM on.
+4:29.474: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:29.518: Robot 13 has turned its BOM on.
+4:29.742: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:29.798: Robot 2 has turned its BOM on.
+4:29.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:30.18: Robot 3 has turned its BOM on.
+4:30.246: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:30.302: Robot 4 has turned its BOM on.
+4:30.518: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:30.574: Robot 9 has turned its BOM on.
+4:30.742: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:30.798: Robot 13 has turned its BOM on.
+4:31.18: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:31.74: Robot 2 has turned its BOM on.
+4:31.298: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:31.354: Robot 3 has turned its BOM on.
+4:31.574: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:31.630: Robot 4 has turned its BOM on.
+4:31.798: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:31.854: Robot 9 has turned its BOM on.
+4:32.78: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:32.134: Robot 13 has turned its BOM on.
+4:32.302: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:32.358: Robot 2 has turned its BOM on.
+4:32.574: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:32.630: Robot 3 has turned its BOM on.
+4:32.854: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:32.910: Robot 4 has turned its BOM on.
+4:33.78: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:33.134: Robot 9 has turned its BOM on.
+4:33.358: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:33.414: Robot 13 has turned its BOM on.
+4:33.630: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:33.686: Robot 2 has turned its BOM on.
+4:33.858: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:33.914: Robot 3 has turned its BOM on.
+4:34.130: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:34.186: Robot 4 has turned its BOM on.
+4:34.414: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:34.470: Robot 9 has turned its BOM on.
+4:34.630: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:34.686: Robot 13 has turned its BOM on.
+4:34.914: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:34.970: Robot 2 has turned its BOM on.
+4:35.186: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:35.242: Robot 3 has turned its BOM on.
+4:35.410: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:35.466: Robot 4 has turned its BOM on.
+4:35.686: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:35.742: Robot 9 has turned its BOM on.
+4:35.966: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:36.18: Robot 13 has turned its BOM on.
+4:36.242: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:36.298: Robot 2 has turned its BOM on.
+4:36.466: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:36.518: Robot 3 has turned its BOM on.
+4:36.746: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:36.802: Robot 4 has turned its BOM on.
+4:36.970: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:37.18: Robot 9 has turned its BOM on.
+4:37.242: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:37.298: Robot 13 has turned its BOM on.
+4:37.522: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:37.578: Robot 2 has turned its BOM on.
+4:37.746: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:37.802: Robot 3 has turned its BOM on.
+4:38.18: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:38.74: Robot 4 has turned its BOM on.
+4:38.298: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:38.354: Robot 9 has turned its BOM on.
+4:38.574: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:38.630: Robot 13 has turned its BOM on.
+4:38.802: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:38.858: Robot 2 has turned its BOM on.
+4:39.74: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:39.130: Robot 3 has turned its BOM on.
+4:39.354: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:39.410: Robot 4 has turned its BOM on.
+4:39.574: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:39.630: Robot 9 has turned its BOM on.
+4:39.858: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:39.914: Robot 13 has turned its BOM on.
+4:40.130: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:40.186: Robot 2 has turned its BOM on.
+4:40.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:40.414: Robot 3 has turned its BOM on.
+4:40.634: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:40.690: Robot 4 has turned its BOM on.
+4:40.914: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:40.970: Robot 9 has turned its BOM on.
+4:41.130: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:41.186: Robot 13 has turned its BOM on.
+4:41.410: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:41.466: Robot 2 has turned its BOM on.
+4:41.690: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:41.746: Robot 3 has turned its BOM on.
+4:41.914: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:41.970: Robot 4 has turned its BOM on.
+4:42.186: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:42.242: Robot 9 has turned its BOM on.
+4:42.466: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:42.518: Robot 13 has turned its BOM on.
+4:42.686: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:42.742: Robot 2 has turned its BOM on.
+4:42.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:43.18: Robot 3 has turned its BOM on.
+4:43.242: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+4:43.298: Robot 4 has turned its BOM on.
+4:43.466: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:43.518: Robot 9 has turned its BOM on.
+4:43.746: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 255)(3 11)(4 10)(13 12)
+4:43.802: Robot 13 has turned its BOM on.
+4:44.18: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:44.74: Robot 2 has turned its BOM on.
+4:44.242: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:44.298: Robot 3 has turned its BOM on.
+4:44.518: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:44.574: Robot 4 has turned its BOM on.
+4:44.798: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:44.854: Robot 9 has turned its BOM on.
+4:45.74: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:45.130: Robot 13 has turned its BOM on.
+4:45.298: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:45.354: Robot 2 has turned its BOM on.
+4:45.578: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:45.634: Robot 3 has turned its BOM on.
+4:45.802: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+4:45.858: Robot 4 has turned its BOM on.
+4:46.74: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:46.130: Robot 9 has turned its BOM on.
+4:46.354: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:46.410: Robot 13 has turned its BOM on.
+4:46.574: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:46.630: Robot 2 has turned its BOM on.
+4:46.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:46.910: Robot 3 has turned its BOM on.
+4:47.130: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 15)
+4:47.186: Robot 4 has turned its BOM on.
+4:47.410: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:47.466: Robot 9 has turned its BOM on.
+4:47.634: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:47.690: Robot 13 has turned its BOM on.
+4:47.914: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:47.970: Robot 2 has turned its BOM on.
+4:48.131: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:48.186: Robot 3 has turned its BOM on.
+4:48.410: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:48.466: Robot 4 has turned its BOM on.
+4:48.686: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:48.742: Robot 9 has turned its BOM on.
+4:48.914: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:48.970: Robot 13 has turned its BOM on.
+4:49.186: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:49.242: Robot 2 has turned its BOM on.
+4:49.466: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:49.518: Robot 3 has turned its BOM on.
+4:49.742: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:49.798: Robot 4 has turned its BOM on.
+4:49.970: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:50.18: Robot 9 has turned its BOM on.
+4:50.242: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:50.298: Robot 13 has turned its BOM on.
+4:50.466: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:50.518: Robot 2 has turned its BOM on.
+4:50.742: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:50.798: Robot 3 has turned its BOM on.
+4:51.18: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:51.74: Robot 4 has turned its BOM on.
+4:51.246: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:51.302: Robot 9 has turned its BOM on.
+4:51.518: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:51.574: Robot 13 has turned its BOM on.
+4:51.798: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:51.854: Robot 2 has turned its BOM on.
+4:52.74: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:52.130: Robot 3 has turned its BOM on.
+4:52.302: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:52.358: Robot 4 has turned its BOM on.
+4:52.574: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:52.630: Robot 9 has turned its BOM on.
+4:52.798: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:52.854: Robot 13 has turned its BOM on.
+4:53.74: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:53.130: Robot 2 has turned its BOM on.
+4:53.358: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:53.414: Robot 3 has turned its BOM on.
+4:53.630: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:53.686: Robot 4 has turned its BOM on.
+4:53.854: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:53.910: Robot 9 has turned its BOM on.
+4:54.134: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:54.190: Robot 13 has turned its BOM on.
+4:54.414: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:54.470: Robot 2 has turned its BOM on.
+4:54.630: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:54.686: Robot 3 has turned its BOM on.
+4:54.910: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:54.967: Robot 4 has turned its BOM on.
+4:55.190: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:55.246: Robot 9 has turned its BOM on.
+4:55.414: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:55.470: Robot 13 has turned its BOM on.
+4:55.686: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:55.742: Robot 2 has turned its BOM on.
+4:55.966: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 1)(4 3)(9 15)(13 3)
+4:56.18: Robot 3 has turned its BOM on.
+4:56.186: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:56.242: Robot 4 has turned its BOM on.
+4:56.467: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:56.518: Robot 9 has turned its BOM on.
+4:56.742: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:56.798: Robot 13 has turned its BOM on.
+4:56.966: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:57.18: Robot 2 has turned its BOM on.
+4:57.246: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:57.302: Robot 3 has turned its BOM on.
+4:57.518: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:57.575: Robot 4 has turned its BOM on.
+4:57.746: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:57.802: Robot 9 has turned its BOM on.
+4:58.18: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:58.74: Robot 13 has turned its BOM on.
+4:58.299: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:58.354: Robot 2 has turned its BOM on.
+4:58.523: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:58.578: Robot 3 has turned its BOM on.
+4:58.802: Robot 3 passed the token to robot 4. Sensor matrix:
+(2 10)(4 3)(9 3)(13 0)
+4:58.858: Robot 4 has turned its BOM on.
+4:59.78: Robot 4 passed the token to robot 9. Sensor matrix:
+(2 9)(3 12)(9 1)(13 13)
+4:59.134: Robot 9 has turned its BOM on.
+4:59.303: Robot 9 passed the token to robot 13. Sensor matrix:
+(2 2)(3 11)(4 10)(13 12)
+4:59.358: Robot 13 has turned its BOM on.
+4:59.575: Robot 13 passed the token to robot 2. Sensor matrix:
+(2 8)(3 8)(4 7)(9 4)
+4:59.630: Robot 2 has turned its BOM on.
+4:59.854: Robot 2 passed the token to robot 3. Sensor matrix:
+(3 0)(4 3)(9 15)(13 3)
+4:59.910: Robot 3 has turned its BOM on.
Index: branches/scout/projects/libwireless/logger/tests/2robots5minutes.analysis
===================================================================
--- branches/scout/projects/libwireless/logger/tests/2robots5minutes.analysis	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/2robots5minutes.analysis	(revision 1346)
@@ -0,0 +1,14 @@
+Robots:						2
+Time (seconds):					300
+Deaths:						2
+
+Deaths per Minute:				0.4
+Rejoin Time (seconds):				1.43
+Seconds Between BOM Flash and Token Sent:	0.19
+Seconds Between Token Sent and Token Returned:	0.245
+Seconds Between Token Sent and BOM Flash:	0.055
+
+Token Passes per Second:			3.85
+
+Deaths per Robot per Minute:			0.2
+Token Passes per Robot per Second:		1.9
Index: branches/scout/projects/libwireless/logger/tests/3robots5minutes.analysis
===================================================================
--- branches/scout/projects/libwireless/logger/tests/3robots5minutes.analysis	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/3robots5minutes.analysis	(revision 1346)
@@ -0,0 +1,14 @@
+Robots:						3
+Time (seconds):					300
+Deaths:						3
+
+Deaths per Minute:				0.6
+Rejoin Time (seconds):				0.446
+Seconds Between BOM Flash and Token Sent:	0.195
+Seconds Between Token Sent and Token Returned:	0.508
+Seconds Between Token Sent and BOM Flash:	0.055
+
+Token Passes per Second:			3.9
+
+Deaths per Robot per Minute:			0.2
+Token Passes per Robot per Second:		1.3
Index: branches/scout/projects/libwireless/logger/tests/4robots5minutes.analysis
===================================================================
--- branches/scout/projects/libwireless/logger/tests/4robots5minutes.analysis	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/4robots5minutes.analysis	(revision 1346)
@@ -0,0 +1,14 @@
+Robots:						4
+Time (seconds):					300
+Deaths:						3
+
+Deaths per Minute:				0.6
+Rejoin Time (seconds):				0.486
+Seconds Between BOM Flash and Token Sent:	0.198
+Seconds Between Token Sent and Token Returned:	0.758
+Seconds Between Token Sent and BOM Flash:	0.066
+
+Token Passes per Second:			3.79
+
+Deaths per Robot per Minute:			0.15
+Token Passes per Robot per Second:		0.95
Index: branches/scout/projects/libwireless/logger/tests/5robots5minutes.analysis
===================================================================
--- branches/scout/projects/libwireless/logger/tests/5robots5minutes.analysis	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/5robots5minutes.analysis	(revision 1346)
@@ -0,0 +1,14 @@
+Robots:						5
+Time (seconds):					300
+Deaths:						0
+
+Deaths per Minute:				0
+Rejoin Time (seconds):				0
+Seconds Between BOM Flash and Token Sent:	0.203
+Seconds Between Token Sent and Token Returned:	1.03
+Seconds Between Token Sent and BOM Flash:	0.063
+
+Token Passes per Second:			3.84
+
+Deaths per Robot per Minute:			0
+Token Passes per Robot per Second:		0.77
Index: branches/scout/projects/libwireless/logger/tests/2robots5minutes.test
===================================================================
--- branches/scout/projects/libwireless/logger/tests/2robots5minutes.test	(nonexistent)
+++ branches/scout/projects/libwireless/logger/tests/2robots5minutes.test	(revision 1346)
@@ -0,0 +1,3464 @@
+0:5.49: Robot 4 has requested to join the token ring.
+0:7.213: Robot 2 has requested to join the token ring.
+0:11.549: Robot 4 passed the token to robot 4. Sensor matrix:
+
+0:11.661: Robot 2 has requested to join the token ring.
+0:11.717: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 255)
+0:11.773: Robot 2 has turned its BOM on.
+0:11.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:11.981: Robot 4 has turned its BOM on.
+0:12.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:12.261: Robot 2 has turned its BOM on.
+0:12.425: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:12.481: Robot 4 has turned its BOM on.
+0:12.705: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:12.761: Robot 2 has turned its BOM on.
+0:12.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:12.981: Robot 4 has turned its BOM on.
+0:13.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:13.261: Robot 2 has turned its BOM on.
+0:13.429: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:13.485: Robot 4 has turned its BOM on.
+0:13.653: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:13.709: Robot 2 has turned its BOM on.
+0:13.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:13.981: Robot 4 has turned its BOM on.
+0:14.149: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:14.205: Robot 2 has turned its BOM on.
+0:14.433: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:14.489: Robot 4 has turned its BOM on.
+0:14.661: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:14.717: Robot 2 has turned its BOM on.
+0:14.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:14.981: Robot 4 has turned its BOM on.
+0:15.149: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:15.205: Robot 2 has turned its BOM on.
+0:15.425: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:15.481: Robot 4 has turned its BOM on.
+0:15.653: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:15.709: Robot 2 has turned its BOM on.
+0:15.869: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:15.925: Robot 4 has turned its BOM on.
+0:16.149: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:16.205: Robot 2 has turned its BOM on.
+0:16.373: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:16.429: Robot 4 has turned its BOM on.
+0:16.653: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:16.709: Robot 2 has turned its BOM on.
+0:16.873: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:16.929: Robot 4 has turned its BOM on.
+0:17.153: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:17.209: Robot 2 has turned its BOM on.
+0:17.369: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:17.425: Robot 4 has turned its BOM on.
+0:17.649: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:17.705: Robot 2 has turned its BOM on.
+0:17.869: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:17.925: Robot 4 has turned its BOM on.
+0:18.93: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:18.149: Robot 2 has turned its BOM on.
+0:18.369: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:18.425: Robot 4 has turned its BOM on.
+0:18.601: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:18.657: Robot 2 has turned its BOM on.
+0:18.869: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:18.925: Robot 4 has turned its BOM on.
+0:19.93: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:19.149: Robot 2 has turned its BOM on.
+0:19.373: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:19.429: Robot 4 has turned its BOM on.
+0:19.601: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:19.657: Robot 2 has turned its BOM on.
+0:19.813: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:19.869: Robot 4 has turned its BOM on.
+0:20.93: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:20.149: Robot 2 has turned its BOM on.
+0:20.318: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:20.373: Robot 4 has turned its BOM on.
+0:20.601: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:20.657: Robot 2 has turned its BOM on.
+0:20.817: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:20.873: Robot 4 has turned its BOM on.
+0:21.97: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:21.153: Robot 2 has turned its BOM on.
+0:21.313: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:21.369: Robot 4 has turned its BOM on.
+0:21.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:21.593: Robot 2 has turned its BOM on.
+0:21.813: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:21.869: Robot 4 has turned its BOM on.
+0:22.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:22.93: Robot 2 has turned its BOM on.
+0:22.313: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:22.369: Robot 4 has turned its BOM on.
+0:22.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:22.593: Robot 2 has turned its BOM on.
+0:22.813: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:22.869: Robot 4 has turned its BOM on.
+0:23.41: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:23.97: Robot 2 has turned its BOM on.
+0:23.265: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:23.313: Robot 4 has turned its BOM on.
+0:23.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:23.593: Robot 2 has turned its BOM on.
+0:23.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:23.813: Robot 4 has turned its BOM on.
+0:24.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:24.93: Robot 2 has turned its BOM on.
+0:24.261: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:24.313: Robot 4 has turned its BOM on.
+0:24.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:24.593: Robot 2 has turned its BOM on.
+0:24.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:24.813: Robot 4 has turned its BOM on.
+0:25.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:25.93: Robot 2 has turned its BOM on.
+0:25.269: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:25.313: Robot 4 has turned its BOM on.
+0:25.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:25.593: Robot 2 has turned its BOM on.
+0:25.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:25.813: Robot 4 has turned its BOM on.
+0:25.981: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:26.37: Robot 2 has turned its BOM on.
+0:26.261: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:26.313: Robot 4 has turned its BOM on.
+0:26.485: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:26.541: Robot 2 has turned its BOM on.
+0:26.765: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:26.813: Robot 4 has turned its BOM on.
+0:26.981: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:27.37: Robot 2 has turned its BOM on.
+0:27.261: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:27.313: Robot 4 has turned its BOM on.
+0:27.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:27.537: Robot 2 has turned its BOM on.
+0:27.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:27.813: Robot 4 has turned its BOM on.
+0:27.985: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:28.41: Robot 2 has turned its BOM on.
+0:28.209: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:28.265: Robot 4 has turned its BOM on.
+0:28.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:28.537: Robot 2 has turned its BOM on.
+0:28.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:28.761: Robot 4 has turned its BOM on.
+0:28.985: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:29.41: Robot 2 has turned its BOM on.
+0:29.209: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:29.265: Robot 4 has turned its BOM on.
+0:29.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:29.537: Robot 2 has turned its BOM on.
+0:29.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:29.761: Robot 4 has turned its BOM on.
+0:29.981: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:30.37: Robot 2 has turned its BOM on.
+0:30.209: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:30.265: Robot 4 has turned its BOM on.
+0:30.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:30.537: Robot 2 has turned its BOM on.
+0:30.709: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:30.765: Robot 4 has turned its BOM on.
+0:30.925: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:30.981: Robot 2 has turned its BOM on.
+0:31.209: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:31.265: Robot 4 has turned its BOM on.
+0:31.425: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:31.481: Robot 2 has turned its BOM on.
+0:31.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:31.761: Robot 4 has turned its BOM on.
+0:31.925: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:31.981: Robot 2 has turned its BOM on.
+0:32.205: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:32.261: Robot 4 has turned its BOM on.
+0:32.425: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:32.481: Robot 2 has turned its BOM on.
+0:32.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:32.761: Robot 4 has turned its BOM on.
+0:32.929: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:32.985: Robot 2 has turned its BOM on.
+0:33.153: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:33.209: Robot 4 has turned its BOM on.
+0:33.426: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:33.481: Robot 2 has turned its BOM on.
+0:33.649: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:33.705: Robot 4 has turned its BOM on.
+0:33.930: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:33.985: Robot 2 has turned its BOM on.
+0:34.153: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:34.209: Robot 4 has turned its BOM on.
+0:34.429: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:34.485: Robot 2 has turned its BOM on.
+0:34.657: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:34.713: Robot 4 has turned its BOM on.
+0:34.925: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:34.981: Robot 2 has turned its BOM on.
+0:35.157: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:35.213: Robot 4 has turned its BOM on.
+0:35.425: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:35.481: Robot 2 has turned its BOM on.
+0:35.649: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:35.705: Robot 4 has turned its BOM on.
+0:35.873: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:35.929: Robot 2 has turned its BOM on.
+0:36.153: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:36.209: Robot 4 has turned its BOM on.
+0:36.369: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:36.425: Robot 2 has turned its BOM on.
+0:36.649: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:36.705: Robot 4 has turned its BOM on.
+0:36.869: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:36.925: Robot 2 has turned its BOM on.
+0:37.149: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:37.205: Robot 4 has turned its BOM on.
+0:37.373: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:37.429: Robot 2 has turned its BOM on.
+0:37.597: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:37.653: Robot 4 has turned its BOM on.
+0:37.869: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:37.925: Robot 2 has turned its BOM on.
+0:38.93: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:38.149: Robot 4 has turned its BOM on.
+0:38.373: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:38.429: Robot 2 has turned its BOM on.
+0:38.597: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:38.653: Robot 4 has turned its BOM on.
+0:38.869: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:38.925: Robot 2 has turned its BOM on.
+0:39.93: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:39.149: Robot 4 has turned its BOM on.
+0:39.313: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:39.369: Robot 2 has turned its BOM on.
+0:39.593: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:39.649: Robot 4 has turned its BOM on.
+0:39.813: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:39.869: Robot 2 has turned its BOM on.
+0:40.93: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:40.149: Robot 4 has turned its BOM on.
+0:40.317: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:40.373: Robot 2 has turned its BOM on.
+0:40.597: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:40.653: Robot 4 has turned its BOM on.
+0:40.813: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:40.869: Robot 2 has turned its BOM on.
+0:41.37: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:41.93: Robot 4 has turned its BOM on.
+0:41.313: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:41.369: Robot 2 has turned its BOM on.
+0:41.537: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:41.593: Robot 4 has turned its BOM on.
+0:41.813: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:41.869: Robot 2 has turned its BOM on.
+0:42.37: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:42.93: Robot 4 has turned its BOM on.
+0:42.313: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:42.369: Robot 2 has turned its BOM on.
+0:42.541: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:42.597: Robot 4 has turned its BOM on.
+0:42.765: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:42.813: Robot 2 has turned its BOM on.
+0:43.37: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:43.93: Robot 4 has turned its BOM on.
+0:43.261: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:43.313: Robot 2 has turned its BOM on.
+0:43.537: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:43.593: Robot 4 has turned its BOM on.
+0:43.761: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:43.813: Robot 2 has turned its BOM on.
+0:44.37: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:44.93: Robot 4 has turned its BOM on.
+0:44.261: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:44.313: Robot 2 has turned its BOM on.
+0:44.537: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:44.593: Robot 4 has turned its BOM on.
+0:44.765: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:44.813: Robot 2 has turned its BOM on.
+0:45.37: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:45.93: Robot 4 has turned its BOM on.
+0:45.261: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:45.313: Robot 2 has turned its BOM on.
+0:45.485: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:45.541: Robot 4 has turned its BOM on.
+0:45.765: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:45.813: Robot 2 has turned its BOM on.
+0:45.981: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:46.37: Robot 4 has turned its BOM on.
+0:46.261: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:46.313: Robot 2 has turned its BOM on.
+0:46.481: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:46.537: Robot 4 has turned its BOM on.
+0:46.761: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:46.813: Robot 2 has turned its BOM on.
+0:46.981: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:47.38: Robot 4 has turned its BOM on.
+0:47.261: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:47.313: Robot 2 has turned its BOM on.
+0:47.485: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:47.542: Robot 4 has turned its BOM on.
+0:47.709: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:47.765: Robot 2 has turned its BOM on.
+0:47.981: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:48.37: Robot 4 has turned its BOM on.
+0:48.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:48.261: Robot 2 has turned its BOM on.
+0:48.481: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:48.537: Robot 4 has turned its BOM on.
+0:48.705: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:48.761: Robot 2 has turned its BOM on.
+0:48.981: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:49.37: Robot 4 has turned its BOM on.
+0:49.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:49.261: Robot 2 has turned its BOM on.
+0:49.481: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:49.537: Robot 4 has turned its BOM on.
+0:49.709: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:49.765: Robot 2 has turned its BOM on.
+0:49.981: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:50.37: Robot 4 has turned its BOM on.
+0:50.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:50.261: Robot 2 has turned its BOM on.
+0:50.429: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:50.485: Robot 4 has turned its BOM on.
+0:50.709: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:50.765: Robot 2 has turned its BOM on.
+0:50.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:50.981: Robot 4 has turned its BOM on.
+0:51.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:51.261: Robot 2 has turned its BOM on.
+0:51.425: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:51.481: Robot 4 has turned its BOM on.
+0:51.709: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:51.765: Robot 2 has turned its BOM on.
+0:51.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:51.981: Robot 4 has turned its BOM on.
+0:52.205: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:52.261: Robot 2 has turned its BOM on.
+0:52.429: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:52.485: Robot 4 has turned its BOM on.
+0:52.653: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:52.709: Robot 2 has turned its BOM on.
+0:52.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:52.981: Robot 4 has turned its BOM on.
+0:53.149: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:53.205: Robot 2 has turned its BOM on.
+0:53.429: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:53.485: Robot 4 has turned its BOM on.
+0:53.653: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:53.709: Robot 2 has turned its BOM on.
+0:53.925: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:53.981: Robot 4 has turned its BOM on.
+0:54.153: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:54.209: Robot 2 has turned its BOM on.
+0:54.425: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:54.481: Robot 4 has turned its BOM on.
+0:54.649: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:54.705: Robot 2 has turned its BOM on.
+0:54.873: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:54.929: Robot 4 has turned its BOM on.
+0:55.153: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:55.209: Robot 2 has turned its BOM on.
+0:55.369: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:55.425: Robot 4 has turned its BOM on.
+0:55.649: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:55.705: Robot 2 has turned its BOM on.
+0:55.869: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:55.925: Robot 4 has turned its BOM on.
+0:56.149: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:56.205: Robot 2 has turned its BOM on.
+0:56.369: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:56.425: Robot 4 has turned its BOM on.
+0:56.649: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:56.705: Robot 2 has turned its BOM on.
+0:56.873: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:56.929: Robot 4 has turned its BOM on.
+0:57.97: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:57.153: Robot 2 has turned its BOM on.
+0:57.369: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:57.425: Robot 4 has turned its BOM on.
+0:57.593: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:57.649: Robot 2 has turned its BOM on.
+0:57.873: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:57.929: Robot 4 has turned its BOM on.
+0:58.97: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:58.153: Robot 2 has turned its BOM on.
+0:58.373: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:58.429: Robot 4 has turned its BOM on.
+0:58.601: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:58.657: Robot 2 has turned its BOM on.
+0:58.869: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:58.925: Robot 4 has turned its BOM on.
+0:59.97: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:59.153: Robot 2 has turned its BOM on.
+0:59.313: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:59.369: Robot 4 has turned its BOM on.
+0:59.593: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+0:59.649: Robot 2 has turned its BOM on.
+0:59.813: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+0:59.869: Robot 4 has turned its BOM on.
+1:0.97: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:0.153: Robot 2 has turned its BOM on.
+1:0.313: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:0.369: Robot 4 has turned its BOM on.
+1:0.593: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:0.650: Robot 2 has turned its BOM on.
+1:0.813: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:0.869: Robot 4 has turned its BOM on.
+1:1.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:1.93: Robot 2 has turned its BOM on.
+1:1.313: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:1.369: Robot 4 has turned its BOM on.
+1:1.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:1.593: Robot 2 has turned its BOM on.
+1:1.813: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:1.869: Robot 4 has turned its BOM on.
+1:2.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:2.93: Robot 2 has turned its BOM on.
+1:2.313: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:2.369: Robot 4 has turned its BOM on.
+1:2.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:2.593: Robot 2 has turned its BOM on.
+1:2.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:2.813: Robot 4 has turned its BOM on.
+1:3.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:3.93: Robot 2 has turned its BOM on.
+1:3.261: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:3.313: Robot 4 has turned its BOM on.
+1:3.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:3.593: Robot 2 has turned its BOM on.
+1:3.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:3.813: Robot 4 has turned its BOM on.
+1:4.37: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:4.93: Robot 2 has turned its BOM on.
+1:4.265: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:4.313: Robot 4 has turned its BOM on.
+1:4.537: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:4.593: Robot 2 has turned its BOM on.
+1:4.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:4.813: Robot 4 has turned its BOM on.
+1:4.985: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:5.41: Robot 2 has turned its BOM on.
+1:5.265: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:5.313: Robot 4 has turned its BOM on.
+1:5.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:5.537: Robot 2 has turned its BOM on.
+1:5.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:5.813: Robot 4 has turned its BOM on.
+1:5.981: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:6.37: Robot 2 has turned its BOM on.
+1:6.261: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:6.313: Robot 4 has turned its BOM on.
+1:6.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:6.537: Robot 2 has turned its BOM on.
+1:6.761: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:6.813: Robot 4 has turned its BOM on.
+1:6.985: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:7.41: Robot 2 has turned its BOM on.
+1:7.210: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:7.265: Robot 4 has turned its BOM on.
+1:7.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:7.537: Robot 2 has turned its BOM on.
+1:7.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:7.761: Robot 4 has turned its BOM on.
+1:7.981: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:8.37: Robot 2 has turned its BOM on.
+1:8.205: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:8.261: Robot 4 has turned its BOM on.
+1:8.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:8.537: Robot 2 has turned its BOM on.
+1:8.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:8.761: Robot 4 has turned its BOM on.
+1:8.981: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:9.37: Robot 2 has turned its BOM on.
+1:9.205: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:9.261: Robot 4 has turned its BOM on.
+1:9.481: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:9.537: Robot 2 has turned its BOM on.
+1:9.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:9.761: Robot 4 has turned its BOM on.
+1:9.929: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:9.985: Robot 2 has turned its BOM on.
+1:10.209: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:10.265: Robot 4 has turned its BOM on.
+1:10.425: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:10.481: Robot 2 has turned its BOM on.
+1:10.705: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:10.761: Robot 4 has turned its BOM on.
+1:10.925: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:10.981: Robot 2 has turned its BOM on.
+1:11.205: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:11.261: Robot 4 has turned its BOM on.
+1:11.429: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:11.485: Robot 2 has turned its BOM on.
+1:11.653: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:11.710: Robot 4 has turned its BOM on.
+1:11.925: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:11.981: Robot 2 has turned its BOM on.
+1:12.149: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:12.205: Robot 4 has turned its BOM on.
+1:12.429: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:12.485: Robot 2 has turned its BOM on.
+1:12.653: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:12.709: Robot 4 has turned its BOM on.
+1:12.925: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:12.981: Robot 2 has turned its BOM on.
+1:13.149: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:13.205: Robot 4 has turned its BOM on.
+1:13.425: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:13.481: Robot 2 has turned its BOM on.
+1:13.653: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:13.709: Robot 4 has turned its BOM on.
+1:13.926: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:13.981: Robot 2 has turned its BOM on.
+1:14.150: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:14.206: Robot 4 has turned its BOM on.
+1:14.373: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:14.429: Robot 2 has turned its BOM on.
+1:14.653: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:14.709: Robot 4 has turned its BOM on.
+1:14.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:14.925: Robot 2 has turned its BOM on.
+1:15.149: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:15.206: Robot 4 has turned its BOM on.
+1:15.369: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:15.425: Robot 2 has turned its BOM on.
+1:15.650: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:15.706: Robot 4 has turned its BOM on.
+1:15.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:15.926: Robot 2 has turned its BOM on.
+1:16.150: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:16.206: Robot 4 has turned its BOM on.
+1:16.374: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:16.430: Robot 2 has turned its BOM on.
+1:16.598: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:16.654: Robot 4 has turned its BOM on.
+1:16.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:16.926: Robot 2 has turned its BOM on.
+1:17.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:17.150: Robot 4 has turned its BOM on.
+1:17.374: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:17.430: Robot 2 has turned its BOM on.
+1:17.598: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:17.654: Robot 4 has turned its BOM on.
+1:17.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:17.926: Robot 2 has turned its BOM on.
+1:18.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:18.150: Robot 4 has turned its BOM on.
+1:18.370: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:18.426: Robot 2 has turned its BOM on.
+1:18.602: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:18.658: Robot 4 has turned its BOM on.
+1:18.814: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:18.870: Robot 2 has turned its BOM on.
+1:19.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:19.150: Robot 4 has turned its BOM on.
+1:19.318: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:19.374: Robot 2 has turned its BOM on.
+1:19.606: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:19.662: Robot 4 has turned its BOM on.
+1:19.814: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:19.870: Robot 2 has turned its BOM on.
+1:20.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:20.150: Robot 4 has turned its BOM on.
+1:20.314: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:20.370: Robot 2 has turned its BOM on.
+1:20.538: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:20.594: Robot 4 has turned its BOM on.
+1:20.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:20.870: Robot 2 has turned its BOM on.
+1:21.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:21.94: Robot 4 has turned its BOM on.
+1:21.314: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:21.370: Robot 2 has turned its BOM on.
+1:21.542: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:21.598: Robot 4 has turned its BOM on.
+1:21.814: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:21.870: Robot 2 has turned its BOM on.
+1:22.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:22.94: Robot 4 has turned its BOM on.
+1:22.262: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:22.314: Robot 2 has turned its BOM on.
+1:22.538: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:22.594: Robot 4 has turned its BOM on.
+1:22.762: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:22.814: Robot 2 has turned its BOM on.
+1:23.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:23.94: Robot 4 has turned its BOM on.
+1:23.262: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:23.314: Robot 2 has turned its BOM on.
+1:23.538: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:23.594: Robot 4 has turned its BOM on.
+1:23.766: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:23.814: Robot 2 has turned its BOM on.
+1:26.162: Robot 4 passed the token to robot 4. Sensor matrix:
+
+1:26.218: Robot 2 has requested to join the token ring.
+1:26.274: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:26.314: Robot 2 has turned its BOM on.
+1:26.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:26.426: Robot 4 has turned its BOM on.
+1:26.654: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:26.710: Robot 2 has turned its BOM on.
+1:26.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:26.926: Robot 4 has turned its BOM on.
+1:27.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:27.206: Robot 2 has turned its BOM on.
+1:27.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:27.426: Robot 4 has turned its BOM on.
+1:27.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:27.706: Robot 2 has turned its BOM on.
+1:27.874: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:27.930: Robot 4 has turned its BOM on.
+1:28.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:28.154: Robot 2 has turned its BOM on.
+1:28.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:28.426: Robot 4 has turned its BOM on.
+1:28.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:28.650: Robot 2 has turned its BOM on.
+1:28.874: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:28.930: Robot 4 has turned its BOM on.
+1:29.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:29.154: Robot 2 has turned its BOM on.
+1:29.374: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:29.430: Robot 4 has turned its BOM on.
+1:29.602: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:29.658: Robot 2 has turned its BOM on.
+1:29.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:29.926: Robot 4 has turned its BOM on.
+1:30.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:30.154: Robot 2 has turned its BOM on.
+1:30.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:30.426: Robot 4 has turned its BOM on.
+1:30.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:30.650: Robot 2 has turned its BOM on.
+1:30.818: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:30.874: Robot 4 has turned its BOM on.
+1:31.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:31.154: Robot 2 has turned its BOM on.
+1:31.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:31.370: Robot 4 has turned its BOM on.
+1:31.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:31.650: Robot 2 has turned its BOM on.
+1:31.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:31.870: Robot 4 has turned its BOM on.
+1:32.94: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:32.150: Robot 2 has turned its BOM on.
+1:32.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:32.370: Robot 4 has turned its BOM on.
+1:32.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:32.594: Robot 2 has turned its BOM on.
+1:32.818: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:32.874: Robot 4 has turned its BOM on.
+1:33.42: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:33.98: Robot 2 has turned its BOM on.
+1:33.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:33.370: Robot 4 has turned its BOM on.
+1:33.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:33.594: Robot 2 has turned its BOM on.
+1:33.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:33.870: Robot 4 has turned its BOM on.
+1:34.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:34.94: Robot 2 has turned its BOM on.
+1:34.262: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:34.314: Robot 4 has turned its BOM on.
+1:34.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:34.594: Robot 2 has turned its BOM on.
+1:34.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:34.814: Robot 4 has turned its BOM on.
+1:35.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:35.94: Robot 2 has turned its BOM on.
+1:35.270: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:35.314: Robot 4 has turned its BOM on.
+1:35.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:35.594: Robot 2 has turned its BOM on.
+1:35.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:35.814: Robot 4 has turned its BOM on.
+1:36.42: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:36.98: Robot 2 has turned its BOM on.
+1:36.266: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:36.314: Robot 4 has turned its BOM on.
+1:36.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:36.538: Robot 2 has turned its BOM on.
+1:36.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:36.814: Robot 4 has turned its BOM on.
+1:36.982: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:37.38: Robot 2 has turned its BOM on.
+1:37.262: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:37.314: Robot 4 has turned its BOM on.
+1:37.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:37.538: Robot 2 has turned its BOM on.
+1:37.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:37.814: Robot 4 has turned its BOM on.
+1:37.986: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:38.42: Robot 2 has turned its BOM on.
+1:38.210: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:38.266: Robot 4 has turned its BOM on.
+1:38.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:38.538: Robot 2 has turned its BOM on.
+1:38.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:38.762: Robot 4 has turned its BOM on.
+1:38.982: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:39.38: Robot 2 has turned its BOM on.
+1:39.206: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:39.262: Robot 4 has turned its BOM on.
+1:39.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:39.538: Robot 2 has turned its BOM on.
+1:39.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:39.762: Robot 4 has turned its BOM on.
+1:39.982: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:40.38: Robot 2 has turned its BOM on.
+1:40.210: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:40.266: Robot 4 has turned its BOM on.
+1:40.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:40.538: Robot 2 has turned its BOM on.
+1:40.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:40.762: Robot 4 has turned its BOM on.
+1:40.930: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:40.987: Robot 2 has turned its BOM on.
+1:41.210: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:41.266: Robot 4 has turned its BOM on.
+1:41.426: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:41.482: Robot 2 has turned its BOM on.
+1:41.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:41.762: Robot 4 has turned its BOM on.
+1:41.926: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:41.982: Robot 2 has turned its BOM on.
+1:42.206: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:42.262: Robot 4 has turned its BOM on.
+1:42.426: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:42.482: Robot 2 has turned its BOM on.
+1:42.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:42.762: Robot 4 has turned its BOM on.
+1:42.930: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:42.986: Robot 2 has turned its BOM on.
+1:43.154: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:43.210: Robot 4 has turned its BOM on.
+1:43.426: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:43.482: Robot 2 has turned its BOM on.
+1:43.650: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:43.706: Robot 4 has turned its BOM on.
+1:43.930: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:43.986: Robot 2 has turned its BOM on.
+1:44.154: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:44.210: Robot 4 has turned its BOM on.
+1:44.426: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:44.482: Robot 2 has turned its BOM on.
+1:44.650: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:44.706: Robot 4 has turned its BOM on.
+1:44.926: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:44.982: Robot 2 has turned its BOM on.
+1:45.150: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:45.206: Robot 4 has turned its BOM on.
+1:45.374: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:45.430: Robot 2 has turned its BOM on.
+1:45.654: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:45.710: Robot 4 has turned its BOM on.
+1:45.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:45.926: Robot 2 has turned its BOM on.
+1:46.150: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:46.206: Robot 4 has turned its BOM on.
+1:46.370: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:46.426: Robot 2 has turned its BOM on.
+1:46.650: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:46.706: Robot 4 has turned its BOM on.
+1:46.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:46.926: Robot 2 has turned its BOM on.
+1:47.150: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:47.206: Robot 4 has turned its BOM on.
+1:47.374: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:47.430: Robot 2 has turned its BOM on.
+1:47.598: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:47.654: Robot 4 has turned its BOM on.
+1:47.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:47.926: Robot 2 has turned its BOM on.
+1:48.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:48.150: Robot 4 has turned its BOM on.
+1:48.374: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:48.430: Robot 2 has turned its BOM on.
+1:48.598: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:48.654: Robot 4 has turned its BOM on.
+1:48.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:48.926: Robot 2 has turned its BOM on.
+1:49.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:49.150: Robot 4 has turned its BOM on.
+1:49.370: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:49.426: Robot 2 has turned its BOM on.
+1:49.598: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:49.654: Robot 4 has turned its BOM on.
+1:49.870: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:49.926: Robot 2 has turned its BOM on.
+1:50.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:50.150: Robot 4 has turned its BOM on.
+1:50.322: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:50.378: Robot 2 has turned its BOM on.
+1:50.602: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:50.658: Robot 4 has turned its BOM on.
+1:50.814: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:50.870: Robot 2 has turned its BOM on.
+1:51.94: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:51.150: Robot 4 has turned its BOM on.
+1:51.314: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:51.370: Robot 2 has turned its BOM on.
+1:51.594: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:51.650: Robot 4 has turned its BOM on.
+1:51.814: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:51.870: Robot 2 has turned its BOM on.
+1:52.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:52.94: Robot 4 has turned its BOM on.
+1:52.318: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:52.374: Robot 2 has turned its BOM on.
+1:52.542: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:52.598: Robot 4 has turned its BOM on.
+1:52.814: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:52.870: Robot 2 has turned its BOM on.
+1:53.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:53.94: Robot 4 has turned its BOM on.
+1:53.314: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:53.370: Robot 2 has turned its BOM on.
+1:53.538: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:53.594: Robot 4 has turned its BOM on.
+1:53.762: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:53.814: Robot 2 has turned its BOM on.
+1:54.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:54.95: Robot 4 has turned its BOM on.
+1:54.262: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:54.314: Robot 2 has turned its BOM on.
+1:54.538: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:54.594: Robot 4 has turned its BOM on.
+1:54.766: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:54.814: Robot 2 has turned its BOM on.
+1:55.38: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:55.94: Robot 4 has turned its BOM on.
+1:55.262: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:55.314: Robot 2 has turned its BOM on.
+1:55.490: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:55.546: Robot 4 has turned its BOM on.
+1:55.774: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:55.814: Robot 2 has turned its BOM on.
+1:55.982: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:56.38: Robot 4 has turned its BOM on.
+1:56.262: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:56.314: Robot 2 has turned its BOM on.
+1:56.482: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:56.538: Robot 4 has turned its BOM on.
+1:56.762: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:56.814: Robot 2 has turned its BOM on.
+1:56.982: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:57.38: Robot 4 has turned its BOM on.
+1:57.262: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:57.314: Robot 2 has turned its BOM on.
+1:57.486: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:57.542: Robot 4 has turned its BOM on.
+1:57.710: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:57.766: Robot 2 has turned its BOM on.
+1:57.982: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:58.38: Robot 4 has turned its BOM on.
+1:58.206: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:58.262: Robot 2 has turned its BOM on.
+1:58.482: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:58.538: Robot 4 has turned its BOM on.
+1:58.706: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:58.762: Robot 2 has turned its BOM on.
+1:58.982: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:59.38: Robot 4 has turned its BOM on.
+1:59.206: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:59.262: Robot 2 has turned its BOM on.
+1:59.482: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+1:59.538: Robot 4 has turned its BOM on.
+1:59.710: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+1:59.766: Robot 2 has turned its BOM on.
+1:59.982: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:0.38: Robot 4 has turned its BOM on.
+2:0.214: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:0.270: Robot 2 has turned its BOM on.
+2:0.430: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:0.486: Robot 4 has turned its BOM on.
+2:0.710: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:0.766: Robot 2 has turned its BOM on.
+2:0.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:0.982: Robot 4 has turned its BOM on.
+2:1.206: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:1.262: Robot 2 has turned its BOM on.
+2:1.426: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:1.482: Robot 4 has turned its BOM on.
+2:1.706: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:1.762: Robot 2 has turned its BOM on.
+2:1.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:1.982: Robot 4 has turned its BOM on.
+2:2.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:2.206: Robot 2 has turned its BOM on.
+2:2.426: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:2.482: Robot 4 has turned its BOM on.
+2:2.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:2.706: Robot 2 has turned its BOM on.
+2:2.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:2.982: Robot 4 has turned its BOM on.
+2:3.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:3.206: Robot 2 has turned its BOM on.
+2:3.426: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:3.482: Robot 4 has turned its BOM on.
+2:3.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:3.706: Robot 2 has turned its BOM on.
+2:3.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:3.982: Robot 4 has turned its BOM on.
+2:4.154: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:4.210: Robot 2 has turned its BOM on.
+2:4.426: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:4.482: Robot 4 has turned its BOM on.
+2:4.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:4.706: Robot 2 has turned its BOM on.
+2:4.874: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:4.930: Robot 4 has turned its BOM on.
+2:5.154: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:5.210: Robot 2 has turned its BOM on.
+2:5.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:5.426: Robot 4 has turned its BOM on.
+2:5.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:5.706: Robot 2 has turned its BOM on.
+2:5.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:5.926: Robot 4 has turned its BOM on.
+2:6.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:6.206: Robot 2 has turned its BOM on.
+2:6.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:6.426: Robot 4 has turned its BOM on.
+2:6.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:6.706: Robot 2 has turned its BOM on.
+2:6.874: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:6.930: Robot 4 has turned its BOM on.
+2:7.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:7.154: Robot 2 has turned its BOM on.
+2:7.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:7.426: Robot 4 has turned its BOM on.
+2:7.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:7.650: Robot 2 has turned its BOM on.
+2:7.874: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:7.930: Robot 4 has turned its BOM on.
+2:8.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:8.154: Robot 2 has turned its BOM on.
+2:8.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:8.426: Robot 4 has turned its BOM on.
+2:8.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:8.650: Robot 2 has turned its BOM on.
+2:8.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:8.926: Robot 4 has turned its BOM on.
+2:9.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:9.154: Robot 2 has turned its BOM on.
+2:9.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:9.426: Robot 4 has turned its BOM on.
+2:9.602: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:9.658: Robot 2 has turned its BOM on.
+2:9.818: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:9.874: Robot 4 has turned its BOM on.
+2:10.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:10.154: Robot 2 has turned its BOM on.
+2:10.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:10.370: Robot 4 has turned its BOM on.
+2:10.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:10.650: Robot 2 has turned its BOM on.
+2:10.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:10.870: Robot 4 has turned its BOM on.
+2:11.94: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:11.150: Robot 2 has turned its BOM on.
+2:11.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:11.370: Robot 4 has turned its BOM on.
+2:11.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:11.594: Robot 2 has turned its BOM on.
+2:11.818: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:11.874: Robot 4 has turned its BOM on.
+2:12.42: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:12.98: Robot 2 has turned its BOM on.
+2:12.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:12.370: Robot 4 has turned its BOM on.
+2:12.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:12.594: Robot 2 has turned its BOM on.
+2:12.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:12.870: Robot 4 has turned its BOM on.
+2:13.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:13.94: Robot 2 has turned its BOM on.
+2:13.262: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:13.314: Robot 4 has turned its BOM on.
+2:13.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:13.594: Robot 2 has turned its BOM on.
+2:13.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:13.814: Robot 4 has turned its BOM on.
+2:14.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:14.94: Robot 2 has turned its BOM on.
+2:14.266: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:14.314: Robot 4 has turned its BOM on.
+2:14.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:14.594: Robot 2 has turned its BOM on.
+2:14.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:14.814: Robot 4 has turned its BOM on.
+2:14.986: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:15.42: Robot 2 has turned its BOM on.
+2:15.266: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:15.314: Robot 4 has turned its BOM on.
+2:15.486: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:15.542: Robot 2 has turned its BOM on.
+2:15.766: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:15.814: Robot 4 has turned its BOM on.
+2:15.982: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:16.38: Robot 2 has turned its BOM on.
+2:16.262: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:16.314: Robot 4 has turned its BOM on.
+2:16.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:16.538: Robot 2 has turned its BOM on.
+2:16.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:16.814: Robot 4 has turned its BOM on.
+2:16.986: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:17.42: Robot 2 has turned its BOM on.
+2:17.210: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:17.266: Robot 4 has turned its BOM on.
+2:17.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:17.538: Robot 2 has turned its BOM on.
+2:17.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:17.762: Robot 4 has turned its BOM on.
+2:17.982: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:18.38: Robot 2 has turned its BOM on.
+2:18.206: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:18.262: Robot 4 has turned its BOM on.
+2:18.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:18.538: Robot 2 has turned its BOM on.
+2:18.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:18.762: Robot 4 has turned its BOM on.
+2:18.982: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:19.38: Robot 2 has turned its BOM on.
+2:19.206: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:19.262: Robot 4 has turned its BOM on.
+2:19.430: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:19.486: Robot 2 has turned its BOM on.
+2:19.710: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:19.766: Robot 4 has turned its BOM on.
+2:19.926: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:19.982: Robot 2 has turned its BOM on.
+2:20.206: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:20.262: Robot 4 has turned its BOM on.
+2:20.426: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:20.482: Robot 2 has turned its BOM on.
+2:20.706: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:20.762: Robot 4 has turned its BOM on.
+2:20.926: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:20.982: Robot 2 has turned its BOM on.
+2:21.206: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:21.262: Robot 4 has turned its BOM on.
+2:23.374: Robot 2 passed the token to robot 2. Sensor matrix:
+
+2:23.494: Robot 4 has requested to join the token ring.
+2:23.550: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:23.606: Robot 4 has turned its BOM on.
+2:23.718: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:23.774: Robot 2 has turned its BOM on.
+2:23.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:23.982: Robot 4 has turned its BOM on.
+2:24.206: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:24.262: Robot 2 has turned its BOM on.
+2:24.426: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:24.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:24.706: Robot 2 has turned its BOM on.
+2:24.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:24.982: Robot 4 has turned its BOM on.
+2:25.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:25.206: Robot 2 has turned its BOM on.
+2:25.426: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:25.482: Robot 4 has turned its BOM on.
+2:25.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:25.706: Robot 2 has turned its BOM on.
+2:25.926: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:25.982: Robot 4 has turned its BOM on.
+2:26.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:26.206: Robot 2 has turned its BOM on.
+2:26.375: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:26.430: Robot 4 has turned its BOM on.
+2:26.654: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:26.710: Robot 2 has turned its BOM on.
+2:26.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:26.926: Robot 4 has turned its BOM on.
+2:27.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:27.206: Robot 2 has turned its BOM on.
+2:27.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:27.426: Robot 4 has turned its BOM on.
+2:27.650: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:27.706: Robot 2 has turned its BOM on.
+2:27.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:27.926: Robot 4 has turned its BOM on.
+2:28.150: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:28.206: Robot 2 has turned its BOM on.
+2:28.374: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:28.430: Robot 4 has turned its BOM on.
+2:28.598: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:28.654: Robot 2 has turned its BOM on.
+2:28.878: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:28.934: Robot 4 has turned its BOM on.
+2:29.102: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:29.158: Robot 2 has turned its BOM on.
+2:29.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:29.426: Robot 4 has turned its BOM on.
+2:29.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:29.650: Robot 2 has turned its BOM on.
+2:29.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:29.926: Robot 4 has turned its BOM on.
+2:30.94: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:30.150: Robot 2 has turned its BOM on.
+2:30.370: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:30.426: Robot 4 has turned its BOM on.
+2:30.598: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:30.654: Robot 2 has turned its BOM on.
+2:30.870: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:30.926: Robot 4 has turned its BOM on.
+2:31.94: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:31.150: Robot 2 has turned its BOM on.
+2:31.318: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:31.374: Robot 4 has turned its BOM on.
+2:31.598: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:31.654: Robot 2 has turned its BOM on.
+2:31.818: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:31.874: Robot 4 has turned its BOM on.
+2:32.98: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:32.154: Robot 2 has turned its BOM on.
+2:32.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:32.370: Robot 4 has turned its BOM on.
+2:32.594: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:32.650: Robot 2 has turned its BOM on.
+2:32.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:32.870: Robot 4 has turned its BOM on.
+2:33.94: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:33.150: Robot 2 has turned its BOM on.
+2:33.318: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:33.374: Robot 4 has turned its BOM on.
+2:33.543: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:33.598: Robot 2 has turned its BOM on.
+2:33.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:33.870: Robot 4 has turned its BOM on.
+2:34.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:34.94: Robot 2 has turned its BOM on.
+2:34.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:34.370: Robot 4 has turned its BOM on.
+2:34.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:34.594: Robot 2 has turned its BOM on.
+2:34.814: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:34.870: Robot 4 has turned its BOM on.
+2:35.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:35.95: Robot 2 has turned its BOM on.
+2:35.314: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:35.370: Robot 4 has turned its BOM on.
+2:35.542: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:35.598: Robot 2 has turned its BOM on.
+2:35.766: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:35.814: Robot 4 has turned its BOM on.
+2:36.38: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:36.94: Robot 2 has turned its BOM on.
+2:36.263: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:36.314: Robot 4 has turned its BOM on.
+2:36.538: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:36.594: Robot 2 has turned its BOM on.
+2:36.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:36.814: Robot 4 has turned its BOM on.
+2:37.39: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:37.94: Robot 2 has turned its BOM on.
+2:37.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:37.314: Robot 4 has turned its BOM on.
+2:37.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:37.595: Robot 2 has turned its BOM on.
+2:37.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:37.814: Robot 4 has turned its BOM on.
+2:37.986: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:38.42: Robot 2 has turned its BOM on.
+2:38.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:38.314: Robot 4 has turned its BOM on.
+2:38.482: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:38.538: Robot 2 has turned its BOM on.
+2:38.762: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:38.814: Robot 4 has turned its BOM on.
+2:38.983: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:39.38: Robot 2 has turned its BOM on.
+2:39.263: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:39.314: Robot 4 has turned its BOM on.
+2:39.484: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:39.538: Robot 2 has turned its BOM on.
+2:39.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:39.815: Robot 4 has turned its BOM on.
+2:39.987: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:40.43: Robot 2 has turned its BOM on.
+2:40.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:40.267: Robot 4 has turned its BOM on.
+2:40.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:40.539: Robot 2 has turned its BOM on.
+2:40.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:40.763: Robot 4 has turned its BOM on.
+2:40.987: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:41.43: Robot 2 has turned its BOM on.
+2:41.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:41.267: Robot 4 has turned its BOM on.
+2:41.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:41.539: Robot 2 has turned its BOM on.
+2:41.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:41.763: Robot 4 has turned its BOM on.
+2:41.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:41.983: Robot 2 has turned its BOM on.
+2:42.207: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:42.263: Robot 4 has turned its BOM on.
+2:42.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:42.483: Robot 2 has turned its BOM on.
+2:42.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:42.763: Robot 4 has turned its BOM on.
+2:42.931: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:42.987: Robot 2 has turned its BOM on.
+2:43.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:43.267: Robot 4 has turned its BOM on.
+2:43.431: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:43.487: Robot 2 has turned its BOM on.
+2:43.711: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:43.767: Robot 4 has turned its BOM on.
+2:43.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:43.983: Robot 2 has turned its BOM on.
+2:44.151: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:44.207: Robot 4 has turned its BOM on.
+2:44.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:44.483: Robot 2 has turned its BOM on.
+2:44.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:44.707: Robot 4 has turned its BOM on.
+2:44.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:44.983: Robot 2 has turned its BOM on.
+2:45.155: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:45.211: Robot 4 has turned its BOM on.
+2:45.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:45.483: Robot 2 has turned its BOM on.
+2:45.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:45.707: Robot 4 has turned its BOM on.
+2:45.875: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:45.931: Robot 2 has turned its BOM on.
+2:46.155: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:46.211: Robot 4 has turned its BOM on.
+2:46.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:46.427: Robot 2 has turned its BOM on.
+2:46.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:46.707: Robot 4 has turned its BOM on.
+2:46.871: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:46.927: Robot 2 has turned its BOM on.
+2:47.151: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:47.207: Robot 4 has turned its BOM on.
+2:47.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:47.427: Robot 2 has turned its BOM on.
+2:47.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:47.707: Robot 4 has turned its BOM on.
+2:47.879: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:47.935: Robot 2 has turned its BOM on.
+2:48.103: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:48.159: Robot 4 has turned its BOM on.
+2:48.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:48.427: Robot 2 has turned its BOM on.
+2:48.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:48.651: Robot 4 has turned its BOM on.
+2:48.871: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:48.927: Robot 2 has turned its BOM on.
+2:49.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:49.151: Robot 4 has turned its BOM on.
+2:49.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:49.427: Robot 2 has turned its BOM on.
+2:49.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:49.651: Robot 4 has turned its BOM on.
+2:49.871: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:49.927: Robot 2 has turned its BOM on.
+2:50.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:50.151: Robot 4 has turned its BOM on.
+2:50.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:50.427: Robot 2 has turned its BOM on.
+2:50.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:50.651: Robot 4 has turned its BOM on.
+2:50.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:50.871: Robot 2 has turned its BOM on.
+2:51.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:51.151: Robot 4 has turned its BOM on.
+2:51.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:51.371: Robot 2 has turned its BOM on.
+2:51.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:51.651: Robot 4 has turned its BOM on.
+2:51.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:51.871: Robot 2 has turned its BOM on.
+2:52.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:52.151: Robot 4 has turned its BOM on.
+2:52.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:52.371: Robot 2 has turned its BOM on.
+2:52.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:52.651: Robot 4 has turned its BOM on.
+2:52.819: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:52.875: Robot 2 has turned its BOM on.
+2:53.43: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:53.99: Robot 4 has turned its BOM on.
+2:53.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:53.371: Robot 2 has turned its BOM on.
+2:53.539: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:53.595: Robot 4 has turned its BOM on.
+2:53.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:53.871: Robot 2 has turned its BOM on.
+2:54.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:54.95: Robot 4 has turned its BOM on.
+2:54.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:54.371: Robot 2 has turned its BOM on.
+2:54.543: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:54.599: Robot 4 has turned its BOM on.
+2:54.767: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:54.815: Robot 2 has turned its BOM on.
+2:55.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:55.95: Robot 4 has turned its BOM on.
+2:55.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:55.315: Robot 2 has turned its BOM on.
+2:55.543: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:55.599: Robot 4 has turned its BOM on.
+2:55.767: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:55.815: Robot 2 has turned its BOM on.
+2:56.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:56.95: Robot 4 has turned its BOM on.
+2:56.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:56.315: Robot 2 has turned its BOM on.
+2:56.539: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:56.595: Robot 4 has turned its BOM on.
+2:56.767: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:56.815: Robot 2 has turned its BOM on.
+2:57.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:57.95: Robot 4 has turned its BOM on.
+2:57.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:57.315: Robot 2 has turned its BOM on.
+2:57.483: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:57.539: Robot 4 has turned its BOM on.
+2:57.763: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:57.815: Robot 2 has turned its BOM on.
+2:57.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:58.39: Robot 4 has turned its BOM on.
+2:58.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:58.315: Robot 2 has turned its BOM on.
+2:58.483: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:58.539: Robot 4 has turned its BOM on.
+2:58.763: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:58.815: Robot 2 has turned its BOM on.
+2:58.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:59.39: Robot 4 has turned its BOM on.
+2:59.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:59.315: Robot 2 has turned its BOM on.
+2:59.487: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+2:59.543: Robot 4 has turned its BOM on.
+2:59.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+2:59.767: Robot 2 has turned its BOM on.
+2:59.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:0.39: Robot 4 has turned its BOM on.
+3:0.211: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:0.267: Robot 2 has turned its BOM on.
+3:0.487: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:0.543: Robot 4 has turned its BOM on.
+3:0.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:0.767: Robot 2 has turned its BOM on.
+3:0.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:1.39: Robot 4 has turned its BOM on.
+3:1.207: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:1.263: Robot 2 has turned its BOM on.
+3:1.483: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:1.539: Robot 4 has turned its BOM on.
+3:1.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:1.767: Robot 2 has turned its BOM on.
+3:1.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:1.983: Robot 4 has turned its BOM on.
+3:2.211: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:2.267: Robot 2 has turned its BOM on.
+3:2.431: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:2.487: Robot 4 has turned its BOM on.
+3:2.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:2.767: Robot 2 has turned its BOM on.
+3:2.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:2.983: Robot 4 has turned its BOM on.
+3:3.211: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:3.267: Robot 2 has turned its BOM on.
+3:3.427: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:3.483: Robot 4 has turned its BOM on.
+3:3.651: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:3.707: Robot 2 has turned its BOM on.
+3:3.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:3.983: Robot 4 has turned its BOM on.
+3:4.151: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:4.207: Robot 2 has turned its BOM on.
+3:4.427: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:4.483: Robot 4 has turned its BOM on.
+3:4.655: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:4.711: Robot 2 has turned its BOM on.
+3:4.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:4.983: Robot 4 has turned its BOM on.
+3:5.151: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:5.207: Robot 2 has turned its BOM on.
+3:5.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:5.427: Robot 4 has turned its BOM on.
+3:5.651: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:5.707: Robot 2 has turned its BOM on.
+3:5.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:5.927: Robot 4 has turned its BOM on.
+3:6.151: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:6.207: Robot 2 has turned its BOM on.
+3:6.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:6.427: Robot 4 has turned its BOM on.
+3:6.651: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:6.707: Robot 2 has turned its BOM on.
+3:6.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:6.927: Robot 4 has turned its BOM on.
+3:7.151: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:7.208: Robot 2 has turned its BOM on.
+3:7.375: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:7.431: Robot 4 has turned its BOM on.
+3:7.599: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:7.655: Robot 2 has turned its BOM on.
+3:7.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:7.927: Robot 4 has turned its BOM on.
+3:8.95: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:8.151: Robot 2 has turned its BOM on.
+3:8.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:8.427: Robot 4 has turned its BOM on.
+3:8.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:8.651: Robot 2 has turned its BOM on.
+3:8.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:8.927: Robot 4 has turned its BOM on.
+3:9.95: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:9.151: Robot 2 has turned its BOM on.
+3:9.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:9.427: Robot 4 has turned its BOM on.
+3:9.599: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:9.655: Robot 2 has turned its BOM on.
+3:9.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:9.927: Robot 4 has turned its BOM on.
+3:10.95: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:10.151: Robot 2 has turned its BOM on.
+3:10.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:10.371: Robot 4 has turned its BOM on.
+3:10.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:10.651: Robot 2 has turned its BOM on.
+3:10.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:10.871: Robot 4 has turned its BOM on.
+3:11.95: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:11.151: Robot 2 has turned its BOM on.
+3:11.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:11.371: Robot 4 has turned its BOM on.
+3:11.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:11.651: Robot 2 has turned its BOM on.
+3:11.819: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:11.875: Robot 4 has turned its BOM on.
+3:12.43: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:12.99: Robot 2 has turned its BOM on.
+3:12.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:12.371: Robot 4 has turned its BOM on.
+3:12.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:12.595: Robot 2 has turned its BOM on.
+3:12.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:12.871: Robot 4 has turned its BOM on.
+3:13.39: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:13.95: Robot 2 has turned its BOM on.
+3:13.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:13.371: Robot 4 has turned its BOM on.
+3:13.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:13.595: Robot 2 has turned its BOM on.
+3:13.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:13.871: Robot 4 has turned its BOM on.
+3:14.43: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:14.99: Robot 2 has turned its BOM on.
+3:14.268: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:14.315: Robot 4 has turned its BOM on.
+3:14.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:14.595: Robot 2 has turned its BOM on.
+3:14.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:14.815: Robot 4 has turned its BOM on.
+3:15.43: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:15.99: Robot 2 has turned its BOM on.
+3:15.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:15.315: Robot 4 has turned its BOM on.
+3:15.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:15.595: Robot 2 has turned its BOM on.
+3:15.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:15.815: Robot 4 has turned its BOM on.
+3:16.39: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:16.95: Robot 2 has turned its BOM on.
+3:16.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:16.315: Robot 4 has turned its BOM on.
+3:16.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:16.595: Robot 2 has turned its BOM on.
+3:16.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:16.815: Robot 4 has turned its BOM on.
+3:16.987: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:17.43: Robot 2 has turned its BOM on.
+3:17.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:17.315: Robot 4 has turned its BOM on.
+3:17.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:17.539: Robot 2 has turned its BOM on.
+3:17.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:17.815: Robot 4 has turned its BOM on.
+3:17.983: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:18.39: Robot 2 has turned its BOM on.
+3:18.263: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:18.315: Robot 4 has turned its BOM on.
+3:18.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:18.539: Robot 2 has turned its BOM on.
+3:18.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:18.815: Robot 4 has turned its BOM on.
+3:18.987: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:19.43: Robot 2 has turned its BOM on.
+3:19.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:19.267: Robot 4 has turned its BOM on.
+3:19.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:19.539: Robot 2 has turned its BOM on.
+3:19.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:19.763: Robot 4 has turned its BOM on.
+3:19.991: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:20.47: Robot 2 has turned its BOM on.
+3:20.215: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:20.271: Robot 4 has turned its BOM on.
+3:20.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:20.539: Robot 2 has turned its BOM on.
+3:20.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:20.763: Robot 4 has turned its BOM on.
+3:20.983: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:21.39: Robot 2 has turned its BOM on.
+3:21.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:21.267: Robot 4 has turned its BOM on.
+3:21.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:21.483: Robot 2 has turned its BOM on.
+3:21.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:21.763: Robot 4 has turned its BOM on.
+3:21.931: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:21.987: Robot 2 has turned its BOM on.
+3:22.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:22.267: Robot 4 has turned its BOM on.
+3:22.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:22.483: Robot 2 has turned its BOM on.
+3:22.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:22.763: Robot 4 has turned its BOM on.
+3:22.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:22.983: Robot 2 has turned its BOM on.
+3:23.151: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:23.207: Robot 4 has turned its BOM on.
+3:23.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:23.483: Robot 2 has turned its BOM on.
+3:23.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:23.707: Robot 4 has turned its BOM on.
+3:23.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:23.983: Robot 2 has turned its BOM on.
+3:24.155: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:24.211: Robot 4 has turned its BOM on.
+3:24.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:24.483: Robot 2 has turned its BOM on.
+3:24.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:24.707: Robot 4 has turned its BOM on.
+3:24.875: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:24.931: Robot 2 has turned its BOM on.
+3:25.155: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:25.211: Robot 4 has turned its BOM on.
+3:25.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:25.427: Robot 2 has turned its BOM on.
+3:25.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:25.707: Robot 4 has turned its BOM on.
+3:25.871: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:25.927: Robot 2 has turned its BOM on.
+3:26.151: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:26.207: Robot 4 has turned its BOM on.
+3:26.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:26.427: Robot 2 has turned its BOM on.
+3:26.651: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:26.707: Robot 4 has turned its BOM on.
+3:26.875: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:26.931: Robot 2 has turned its BOM on.
+3:27.99: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:27.155: Robot 4 has turned its BOM on.
+3:27.372: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:27.427: Robot 2 has turned its BOM on.
+3:27.599: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:27.655: Robot 4 has turned its BOM on.
+3:27.871: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:27.927: Robot 2 has turned its BOM on.
+3:28.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:28.151: Robot 4 has turned its BOM on.
+3:28.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:28.427: Robot 2 has turned its BOM on.
+3:28.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:28.651: Robot 4 has turned its BOM on.
+3:28.871: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:28.927: Robot 2 has turned its BOM on.
+3:29.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:29.151: Robot 4 has turned its BOM on.
+3:29.379: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:29.435: Robot 2 has turned its BOM on.
+3:29.603: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:29.659: Robot 4 has turned its BOM on.
+3:29.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:29.871: Robot 2 has turned its BOM on.
+3:30.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:30.151: Robot 4 has turned its BOM on.
+3:30.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:30.371: Robot 2 has turned its BOM on.
+3:30.595: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:30.651: Robot 4 has turned its BOM on.
+3:30.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:30.871: Robot 2 has turned its BOM on.
+3:31.95: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:31.151: Robot 4 has turned its BOM on.
+3:31.319: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:31.375: Robot 2 has turned its BOM on.
+3:31.543: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:31.599: Robot 4 has turned its BOM on.
+3:31.819: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:31.875: Robot 2 has turned its BOM on.
+3:32.43: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:32.99: Robot 4 has turned its BOM on.
+3:32.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:32.371: Robot 2 has turned its BOM on.
+3:32.539: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:32.595: Robot 4 has turned its BOM on.
+3:32.815: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:32.871: Robot 2 has turned its BOM on.
+3:33.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:33.95: Robot 4 has turned its BOM on.
+3:33.315: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:33.371: Robot 2 has turned its BOM on.
+3:33.547: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:33.603: Robot 4 has turned its BOM on.
+3:33.771: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:33.815: Robot 2 has turned its BOM on.
+3:34.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:34.95: Robot 4 has turned its BOM on.
+3:34.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:34.315: Robot 2 has turned its BOM on.
+3:34.547: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:34.603: Robot 4 has turned its BOM on.
+3:34.771: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:34.815: Robot 2 has turned its BOM on.
+3:35.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:35.95: Robot 4 has turned its BOM on.
+3:35.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:35.315: Robot 2 has turned its BOM on.
+3:35.539: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:35.595: Robot 4 has turned its BOM on.
+3:35.767: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:35.815: Robot 2 has turned its BOM on.
+3:36.39: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:36.95: Robot 4 has turned its BOM on.
+3:36.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:36.315: Robot 2 has turned its BOM on.
+3:36.491: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:36.547: Robot 4 has turned its BOM on.
+3:36.771: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:36.815: Robot 2 has turned its BOM on.
+3:36.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:37.39: Robot 4 has turned its BOM on.
+3:37.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:37.315: Robot 2 has turned its BOM on.
+3:37.483: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:37.539: Robot 4 has turned its BOM on.
+3:37.763: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:37.815: Robot 2 has turned its BOM on.
+3:37.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:38.39: Robot 4 has turned its BOM on.
+3:38.263: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:38.315: Robot 2 has turned its BOM on.
+3:38.487: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:38.543: Robot 4 has turned its BOM on.
+3:38.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:38.767: Robot 2 has turned its BOM on.
+3:38.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:39.39: Robot 4 has turned its BOM on.
+3:39.211: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:39.267: Robot 2 has turned its BOM on.
+3:39.487: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:39.543: Robot 4 has turned its BOM on.
+3:39.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:39.767: Robot 2 has turned its BOM on.
+3:39.983: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:40.39: Robot 4 has turned its BOM on.
+3:40.207: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:40.263: Robot 2 has turned its BOM on.
+3:40.483: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:40.539: Robot 4 has turned its BOM on.
+3:40.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:40.767: Robot 2 has turned its BOM on.
+3:40.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:40.984: Robot 4 has turned its BOM on.
+3:41.207: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:41.263: Robot 2 has turned its BOM on.
+3:41.431: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:41.488: Robot 4 has turned its BOM on.
+3:41.711: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:41.767: Robot 2 has turned its BOM on.
+3:41.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:41.983: Robot 4 has turned its BOM on.
+3:42.207: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:42.263: Robot 2 has turned its BOM on.
+3:42.427: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:42.483: Robot 4 has turned its BOM on.
+3:42.651: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:42.707: Robot 2 has turned its BOM on.
+3:42.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:42.983: Robot 4 has turned its BOM on.
+3:43.151: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:43.207: Robot 2 has turned its BOM on.
+3:43.427: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:43.483: Robot 4 has turned its BOM on.
+3:43.655: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:43.711: Robot 2 has turned its BOM on.
+3:43.927: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:43.983: Robot 4 has turned its BOM on.
+3:44.155: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:44.211: Robot 2 has turned its BOM on.
+3:44.375: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:44.431: Robot 4 has turned its BOM on.
+3:44.655: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:44.711: Robot 2 has turned its BOM on.
+3:44.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:44.927: Robot 4 has turned its BOM on.
+3:45.151: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:45.207: Robot 2 has turned its BOM on.
+3:45.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:45.427: Robot 4 has turned its BOM on.
+3:45.651: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:45.707: Robot 2 has turned its BOM on.
+3:45.875: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:45.931: Robot 4 has turned its BOM on.
+3:46.99: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:46.155: Robot 2 has turned its BOM on.
+3:46.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:46.427: Robot 4 has turned its BOM on.
+3:46.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:46.651: Robot 2 has turned its BOM on.
+3:46.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:46.927: Robot 4 has turned its BOM on.
+3:47.95: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:47.151: Robot 2 has turned its BOM on.
+3:47.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:47.427: Robot 4 has turned its BOM on.
+3:47.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:47.651: Robot 2 has turned its BOM on.
+3:47.871: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:47.927: Robot 4 has turned its BOM on.
+3:48.99: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:48.155: Robot 2 has turned its BOM on.
+3:48.371: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:48.427: Robot 4 has turned its BOM on.
+3:48.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:48.651: Robot 2 has turned its BOM on.
+3:48.823: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:48.879: Robot 4 has turned its BOM on.
+3:49.103: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:49.159: Robot 2 has turned its BOM on.
+3:49.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:49.371: Robot 4 has turned its BOM on.
+3:49.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:49.651: Robot 2 has turned its BOM on.
+3:49.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:49.871: Robot 4 has turned its BOM on.
+3:50.95: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:50.151: Robot 2 has turned its BOM on.
+3:50.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:50.371: Robot 4 has turned its BOM on.
+3:50.595: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:50.651: Robot 2 has turned its BOM on.
+3:50.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:50.871: Robot 4 has turned its BOM on.
+3:51.43: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:51.99: Robot 2 has turned its BOM on.
+3:51.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:51.371: Robot 4 has turned its BOM on.
+3:51.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:51.595: Robot 2 has turned its BOM on.
+3:51.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:51.871: Robot 4 has turned its BOM on.
+3:52.39: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:52.95: Robot 2 has turned its BOM on.
+3:52.315: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:52.371: Robot 4 has turned its BOM on.
+3:52.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:52.595: Robot 2 has turned its BOM on.
+3:52.815: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:52.871: Robot 4 has turned its BOM on.
+3:53.43: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:53.99: Robot 2 has turned its BOM on.
+3:53.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:53.315: Robot 4 has turned its BOM on.
+3:53.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:53.595: Robot 2 has turned its BOM on.
+3:53.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:53.815: Robot 4 has turned its BOM on.
+3:54.47: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:54.104: Robot 2 has turned its BOM on.
+3:54.275: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:54.315: Robot 4 has turned its BOM on.
+3:54.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:54.595: Robot 2 has turned its BOM on.
+3:54.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:54.815: Robot 4 has turned its BOM on.
+3:55.39: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:55.95: Robot 2 has turned its BOM on.
+3:55.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:55.315: Robot 4 has turned its BOM on.
+3:55.539: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:55.595: Robot 2 has turned its BOM on.
+3:55.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:55.815: Robot 4 has turned its BOM on.
+3:55.987: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:56.43: Robot 2 has turned its BOM on.
+3:56.267: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:56.315: Robot 4 has turned its BOM on.
+3:56.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:56.539: Robot 2 has turned its BOM on.
+3:56.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:56.815: Robot 4 has turned its BOM on.
+3:56.983: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:57.39: Robot 2 has turned its BOM on.
+3:57.263: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:57.315: Robot 4 has turned its BOM on.
+3:57.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:57.539: Robot 2 has turned its BOM on.
+3:57.763: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:57.815: Robot 4 has turned its BOM on.
+3:57.983: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:58.39: Robot 2 has turned its BOM on.
+3:58.207: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:58.263: Robot 4 has turned its BOM on.
+3:58.484: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:58.539: Robot 2 has turned its BOM on.
+3:58.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:58.763: Robot 4 has turned its BOM on.
+3:58.987: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:59.43: Robot 2 has turned its BOM on.
+3:59.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:59.267: Robot 4 has turned its BOM on.
+3:59.483: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+3:59.539: Robot 2 has turned its BOM on.
+3:59.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+3:59.763: Robot 4 has turned its BOM on.
+3:59.983: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:0.39: Robot 2 has turned its BOM on.
+4:0.211: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:0.267: Robot 4 has turned its BOM on.
+4:0.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:0.483: Robot 2 has turned its BOM on.
+4:0.707: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:0.764: Robot 4 has turned its BOM on.
+4:0.931: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:0.987: Robot 2 has turned its BOM on.
+4:1.212: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:1.267: Robot 4 has turned its BOM on.
+4:1.427: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:1.483: Robot 2 has turned its BOM on.
+4:1.708: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:1.763: Robot 4 has turned its BOM on.
+4:1.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:1.983: Robot 2 has turned its BOM on.
+4:2.151: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:2.207: Robot 4 has turned its BOM on.
+4:2.432: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:2.487: Robot 2 has turned its BOM on.
+4:2.655: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:2.711: Robot 4 has turned its BOM on.
+4:2.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:2.983: Robot 2 has turned its BOM on.
+4:3.152: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:3.207: Robot 4 has turned its BOM on.
+4:3.431: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:3.487: Robot 2 has turned its BOM on.
+4:3.655: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:3.711: Robot 4 has turned its BOM on.
+4:3.927: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:3.983: Robot 2 has turned its BOM on.
+4:4.152: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:4.208: Robot 4 has turned its BOM on.
+4:4.371: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:4.427: Robot 2 has turned its BOM on.
+4:4.652: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:4.708: Robot 4 has turned its BOM on.
+4:4.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:4.928: Robot 2 has turned its BOM on.
+4:5.152: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:5.208: Robot 4 has turned its BOM on.
+4:5.376: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:5.432: Robot 2 has turned its BOM on.
+4:5.656: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:5.712: Robot 4 has turned its BOM on.
+4:5.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:5.928: Robot 2 has turned its BOM on.
+4:6.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:6.152: Robot 4 has turned its BOM on.
+4:6.372: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:6.428: Robot 2 has turned its BOM on.
+4:6.596: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:6.652: Robot 4 has turned its BOM on.
+4:6.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:6.928: Robot 2 has turned its BOM on.
+4:7.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:7.152: Robot 4 has turned its BOM on.
+4:7.372: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:7.428: Robot 2 has turned its BOM on.
+4:7.600: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:7.656: Robot 4 has turned its BOM on.
+4:7.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:7.928: Robot 2 has turned its BOM on.
+4:8.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:8.152: Robot 4 has turned its BOM on.
+4:8.320: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:8.376: Robot 2 has turned its BOM on.
+4:8.600: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:8.656: Robot 4 has turned its BOM on.
+4:8.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:8.872: Robot 2 has turned its BOM on.
+4:9.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:9.152: Robot 4 has turned its BOM on.
+4:9.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:9.372: Robot 2 has turned its BOM on.
+4:9.596: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:9.652: Robot 4 has turned its BOM on.
+4:9.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:9.872: Robot 2 has turned its BOM on.
+4:10.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:10.152: Robot 4 has turned its BOM on.
+4:10.320: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:10.376: Robot 2 has turned its BOM on.
+4:10.544: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:10.600: Robot 4 has turned its BOM on.
+4:10.820: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:10.876: Robot 2 has turned its BOM on.
+4:11.44: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:11.100: Robot 4 has turned its BOM on.
+4:11.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:11.372: Robot 2 has turned its BOM on.
+4:11.540: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:11.596: Robot 4 has turned its BOM on.
+4:11.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:11.872: Robot 2 has turned its BOM on.
+4:12.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:12.96: Robot 4 has turned its BOM on.
+4:12.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:12.372: Robot 2 has turned its BOM on.
+4:12.548: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:12.604: Robot 4 has turned its BOM on.
+4:12.772: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:12.816: Robot 2 has turned its BOM on.
+4:13.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:13.96: Robot 4 has turned its BOM on.
+4:13.265: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:13.316: Robot 2 has turned its BOM on.
+4:13.548: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:13.604: Robot 4 has turned its BOM on.
+4:13.776: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:13.816: Robot 2 has turned its BOM on.
+4:14.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:14.96: Robot 4 has turned its BOM on.
+4:14.264: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:14.316: Robot 2 has turned its BOM on.
+4:14.540: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:14.596: Robot 4 has turned its BOM on.
+4:14.764: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:14.816: Robot 2 has turned its BOM on.
+4:15.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:15.96: Robot 4 has turned its BOM on.
+4:15.264: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:15.316: Robot 2 has turned its BOM on.
+4:15.488: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:15.544: Robot 4 has turned its BOM on.
+4:15.768: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:15.816: Robot 2 has turned its BOM on.
+4:15.984: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:16.40: Robot 4 has turned its BOM on.
+4:16.264: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:16.316: Robot 2 has turned its BOM on.
+4:16.484: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:16.540: Robot 4 has turned its BOM on.
+4:16.764: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:16.816: Robot 2 has turned its BOM on.
+4:16.984: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:17.40: Robot 4 has turned its BOM on.
+4:17.264: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:17.316: Robot 2 has turned its BOM on.
+4:17.488: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:17.544: Robot 4 has turned its BOM on.
+4:17.712: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:17.768: Robot 2 has turned its BOM on.
+4:17.984: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:18.40: Robot 4 has turned its BOM on.
+4:18.208: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:18.264: Robot 2 has turned its BOM on.
+4:18.488: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:18.544: Robot 4 has turned its BOM on.
+4:18.712: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:18.768: Robot 2 has turned its BOM on.
+4:18.984: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:19.40: Robot 4 has turned its BOM on.
+4:19.212: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:19.268: Robot 2 has turned its BOM on.
+4:19.484: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:19.540: Robot 4 has turned its BOM on.
+4:19.708: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:19.764: Robot 2 has turned its BOM on.
+4:19.932: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:19.988: Robot 4 has turned its BOM on.
+4:20.212: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:20.268: Robot 2 has turned its BOM on.
+4:20.428: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:20.484: Robot 4 has turned its BOM on.
+4:20.708: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:20.764: Robot 2 has turned its BOM on.
+4:20.928: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:20.984: Robot 4 has turned its BOM on.
+4:21.208: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:21.264: Robot 2 has turned its BOM on.
+4:21.428: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:21.484: Robot 4 has turned its BOM on.
+4:21.652: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:21.708: Robot 2 has turned its BOM on.
+4:21.932: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:21.988: Robot 4 has turned its BOM on.
+4:22.156: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:22.212: Robot 2 has turned its BOM on.
+4:22.428: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:22.484: Robot 4 has turned its BOM on.
+4:22.652: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:22.708: Robot 2 has turned its BOM on.
+4:22.932: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:22.988: Robot 4 has turned its BOM on.
+4:23.156: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:23.212: Robot 2 has turned its BOM on.
+4:23.372: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:23.428: Robot 4 has turned its BOM on.
+4:23.652: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:23.708: Robot 2 has turned its BOM on.
+4:23.872: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:23.928: Robot 4 has turned its BOM on.
+4:24.152: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:24.208: Robot 2 has turned its BOM on.
+4:24.372: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:24.428: Robot 4 has turned its BOM on.
+4:24.652: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:24.708: Robot 2 has turned its BOM on.
+4:24.876: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:24.932: Robot 4 has turned its BOM on.
+4:25.104: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:25.160: Robot 2 has turned its BOM on.
+4:25.372: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:25.428: Robot 4 has turned its BOM on.
+4:25.596: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:25.652: Robot 2 has turned its BOM on.
+4:25.872: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:25.928: Robot 4 has turned its BOM on.
+4:26.96: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:26.152: Robot 2 has turned its BOM on.
+4:26.373: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:26.428: Robot 4 has turned its BOM on.
+4:26.596: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:26.652: Robot 2 has turned its BOM on.
+4:26.872: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:26.928: Robot 4 has turned its BOM on.
+4:27.100: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:27.156: Robot 2 has turned its BOM on.
+4:27.372: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:27.428: Robot 4 has turned its BOM on.
+4:27.596: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:27.652: Robot 2 has turned its BOM on.
+4:27.816: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:27.872: Robot 4 has turned its BOM on.
+4:28.96: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:28.152: Robot 2 has turned its BOM on.
+4:28.316: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:28.372: Robot 4 has turned its BOM on.
+4:28.596: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:28.652: Robot 2 has turned its BOM on.
+4:28.816: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:28.872: Robot 4 has turned its BOM on.
+4:29.96: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:29.152: Robot 2 has turned its BOM on.
+4:29.316: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:29.372: Robot 4 has turned its BOM on.
+4:29.596: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:29.652: Robot 2 has turned its BOM on.
+4:29.824: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:29.880: Robot 4 has turned its BOM on.
+4:30.48: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:30.104: Robot 2 has turned its BOM on.
+4:30.316: Robot 4 has turned its BOM on.
+4:30.540: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:30.596: Robot 2 has turned its BOM on.
+4:30.816: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:30.872: Robot 4 has turned its BOM on.
+4:31.40: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:31.96: Robot 2 has turned its BOM on.
+4:31.316: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:31.372: Robot 4 has turned its BOM on.
+4:31.540: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:31.596: Robot 2 has turned its BOM on.
+4:31.816: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:31.872: Robot 4 has turned its BOM on.
+4:32.44: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:32.100: Robot 2 has turned its BOM on.
+4:32.268: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:32.316: Robot 4 has turned its BOM on.
+4:32.540: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:32.596: Robot 2 has turned its BOM on.
+4:32.764: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:32.816: Robot 4 has turned its BOM on.
+4:33.44: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:33.100: Robot 2 has turned its BOM on.
+4:33.268: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:33.316: Robot 4 has turned its BOM on.
+4:33.544: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:33.600: Robot 2 has turned its BOM on.
+4:33.772: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:33.816: Robot 4 has turned its BOM on.
+4:34.40: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:34.96: Robot 2 has turned its BOM on.
+4:34.268: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:34.316: Robot 4 has turned its BOM on.
+4:34.540: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:34.596: Robot 2 has turned its BOM on.
+4:34.764: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:34.816: Robot 4 has turned its BOM on.
+4:34.988: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:35.44: Robot 2 has turned its BOM on.
+4:35.272: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:35.316: Robot 4 has turned its BOM on.
+4:35.484: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:35.540: Robot 2 has turned its BOM on.
+4:35.764: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:35.816: Robot 4 has turned its BOM on.
+4:35.984: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:36.40: Robot 2 has turned its BOM on.
+4:36.264: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:36.316: Robot 4 has turned its BOM on.
+4:36.488: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:36.544: Robot 2 has turned its BOM on.
+4:36.712: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:36.768: Robot 4 has turned its BOM on.
+4:36.984: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:37.40: Robot 2 has turned its BOM on.
+4:37.208: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:37.264: Robot 4 has turned its BOM on.
+4:37.488: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:37.544: Robot 2 has turned its BOM on.
+4:37.712: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:37.768: Robot 4 has turned its BOM on.
+4:37.984: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:38.40: Robot 2 has turned its BOM on.
+4:38.208: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:38.264: Robot 4 has turned its BOM on.
+4:38.484: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:38.540: Robot 2 has turned its BOM on.
+4:38.712: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:38.768: Robot 4 has turned its BOM on.
+4:38.985: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:39.40: Robot 2 has turned its BOM on.
+4:39.212: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:39.268: Robot 4 has turned its BOM on.
+4:39.428: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:39.484: Robot 2 has turned its BOM on.
+4:39.712: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:39.768: Robot 4 has turned its BOM on.
+4:39.928: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:39.984: Robot 2 has turned its BOM on.
+4:40.212: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:40.268: Robot 4 has turned its BOM on.
+4:40.428: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:40.484: Robot 2 has turned its BOM on.
+4:40.708: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:40.764: Robot 4 has turned its BOM on.
+4:40.932: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:40.988: Robot 2 has turned its BOM on.
+4:41.156: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:41.212: Robot 4 has turned its BOM on.
+4:41.432: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:41.488: Robot 2 has turned its BOM on.
+4:41.656: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:41.712: Robot 4 has turned its BOM on.
+4:41.928: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:41.984: Robot 2 has turned its BOM on.
+4:42.152: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:42.208: Robot 4 has turned its BOM on.
+4:42.432: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:42.488: Robot 2 has turned its BOM on.
+4:42.656: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:42.712: Robot 4 has turned its BOM on.
+4:42.928: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:42.984: Robot 2 has turned its BOM on.
+4:43.152: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:43.208: Robot 4 has turned its BOM on.
+4:43.372: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:43.428: Robot 2 has turned its BOM on.
+4:43.652: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:43.708: Robot 4 has turned its BOM on.
+4:43.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:43.928: Robot 2 has turned its BOM on.
+4:44.152: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:44.208: Robot 4 has turned its BOM on.
+4:44.376: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:44.432: Robot 2 has turned its BOM on.
+4:44.656: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:44.712: Robot 4 has turned its BOM on.
+4:44.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:44.928: Robot 2 has turned its BOM on.
+4:45.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:45.152: Robot 4 has turned its BOM on.
+4:45.372: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:45.428: Robot 2 has turned its BOM on.
+4:45.596: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:45.652: Robot 4 has turned its BOM on.
+4:45.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:45.928: Robot 2 has turned its BOM on.
+4:46.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:46.152: Robot 4 has turned its BOM on.
+4:46.372: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:46.428: Robot 2 has turned its BOM on.
+4:46.600: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:46.656: Robot 4 has turned its BOM on.
+4:46.872: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:46.928: Robot 2 has turned its BOM on.
+4:47.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:47.152: Robot 4 has turned its BOM on.
+4:47.320: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:47.376: Robot 2 has turned its BOM on.
+4:47.600: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:47.656: Robot 4 has turned its BOM on.
+4:47.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:47.872: Robot 2 has turned its BOM on.
+4:48.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:48.152: Robot 4 has turned its BOM on.
+4:48.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:48.372: Robot 2 has turned its BOM on.
+4:48.596: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:48.652: Robot 4 has turned its BOM on.
+4:48.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:48.872: Robot 2 has turned its BOM on.
+4:49.96: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:49.152: Robot 4 has turned its BOM on.
+4:49.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:49.372: Robot 2 has turned its BOM on.
+4:49.540: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:49.596: Robot 4 has turned its BOM on.
+4:49.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:49.872: Robot 2 has turned its BOM on.
+4:50.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:50.96: Robot 4 has turned its BOM on.
+4:50.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:50.372: Robot 2 has turned its BOM on.
+4:50.540: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:50.596: Robot 4 has turned its BOM on.
+4:50.816: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:50.872: Robot 2 has turned its BOM on.
+4:51.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:51.96: Robot 4 has turned its BOM on.
+4:51.316: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:51.372: Robot 2 has turned its BOM on.
+4:51.544: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:51.600: Robot 4 has turned its BOM on.
+4:51.768: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:51.816: Robot 2 has turned its BOM on.
+4:52.44: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:52.100: Robot 4 has turned its BOM on.
+4:52.268: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:52.316: Robot 2 has turned its BOM on.
+4:52.544: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:52.600: Robot 4 has turned its BOM on.
+4:52.768: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:52.816: Robot 2 has turned its BOM on.
+4:53.40: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:53.97: Robot 4 has turned its BOM on.
+4:53.272: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:53.316: Robot 2 has turned its BOM on.
+4:53.540: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:53.596: Robot 4 has turned its BOM on.
+4:53.764: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:53.816: Robot 2 has turned its BOM on.
+4:54.44: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:54.100: Robot 4 has turned its BOM on.
+4:54.268: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:54.316: Robot 2 has turned its BOM on.
+4:54.488: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:54.544: Robot 4 has turned its BOM on.
+4:54.768: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:54.816: Robot 2 has turned its BOM on.
+4:54.984: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:55.40: Robot 4 has turned its BOM on.
+4:55.264: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:55.316: Robot 2 has turned its BOM on.
+4:55.484: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:55.540: Robot 4 has turned its BOM on.
+4:55.764: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:55.816: Robot 2 has turned its BOM on.
+4:55.988: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:56.44: Robot 4 has turned its BOM on.
+4:56.216: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:56.272: Robot 2 has turned its BOM on.
+4:56.484: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:56.540: Robot 4 has turned its BOM on.
+4:56.708: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:56.764: Robot 2 has turned its BOM on.
+4:56.988: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:57.44: Robot 4 has turned its BOM on.
+4:57.212: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:57.268: Robot 2 has turned its BOM on.
+4:57.484: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:57.540: Robot 4 has turned its BOM on.
+4:57.708: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:57.764: Robot 2 has turned its BOM on.
+4:57.984: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:58.40: Robot 4 has turned its BOM on.
+4:58.212: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:58.268: Robot 2 has turned its BOM on.
+4:58.484: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:58.540: Robot 4 has turned its BOM on.
+4:58.712: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:58.768: Robot 2 has turned its BOM on.
+4:58.932: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:58.988: Robot 4 has turned its BOM on.
+4:59.212: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:59.268: Robot 2 has turned its BOM on.
+4:59.428: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:59.484: Robot 4 has turned its BOM on.
+4:59.708: Robot 4 passed the token to robot 2. Sensor matrix:
+(2 8)
+4:59.764: Robot 2 has turned its BOM on.
+4:59.928: Robot 2 passed the token to robot 4. Sensor matrix:
+(4 15)
+4:59.984: Robot 4 has turned its BOM on.
Index: branches/scout/projects/libwireless/logger/analysis/analysis.c
===================================================================
--- branches/scout/projects/libwireless/logger/analysis/analysis.c	(nonexistent)
+++ branches/scout/projects/libwireless/logger/analysis/analysis.c	(revision 1346)
@@ -0,0 +1,242 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+#define MAX_ROBOTS 20
+
+// all times in milliseconds
+typedef struct RobotDef
+{
+	int alive;
+
+	//times when we last sent a packet
+	int join_time;
+	int bom_on_time;
+	// passed to us
+	int token_passed_time;
+	// passed from us
+	int token_pass_time;
+
+	//time we have spent in a given state
+	int total_join_time;
+	int total_token_held_time;
+	int total_token_waiting_time;
+	// delay between sent to us and our BOM on packet
+	int total_token_delay_time;
+	// times each state has occurred
+	int join_count;
+	int bom_on_count;
+	int token_pass_count;
+	int token_passed_count;
+	int death_count;
+} Robot;
+
+Robot robots[MAX_ROBOTS];
+
+int main(int argc, char** argv)
+{
+	if (argc < 2)
+	{
+		printf("Must specify a log file to analyze.\n");
+		return 0;
+	}
+	FILE* f = fopen(argv[1], "r");
+	if (f == NULL)
+	{
+		printf("Failed to open %s.\n", argv[1]);
+		return 0;
+	}
+
+	int i;
+	for (i = 0; i < MAX_ROBOTS; i++)
+	{
+		robots[i].alive = 0;
+		robots[i].join_time = -1;
+		robots[i].bom_on_time = -1;
+		robots[i].token_passed_time = -1;
+		robots[i].token_pass_time = -1;
+		robots[i].total_join_time = 0;
+		robots[i].total_token_delay_time = 0;
+		robots[i].total_token_held_time = 0;
+		robots[i].total_token_waiting_time = 0;
+		robots[i].join_count = 0;
+		robots[i].bom_on_count = 0;
+		robots[i].token_pass_count = 0;
+		robots[i].token_passed_count = 0;
+		robots[i].death_count = 0;
+	}
+
+	int time;
+
+	while (!feof(f))
+	{
+		int minutes, seconds, millis, robot;
+		int ret = fscanf(f, "%d:%d.%d: Robot %d ", &minutes, &seconds, &millis, &robot);
+		if (ret != 4)
+		{
+			if (feof(f))
+				break;
+			printf("Error reading times in file.\n");
+			exit(0);
+		}
+		time = (60 * minutes + seconds) * 1000 + millis;
+
+		char c = fgetc(f);
+		//token passed
+		if (c == 'p')
+		{
+			int nextRobot;
+			ret = fscanf(f, "assed the token to robot %d. Sensor mat", &nextRobot);
+			if (ret != 1)
+			{
+				printf("Error readings token passed.\n");
+				exit(0);
+			}
+
+			int oldalive[MAX_ROBOTS];
+			for (i = 0; i < MAX_ROBOTS; i++)
+			{
+				oldalive[i] = robots[i].alive;
+				robots[i].alive = 0;
+			}
+
+			c = fgetc(f);
+			while (c != '\n') c = fgetc(f);
+			
+			do
+			{
+				int r, reading;
+				ret = fscanf(f, "(%d %d)", &r, &reading);
+				if (ret != 2)
+				{
+					break;
+				}
+				
+				robots[r].alive = 1;
+			} while(1);
+			robots[robot].alive = 1;
+
+			for (i = 0; i < MAX_ROBOTS; i++)
+				if (!robots[i].alive && oldalive[i])
+					robots[i].death_count++;
+			
+			robots[robot].token_pass_time = time;
+			if (robots[robot].bom_on_time != -1)
+			{
+				robots[robot].token_pass_count++;
+				robots[robot].total_token_held_time += time - robots[robot].bom_on_time;
+				robots[robot].bom_on_time = -1;
+			}
+
+			if (robots[robot].join_time != -1)
+			{
+				robots[robot].total_join_time += time - robots[robot].join_time;
+				robots[robot].join_time = -1;
+			}
+
+			robots[nextRobot].token_passed_time = time;
+			robots[nextRobot].token_passed_count++;
+			if (robots[nextRobot].token_pass_time != -1)
+			{
+				robots[nextRobot].total_token_waiting_time += time - robots[nextRobot].token_pass_time;
+				robots[nextRobot].token_pass_time = -1;
+			}
+		}
+		else
+		{
+			ret = fscanf(f, "as ");
+			if (ret != 0)
+			{
+				printf("Error reading line, unexpected value.\n");
+				exit(0);
+			}
+
+			char c = fgetc(f);
+			// bom on
+			if (c == 't')
+			{
+				ret = fscanf(f, "urned its BOM on.\n");
+				if (ret != 0)
+				{
+					printf("Expected BOM on.\n");
+					exit(0);
+				}
+
+				robots[robot].bom_on_time = time;
+				if (robots[robot].token_passed_time != -1)
+				{
+					robots[robot].bom_on_count++;
+					robots[robot].total_token_delay_time += time - robots[robot].token_passed_time;
+				}
+			}
+			// join request
+			else if (c == 'r')
+			{
+				ret = fscanf(f, "equested to join the token ring.\n");
+				if (ret != 0)
+				{
+					printf("Expected join request.\n");
+					exit(0);
+				}
+
+				robots[robot].join_time = time;
+				robots[robot].join_count++;
+			}
+			else
+			{
+				printf("Unexpected line.\n");
+				exit(0);
+			}
+
+		}
+
+	}
+
+	int end_time = time;
+
+	// analyze information
+	int join_time = 0, token_held_time = 0, token_waiting_time = 0, token_delay_time = 0;
+	int token_passed_count = 0, death_count = 0, join_count = 0;
+
+	int num_robots = 0;;
+	
+	for (i = 0; i < MAX_ROBOTS; i++)
+	{
+		if (robots[i].token_pass_count != 0)
+			num_robots++;
+		join_time += robots[i].total_join_time;
+		token_held_time += robots[i].total_token_held_time;
+		token_waiting_time += robots[i].total_token_waiting_time;
+		token_delay_time += robots[i].total_token_delay_time;
+		token_passed_count += robots[i].token_passed_count;
+		death_count += robots[i].death_count;
+		join_count += robots[i].join_count;
+	}
+
+	int join_average = 0;
+	if (join_count != 0)
+		join_average = join_time / join_count;
+	int token_held_average = 0, token_waiting_average = 0, token_delay_average = 0;
+	if (token_passed_count != 0)
+	{
+		token_held_average = token_held_time / token_passed_count;
+		token_waiting_average = token_waiting_time / token_passed_count;
+		token_delay_average = token_delay_time / token_passed_count;
+	}
+
+	// display information
+	printf("Robots:\t\t\t\t\t\t%d\n", num_robots);
+	printf("Time (seconds):\t\t\t\t\t%d\n", end_time / 1000 + 1);
+	printf("Deaths:\t\t\t\t\t\t%d\n", death_count);
+	printf("\n");
+	printf("Deaths per Minute:\t\t\t\t%.2g\n", (double)death_count / end_time * 1000 * 60);
+	printf("Rejoin Time (seconds):\t\t\t\t%.3g\n", (double)join_average / 1000);
+	printf("Seconds Between BOM Flash and Token Sent:\t%.3g\n",(double)token_held_average / 1000);
+	printf("Seconds Between Token Sent and Token Returned:\t%.3g\n", (double)token_waiting_average / 1000);
+	printf("Seconds Between Token Sent and BOM Flash:\t%.3g\n", (double)token_delay_average / 1000);
+	printf("\n");
+	printf("Token Passes per Second:\t\t\t%.3g\n", (double)token_passed_count / end_time * 1000);
+	printf("\n");
+	printf("Deaths per Robot per Minute:\t\t\t%.2g\n", (double)death_count / end_time * 1000 * 60 / num_robots);
+	printf("Token Passes per Robot per Second:\t\t%.2g\n", (double)token_passed_count / end_time * 1000 / num_robots);
+}
+
Index: branches/scout/projects/libwireless/logger/analysis/Makefile
===================================================================
--- branches/scout/projects/libwireless/logger/analysis/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/logger/analysis/Makefile	(revision 1346)
@@ -0,0 +1,3 @@
+all:
+	gcc *.c -g -o analyze
+
Index: branches/scout/projects/libwireless/logger/Makefile
===================================================================
--- branches/scout/projects/libwireless/logger/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/logger/Makefile	(revision 1346)
@@ -0,0 +1,11 @@
+CC = gcc
+CFLAGS = -Wall -g
+
+all: logger
+
+logger: *.c ../lib/*.c 
+	$(CC) $(CFLAGS) *.c -g -L../lib -I../lib -o logger -pthread -lrt -lwireless
+
+clean:
+	rm *.o logger ../lib/*.o
+
Index: branches/scout/projects/libwireless/logger/wl_token_logger.h
===================================================================
--- branches/scout/projects/libwireless/logger/wl_token_logger.h	(nonexistent)
+++ branches/scout/projects/libwireless/logger/wl_token_logger.h	(revision 1346)
@@ -0,0 +1,31 @@
+/**
+ * @file wl_token_logger.h
+ * @brief Declarations for the token ring packet group logger
+ * 
+ * Contains declarations for the token ring packet group logger.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_TOKEN_LOGGER_H
+#define WL_TOKEN_LOGGER_H
+
+/**
+ * @defgroup tokenring Token Ring
+ * @brief Wireless library token ring implementation
+ *
+ * This packet group is used to form a token ring, which
+ * keeps track of the relative directions of the robots
+ * from one another.
+ *
+ * @{
+ **/
+
+/**@brief Register the token ring group with the wireless library.**/
+void wl_token_logger_register(int delay);
+/**@brief Unregister the token ring group with the wirelss library.**/
+void wl_token_logger_unregister(void);
+
+/** @} **/ //end token ring group
+
+#endif
Index: branches/scout/projects/libwireless/robotTest/Makefile
===================================================================
--- branches/scout/projects/libwireless/robotTest/Makefile	(nonexistent)
+++ branches/scout/projects/libwireless/robotTest/Makefile	(revision 1346)
@@ -0,0 +1,523 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = main
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+
+
+# Place -I options here
+CINCS = -I../lib -I../../libdragonfly -L../lib -L../../libdragonfly
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+CFLAGS += -DROBOT
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+LDFLAGS += -lwireless -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+AVRDUDE_FLAGS += -D
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/libwireless/robotTest/main.c
===================================================================
--- branches/scout/projects/libwireless/robotTest/main.c	(nonexistent)
+++ branches/scout/projects/libwireless/robotTest/main.c	(revision 1346)
@@ -0,0 +1,28 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <xbee.h>
+
+int main(void)
+{
+	//usb_puts("Turned on.\n");
+	dragonfly_init(ALL_ON);
+	usb_puts("Dragonfly initialized.\n");
+	//range_init();
+	//orb_enable();
+	//usb_puts("Rangefinders initialized.\n");
+	wl_init();
+	usb_puts("Wireless initialized.\n");
+
+	wl_set_channel(0xF);
+	usb_puts("Wireless channel set.\n");
+	wl_token_ring_register();
+	usb_puts("Token ring initialized.\n");
+	wl_token_ring_join();
+	usb_puts("Token ring joined.\n");
+	while (1)
+	{
+		wl_do();
+	}
+}
+
Index: branches/scout/projects/colonet/server/Main.cpp
===================================================================
--- branches/scout/projects/colonet/server/Main.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/Main.cpp	(revision 1346)
@@ -0,0 +1,59 @@
+/**
+ * @file Main.cpp
+ *
+ * @author Jason Knichel
+ *
+ */
+#include <stdio.h>
+#include <signal.h>
+#include <ColonetServer.h>
+#include <wireless.h>
+
+ColonetServer colonet_server;
+
+//TODO: what does the parameter a do?
+/**
+ * @brief This function performs any cleanup needed to be done when the program dies.
+ *
+ * @return Void
+ */
+void cleanup(int a) {
+  a = a;
+
+  //wl_terminate();
+  printf("todo - close wl port\n");
+
+  exit(0);
+}
+
+/**
+ * @brief The main function of the server
+ *
+ * @param argc The number of command line arguments passed to the program
+ * @param argv The command line arguments passed to the program
+ *
+ * @return 0 on success, negative error code on error
+ */
+int main(int argc, char** argv) {
+  if (colonet_server.initialize_server(argc, argv) < 0) {
+    fprintf(stderr, "\nThere was an error initializing the server.\n");
+    return -1;
+  }
+
+  //register a signal handler to be called when we get a SIGINT signal (killing the server by cntrl+c would generate this)
+  signal(SIGINT, cleanup);
+
+  if (colonet_server.start_listening() < 0) {
+    fprintf(stderr, "ColonetServer.start_listening failed.\n");
+    cleanup(0);
+    return -1;
+  }
+
+  colonet_server.run_position_monitor();
+
+  colonet_server.run_server();
+  
+  colonet_server.run_loop();
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/vision/shmimgserve.h
===================================================================
--- branches/scout/projects/colonet/server/vision/shmimgserve.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/shmimgserve.h	(revision 1346)
@@ -0,0 +1,13 @@
+#ifndef SHMIMGSERVE_H
+#define SHMIMGSERVE_H
+
+#include <cv.h>
+
+#define JPEG_QUALITY  50
+
+int sendImage(IplImage *image);
+
+int openShM();
+void releaseShM();
+
+#endif
Index: branches/scout/projects/colonet/server/vision/vision.c
===================================================================
--- branches/scout/projects/colonet/server/vision/vision.c	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/vision.c	(revision 1346)
@@ -0,0 +1,145 @@
+/**
+ * Robot Detection
+ * based on opencv's sample program fitellipse.c by Denis Burenkov
+ *
+ * @author Rich Hong
+ * @author Ryan Cahoon
+ * @date 11/18/2007
+ */
+ 
+//TODO: Add camera stabilization
+
+#include "vision.h"
+
+#include <cv.h>
+#include <highgui.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "shmimgserve.h"
+
+#define MIN_PADDING 70
+
+#define DEBUG 0 //Debug to find threshold level
+
+struct CenterP {
+  CvPoint center;
+  int count;
+};
+
+/*static char* filename;*/
+
+static CvCapture *capture;
+
+int vision_init(/*char* filename_*/) {
+  /*filename = filename_;*/
+  
+  printf("Vision init. %s\n", DEBUG ? "Debugging on" : "");
+
+  capture = cvCaptureFromCAM(0);
+  if( !capture ) {
+    fprintf( stderr, "ERROR: capture is NULL \n" );
+    return -1;
+  }
+  
+  openShM();
+
+  if (DEBUG)
+  {
+    cvNamedWindow("mywindow1", CV_WINDOW_AUTOSIZE);
+  }
+  
+  return 0;
+}
+
+void vision_close()
+{
+  if (DEBUG)
+    cvDestroyWindow("mywindow1");
+
+  releaseShM();
+
+  cvReleaseCapture(&capture);
+  
+  printf("Vision closed.\n");
+}
+
+int vision_get_robot_positions(VisionPosition** positions) {
+  IplImage *image03;
+
+  if(!cvGrabFrame(capture)){              // capture a frame 
+    printf("Could not grab a frame\n");
+    return -1;
+  }
+  IplImage *im_capture=cvRetrieveFrame(capture);           // retrieve the captured frame
+  
+  sendImage(im_capture);
+  
+  image03 = cvCreateImage(cvGetSize(im_capture), im_capture->depth, 1);
+  cvCvtColor(im_capture, image03, CV_RGB2GRAY);
+
+  struct CenterP centers[100] = {0};
+  int count = 0;
+
+  cvSmooth( image03, image03, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected
+  CvMemStorage* storage = cvCreateMemStorage(0);
+  CvSeq* circles = cvHoughCircles( image03, storage, CV_HOUGH_GRADIENT, 1, 1, 100, 43 );
+
+  int i;
+  for( i = 0; i < circles->total && count < 100; i++ )
+  {
+    //TODO: Augment with Harr cascade second level detecting orbs + identify robot with orb color
+
+    float* p = (float*)cvGetSeqElem( circles, i );
+    CvPoint center = cvPoint(cvRound(p[0]), cvRound(p[1]));
+    int r = cvRound(p[2]);
+
+    if (DEBUG) cvCircle( image03, center, 3, CV_RGB(255,255,255), 3, 8, 0 );
+
+    int dist2 = MIN_PADDING;
+    int loc = count;
+
+    int j;
+    for (j = 0; j < count; j++)
+    {
+      int dx = centers[j].center.x-center.x;
+      int dy = centers[j].center.y-center.y;
+      int d2 = dx*dx + dy*dy;
+
+      if (d2 < dist2)
+      {
+        dist2 = d2;
+        loc = j;
+      }
+    }
+
+    int c = centers[loc].count;
+    centers[loc].center.x = (centers[loc].center.x * c + center.x) / (c + 1);
+    centers[loc].center.y = (centers[loc].center.y * c + center.y) / (c + 1);
+    centers[loc].count++;
+    if (loc == count) count++;
+  }
+
+  if (DEBUG) cvShowImage( "mywindow1", image03 );
+
+  cvReleaseMemStorage(&storage);
+
+  cvReleaseImage(&image03);
+
+  VisionPosition* pos_array = (VisionPosition*)malloc(sizeof(VisionPosition) * count);
+  if (pos_array == NULL) {
+    fprintf(stderr, "malloc failed\n");
+    return -1;
+  }
+
+  int c = 0;
+  for (i = 0; i < count; i++) {
+    pos_array[c].x = centers[i].center.x;
+    pos_array[c].y = centers[i].center.y;
+    c++;
+  }
+
+  *positions = pos_array;
+  return count;
+}
Index: branches/scout/projects/colonet/server/vision/sysvsem.cpp
===================================================================
--- branches/scout/projects/colonet/server/vision/sysvsem.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/sysvsem.cpp	(revision 1346)
@@ -0,0 +1,313 @@
+/*
+   +----------------------------------------------------------------------+
+   | PHP Version 5                                                        |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2008 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 3.01 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available through the world-wide-web at the following url:           |
+   | http://www.php.net/license/3_01.txt                                  |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Authors: Tom May <tom@go2net.com>                                    |
+   |          Gavin Sherry <gavin@linuxworld.com.au>                      |
+   +----------------------------------------------------------------------+
+ */
+ 
+/* $Id: sysvsem.c,v 1.51.2.3.2.3 2007/12/31 07:20:13 sebastian Exp $ */
+
+/* Latest update build anc tested on Linux 2.2.14
+ *
+ * This has been built and tested on Solaris 2.6 and Linux 2.1.122.
+ * It may not compile or execute correctly on other systems.
+ *
+ * sas: Works for me on Linux 2.0.36 and FreeBSD 3.0-current
+ */
+
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <errno.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <php/main/php_config.h>
+
+#include "php_sysvsem.h"
+
+#if !HAVE_SEMUN
+
+union semun {
+	int val;                    /* value for SETVAL */
+	struct semid_ds *buf;       /* buffer for IPC_STAT, IPC_SET */
+	unsigned short int *array;  /* array for GETALL, SETALL */
+	struct seminfo *__buf;      /* buffer for IPC_INFO */
+};
+
+#undef HAVE_SEMUN
+#define HAVE_SEMUN 1
+
+#endif
+
+/* Semaphore functions using System V semaphores.  Each semaphore
+ * actually consists of three semaphores allocated as a unit under the
+ * same key.  Semaphore 0 (SYSVSEM_SEM) is the actual semaphore, it is
+ * initialized to max_acquire and decremented as processes acquire it.
+ * The value of semaphore 1 (SYSVSEM_USAGE) is a count of the number
+ * of processes using the semaphore.  After calling semget(), if a
+ * process finds that the usage count is 1, it will set the value of
+ * SYSVSEM_SEM to max_acquire.  This allows max_acquire to be set and
+ * track the PHP code without having a global init routine or external
+ * semaphore init code.  Except see the bug regarding a race condition
+ * php_sysvsem_get().  Semaphore 2 (SYSVSEM_SETVAL) serializes the
+ * calls to GETVAL SYSVSEM_USAGE and SETVAL SYSVSEM_SEM.  It can be
+ * acquired only when it is zero.
+ */
+
+#define SYSVSEM_SEM		0
+#define SYSVSEM_USAGE	1
+#define SYSVSEM_SETVAL	2
+
+/* {{{ release_sysvsem_sem
+ */
+sysvsem::~sysvsem()
+{
+	struct sembuf sop[2];
+	int opcount = 1;
+
+	/* Decrement the usage count. */
+	sop[0].sem_num = SYSVSEM_USAGE;
+	sop[0].sem_op  = -1;
+	sop[0].sem_flg = SEM_UNDO;
+	/* Release the semaphore if it has been acquired but not released. */
+	if (this->count) {
+		sop[1].sem_num = SYSVSEM_SEM;
+		sop[1].sem_op  = this->count;
+		sop[1].sem_flg = SEM_UNDO;
+
+		opcount++;
+	}
+
+	semop(this->semid, sop, opcount);
+	
+	
+	//TODO: Need to auto remove() semaphore when SYSVSEM_USAGE is 0
+	
+	//efree(sem_ptr);
+}
+/* }}} */
+#define SETVAL_WANTS_PTR
+
+#if defined(_AIX)
+#undef SETVAL_WANTS_PTR
+#endif
+
+/* {{{ proto resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])
+	 Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously */
+/*  max_aquire = 1, perm = 0666, auto_release = 1 */
+sysvsem::sysvsem(long key, long max_acquire, long perm, long auto_release) throw (sysvsem_error)
+{
+	int semid;
+	struct sembuf sop[3];
+	int count;
+
+	/* Get/create the semaphore.  Note that we rely on the semaphores
+	 * being zeroed when they are created.  Despite the fact that
+	 * the(?)  Linux semget() man page says they are not initialized,
+	 * the kernel versions 2.0.x and 2.1.z do in fact zero them.
+	 */
+
+	semid = semget(key, 3, perm|IPC_CREAT);
+	if (semid == -1) {
+		fprintf(stderr, "%s failed for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+		throw sysvsem_error("failed to open semaphore");
+	}
+
+	/* Find out how many processes are using this semaphore.  Note
+	 * that on Linux (at least) there is a race condition here because
+	 * semaphore undo on process exit is not atomic, so we could
+	 * acquire SYSVSEM_SETVAL before a crashed process has decremented
+	 * SYSVSEM_USAGE in which case count will be greater than it
+	 * should be and we won't set max_acquire.  Fortunately this
+	 * doesn't actually matter in practice.
+	 */
+
+	/* Wait for sem 1 to be zero . . . */
+
+	sop[0].sem_num = SYSVSEM_SETVAL;
+	sop[0].sem_op  = 0;
+	sop[0].sem_flg = 0;
+
+	/* . . . and increment it so it becomes non-zero . . . */
+
+	sop[1].sem_num = SYSVSEM_SETVAL;
+	sop[1].sem_op  = 1;
+	sop[1].sem_flg = SEM_UNDO;
+
+	/* . . . and increment the usage count. */
+
+	sop[2].sem_num = SYSVSEM_USAGE;
+	sop[2].sem_op  = 1;
+	sop[2].sem_flg = SEM_UNDO;
+	while (semop(semid, sop, 3) == -1) {
+		if (errno != EINTR) {
+			fprintf(stderr, "%s failed acquiring SYSVSEM_SETVAL for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+			break;
+		}
+	}
+
+	/* Get the usage count. */
+	count = semctl(semid, SYSVSEM_USAGE, GETVAL, NULL);
+	if (count == -1) {
+		fprintf(stderr, "%s failed for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+	}
+	
+	printf("proc count: %d\n", count);
+
+	/* If we are the only user, then take this opportunity to set the max. */
+
+	if (count == 1) {
+#if HAVE_SEMUN
+		/* This is correct for Linux which has union semun. */
+		union semun semarg;
+		semarg.val = max_acquire;
+		if (semctl(semid, SYSVSEM_SEM, SETVAL, semarg) == -1) {
+			fprintf(stderr, "%s failed for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+		}
+#elif defined(SETVAL_WANTS_PTR)
+		/* This is correct for Solaris 2.6 which does not have union semun. */
+		if (semctl(semid, SYSVSEM_SEM, SETVAL, &max_acquire) == -1) {
+			fprintf(stderr, "%s failed for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+		}
+#else
+		/* This works for i.e. AIX */
+		if (semctl(semid, SYSVSEM_SEM, SETVAL, max_acquire) == -1) {
+			fprintf(stderr, "%s failed for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+		}
+#endif
+	}
+
+	/* Set semaphore 1 back to zero. */
+
+	sop[0].sem_num = SYSVSEM_SETVAL;
+	sop[0].sem_op  = -1;
+	sop[0].sem_flg = SEM_UNDO;
+	while (semop(semid, sop, 1) == -1) {
+		if (errno != EINTR) {
+			fprintf(stderr, "%s failed releasing SYSVSEM_SETVAL for key 0x%lx: %s\n", __FUNCTION__, key, strerror(errno));
+			break;
+		}
+	}
+
+	//sem_ptr = (sysvsem_sem *) emalloc(sizeof(sysvsem_sem));
+	this->key   = key;
+	this->semid = semid;
+	this->count = 0;
+	this->auto_release = auto_release;
+
+	//this->id = (int)sem_ptr;
+	
+	//return sem_ptr;
+}
+/* }}} */
+
+/* {{{ php_sysvsem_semop
+ */
+int sysvsem::php_sysvsem_semop(int acquire)
+{
+	struct sembuf sop;
+
+	if (!acquire && this->count == 0) {
+		fprintf(stderr, "SysV semaphore 0x%x is not currently acquired\n", this->key);
+		return 0;
+	}
+
+	sop.sem_num = SYSVSEM_SEM;
+	sop.sem_op  = acquire ? -1 : 1;
+	sop.sem_flg = SEM_UNDO;
+
+	while (semop(this->semid, &sop, 1) == -1) {
+		if (errno != EINTR) {
+			fprintf(stderr, "%s failed to %s semaphore 0x%x: %s\n", __FUNCTION__, acquire ? "acquire" : "release", this->key, strerror(errno));
+			return 0;
+		}
+	}
+
+	this->count -= acquire ? -1 : 1;
+	return 1;
+}
+/* }}} */
+
+/* {{{ proto bool sem_acquire(resource id)
+	 Acquires the semaphore with the given id, blocking if necessary */
+int sysvsem::sem_acquire()
+{
+	return this->php_sysvsem_semop(1);
+}
+/* }}} */
+
+/* {{{ proto bool sem_release(resource id)
+	 Releases the semaphore with the given id */
+int sysvsem::sem_release()
+{
+	return this->php_sysvsem_semop(0);
+}
+/* }}} */
+
+/* {{{ proto bool sem_remove(resource id)
+	 Removes semaphore from Unix systems */
+
+/*
+ * contributed by Gavin Sherry gavin@linuxworld.com.au
+ * Fri Mar 16 00:50:13 EST 2001
+ */
+
+int sysvsem::sem_remove()
+{
+#if HAVE_SEMUN
+	union semun un;
+	struct semid_ds buf;
+#endif
+
+#if HAVE_SEMUN
+	un.buf = &buf;
+	if (semctl(this->semid, 0, IPC_STAT, un) < 0) {
+#else
+	if (semctl(this->semid, 0, IPC_STAT, NULL) < 0) {
+#endif
+		fprintf(stderr, "SysV semaphore 0x%x does not (any longer) exist\n", this->key);
+		return 0;
+	}
+
+#if HAVE_SEMUN
+	if (semctl(this->semid, 0, IPC_RMID, un) < 0) {
+#else
+	if (semctl(this->semid, 0, IPC_RMID, NULL) < 0) {
+#endif
+		fprintf(stderr, "%s failed for SysV sempphore 0x%x: %s\n", __FUNCTION__, this->key, strerror(errno));
+		return 0;
+	}
+	
+	/* let release_sysvsem_sem know we have removed
+	 * the semaphore to avoid issues with releasing.
+	 */ 
+
+	this->count = -1;
+	return 1;
+}
+
+/* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
Index: branches/scout/projects/colonet/server/vision/savetonetwork.c
===================================================================
--- branches/scout/projects/colonet/server/vision/savetonetwork.c	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/savetonetwork.c	(revision 1346)
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include "jpeglib.h"
+#include <cv.h>
+#include "memdst.h"
+
+int write_JPEG_to_mem (unsigned char *storage, int length, IplImage *_img, int quality)
+{
+  struct jpeg_compress_struct cinfo;
+  struct jpeg_error_mgr jerr;
+  JSAMPROW row_pointer[1];
+  
+  int numBytes = -1; //size of jpeg after compression
+  
+  IplImage *img;
+  
+  img = cvCloneImage(_img);
+  cvCvtColor(_img, img, CV_RGB2BGR);
+
+  cinfo.err = jpeg_std_error(&jerr);
+
+  jpeg_create_compress(&cinfo);
+
+  jpeg_memory_dest(&cinfo,(JOCTET*)storage,length,&numBytes);
+
+  cinfo.image_width = img->width;
+  cinfo.image_height = img->height;
+  cinfo.input_components = img->nChannels;
+  cinfo.in_color_space = JCS_RGB;
+
+  jpeg_set_defaults(&cinfo);
+  jpeg_set_quality(&cinfo, quality, TRUE );
+
+  jpeg_start_compress(&cinfo, TRUE);
+
+  while (cinfo.next_scanline < cinfo.image_height) {
+    row_pointer[0] = (unsigned char *)(img->imageData + cinfo.next_scanline * img->widthStep);
+    (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
+  }
+
+  jpeg_finish_compress(&cinfo);
+  jpeg_destroy_compress(&cinfo);
+  
+  cvReleaseImage(&img);
+  
+  return numBytes;
+}
+
Index: branches/scout/projects/colonet/server/vision/php_sysvsem.h
===================================================================
--- branches/scout/projects/colonet/server/vision/php_sysvsem.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/php_sysvsem.h	(revision 1346)
@@ -0,0 +1,50 @@
+/* 
+   +----------------------------------------------------------------------+
+   | PHP Version 5                                                        |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2008 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 3.01 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available through the world-wide-web at the following url:           |
+   | http://www.php.net/license/3_01.txt                                  |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author: Tom May <tom@go2net.com>                                     |
+   +----------------------------------------------------------------------+
+*/
+
+/* $Id: php_sysvsem.h,v 1.16.2.1.2.2 2007/12/31 07:20:13 sebastian Exp $ */
+
+#ifndef PHP_SYSVSEM_H
+#define PHP_SYSVSEM_H
+
+#include <stdexcept>
+#include <string>
+
+struct sysvsem_error : public std::runtime_error
+{
+    sysvsem_error(const std::string& msg) : runtime_error(msg){}
+};
+
+class sysvsem {
+private:
+	//int id;						/* For error reporting. */
+	int key;					/* For error reporting. */
+	int semid;					/* Returned by semget(). */
+	int count;					/* Acquire count for auto-release. */
+	int auto_release;			/* flag that says to auto-release. */
+
+	int php_sysvsem_semop(int acquire);
+	
+public:
+	sysvsem(long key, long max_acquire = 1, long perm = 0666, long auto_release = 1) throw (sysvsem_error);
+	~sysvsem();
+	int sem_acquire();
+	int sem_release();
+	int sem_remove();
+};
+
+#endif /* PHP_SYSVSEM_H */
Index: branches/scout/projects/colonet/server/vision/shmimgserve.cpp
===================================================================
--- branches/scout/projects/colonet/server/vision/shmimgserve.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/shmimgserve.cpp	(revision 1346)
@@ -0,0 +1,103 @@
+#include "shmimgserve.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/shm.h>
+
+#include "php_sysvsem.h"
+
+#define DEBUG 0
+
+#if DEBUG
+#define dbg_printf(...)   printf(__VA_ARGS__)
+#else
+#define dbg_printf(...) 
+#endif
+
+int write_JPEG_to_mem (unsigned char *storage, int length, IplImage *_img, int quality);
+
+static sysvsem *sem;
+static int shm_id;
+
+int sendImage(IplImage *image)
+{
+  dbg_printf("Send image\n");
+
+	if (sem->sem_acquire())
+	{
+		dbg_printf("Semaphore acquired\n");
+
+		unsigned char *p = (unsigned char *)shmat(shm_id, NULL, 0);
+		if (p!=(void *)-1)
+		{
+			dbg_printf("Memory mapped at %p\n", p);
+
+			int len = write_JPEG_to_mem (p+4, 150000-4, image, JPEG_QUALITY);
+
+			int i;
+			int length = len;
+			dbg_printf("%d\n", length);
+			for(i=0; i < 4; i++)
+			{
+				char digit = (char)(length & 0xff);
+				length >>= 8;
+				memcpy(p+i, &digit, sizeof(char));
+			}
+
+			dbg_printf("Memory copied\n");
+			
+			sem->sem_release();
+			dbg_printf("Semaphore released\n");
+			
+			shmdt(p);
+		  dbg_printf("Memory detached\n");
+		}
+	}
+
+  if (errno!=0)
+  {
+    int errnum = errno;
+    errno = 0;
+    
+    fprintf(stderr, "error %d %s\n", errnum, strerror(errnum));
+    return errnum;
+  }
+  
+  return 0;
+}
+
+int openShM()
+{
+	shm_id = shmget(0x40305163, 150000, IPC_CREAT | 0666);
+	if (shm_id > 0)
+		dbg_printf("Shared memory opened\n");
+	else
+	{
+		fprintf(stderr, "Error opening shared memory\n");
+		return -1;
+	}
+		
+  sem = new (std::nothrow)sysvsem(0x40309999);
+  if (sem)
+		dbg_printf("Semaphore opened\n");
+	else
+	{
+		fprintf(stderr, "Error opening semaphore\n");
+		return -2;
+	}
+}
+
+void releaseShM()
+{
+  sem->sem_remove();
+	delete sem;
+	dbg_printf("Semaphore deleted\n");
+
+  shmctl(shm_id, IPC_RMID, NULL);
+  dbg_printf("Memory marked for deletion\n");
+}
Index: branches/scout/projects/colonet/server/vision/Makefile
===================================================================
--- branches/scout/projects/colonet/server/vision/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/Makefile	(revision 1346)
@@ -0,0 +1,31 @@
+# Makefile for vision.
+
+CC = g++
+
+all: clean_programs clean_vision shmimgserve vision vision_driver fitellipse
+
+shmimgserve:
+	$(CC) -ggdb `pkg-config opencv --cflags` -c -g -I . memdst.c
+	$(CC) -ggdb `pkg-config opencv --cflags` -c -g -I . savetonetwork.c
+	$(CC) -ggdb                              -c -g -I . sysvsem.cpp
+	$(CC) -ggdb `pkg-config opencv --cflags` -c -g -I . shmimgserve.cpp
+
+vision:
+	$(CC) -ggdb `pkg-config opencv --cflags` -c -I . vision.c
+
+vision_driver: vision shmimgserve
+	$(CC) -ggdb `pkg-config opencv --cflags --libs` -g -I. -L. vision_driver.c memdst.o savetonetwork.o sysvsem.o shmimgserve.o vision.o -ljpeg -o vision_driver
+
+fitellipse: 
+	$(CC) -ggdb `pkg-config opencv --cflags --libs` fitellipse.c -o fitellipse
+
+.PHONY: clean_programs clean
+
+clean_vision:
+	rm -rf vision.o savetonetwork.o memdst.o
+
+clean_programs:
+	rm -rf vision_driver fitellipse
+
+clean: clean_programs clean_vision
+	rm -rf *~ *.o
Index: branches/scout/projects/colonet/server/vision/shmservetest.cpp
===================================================================
--- branches/scout/projects/colonet/server/vision/shmservetest.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/shmservetest.cpp	(revision 1346)
@@ -0,0 +1,160 @@
+#include <cv.h>
+#include <highgui.h>
+
+#include <stdio.h>
+
+#define CAPTURE
+
+#ifdef CAPTURE
+static CvCapture *capture;
+#endif
+
+#include <sys/types.h>
+#include <sys/shm.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "php_sysvsem.h"
+
+#include <errno.h>
+
+int write_JPEG_to_mem (unsigned char *storage, int length, IplImage *_img, int quality);
+
+static sysvsem *sem;
+static int shm_id;
+
+int sendImage(IplImage *image)
+{
+  printf("Send image\n");
+
+	if (sem->sem_acquire())
+	{
+		printf("Semaphore acquired\n");
+
+		unsigned char *p = (unsigned char *)shmat(shm_id, NULL, 0);
+		if (p!=(void *)-1)
+		{
+			printf("Memory mapped at %p\n", p);
+
+			int len = write_JPEG_to_mem (p+4, 150000-4, image, 30);
+
+			int i;
+			int length = len;
+			printf("%d\n", length);
+			for(i=0; i < 4; i++)
+			{
+				char digit = (char)(length & 0xff);
+				length >>= 8;
+				memcpy(p+i, &digit, sizeof(char));
+			}
+
+			printf("Memory copied\n");
+			
+			sem->sem_release();
+			printf("Semaphore released\n");
+			
+			shmdt(p);
+		  printf("Memory detached\n");
+		}
+	}
+
+  if (errno!=0)
+  {
+    int errnum = errno;
+    errno = 0;
+    
+    fprintf(stderr, "error %d %s\n", errnum, strerror(errnum));
+    return errnum;
+  }
+  
+  return 0;
+}
+
+void openShM()
+{
+	shm_id = shmget(0x40305163, 150000, IPC_CREAT | 0666);
+	if (shm_id > 0)
+		printf("Shared memory opened\n");
+	else
+	{
+		fprintf(stderr, "Error opening shared memory\n");
+		exit(-2);
+	}
+		
+  sem = new (std::nothrow)sysvsem(0x40309999);
+  if (sem)
+		printf("Semaphore opened\n");
+	else
+	{
+		fprintf(stderr, "Error opening semaphore\n");
+		exit(-1);
+	}
+}
+
+void releaseShM()
+{
+  sem->sem_remove();
+	delete sem;
+	printf("Semaphore deleted\n");
+
+  shmctl(shm_id, IPC_RMID, NULL);
+  printf("Memory marked for deletion\n");
+}
+
+int main(int argc, char *argv[])
+{
+#ifdef CAPTURE
+  capture = cvCaptureFromCAM( 0 );
+  if( !capture ) {
+    fprintf( stderr, "ERROR: capture is NULL \n" );
+    return -1; 	
+  }
+#endif
+
+	openShM();
+
+  // Create a window in which the captured images will be presented
+  //cvNamedWindow( "mywindow1", CV_WINDOW_AUTOSIZE );
+
+  // Show the image captured from the camera in the window and repeat
+  while((cvWaitKey(10) & 255) != 27)
+  {
+    usleep(15000);
+    
+#ifdef CAPTURE
+    if(!cvGrabFrame(capture)){              // capture a frame
+      printf("Could not grab a frame\n\7");
+      return -1;
+    }
+    IplImage *image03=cvRetrieveFrame(capture);
+#else
+    IplImage *image03;
+    // load image and force it to be grayscale
+    if ((image03 = cvLoadImage(argv[1], 0)) == 0) {
+      fprintf(stderr, "Failed to load image.\n");
+      return -1;
+    }
+#endif
+
+    //cvShowImage( "mywindow1", image03 );
+
+    sendImage(image03);
+
+#ifndef CAPTURE
+    cvReleaseImage(&image03);
+#endif
+
+    //If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
+    //remove higher bits using AND operator
+  }
+
+#ifdef CAPTURE
+  // Release the capture device housekeeping
+  cvReleaseCapture( &capture );
+#endif
+
+  releaseShM();
+  
+  cvDestroyWindow( "mywindow1" );
+  return 0;
+}
Index: branches/scout/projects/colonet/server/vision/capturetest.c
===================================================================
--- branches/scout/projects/colonet/server/vision/capturetest.c	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/capturetest.c	(revision 1346)
@@ -0,0 +1,116 @@
+#include "vision.h"
+
+#include <cv.h>
+#include <highgui.h>
+
+#include <stdio.h>
+
+#define MIN_PADDING 70
+
+#define CAPTURE
+
+struct CenterP {
+  CvPoint center;
+  int count;
+};
+
+#ifdef CAPTURE
+static CvCapture *capture;
+#endif
+
+int main(int argc, char *argv[])
+{
+#ifdef CAPTURE
+  CvCapture* capture = cvCaptureFromCAM( 0 );
+  if( !capture ) {
+    fprintf( stderr, "ERROR: capture is NULL \n" );
+    return -1;
+  }
+#endif
+
+  // Create a window in which the captured images will be presented
+  cvNamedWindow( "mywindow1", CV_WINDOW_AUTOSIZE );
+
+  // Show the image captured from the camera in the window and repeat
+  do {
+    IplImage *image03;
+
+#ifdef CAPTURE
+    if(!cvGrabFrame(capture)){              // capture a frame 
+      printf("Could not grab a frame\n\7");
+      return -1;
+    }
+    IplImage *im_capture=cvRetrieveFrame(capture);           // retrieve the captured frame
+    
+    image03 = cvCreateImage(cvGetSize(im_capture), im_capture->depth, 1);
+    cvCvtColor(im_capture, image03, CV_RGB2GRAY);
+#else
+    // load image and force it to be grayscale
+    if ((image03 = cvLoadImage(argv[1], 0)) == 0) {
+      fprintf(stderr, "Failed to load image.\n");
+      return -1;
+    }
+#endif
+
+    struct CenterP centers[100] = {0};
+    int index = 0;
+
+    cvSmooth( image03, image03, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected
+    CvMemStorage* storage = cvCreateMemStorage(0);
+    CvSeq* circles = cvHoughCircles( image03, storage, CV_HOUGH_GRADIENT, 1, 1, 100, 43 );
+
+    int i;
+    for( i = 0; i < circles->total && index < 100; i++ )
+    {
+      float* p = (float*)cvGetSeqElem( circles, i );
+      CvPoint center = cvPoint(cvRound(p[0]), cvRound(p[1]));
+      int r = cvRound(p[2]);
+
+      //cvCircle( image03, center, 3, CV_RGB(255,255,255), -1, 8, 0 );
+
+      float dist = MIN_PADDING;
+      int loc = index;
+
+      int j;
+      for (j = 0; j < index; j++)
+      {
+        int dx = centers[j].center.x-center.x;
+        int dy = centers[j].center.y-center.y;
+        float d = cvSqrt(dx*dx + dy*dy);
+
+        if (d < dist)
+        {
+          dist = d;
+          loc = j;
+        }
+      }
+
+      int count = centers[loc].count;
+      centers[loc].center.x = (centers[loc].center.x * count + center.x) / (count + 1);
+      centers[loc].center.y = (centers[loc].center.y * count + center.y) / (count + 1);
+      centers[loc].count++;
+      if (loc == index) index++;
+    }
+
+    for (i = 0; i < index; i++)
+    {
+      cvCircle( image03, centers[i].center, 60, CV_RGB(255,255,255), 3, 8, 0 );
+    }
+
+    cvShowImage( "mywindow1", image03 );
+    cvReleaseMemStorage(&storage);
+
+    cvReleaseImage(&image03);
+
+    //If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
+    //remove higher bits using AND operator
+  } while((cvWaitKey(10) & 255) != 27);
+
+#ifdef CAPTURE
+  // Release the capture device housekeeping
+  cvReleaseCapture( &capture );
+#endif
+  
+  cvDestroyWindow( "mywindow1" );
+  return 0;
+}
Index: branches/scout/projects/colonet/server/vision/memdst.h
===================================================================
--- branches/scout/projects/colonet/server/vision/memdst.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/memdst.h	(revision 1346)
@@ -0,0 +1,7 @@
+#ifndef MEMDST_H
+#define MEMDST_H
+
+GLOBAL(void)
+jpeg_memory_dest (j_compress_ptr cinfo, JOCTET* buffer, int bufsize, int* outsize);
+
+#endif
Index: branches/scout/projects/colonet/server/vision/jmorecfg.h
===================================================================
--- branches/scout/projects/colonet/server/vision/jmorecfg.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/jmorecfg.h	(revision 1346)
@@ -0,0 +1,363 @@
+/*
+ * jmorecfg.h
+ *
+ * Copyright (C) 1991-1997, Thomas G. Lane.
+ * This file is part of the Independent JPEG Group's software.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+ * This file contains additional configuration options that customize the
+ * JPEG software for special applications or support machine-dependent
+ * optimizations.  Most users will not need to touch this file.
+ */
+
+
+/*
+ * Define BITS_IN_JSAMPLE as either
+ *   8   for 8-bit sample values (the usual setting)
+ *   12  for 12-bit sample values
+ * Only 8 and 12 are legal data precisions for lossy JPEG according to the
+ * JPEG standard, and the IJG code does not support anything else!
+ * We do not support run-time selection of data precision, sorry.
+ */
+
+#define BITS_IN_JSAMPLE  8	/* use 8 or 12 */
+
+
+/*
+ * Maximum number of components (color channels) allowed in JPEG image.
+ * To meet the letter of the JPEG spec, set this to 255.  However, darn
+ * few applications need more than 4 channels (maybe 5 for CMYK + alpha
+ * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
+ * really short on memory.  (Each allowed component costs a hundred or so
+ * bytes of storage, whether actually used in an image or not.)
+ */
+
+#define MAX_COMPONENTS  10	/* maximum number of image components */
+
+
+/*
+ * Basic data types.
+ * You may need to change these if you have a machine with unusual data
+ * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
+ * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
+ * but it had better be at least 16.
+ */
+
+/* Representation of a single sample (pixel element value).
+ * We frequently allocate large arrays of these, so it's important to keep
+ * them small.  But if you have memory to burn and access to char or short
+ * arrays is very slow on your hardware, you might want to change these.
+ */
+
+#if BITS_IN_JSAMPLE == 8
+/* JSAMPLE should be the smallest type that will hold the values 0..255.
+ * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
+ */
+
+#ifdef HAVE_UNSIGNED_CHAR
+
+typedef unsigned char JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#else /* not HAVE_UNSIGNED_CHAR */
+
+typedef char JSAMPLE;
+#ifdef CHAR_IS_UNSIGNED
+#define GETJSAMPLE(value)  ((int) (value))
+#else
+#define GETJSAMPLE(value)  ((int) (value) & 0xFF)
+#endif /* CHAR_IS_UNSIGNED */
+
+#endif /* HAVE_UNSIGNED_CHAR */
+
+#define MAXJSAMPLE	255
+#define CENTERJSAMPLE	128
+
+#endif /* BITS_IN_JSAMPLE == 8 */
+
+
+#if BITS_IN_JSAMPLE == 12
+/* JSAMPLE should be the smallest type that will hold the values 0..4095.
+ * On nearly all machines "short" will do nicely.
+ */
+
+typedef short JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#define MAXJSAMPLE	4095
+#define CENTERJSAMPLE	2048
+
+#endif /* BITS_IN_JSAMPLE == 12 */
+
+
+/* Representation of a DCT frequency coefficient.
+ * This should be a signed value of at least 16 bits; "short" is usually OK.
+ * Again, we allocate large arrays of these, but you can change to int
+ * if you have memory to burn and "short" is really slow.
+ */
+
+typedef short JCOEF;
+
+
+/* Compressed datastreams are represented as arrays of JOCTET.
+ * These must be EXACTLY 8 bits wide, at least once they are written to
+ * external storage.  Note that when using the stdio data source/destination
+ * managers, this is also the data type passed to fread/fwrite.
+ */
+
+#ifdef HAVE_UNSIGNED_CHAR
+
+typedef unsigned char JOCTET;
+#define GETJOCTET(value)  (value)
+
+#else /* not HAVE_UNSIGNED_CHAR */
+
+typedef char JOCTET;
+#ifdef CHAR_IS_UNSIGNED
+#define GETJOCTET(value)  (value)
+#else
+#define GETJOCTET(value)  ((value) & 0xFF)
+#endif /* CHAR_IS_UNSIGNED */
+
+#endif /* HAVE_UNSIGNED_CHAR */
+
+
+/* These typedefs are used for various table entries and so forth.
+ * They must be at least as wide as specified; but making them too big
+ * won't cost a huge amount of memory, so we don't provide special
+ * extraction code like we did for JSAMPLE.  (In other words, these
+ * typedefs live at a different point on the speed/space tradeoff curve.)
+ */
+
+/* UINT8 must hold at least the values 0..255. */
+
+#ifdef HAVE_UNSIGNED_CHAR
+typedef unsigned char UINT8;
+#else /* not HAVE_UNSIGNED_CHAR */
+#ifdef CHAR_IS_UNSIGNED
+typedef char UINT8;
+#else /* not CHAR_IS_UNSIGNED */
+typedef short UINT8;
+#endif /* CHAR_IS_UNSIGNED */
+#endif /* HAVE_UNSIGNED_CHAR */
+
+/* UINT16 must hold at least the values 0..65535. */
+
+#ifdef HAVE_UNSIGNED_SHORT
+typedef unsigned short UINT16;
+#else /* not HAVE_UNSIGNED_SHORT */
+typedef unsigned int UINT16;
+#endif /* HAVE_UNSIGNED_SHORT */
+
+/* INT16 must hold at least the values -32768..32767. */
+
+#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
+typedef short INT16;
+#endif
+
+/* INT32 must hold at least signed 32-bit values. */
+
+#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
+typedef long INT32;
+#endif
+
+/* Datatype used for image dimensions.  The JPEG standard only supports
+ * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
+ * "unsigned int" is sufficient on all machines.  However, if you need to
+ * handle larger images and you don't mind deviating from the spec, you
+ * can change this datatype.
+ */
+
+typedef unsigned int JDIMENSION;
+
+#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
+
+
+/* These macros are used in all function definitions and extern declarations.
+ * You could modify them if you need to change function linkage conventions;
+ * in particular, you'll need to do that to make the library a Windows DLL.
+ * Another application is to make all functions global for use with debuggers
+ * or code profilers that require it.
+ */
+
+/* a function called through method pointers: */
+#define METHODDEF(type)		static type
+/* a function used only in its module: */
+#define LOCAL(type)		static type
+/* a function referenced thru EXTERNs: */
+#define GLOBAL(type)		type
+/* a reference to a GLOBAL function: */
+#define EXTERN(type)		extern type
+
+
+/* This macro is used to declare a "method", that is, a function pointer.
+ * We want to supply prototype parameters if the compiler can cope.
+ * Note that the arglist parameter must be parenthesized!
+ * Again, you can customize this if you need special linkage keywords.
+ */
+
+#ifdef HAVE_PROTOTYPES
+#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
+#else
+#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
+#endif
+
+
+/* Here is the pseudo-keyword for declaring pointers that must be "far"
+ * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
+ * by just saying "FAR *" where such a pointer is needed.  In a few places
+ * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
+ */
+
+#ifdef NEED_FAR_POINTERS
+#define FAR  far
+#else
+#define FAR
+#endif
+
+
+/*
+ * On a few systems, type boolean and/or its values FALSE, TRUE may appear
+ * in standard header files.  Or you may have conflicts with application-
+ * specific header files that you want to include together with these files.
+ * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
+ */
+
+#ifndef HAVE_BOOLEAN
+typedef int boolean;
+#endif
+#ifndef FALSE			/* in case these macros already exist */
+#define FALSE	0		/* values of boolean */
+#endif
+#ifndef TRUE
+#define TRUE	1
+#endif
+
+
+/*
+ * The remaining options affect code selection within the JPEG library,
+ * but they don't need to be visible to most applications using the library.
+ * To minimize application namespace pollution, the symbols won't be
+ * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
+ */
+
+#ifdef JPEG_INTERNALS
+#define JPEG_INTERNAL_OPTIONS
+#endif
+
+#ifdef JPEG_INTERNAL_OPTIONS
+
+
+/*
+ * These defines indicate whether to include various optional functions.
+ * Undefining some of these symbols will produce a smaller but less capable
+ * library.  Note that you can leave certain source files out of the
+ * compilation/linking process if you've #undef'd the corresponding symbols.
+ * (You may HAVE to do that if your compiler doesn't like null source files.)
+ */
+
+/* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
+
+/* Capability options common to encoder and decoder: */
+
+#define DCT_ISLOW_SUPPORTED	/* slow but accurate integer algorithm */
+#define DCT_IFAST_SUPPORTED	/* faster, less accurate integer method */
+#define DCT_FLOAT_SUPPORTED	/* floating-point: accurate, fast on fast HW */
+
+/* Encoder capability options: */
+
+#undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
+#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define C_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
+#define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */
+/* Note: if you selected 12-bit data precision, it is dangerous to turn off
+ * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
+ * precision, so jchuff.c normally uses entropy optimization to compute
+ * usable tables for higher precision.  If you don't want to do optimization,
+ * you'll have to supply different default Huffman tables.
+ * The exact same statements apply for progressive JPEG: the default tables
+ * don't work for progressive mode.  (This may get fixed, however.)
+ */
+#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
+
+/* Decoder capability options: */
+
+#undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
+#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define D_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
+#define SAVE_MARKERS_SUPPORTED	    /* jpeg_save_markers() needed? */
+#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
+#define IDCT_SCALING_SUPPORTED	    /* Output rescaling via IDCT? */
+#undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
+#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
+#define QUANT_1PASS_SUPPORTED	    /* 1-pass color quantization? */
+#define QUANT_2PASS_SUPPORTED	    /* 2-pass color quantization? */
+
+/* more capability options later, no doubt */
+
+
+/*
+ * Ordering of RGB data in scanlines passed to or from the application.
+ * If your application wants to deal with data in the order B,G,R, just
+ * change these macros.  You can also deal with formats such as R,G,B,X
+ * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
+ * the offsets will also change the order in which colormap data is organized.
+ * RESTRICTIONS:
+ * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
+ * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
+ *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
+ * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
+ *    is not 3 (they don't understand about dummy color components!).  So you
+ *    can't use color quantization if you change that value.
+ */
+
+#define RGB_RED		0	/* Offset of Red in an RGB scanline element */
+#define RGB_GREEN	1	/* Offset of Green */
+#define RGB_BLUE	2	/* Offset of Blue */
+#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */
+
+
+/* Definitions for speed-related optimizations. */
+
+
+/* If your compiler supports inline functions, define INLINE
+ * as the inline keyword; otherwise define it as empty.
+ */
+
+#ifndef INLINE
+#ifdef __GNUC__			/* for instance, GNU C knows about inline */
+#define INLINE __inline__
+#endif
+#ifndef INLINE
+#define INLINE			/* default is to define it as empty */
+#endif
+#endif
+
+
+/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
+ * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
+ * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
+ */
+
+#ifndef MULTIPLIER
+#define MULTIPLIER  int		/* type for fastest integer multiply */
+#endif
+
+
+/* FAST_FLOAT should be either float or double, whichever is done faster
+ * by your compiler.  (Note that this type is only used in the floating point
+ * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
+ * Typically, float is faster in ANSI C compilers, while double is faster in
+ * pre-ANSI compilers (because they insist on converting to double anyway).
+ * The code below therefore chooses float if we have ANSI-style prototypes.
+ */
+
+#ifndef FAST_FLOAT
+#ifdef HAVE_PROTOTYPES
+#define FAST_FLOAT  float
+#else
+#define FAST_FLOAT  double
+#endif
+#endif
+
+#endif /* JPEG_INTERNAL_OPTIONS */
Index: branches/scout/projects/colonet/server/vision/libjpeg.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/colonet/server/vision/libjpeg.a
===================================================================
--- branches/scout/projects/colonet/server/vision/libjpeg.a	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/libjpeg.a	(revision 1346)

Property changes on: branches/scout/projects/colonet/server/vision/libjpeg.a
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/colonet/server/vision/vision.h
===================================================================
--- branches/scout/projects/colonet/server/vision/vision.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/vision.h	(revision 1346)
@@ -0,0 +1,18 @@
+/**
+ * Rich Hong's colony vision library.
+ */
+
+#ifndef COLONY_VISION_H
+#define COLONY_VISION_H
+
+typedef struct {
+  int x;
+  int y;
+} VisionPosition;
+
+int vision_init(/*char* filename*/);
+void vision_close(void);
+int vision_get_robot_positions(VisionPosition** positions);
+int getImageBytes(unsigned char *buffer, int length);
+
+#endif
Index: branches/scout/projects/colonet/server/vision/sample.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/colonet/server/vision/sample.jpg
===================================================================
--- branches/scout/projects/colonet/server/vision/sample.jpg	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/sample.jpg	(revision 1346)

Property changes on: branches/scout/projects/colonet/server/vision/sample.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/colonet/server/vision/jpeglib.h
===================================================================
--- branches/scout/projects/colonet/server/vision/jpeglib.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/jpeglib.h	(revision 1346)
@@ -0,0 +1,1096 @@
+/*
+ * jpeglib.h
+ *
+ * Copyright (C) 1991-1998, Thomas G. Lane.
+ * This file is part of the Independent JPEG Group's software.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+ * This file defines the application interface for the JPEG library.
+ * Most applications using the library need only include this file,
+ * and perhaps jerror.h if they want to know the exact error codes.
+ */
+
+#ifndef JPEGLIB_H
+#define JPEGLIB_H
+
+/*
+ * First we include the configuration files that record how this
+ * installation of the JPEG library is set up.  jconfig.h can be
+ * generated automatically for many systems.  jmorecfg.h contains
+ * manual configuration options that most people need not worry about.
+ */
+
+#ifndef JCONFIG_INCLUDED	/* in case jinclude.h already did */
+#include "jconfig.h"		/* widely used configuration options */
+#endif
+#include "jmorecfg.h"		/* seldom changed options */
+
+
+/* Version ID for the JPEG library.
+ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
+ */
+
+#define JPEG_LIB_VERSION  62	/* Version 6b */
+
+
+/* Various constants determining the sizes of things.
+ * All of these are specified by the JPEG standard, so don't change them
+ * if you want to be compatible.
+ */
+
+#define DCTSIZE		    8	/* The basic DCT block is 8x8 samples */
+#define DCTSIZE2	    64	/* DCTSIZE squared; # of elements in a block */
+#define NUM_QUANT_TBLS      4	/* Quantization tables are numbered 0..3 */
+#define NUM_HUFF_TBLS       4	/* Huffman tables are numbered 0..3 */
+#define NUM_ARITH_TBLS      16	/* Arith-coding tables are numbered 0..15 */
+#define MAX_COMPS_IN_SCAN   4	/* JPEG limit on # of components in one scan */
+#define MAX_SAMP_FACTOR     4	/* JPEG limit on sampling factors */
+/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
+ * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
+ * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
+ * to handle it.  We even let you do this from the jconfig.h file.  However,
+ * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
+ * sometimes emits noncompliant files doesn't mean you should too.
+ */
+#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
+#ifndef D_MAX_BLOCKS_IN_MCU
+#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
+#endif
+
+
+/* Data structures for images (arrays of samples and of DCT coefficients).
+ * On 80x86 machines, the image arrays are too big for near pointers,
+ * but the pointer arrays can fit in near memory.
+ */
+
+typedef JSAMPLE FAR *JSAMPROW;	/* ptr to one image row of pixel samples. */
+typedef JSAMPROW *JSAMPARRAY;	/* ptr to some rows (a 2-D sample array) */
+typedef JSAMPARRAY *JSAMPIMAGE;	/* a 3-D sample array: top index is color */
+
+typedef JCOEF JBLOCK[DCTSIZE2];	/* one block of coefficients */
+typedef JBLOCK FAR *JBLOCKROW;	/* pointer to one row of coefficient blocks */
+typedef JBLOCKROW *JBLOCKARRAY;		/* a 2-D array of coefficient blocks */
+typedef JBLOCKARRAY *JBLOCKIMAGE;	/* a 3-D array of coefficient blocks */
+
+typedef JCOEF FAR *JCOEFPTR;	/* useful in a couple of places */
+
+
+/* Types for JPEG compression parameters and working tables. */
+
+
+/* DCT coefficient quantization tables. */
+
+typedef struct {
+  /* This array gives the coefficient quantizers in natural array order
+   * (not the zigzag order in which they are stored in a JPEG DQT marker).
+   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
+   */
+  UINT16 quantval[DCTSIZE2];	/* quantization step for each coefficient */
+  /* This field is used only during compression.  It's initialized FALSE when
+   * the table is created, and set TRUE when it's been output to the file.
+   * You could suppress output of a table by setting this to TRUE.
+   * (See jpeg_suppress_tables for an example.)
+   */
+  boolean sent_table;		/* TRUE when table has been output */
+} JQUANT_TBL;
+
+
+/* Huffman coding tables. */
+
+typedef struct {
+  /* These two fields directly represent the contents of a JPEG DHT marker */
+  UINT8 bits[17];		/* bits[k] = # of symbols with codes of */
+				/* length k bits; bits[0] is unused */
+  UINT8 huffval[256];		/* The symbols, in order of incr code length */
+  /* This field is used only during compression.  It's initialized FALSE when
+   * the table is created, and set TRUE when it's been output to the file.
+   * You could suppress output of a table by setting this to TRUE.
+   * (See jpeg_suppress_tables for an example.)
+   */
+  boolean sent_table;		/* TRUE when table has been output */
+} JHUFF_TBL;
+
+
+/* Basic info about one component (color channel). */
+
+typedef struct {
+  /* These values are fixed over the whole image. */
+  /* For compression, they must be supplied by parameter setup; */
+  /* for decompression, they are read from the SOF marker. */
+  int component_id;		/* identifier for this component (0..255) */
+  int component_index;		/* its index in SOF or cinfo->comp_info[] */
+  int h_samp_factor;		/* horizontal sampling factor (1..4) */
+  int v_samp_factor;		/* vertical sampling factor (1..4) */
+  int quant_tbl_no;		/* quantization table selector (0..3) */
+  /* These values may vary between scans. */
+  /* For compression, they must be supplied by parameter setup; */
+  /* for decompression, they are read from the SOS marker. */
+  /* The decompressor output side may not use these variables. */
+  int dc_tbl_no;		/* DC entropy table selector (0..3) */
+  int ac_tbl_no;		/* AC entropy table selector (0..3) */
+  
+  /* Remaining fields should be treated as private by applications. */
+  
+  /* These values are computed during compression or decompression startup: */
+  /* Component's size in DCT blocks.
+   * Any dummy blocks added to complete an MCU are not counted; therefore
+   * these values do not depend on whether a scan is interleaved or not.
+   */
+  JDIMENSION width_in_blocks;
+  JDIMENSION height_in_blocks;
+  /* Size of a DCT block in samples.  Always DCTSIZE for compression.
+   * For decompression this is the size of the output from one DCT block,
+   * reflecting any scaling we choose to apply during the IDCT step.
+   * Values of 1,2,4,8 are likely to be supported.  Note that different
+   * components may receive different IDCT scalings.
+   */
+  int DCT_scaled_size;
+  /* The downsampled dimensions are the component's actual, unpadded number
+   * of samples at the main buffer (preprocessing/compression interface), thus
+   * downsampled_width = ceil(image_width * Hi/Hmax)
+   * and similarly for height.  For decompression, IDCT scaling is included, so
+   * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
+   */
+  JDIMENSION downsampled_width;	 /* actual width in samples */
+  JDIMENSION downsampled_height; /* actual height in samples */
+  /* This flag is used only for decompression.  In cases where some of the
+   * components will be ignored (eg grayscale output from YCbCr image),
+   * we can skip most computations for the unused components.
+   */
+  boolean component_needed;	/* do we need the value of this component? */
+
+  /* These values are computed before starting a scan of the component. */
+  /* The decompressor output side may not use these variables. */
+  int MCU_width;		/* number of blocks per MCU, horizontally */
+  int MCU_height;		/* number of blocks per MCU, vertically */
+  int MCU_blocks;		/* MCU_width * MCU_height */
+  int MCU_sample_width;		/* MCU width in samples, MCU_width*DCT_scaled_size */
+  int last_col_width;		/* # of non-dummy blocks across in last MCU */
+  int last_row_height;		/* # of non-dummy blocks down in last MCU */
+
+  /* Saved quantization table for component; NULL if none yet saved.
+   * See jdinput.c comments about the need for this information.
+   * This field is currently used only for decompression.
+   */
+  JQUANT_TBL * quant_table;
+
+  /* Private per-component storage for DCT or IDCT subsystem. */
+  void * dct_table;
+} jpeg_component_info;
+
+
+/* The script for encoding a multiple-scan file is an array of these: */
+
+typedef struct {
+  int comps_in_scan;		/* number of components encoded in this scan */
+  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
+  int Ss, Se;			/* progressive JPEG spectral selection parms */
+  int Ah, Al;			/* progressive JPEG successive approx. parms */
+} jpeg_scan_info;
+
+/* The decompressor can save APPn and COM markers in a list of these: */
+
+typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
+
+struct jpeg_marker_struct {
+  jpeg_saved_marker_ptr next;	/* next in list, or NULL */
+  UINT8 marker;			/* marker code: JPEG_COM, or JPEG_APP0+n */
+  unsigned int original_length;	/* # bytes of data in the file */
+  unsigned int data_length;	/* # bytes of data saved at data[] */
+  JOCTET FAR * data;		/* the data contained in the marker */
+  /* the marker length word is not counted in data_length or original_length */
+};
+
+/* Known color spaces. */
+
+typedef enum {
+	JCS_UNKNOWN,		/* error/unspecified */
+	JCS_GRAYSCALE,		/* monochrome */
+	JCS_RGB,		/* red/green/blue */
+	JCS_YCbCr,		/* Y/Cb/Cr (also known as YUV) */
+	JCS_CMYK,		/* C/M/Y/K */
+	JCS_YCCK		/* Y/Cb/Cr/K */
+} J_COLOR_SPACE;
+
+/* DCT/IDCT algorithm options. */
+
+typedef enum {
+	JDCT_ISLOW,		/* slow but accurate integer algorithm */
+	JDCT_IFAST,		/* faster, less accurate integer method */
+	JDCT_FLOAT		/* floating-point: accurate, fast on fast HW */
+} J_DCT_METHOD;
+
+#ifndef JDCT_DEFAULT		/* may be overridden in jconfig.h */
+#define JDCT_DEFAULT  JDCT_ISLOW
+#endif
+#ifndef JDCT_FASTEST		/* may be overridden in jconfig.h */
+#define JDCT_FASTEST  JDCT_IFAST
+#endif
+
+/* Dithering options for decompression. */
+
+typedef enum {
+	JDITHER_NONE,		/* no dithering */
+	JDITHER_ORDERED,	/* simple ordered dither */
+	JDITHER_FS		/* Floyd-Steinberg error diffusion dither */
+} J_DITHER_MODE;
+
+
+/* Common fields between JPEG compression and decompression master structs. */
+
+#define jpeg_common_fields \
+  struct jpeg_error_mgr * err;	/* Error handler module */\
+  struct jpeg_memory_mgr * mem;	/* Memory manager module */\
+  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
+  void * client_data;		/* Available for use by application */\
+  boolean is_decompressor;	/* So common code can tell which is which */\
+  int global_state		/* For checking call sequence validity */
+
+/* Routines that are to be used by both halves of the library are declared
+ * to receive a pointer to this structure.  There are no actual instances of
+ * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
+ */
+struct jpeg_common_struct {
+  jpeg_common_fields;		/* Fields common to both master struct types */
+  /* Additional fields follow in an actual jpeg_compress_struct or
+   * jpeg_decompress_struct.  All three structs must agree on these
+   * initial fields!  (This would be a lot cleaner in C++.)
+   */
+};
+
+typedef struct jpeg_common_struct * j_common_ptr;
+typedef struct jpeg_compress_struct * j_compress_ptr;
+typedef struct jpeg_decompress_struct * j_decompress_ptr;
+
+
+/* Master record for a compression instance */
+
+struct jpeg_compress_struct {
+  jpeg_common_fields;		/* Fields shared with jpeg_decompress_struct */
+
+  /* Destination for compressed data */
+  struct jpeg_destination_mgr * dest;
+
+  /* Description of source image --- these fields must be filled in by
+   * outer application before starting compression.  in_color_space must
+   * be correct before you can even call jpeg_set_defaults().
+   */
+
+  JDIMENSION image_width;	/* input image width */
+  JDIMENSION image_height;	/* input image height */
+  int input_components;		/* # of color components in input image */
+  J_COLOR_SPACE in_color_space;	/* colorspace of input image */
+
+  double input_gamma;		/* image gamma of input image */
+
+  /* Compression parameters --- these fields must be set before calling
+   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
+   * initialize everything to reasonable defaults, then changing anything
+   * the application specifically wants to change.  That way you won't get
+   * burnt when new parameters are added.  Also note that there are several
+   * helper routines to simplify changing parameters.
+   */
+
+  int data_precision;		/* bits of precision in image data */
+
+  int num_components;		/* # of color components in JPEG image */
+  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+  jpeg_component_info * comp_info;
+  /* comp_info[i] describes component that appears i'th in SOF */
+  
+  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
+  /* ptrs to coefficient quantization tables, or NULL if not defined */
+  
+  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  /* ptrs to Huffman coding tables, or NULL if not defined */
+  
+  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+  int num_scans;		/* # of entries in scan_info array */
+  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
+  /* The default value of scan_info is NULL, which causes a single-scan
+   * sequential JPEG file to be emitted.  To create a multi-scan file,
+   * set num_scans and scan_info to point to an array of scan definitions.
+   */
+
+  boolean raw_data_in;		/* TRUE=caller supplies downsampled data */
+  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
+  boolean optimize_coding;	/* TRUE=optimize entropy encoding parms */
+  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
+  int smoothing_factor;		/* 1..100, or 0 for no input smoothing */
+  J_DCT_METHOD dct_method;	/* DCT algorithm selector */
+
+  /* The restart interval can be specified in absolute MCUs by setting
+   * restart_interval, or in MCU rows by setting restart_in_rows
+   * (in which case the correct restart_interval will be figured
+   * for each scan).
+   */
+  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
+  int restart_in_rows;		/* if > 0, MCU rows per restart interval */
+
+  /* Parameters controlling emission of special markers. */
+
+  boolean write_JFIF_header;	/* should a JFIF marker be written? */
+  UINT8 JFIF_major_version;	/* What to write for the JFIF version number */
+  UINT8 JFIF_minor_version;
+  /* These three values are not used by the JPEG code, merely copied */
+  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
+  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
+  /* ratio is defined by X_density/Y_density even when density_unit=0. */
+  UINT8 density_unit;		/* JFIF code for pixel size units */
+  UINT16 X_density;		/* Horizontal pixel density */
+  UINT16 Y_density;		/* Vertical pixel density */
+  boolean write_Adobe_marker;	/* should an Adobe marker be written? */
+  
+  /* State variable: index of next scanline to be written to
+   * jpeg_write_scanlines().  Application may use this to control its
+   * processing loop, e.g., "while (next_scanline < image_height)".
+   */
+
+  JDIMENSION next_scanline;	/* 0 .. image_height-1  */
+
+  /* Remaining fields are known throughout compressor, but generally
+   * should not be touched by a surrounding application.
+   */
+
+  /*
+   * These fields are computed during compression startup
+   */
+  boolean progressive_mode;	/* TRUE if scan script uses progressive mode */
+  int max_h_samp_factor;	/* largest h_samp_factor */
+  int max_v_samp_factor;	/* largest v_samp_factor */
+
+  JDIMENSION total_iMCU_rows;	/* # of iMCU rows to be input to coef ctlr */
+  /* The coefficient controller receives data in units of MCU rows as defined
+   * for fully interleaved scans (whether the JPEG file is interleaved or not).
+   * There are v_samp_factor * DCTSIZE sample rows of each component in an
+   * "iMCU" (interleaved MCU) row.
+   */
+  
+  /*
+   * These fields are valid during any one scan.
+   * They describe the components and MCUs actually appearing in the scan.
+   */
+  int comps_in_scan;		/* # of JPEG components in this scan */
+  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
+  /* *cur_comp_info[i] describes component that appears i'th in SOS */
+  
+  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
+  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
+  
+  int blocks_in_MCU;		/* # of DCT blocks per MCU */
+  int MCU_membership[C_MAX_BLOCKS_IN_MCU];
+  /* MCU_membership[i] is index in cur_comp_info of component owning */
+  /* i'th block in an MCU */
+
+  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
+
+  /*
+   * Links to compression subobjects (methods and private variables of modules)
+   */
+  struct jpeg_comp_master * master;
+  struct jpeg_c_main_controller * main;
+  struct jpeg_c_prep_controller * prep;
+  struct jpeg_c_coef_controller * coef;
+  struct jpeg_marker_writer * marker;
+  struct jpeg_color_converter * cconvert;
+  struct jpeg_downsampler * downsample;
+  struct jpeg_forward_dct * fdct;
+  struct jpeg_entropy_encoder * entropy;
+  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
+  int script_space_size;
+};
+
+
+/* Master record for a decompression instance */
+
+struct jpeg_decompress_struct {
+  jpeg_common_fields;		/* Fields shared with jpeg_compress_struct */
+
+  /* Source of compressed data */
+  struct jpeg_source_mgr * src;
+
+  /* Basic description of image --- filled in by jpeg_read_header(). */
+  /* Application may inspect these values to decide how to process image. */
+
+  JDIMENSION image_width;	/* nominal image width (from SOF marker) */
+  JDIMENSION image_height;	/* nominal image height */
+  int num_components;		/* # of color components in JPEG image */
+  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+  /* Decompression processing parameters --- these fields must be set before
+   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
+   * them to default values.
+   */
+
+  J_COLOR_SPACE out_color_space; /* colorspace for output */
+
+  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
+
+  double output_gamma;		/* image gamma wanted in output */
+
+  boolean buffered_image;	/* TRUE=multiple output passes */
+  boolean raw_data_out;		/* TRUE=downsampled data wanted */
+
+  J_DCT_METHOD dct_method;	/* IDCT algorithm selector */
+  boolean do_fancy_upsampling;	/* TRUE=apply fancy upsampling */
+  boolean do_block_smoothing;	/* TRUE=apply interblock smoothing */
+
+  boolean quantize_colors;	/* TRUE=colormapped output wanted */
+  /* the following are ignored if not quantize_colors: */
+  J_DITHER_MODE dither_mode;	/* type of color dithering to use */
+  boolean two_pass_quantize;	/* TRUE=use two-pass color quantization */
+  int desired_number_of_colors;	/* max # colors to use in created colormap */
+  /* these are significant only in buffered-image mode: */
+  boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */
+  boolean enable_external_quant;/* enable future use of external colormap */
+  boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */
+
+  /* Description of actual output image that will be returned to application.
+   * These fields are computed by jpeg_start_decompress().
+   * You can also use jpeg_calc_output_dimensions() to determine these values
+   * in advance of calling jpeg_start_decompress().
+   */
+
+  JDIMENSION output_width;	/* scaled image width */
+  JDIMENSION output_height;	/* scaled image height */
+  int out_color_components;	/* # of color components in out_color_space */
+  int output_components;	/* # of color components returned */
+  /* output_components is 1 (a colormap index) when quantizing colors;
+   * otherwise it equals out_color_components.
+   */
+  int rec_outbuf_height;	/* min recommended height of scanline buffer */
+  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
+   * high, space and time will be wasted due to unnecessary data copying.
+   * Usually rec_outbuf_height will be 1 or 2, at most 4.
+   */
+
+  /* When quantizing colors, the output colormap is described by these fields.
+   * The application can supply a colormap by setting colormap non-NULL before
+   * calling jpeg_start_decompress; otherwise a colormap is created during
+   * jpeg_start_decompress or jpeg_start_output.
+   * The map has out_color_components rows and actual_number_of_colors columns.
+   */
+  int actual_number_of_colors;	/* number of entries in use */
+  JSAMPARRAY colormap;		/* The color map as a 2-D pixel array */
+
+  /* State variables: these variables indicate the progress of decompression.
+   * The application may examine these but must not modify them.
+   */
+
+  /* Row index of next scanline to be read from jpeg_read_scanlines().
+   * Application may use this to control its processing loop, e.g.,
+   * "while (output_scanline < output_height)".
+   */
+  JDIMENSION output_scanline;	/* 0 .. output_height-1  */
+
+  /* Current input scan number and number of iMCU rows completed in scan.
+   * These indicate the progress of the decompressor input side.
+   */
+  int input_scan_number;	/* Number of SOS markers seen so far */
+  JDIMENSION input_iMCU_row;	/* Number of iMCU rows completed */
+
+  /* The "output scan number" is the notional scan being displayed by the
+   * output side.  The decompressor will not allow output scan/row number
+   * to get ahead of input scan/row, but it can fall arbitrarily far behind.
+   */
+  int output_scan_number;	/* Nominal scan number being displayed */
+  JDIMENSION output_iMCU_row;	/* Number of iMCU rows read */
+
+  /* Current progression status.  coef_bits[c][i] indicates the precision
+   * with which component c's DCT coefficient i (in zigzag order) is known.
+   * It is -1 when no data has yet been received, otherwise it is the point
+   * transform (shift) value for the most recent scan of the coefficient
+   * (thus, 0 at completion of the progression).
+   * This pointer is NULL when reading a non-progressive file.
+   */
+  int (*coef_bits)[DCTSIZE2];	/* -1 or current Al value for each coef */
+
+  /* Internal JPEG parameters --- the application usually need not look at
+   * these fields.  Note that the decompressor output side may not use
+   * any parameters that can change between scans.
+   */
+
+  /* Quantization and Huffman tables are carried forward across input
+   * datastreams when processing abbreviated JPEG datastreams.
+   */
+
+  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
+  /* ptrs to coefficient quantization tables, or NULL if not defined */
+
+  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  /* ptrs to Huffman coding tables, or NULL if not defined */
+
+  /* These parameters are never carried across datastreams, since they
+   * are given in SOF/SOS markers or defined to be reset by SOI.
+   */
+
+  int data_precision;		/* bits of precision in image data */
+
+  jpeg_component_info * comp_info;
+  /* comp_info[i] describes component that appears i'th in SOF */
+
+  boolean progressive_mode;	/* TRUE if SOFn specifies progressive mode */
+  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
+
+  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
+
+  /* These fields record data obtained from optional markers recognized by
+   * the JPEG library.
+   */
+  boolean saw_JFIF_marker;	/* TRUE iff a JFIF APP0 marker was found */
+  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
+  UINT8 JFIF_major_version;	/* JFIF version number */
+  UINT8 JFIF_minor_version;
+  UINT8 density_unit;		/* JFIF code for pixel size units */
+  UINT16 X_density;		/* Horizontal pixel density */
+  UINT16 Y_density;		/* Vertical pixel density */
+  boolean saw_Adobe_marker;	/* TRUE iff an Adobe APP14 marker was found */
+  UINT8 Adobe_transform;	/* Color transform code from Adobe marker */
+
+  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
+
+  /* Aside from the specific data retained from APPn markers known to the
+   * library, the uninterpreted contents of any or all APPn and COM markers
+   * can be saved in a list for examination by the application.
+   */
+  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
+
+  /* Remaining fields are known throughout decompressor, but generally
+   * should not be touched by a surrounding application.
+   */
+
+  /*
+   * These fields are computed during decompression startup
+   */
+  int max_h_samp_factor;	/* largest h_samp_factor */
+  int max_v_samp_factor;	/* largest v_samp_factor */
+
+  int min_DCT_scaled_size;	/* smallest DCT_scaled_size of any component */
+
+  JDIMENSION total_iMCU_rows;	/* # of iMCU rows in image */
+  /* The coefficient controller's input and output progress is measured in
+   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
+   * in fully interleaved JPEG scans, but are used whether the scan is
+   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
+   * rows of each component.  Therefore, the IDCT output contains
+   * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
+   */
+
+  JSAMPLE * sample_range_limit; /* table for fast range-limiting */
+
+  /*
+   * These fields are valid during any one scan.
+   * They describe the components and MCUs actually appearing in the scan.
+   * Note that the decompressor output side must not use these fields.
+   */
+  int comps_in_scan;		/* # of JPEG components in this scan */
+  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
+  /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
+  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
+
+  int blocks_in_MCU;		/* # of DCT blocks per MCU */
+  int MCU_membership[D_MAX_BLOCKS_IN_MCU];
+  /* MCU_membership[i] is index in cur_comp_info of component owning */
+  /* i'th block in an MCU */
+
+  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
+
+  /* This field is shared between entropy decoder and marker parser.
+   * It is either zero or the code of a JPEG marker that has been
+   * read from the data source, but has not yet been processed.
+   */
+  int unread_marker;
+
+  /*
+   * Links to decompression subobjects (methods, private variables of modules)
+   */
+  struct jpeg_decomp_master * master;
+  struct jpeg_d_main_controller * main;
+  struct jpeg_d_coef_controller * coef;
+  struct jpeg_d_post_controller * post;
+  struct jpeg_input_controller * inputctl;
+  struct jpeg_marker_reader * marker;
+  struct jpeg_entropy_decoder * entropy;
+  struct jpeg_inverse_dct * idct;
+  struct jpeg_upsampler * upsample;
+  struct jpeg_color_deconverter * cconvert;
+  struct jpeg_color_quantizer * cquantize;
+};
+
+
+/* "Object" declarations for JPEG modules that may be supplied or called
+ * directly by the surrounding application.
+ * As with all objects in the JPEG library, these structs only define the
+ * publicly visible methods and state variables of a module.  Additional
+ * private fields may exist after the public ones.
+ */
+
+
+/* Error handler object */
+
+struct jpeg_error_mgr {
+  /* Error exit handler: does not return to caller */
+  JMETHOD(void, error_exit, (j_common_ptr cinfo));
+  /* Conditionally emit a trace or warning message */
+  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
+  /* Routine that actually outputs a trace or error message */
+  JMETHOD(void, output_message, (j_common_ptr cinfo));
+  /* Format a message string for the most recent JPEG error or message */
+  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
+#define JMSG_LENGTH_MAX  200	/* recommended size of format_message buffer */
+  /* Reset error state variables at start of a new image */
+  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
+  
+  /* The message ID code and any parameters are saved here.
+   * A message can have one string parameter or up to 8 int parameters.
+   */
+  int msg_code;
+#define JMSG_STR_PARM_MAX  80
+  union {
+    int i[8];
+    char s[JMSG_STR_PARM_MAX];
+  } msg_parm;
+  
+  /* Standard state variables for error facility */
+  
+  int trace_level;		/* max msg_level that will be displayed */
+  
+  /* For recoverable corrupt-data errors, we emit a warning message,
+   * but keep going unless emit_message chooses to abort.  emit_message
+   * should count warnings in num_warnings.  The surrounding application
+   * can check for bad data by seeing if num_warnings is nonzero at the
+   * end of processing.
+   */
+  long num_warnings;		/* number of corrupt-data warnings */
+
+  /* These fields point to the table(s) of error message strings.
+   * An application can change the table pointer to switch to a different
+   * message list (typically, to change the language in which errors are
+   * reported).  Some applications may wish to add additional error codes
+   * that will be handled by the JPEG library error mechanism; the second
+   * table pointer is used for this purpose.
+   *
+   * First table includes all errors generated by JPEG library itself.
+   * Error code 0 is reserved for a "no such error string" message.
+   */
+  const char * const * jpeg_message_table; /* Library errors */
+  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
+  /* Second table can be added by application (see cjpeg/djpeg for example).
+   * It contains strings numbered first_addon_message..last_addon_message.
+   */
+  const char * const * addon_message_table; /* Non-library errors */
+  int first_addon_message;	/* code for first string in addon table */
+  int last_addon_message;	/* code for last string in addon table */
+};
+
+
+/* Progress monitor object */
+
+struct jpeg_progress_mgr {
+  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
+
+  long pass_counter;		/* work units completed in this pass */
+  long pass_limit;		/* total number of work units in this pass */
+  int completed_passes;		/* passes completed so far */
+  int total_passes;		/* total number of passes expected */
+};
+
+
+/* Data destination object for compression */
+
+struct jpeg_destination_mgr {
+  JOCTET * next_output_byte;	/* => next byte to write in buffer */
+  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
+
+  JMETHOD(void, init_destination, (j_compress_ptr cinfo));
+  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
+  JMETHOD(void, term_destination, (j_compress_ptr cinfo));
+};
+
+
+/* Data source object for decompression */
+
+struct jpeg_source_mgr {
+  const JOCTET * next_input_byte; /* => next byte to read from buffer */
+  size_t bytes_in_buffer;	/* # of bytes remaining in buffer */
+
+  JMETHOD(void, init_source, (j_decompress_ptr cinfo));
+  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
+  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
+  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
+  JMETHOD(void, term_source, (j_decompress_ptr cinfo));
+};
+
+
+/* Memory manager object.
+ * Allocates "small" objects (a few K total), "large" objects (tens of K),
+ * and "really big" objects (virtual arrays with backing store if needed).
+ * The memory manager does not allow individual objects to be freed; rather,
+ * each created object is assigned to a pool, and whole pools can be freed
+ * at once.  This is faster and more convenient than remembering exactly what
+ * to free, especially where malloc()/free() are not too speedy.
+ * NB: alloc routines never return NULL.  They exit to error_exit if not
+ * successful.
+ */
+
+#define JPOOL_PERMANENT	0	/* lasts until master record is destroyed */
+#define JPOOL_IMAGE	1	/* lasts until done with image/datastream */
+#define JPOOL_NUMPOOLS	2
+
+typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
+typedef struct jvirt_barray_control * jvirt_barray_ptr;
+
+
+struct jpeg_memory_mgr {
+  /* Method pointers */
+  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
+				size_t sizeofobject));
+  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
+				     size_t sizeofobject));
+  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
+				     JDIMENSION samplesperrow,
+				     JDIMENSION numrows));
+  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
+				      JDIMENSION blocksperrow,
+				      JDIMENSION numrows));
+  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
+						  int pool_id,
+						  boolean pre_zero,
+						  JDIMENSION samplesperrow,
+						  JDIMENSION numrows,
+						  JDIMENSION maxaccess));
+  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
+						  int pool_id,
+						  boolean pre_zero,
+						  JDIMENSION blocksperrow,
+						  JDIMENSION numrows,
+						  JDIMENSION maxaccess));
+  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
+  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
+					   jvirt_sarray_ptr ptr,
+					   JDIMENSION start_row,
+					   JDIMENSION num_rows,
+					   boolean writable));
+  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
+					    jvirt_barray_ptr ptr,
+					    JDIMENSION start_row,
+					    JDIMENSION num_rows,
+					    boolean writable));
+  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
+  JMETHOD(void, self_destruct, (j_common_ptr cinfo));
+
+  /* Limit on memory allocation for this JPEG object.  (Note that this is
+   * merely advisory, not a guaranteed maximum; it only affects the space
+   * used for virtual-array buffers.)  May be changed by outer application
+   * after creating the JPEG object.
+   */
+  long max_memory_to_use;
+
+  /* Maximum allocation request accepted by alloc_large. */
+  long max_alloc_chunk;
+};
+
+
+/* Routine signature for application-supplied marker processing methods.
+ * Need not pass marker code since it is stored in cinfo->unread_marker.
+ */
+typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
+
+
+/* Declarations for routines called by application.
+ * The JPP macro hides prototype parameters from compilers that can't cope.
+ * Note JPP requires double parentheses.
+ */
+
+#ifdef HAVE_PROTOTYPES
+#define JPP(arglist)	arglist
+#else
+#define JPP(arglist)	()
+#endif
+
+
+/* Short forms of external names for systems with brain-damaged linkers.
+ * We shorten external names to be unique in the first six letters, which
+ * is good enough for all known systems.
+ * (If your compiler itself needs names to be unique in less than 15 
+ * characters, you are out of luck.  Get a better compiler.)
+ */
+
+#ifdef NEED_SHORT_EXTERNAL_NAMES
+#define jpeg_std_error		jStdError
+#define jpeg_CreateCompress	jCreaCompress
+#define jpeg_CreateDecompress	jCreaDecompress
+#define jpeg_destroy_compress	jDestCompress
+#define jpeg_destroy_decompress	jDestDecompress
+#define jpeg_stdio_dest		jStdDest
+#define jpeg_stdio_src		jStdSrc
+#define jpeg_set_defaults	jSetDefaults
+#define jpeg_set_colorspace	jSetColorspace
+#define jpeg_default_colorspace	jDefColorspace
+#define jpeg_set_quality	jSetQuality
+#define jpeg_set_linear_quality	jSetLQuality
+#define jpeg_add_quant_table	jAddQuantTable
+#define jpeg_quality_scaling	jQualityScaling
+#define jpeg_simple_progression	jSimProgress
+#define jpeg_suppress_tables	jSuppressTables
+#define jpeg_alloc_quant_table	jAlcQTable
+#define jpeg_alloc_huff_table	jAlcHTable
+#define jpeg_start_compress	jStrtCompress
+#define jpeg_write_scanlines	jWrtScanlines
+#define jpeg_finish_compress	jFinCompress
+#define jpeg_write_raw_data	jWrtRawData
+#define jpeg_write_marker	jWrtMarker
+#define jpeg_write_m_header	jWrtMHeader
+#define jpeg_write_m_byte	jWrtMByte
+#define jpeg_write_tables	jWrtTables
+#define jpeg_read_header	jReadHeader
+#define jpeg_start_decompress	jStrtDecompress
+#define jpeg_read_scanlines	jReadScanlines
+#define jpeg_finish_decompress	jFinDecompress
+#define jpeg_read_raw_data	jReadRawData
+#define jpeg_has_multiple_scans	jHasMultScn
+#define jpeg_start_output	jStrtOutput
+#define jpeg_finish_output	jFinOutput
+#define jpeg_input_complete	jInComplete
+#define jpeg_new_colormap	jNewCMap
+#define jpeg_consume_input	jConsumeInput
+#define jpeg_calc_output_dimensions	jCalcDimensions
+#define jpeg_save_markers	jSaveMarkers
+#define jpeg_set_marker_processor	jSetMarker
+#define jpeg_read_coefficients	jReadCoefs
+#define jpeg_write_coefficients	jWrtCoefs
+#define jpeg_copy_critical_parameters	jCopyCrit
+#define jpeg_abort_compress	jAbrtCompress
+#define jpeg_abort_decompress	jAbrtDecompress
+#define jpeg_abort		jAbort
+#define jpeg_destroy		jDestroy
+#define jpeg_resync_to_restart	jResyncRestart
+#endif /* NEED_SHORT_EXTERNAL_NAMES */
+
+
+/* Default error-management setup */
+EXTERN(struct jpeg_error_mgr *) jpeg_std_error
+	JPP((struct jpeg_error_mgr * err));
+
+/* Initialization of JPEG compression objects.
+ * jpeg_create_compress() and jpeg_create_decompress() are the exported
+ * names that applications should call.  These expand to calls on
+ * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
+ * passed for version mismatch checking.
+ * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
+ */
+#define jpeg_create_compress(cinfo) \
+    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
+			(size_t) sizeof(struct jpeg_compress_struct))
+#define jpeg_create_decompress(cinfo) \
+    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
+			  (size_t) sizeof(struct jpeg_decompress_struct))
+EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
+				      int version, size_t structsize));
+EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
+					int version, size_t structsize));
+/* Destruction of JPEG compression objects */
+EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
+
+/* Standard data source and destination managers: stdio streams. */
+/* Caller is responsible for opening the file before and closing after. */
+EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
+EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
+
+/* Default parameter setup for compression */
+EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
+/* Compression parameter setup aids */
+EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
+				      J_COLOR_SPACE colorspace));
+EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
+				   boolean force_baseline));
+EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
+					  int scale_factor,
+					  boolean force_baseline));
+EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
+				       const unsigned int *basic_table,
+				       int scale_factor,
+				       boolean force_baseline));
+EXTERN(int) jpeg_quality_scaling JPP((int quality));
+EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
+				       boolean suppress));
+EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
+EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
+
+/* Main entry points for compression */
+EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
+				      boolean write_all_tables));
+EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
+					     JSAMPARRAY scanlines,
+					     JDIMENSION num_lines));
+EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
+
+/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
+					    JSAMPIMAGE data,
+					    JDIMENSION num_lines));
+
+/* Write a special marker.  See libjpeg.doc concerning safe usage. */
+EXTERN(void) jpeg_write_marker
+	JPP((j_compress_ptr cinfo, int marker,
+	     const JOCTET * dataptr, unsigned int datalen));
+/* Same, but piecemeal. */
+EXTERN(void) jpeg_write_m_header
+	JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
+EXTERN(void) jpeg_write_m_byte
+	JPP((j_compress_ptr cinfo, int val));
+
+/* Alternate compression function: just write an abbreviated table file */
+EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
+
+/* Decompression startup: read start of JPEG datastream to see what's there */
+EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
+				  boolean require_image));
+/* Return value is one of: */
+#define JPEG_SUSPENDED		0 /* Suspended due to lack of input data */
+#define JPEG_HEADER_OK		1 /* Found valid image datastream */
+#define JPEG_HEADER_TABLES_ONLY	2 /* Found valid table-specs-only datastream */
+/* If you pass require_image = TRUE (normal case), you need not check for
+ * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
+ * JPEG_SUSPENDED is only possible if you use a data source module that can
+ * give a suspension return (the stdio source module doesn't).
+ */
+
+/* Main entry points for decompression */
+EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
+EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
+					    JSAMPARRAY scanlines,
+					    JDIMENSION max_lines));
+EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
+
+/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
+					   JSAMPIMAGE data,
+					   JDIMENSION max_lines));
+
+/* Additional entry points for buffered-image mode. */
+EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
+EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
+				       int scan_number));
+EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
+EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
+EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
+/* Return value is one of: */
+/* #define JPEG_SUSPENDED	0    Suspended due to lack of input data */
+#define JPEG_REACHED_SOS	1 /* Reached start of new scan */
+#define JPEG_REACHED_EOI	2 /* Reached end of image */
+#define JPEG_ROW_COMPLETED	3 /* Completed one iMCU row */
+#define JPEG_SCAN_COMPLETED	4 /* Completed last iMCU row of a scan */
+
+/* Precalculate output dimensions for current decompression parameters. */
+EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
+
+/* Control saving of COM and APPn markers into marker_list. */
+EXTERN(void) jpeg_save_markers
+	JPP((j_decompress_ptr cinfo, int marker_code,
+	     unsigned int length_limit));
+
+/* Install a special processing method for COM or APPn markers. */
+EXTERN(void) jpeg_set_marker_processor
+	JPP((j_decompress_ptr cinfo, int marker_code,
+	     jpeg_marker_parser_method routine));
+
+/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
+EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
+					  jvirt_barray_ptr * coef_arrays));
+EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
+						j_compress_ptr dstinfo));
+
+/* If you choose to abort compression or decompression before completing
+ * jpeg_finish_(de)compress, then you need to clean up to release memory,
+ * temporary files, etc.  You can just call jpeg_destroy_(de)compress
+ * if you're done with the JPEG object, but if you want to clean it up and
+ * reuse it, call this:
+ */
+EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
+
+/* Generic versions of jpeg_abort and jpeg_destroy that work on either
+ * flavor of JPEG object.  These may be more convenient in some places.
+ */
+EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
+EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
+
+/* Default restart-marker-resync procedure for use by data source modules */
+EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
+					    int desired));
+
+
+/* These marker codes are exported since applications and data source modules
+ * are likely to want to use them.
+ */
+
+#define JPEG_RST0	0xD0	/* RST0 marker code */
+#define JPEG_EOI	0xD9	/* EOI marker code */
+#define JPEG_APP0	0xE0	/* APP0 marker code */
+#define JPEG_COM	0xFE	/* COM marker code */
+
+
+/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
+ * for structure definitions that are never filled in, keep it quiet by
+ * supplying dummy definitions for the various substructures.
+ */
+
+#ifdef INCOMPLETE_TYPES_BROKEN
+#ifndef JPEG_INTERNALS		/* will be defined in jpegint.h */
+struct jvirt_sarray_control { long dummy; };
+struct jvirt_barray_control { long dummy; };
+struct jpeg_comp_master { long dummy; };
+struct jpeg_c_main_controller { long dummy; };
+struct jpeg_c_prep_controller { long dummy; };
+struct jpeg_c_coef_controller { long dummy; };
+struct jpeg_marker_writer { long dummy; };
+struct jpeg_color_converter { long dummy; };
+struct jpeg_downsampler { long dummy; };
+struct jpeg_forward_dct { long dummy; };
+struct jpeg_entropy_encoder { long dummy; };
+struct jpeg_decomp_master { long dummy; };
+struct jpeg_d_main_controller { long dummy; };
+struct jpeg_d_coef_controller { long dummy; };
+struct jpeg_d_post_controller { long dummy; };
+struct jpeg_input_controller { long dummy; };
+struct jpeg_marker_reader { long dummy; };
+struct jpeg_entropy_decoder { long dummy; };
+struct jpeg_inverse_dct { long dummy; };
+struct jpeg_upsampler { long dummy; };
+struct jpeg_color_deconverter { long dummy; };
+struct jpeg_color_quantizer { long dummy; };
+#endif /* JPEG_INTERNALS */
+#endif /* INCOMPLETE_TYPES_BROKEN */
+
+
+/*
+ * The JPEG library modules define JPEG_INTERNALS before including this file.
+ * The internal structure declarations are read only when that is true.
+ * Applications using the library should not include jpegint.h, but may wish
+ * to include jerror.h.
+ */
+
+#ifdef JPEG_INTERNALS
+#include "jpegint.h"		/* fetch private declarations */
+#include "jerror.h"		/* fetch error codes too */
+#endif
+
+#endif /* JPEGLIB_H */
Index: branches/scout/projects/colonet/server/vision/vision_driver.c
===================================================================
--- branches/scout/projects/colonet/server/vision/vision_driver.c	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/vision_driver.c	(revision 1346)
@@ -0,0 +1,40 @@
+/**
+ * Driver for testing vision library.
+ */
+
+#include <vision.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char** argv) {
+  if (vision_init() != 0) {
+    fprintf(stderr, "vision_init failed.\n");
+    return -1;
+  } else {
+    fprintf(stderr, "vision_init succeeded.\n");
+  }
+  
+  while(getchar()!=27)
+  {
+    VisionPosition* positions;
+    int num_positions = vision_get_robot_positions(&positions);
+
+    if (num_positions == -1) {
+      fprintf(stderr, "vision_get_robot_positions failed.\n");
+      return 1;
+    }
+
+    printf("Got %d positions.\n", num_positions);
+
+    int i;
+    for (i = 0; i < num_positions; i++) {
+      printf("%d,%d\n", positions[i].x, positions[i].y);
+    }
+
+    free(positions);
+  }
+  
+  vision_close();
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/vision/jconfig.h
===================================================================
--- branches/scout/projects/colonet/server/vision/jconfig.h	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/jconfig.h	(revision 1346)
@@ -0,0 +1,45 @@
+/* jconfig.h.  Generated automatically by configure.  */
+/* jconfig.cfg --- source file edited by configure script */
+/* see jconfig.doc for explanations */
+
+#define HAVE_PROTOTYPES 
+#define HAVE_UNSIGNED_CHAR 
+#define HAVE_UNSIGNED_SHORT 
+#undef void
+#undef const
+#undef CHAR_IS_UNSIGNED
+#define HAVE_STDDEF_H 
+#define HAVE_STDLIB_H 
+#undef NEED_BSD_STRINGS
+#undef NEED_SYS_TYPES_H
+#undef NEED_FAR_POINTERS
+#undef NEED_SHORT_EXTERNAL_NAMES
+/* Define this if you get warnings about undefined structures. */
+#undef INCOMPLETE_TYPES_BROKEN
+
+#ifdef JPEG_INTERNALS
+
+#undef RIGHT_SHIFT_IS_UNSIGNED
+#define INLINE __inline__
+/* These are for configuring the JPEG memory manager. */
+#undef DEFAULT_MAX_MEM
+#undef NO_MKTEMP
+
+#endif /* JPEG_INTERNALS */
+
+#ifdef JPEG_CJPEG_DJPEG
+
+#define BMP_SUPPORTED		/* BMP image file format */
+#define GIF_SUPPORTED		/* GIF image file format */
+#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */
+#undef RLE_SUPPORTED		/* Utah RLE image file format */
+#define TARGA_SUPPORTED		/* Targa image file format */
+
+#undef TWO_FILE_COMMANDLINE
+#undef NEED_SIGNAL_CATCHER
+#undef DONT_USE_B_MODE
+
+/* Define this if you want percent-done progress reports from cjpeg/djpeg. */
+#undef PROGRESS_REPORT
+
+#endif /* JPEG_CJPEG_DJPEG */
Index: branches/scout/projects/colonet/server/vision/memdst.c
===================================================================
--- branches/scout/projects/colonet/server/vision/memdst.c	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/memdst.c	(revision 1346)
@@ -0,0 +1,109 @@
+/*
+ * Code taken from http://www.codeguru.com/forum/archive/index.php/t-378333.html
+ * by 'clown'
+ */
+
+#include <stdio.h>
+#include "jpeglib.h"
+#include "memdst.h"
+
+/*
+This a custom destination manager for jpeglib that
+enables the use of memory to memory compression.
+
+See IJG documentation for details.
+*/
+typedef struct {
+  struct jpeg_destination_mgr pub; /* base class */
+  JOCTET* buffer; /* buffer start address */
+  int bufsize; /* size of buffer */
+  size_t datasize; /* final size of compressed data */
+  int* outsize; /* user pointer to datasize */
+  int errcount; /* counts up write errors due to
+  buffer overruns */
+} memory_destination_mgr;
+
+typedef memory_destination_mgr* mem_dest_ptr;
+
+/* ------------------------------------------------------------- */
+/* MEMORY DESTINATION INTERFACE METHODS */
+/* ------------------------------------------------------------- */
+
+
+/* This function is called by the library before any data gets written */
+METHODDEF(void)
+init_destination (j_compress_ptr cinfo)
+{
+  mem_dest_ptr dest = (mem_dest_ptr)cinfo->dest;
+
+  dest->pub.next_output_byte = dest->buffer; /* set destination buffer */
+  dest->pub.free_in_buffer = dest->bufsize; /* input buffer size */
+  dest->datasize = 0; /* reset output size */
+  dest->errcount = 0; /* reset error count */
+}
+
+/* This function is called by the library if the buffer fills up
+
+I just reset destination pointer and buffer size here.
+Note that this behavior, while preventing seg faults
+will lead to invalid output streams as data is over-
+written.
+*/
+METHODDEF(boolean)
+empty_output_buffer (j_compress_ptr cinfo)
+{
+  mem_dest_ptr dest = (mem_dest_ptr)cinfo->dest;
+  dest->pub.next_output_byte = dest->buffer;
+  dest->pub.free_in_buffer = dest->bufsize;
+  ++dest->errcount; /* need to increase error count */
+
+  return TRUE;
+}
+
+/* Usually the library wants to flush output here.
+
+I will calculate output buffer size here.
+Note that results become incorrect, once
+empty_output_buffer was called.
+This situation is notified by errcount.
+*/
+METHODDEF(void)
+term_destination (j_compress_ptr cinfo)
+{
+  mem_dest_ptr dest = (mem_dest_ptr)cinfo->dest;
+  dest->datasize = dest->bufsize - dest->pub.free_in_buffer;
+  if (dest->outsize)
+  {
+    if (dest->errcount)
+      *dest->outsize = -1;
+    else
+      *dest->outsize = (int)dest->datasize;
+  }
+}
+
+/* Override the default destination manager initialization
+provided by jpeglib. Since we want to use memory-to-memory
+compression, we need to use our own destination manager.
+*/
+GLOBAL(void)
+jpeg_memory_dest (j_compress_ptr cinfo, JOCTET* buffer, int bufsize, int* outsize)
+{
+  mem_dest_ptr dest;
+
+  /* first call for this instance - need to setup */
+  if (cinfo->dest == 0) {
+    cinfo->dest = (struct jpeg_destination_mgr *)
+    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
+    sizeof (memory_destination_mgr));
+  }
+
+  dest = (mem_dest_ptr) cinfo->dest;
+  dest->bufsize = bufsize;
+  dest->buffer = buffer;
+  dest->outsize = outsize;
+  /* set method callbacks */
+  dest->pub.init_destination = init_destination;
+  dest->pub.empty_output_buffer = empty_output_buffer;
+  dest->pub.term_destination = term_destination;
+}
+
Index: branches/scout/projects/colonet/server/vision/vision.sh
===================================================================
--- branches/scout/projects/colonet/server/vision/vision.sh	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/vision.sh	(revision 1346)
@@ -0,0 +1,8 @@
+#!/bin/sh
+while [ 1 ]
+do
+# only use wget when not on roboclub9
+# wget -q http://roboclub9.frc.ri.cmu.edu/colonet.jpg -O colonet.jpg
+sudo ./vision_driver /var/www/colonet.jpg > /var/www/colonet/locations.txt
+sleep .1s
+done

Property changes on: branches/scout/projects/colonet/server/vision/vision.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/colonet/server/vision/README
===================================================================
--- branches/scout/projects/colonet/server/vision/README	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/README	(revision 1346)
@@ -0,0 +1,6 @@
+Robot Detection by Rich Hong
+
+You need to have OpenCV installed and correct path configuration.
+
+Run "make" to compile.
+Run "./vision.sh" to get robot positions.
Index: branches/scout/projects/colonet/server/vision/fitellipse.c
===================================================================
--- branches/scout/projects/colonet/server/vision/fitellipse.c	(nonexistent)
+++ branches/scout/projects/colonet/server/vision/fitellipse.c	(revision 1346)
@@ -0,0 +1,144 @@
+/**
+ * fitellipse.c
+ * based on opencv's sample program fitellipse.c by Denis Burenkov
+ *
+ * @author Rich Hong
+ * @date 12/05/2007
+ */
+#ifdef _CH_
+#pragma package <opencv>
+#endif
+
+#ifndef _EiC
+#include "cv.h"
+#include "highgui.h"
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+int slider_pos = 200;
+
+// Load the source image. HighGUI use.
+IplImage *image02 = 0, *image03 = 0, *image04 = 0;
+
+void process_image(int h);
+
+int main( int argc, char** argv ) {
+	const char* filename = argc == 2 ? argv[1] : (char*)"colonet.jpg";
+
+	// load image and force it to be grayscale
+	if( (image03 = cvLoadImage(filename, 0)) == 0 ) return -1;
+
+	// Create the destination images
+	image02 = cvCloneImage( image03 );
+	image04 = cvCloneImage( image03 );
+
+	// Create windows.
+	cvNamedWindow("Source", 1);
+	// Show the image.
+	cvShowImage("Source", image03);
+	cvNamedWindow("Result", 1);
+	// Create toolbars. HighGUI use.
+	cvCreateTrackbar( "Threshold", "Result", &slider_pos, 255, process_image );
+	process_image(0);
+		
+	// Wait for a key stroke; the same function arranges events processing
+	cvWaitKey(0);
+
+	cvReleaseImage(&image02);
+	cvReleaseImage(&image03);
+
+	cvDestroyWindow("Source");
+	cvDestroyWindow("Result");
+	return 0;
+}
+
+// Define trackbar callback functon. This function find contours,
+// draw it and approximate it by ellipses.
+void process_image(int h)
+{
+    CvMemStorage* stor;
+    CvSeq* cont;
+    CvBox2D32f* box;
+    CvPoint* PointArray;
+    CvPoint2D32f* PointArray2D32f;
+    
+    // Create dynamic structure and sequence.
+    stor = cvCreateMemStorage(0);
+    cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint) , stor);
+    
+    // Threshold the source image. This needful for cvFindContours().
+    cvThreshold( image03, image02, slider_pos, 255, CV_THRESH_BINARY );
+    
+    // Find all contours.
+    cvFindContours( image02, stor, &cont, sizeof(CvContour), 
+                    CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cvPoint(0,0));
+    
+    // Clear images. IPL use.
+    cvZero(image02);
+    cvZero(image04);
+    
+    // This cycle draw all contours and approximate it by ellipses.
+    for(;cont;cont = cont->h_next)
+    {   
+        int i; // Indicator of cycle.
+        int count = cont->total; // This is number point in contour
+        CvPoint center;
+        CvSize size;
+        
+        // Number point must be more than or equal to 6 (for cvFitEllipse_32f).        
+        if( count < 6 )
+            continue;
+        
+        // Alloc memory for contour point set.    
+        PointArray = (CvPoint*)malloc( count*sizeof(CvPoint) );
+        PointArray2D32f= (CvPoint2D32f*)malloc( count*sizeof(CvPoint2D32f) );
+        
+        // Alloc memory for ellipse data.
+        box = (CvBox2D32f*)malloc(sizeof(CvBox2D32f));
+        
+        // Get contour point set.
+        cvCvtSeqToArray(cont, PointArray, CV_WHOLE_SEQ);
+        
+        // Convert CvPoint set to CvBox2D32f set.
+        for(i=0; i<count; i++)
+        {
+            PointArray2D32f[i].x = (float)PointArray[i].x;
+            PointArray2D32f[i].y = (float)PointArray[i].y;
+        }
+        
+        // Fits ellipse to current contour.
+        cvFitEllipse(PointArray2D32f, count, box);
+        
+        // Draw current contour.
+        cvDrawContours(image04,cont,CV_RGB(255,255,255),CV_RGB(255,255,255),0,1,8,cvPoint(0,0));
+        
+        // Convert ellipse data from float to integer representation.
+        center.x = cvRound(box->center.x);
+        center.y = cvRound(box->center.y);
+        size.width = cvRound(box->size.width*0.5);
+        size.height = cvRound(box->size.height*0.5);
+        box->angle = -box->angle;
+
+	if (size.width>10&&size.height>10&&size.width<20&&size.height<20){
+		//printf("%d %d %d %d\n",center.x,center.y,size.width,size.height);
+        
+		// Draw ellipse.
+       		cvEllipse(image04, center, size,
+		box->angle, 0, 360,
+		CV_RGB(0,0,255), 1, CV_AA, 0);
+	}
+        // Free memory.          
+        free(PointArray);
+        free(PointArray2D32f);
+        free(box);
+    }
+    
+    // Show image. HighGUI use.
+    cvShowImage( "Result", image04 );
+}
+
+#ifdef _EiC
+main(1,"fitellipse.c");
+#endif
+
Index: branches/scout/projects/colonet/server/ColonetServer.cpp
===================================================================
--- branches/scout/projects/colonet/server/ColonetServer.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/ColonetServer.cpp	(revision 1346)
@@ -0,0 +1,336 @@
+/**
+ * @file ColonetServer.cpp
+ *
+ * @brief colonet_server - primary server application for Colonet
+ *
+ * @author Jason Knichel
+ * @author Eugene Marinelli
+ * @date 10/31/06
+ */
+
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/select.h>
+#include <sys/socket.h>
+
+#include <colonet_wireless.h>
+
+#include <ColonetServer.h>
+#include <ConnectionPool.h>
+#include <options.h>
+#include <Log.h>
+
+#define LISTEN_BACKLOG 5
+#define LOG_BUFFER_LENGTH 128
+#define MAX_MSG_BUFFER_LENGTH 128
+#define REFRESH_VIRTUAL_WALL_PERIOD 400
+
+#define u_int32_t unsigned
+
+/**
+ * @brief Default constructor for ColonetServer
+ */
+ColonetServer::ColonetServer() {
+  listen_socket = 0;
+  connection_pool = new ConnectionPool(this);
+}
+
+/**
+ * @brief Destructor for ColonetServer
+ */
+ColonetServer::~ColonetServer() {
+}
+
+/**
+ * @brief Initializes the various elements needed for the server to run
+ *
+ * @param argc The number of command line arguments passed to the program
+ * @param argv The command line arguments passed to the program
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ColonetServer::initialize_server(int argc, char * argv[]) {
+  options_parseCmdLine(argc, argv);
+
+  if (optionsG.logging_enabled) {
+    logger = new Log("colonet_server_log.txt");
+  }
+
+  if (initialize_connection(optionsG.listen_port) < 0) {
+    return -1;
+  }
+
+  if (initialize_wireless() < 0) {
+    fprintf(stderr, "%s: initWireless failed\n", __FUNCTION__);
+    //TODO: Can we continue safely without wireless?
+    //return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Starts the server listening on the socket that was opened for listening
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ColonetServer::start_listening() {
+  if (listen(listen_socket, LISTEN_BACKLOG) < 0) {
+    if (optionsG.logging_enabled) {
+      logger->log_error("\t\nThere was an error telling the socket to listen for connections from clients.  "
+                        "Terminating Server...\n");
+    }
+    return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief The function that is run in the new pthread in order to do the position monitoring
+ *
+ * @param arg the argument to give to the new thread
+ */
+void* loop_position_monitor(void* arg) {
+  PositionMonitor* p = (PositionMonitor*) arg;
+  p->run();
+  return NULL;
+}
+
+/**
+ * @brief This function spawns a new thread to do the position monitoring based off data 
+ *  retrieved from the library that parses the image from the camera
+ */
+int ColonetServer::run_position_monitor() {
+  pthread_t posmon_thread;
+  pthread_create(&posmon_thread, NULL, loop_position_monitor, &position_monitor);
+
+  return 0;
+}
+
+/**
+ * @brief The function that is run in the new pthread in order to do the client processing
+ */
+void ColonetServer::loop_server() {
+  //add the socket that you will listen to connections on to the connection pool
+  connection_pool->add_new_socket_to_pool(listen_socket);
+
+  int accept_socket = 0;
+  struct sockaddr_in client_addr;
+  socklen_t client_addr_size = sizeof(client_addr);
+
+  if (optionsG.logging_enabled) {
+    logger->log_message("Server initialized.  About to start listening for connections");
+  }
+
+  while(1) {
+    //sleep for a little bit so this program doesn't hog cpu
+    usleep(10000);
+
+    //tell the connection pool to look at the file descriptors and see which ones are ready
+    connection_pool->perform_select(listen_socket);
+
+    //either no descriptors are ready or there was an error
+    if (connection_pool->get_number_clients_ready() <= 0) {
+      continue;
+    }
+
+    //check to see if a new client is trying to connect
+    if (connection_pool->is_socket_ready_to_read(listen_socket)) {
+      printf("Something is trying to connect...\n");
+      //accept the connection
+      if ((accept_socket = accept(listen_socket, (struct sockaddr*) &client_addr, &client_addr_size)) < 0) {
+        if (errno == EMFILE) {
+          printf("\tWhen attempting to accept a connection, reached the per process limit of file descriptors."
+		 "  Dropping the new connection.\n");
+          continue;
+        } else {
+          printf("\tThere was an error when attempting to accept a connection");
+        }
+        continue;
+      }
+
+      if (optionsG.logging_enabled) {
+        char log_buffer[LOG_BUFFER_LENGTH];
+        snprintf(log_buffer, LOG_BUFFER_LENGTH, "Client at address %s attempting to connect.",
+								 inet_ntoa(client_addr.sin_addr));
+        logger->log_string(LOG_TYPE_CONNECT, log_buffer);
+      }
+
+      //add the new client to the connection pool
+      if (connection_pool->add_client(accept_socket) < 0) {
+        printf("\tThere was an error when trying to add a client to the connection pool.");
+        continue;
+      }
+
+      if (optionsG.logging_enabled) {
+        char log_buffer[LOG_BUFFER_LENGTH];
+        snprintf(log_buffer, LOG_BUFFER_LENGTH, "Client at address %s successfully added to connection pool.",
+                 inet_ntoa(client_addr.sin_addr));
+        logger->log_string(LOG_TYPE_CONNECT, log_buffer);
+      }
+    }
+
+    //check all the clients in the connection pool
+    if (connection_pool->check_clients() < 0) {
+      printf("\tThere was an error trying to update the clients.");
+    }
+  }
+}
+
+/**
+ * @brief Launchpad function to start loop_server() since callbacks don't support member functions
+ *
+ * @param arg the argument to give to the new thread
+ */
+void * launch_loop_server(void *arg) {
+  ColonetServer *object = (ColonetServer*) arg;
+  object->loop_server();
+  
+  return NULL;
+}
+
+/**
+ * @brief Starts the server running (starts an infinite loop)
+ */
+int ColonetServer::run_server() {
+  pthread_t server_thread;
+  pthread_create(&server_thread, NULL, launch_loop_server, this);
+  
+  return 0;
+}
+
+/**
+ * @brief Main loop of the server, runs periodic tasks
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ColonetServer::run_loop() {
+
+  int refresh_virtual_wall_count = 0;
+  
+  while(1) {
+    //sleep for a little bit so this program doesn't hog cpu
+    usleep(10000);
+
+    /* Refresh virtual wall. */
+    if (refresh_virtual_wall_count++ == REFRESH_VIRTUAL_WALL_PERIOD) {
+      fprintf(stderr, "Sending virtual wall info to robots.\n");
+      refresh_virtual_wall_count = 0;
+      virtual_wall.send_to_robots();
+    }
+  }
+  
+  return 0;
+}
+
+/**
+ * @brief when the server receives a new wireless message, it calls this function to process it
+ *
+ * @param source - ID of robot that message is from.
+ * @param dest - ID of internet client to send message to.
+ * @param data - Data to send to internet client.
+ * @param len - Length of the data param.
+ */
+int ColonetServer::process_received_wireless_message(int dest, char* data, int len) {
+  //try to pass the robot's response onto the client it wanted to respond to
+  if (connection_pool->write_to_client(dest, data, len) == ERROR_INVALID_CLIENT_ID) {
+    printf("The robot wanted to pass the data to a client not in the pool.\n");
+    return -1;
+  }
+  printf("Processing data from robot: %s\n", data);
+  return 0;
+}
+
+/**
+ * @brief Initializes the wireless
+ *
+ * @return 0 on success, negative error code on error
+ */
+int ColonetServer::initialize_wireless() {
+  char* log_filename = NULL;
+
+  if (optionsG.logging_enabled) {
+    printf("Logging enabled. Log filename: %s\n", optionsG.log_filename);
+    log_filename = optionsG.log_filename;
+  } else {
+    printf("Logging disabled.\n");
+  }
+
+  //initialize the wireless library giving it the port and the log file name
+  if (colonet_wl_init(optionsG.wireless_port, log_filename) != 0) {
+    fprintf(stderr, "ERROR - colonet_wl_init failed.\n");
+    return -1;
+  }
+
+  //call the function that will start the thread that will listen for wireless messages
+  if (colonet_wl_run_listener_thread()) {
+    fprintf(stderr, "%s: colonet_wl_run_listener_thread failed.\n", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Initialize a connection to listen on
+ *
+ * @port The port to try to open to listen on
+ *
+ * @return 0 on success, negative error code on error
+ */
+int ColonetServer::initialize_connection(int port) {
+  printf("Initializing connection that will be used to listen for clients...\n");
+  int options = 1;
+  struct sockaddr_in my_address;
+
+  //get a socket fd
+  if ((listen_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+    printf("\tThere was an error creating socket\n");
+    return -1;
+  }
+
+  //set up the address struct
+  memset(&my_address,'\0',sizeof(my_address));
+  my_address.sin_family = AF_INET;
+  my_address.sin_addr.s_addr = htonl(INADDR_ANY);
+  my_address.sin_port = htons(port);
+
+  setsockopt(listen_socket, SOL_SOCKET, SO_REUSEADDR, &options, sizeof(options));
+
+  //get the current socket options
+  if ((options = fcntl(listen_socket, F_GETFL)) < 0) {
+    printf("\tThere was an error getting the socket options.\n");
+    return -1;
+  }
+
+  //set the socket to non blocking
+  options = (options | O_NONBLOCK);
+  if (fcntl(listen_socket, F_SETFL, options) < 0) {
+    printf("\tThere was an error setting the socket to be non blocking.\n");
+    return -1;
+  }
+
+  //bind the socket to listen on the specified port
+  if (bind(listen_socket, (struct sockaddr *) &my_address, sizeof(my_address)) < 0) {
+    printf("\tThere was an error binding the socket\n");
+    return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief returns the position monitor
+ */
+PositionMonitor* ColonetServer::getPositionMonitor() {
+  return &position_monitor;
+}
+
+VirtualWall* ColonetServer::getVirtualWall() {
+  return &virtual_wall;
+}
Index: branches/scout/projects/colonet/server/Makefile
===================================================================
--- branches/scout/projects/colonet/server/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/server/Makefile	(revision 1346)
@@ -0,0 +1,69 @@
+# ColonetServer makefile
+
+COLONYROOT = ../../../..
+
+CC = g++
+CFLAGS = -Wall -Wshadow -Wextra -g 
+VISIONFLAGS = -ggdb `pkg-config opencv --cflags --libs` 
+
+COLONETCPPFILES = Main.cpp ColonetServer.cpp ConnectionPool.cpp Command.cpp colonet_wireless.cpp PositionMonitor.cpp VirtualWall.cpp
+COLONETCPPOBJECTS = $(COLONETCPPFILES:.cpp=.o)
+COLONETFILES = options.c
+COLONETOBJECTS = $(COLONETFILES:.c=.o)
+LOGGINGFILES = Log.cpp
+LOGGINGOBJECTS = $(LOGGINGFILES:.cpp=.o)
+
+VISIONOBJECTS = vision/vision.o vision/savetonetwork.o vision/memdst.o vision/sysvsem.o vision/shmimgserve.o
+
+COLONETHEADERFILES = includes/*.h
+
+VPATH = ../lib:vision
+INCLUDE_DIRS = $(COLONYROOT)/code/projects/colonet/common $(COLONYROOT)/code/projects/libwireless/lib includes vision
+LIBRARY_DIRS = $(COLONYROOT)/code/projects/colonet/lib $(COLONYROOT)/code/projects/libwireless/lib vision
+
+#this takes the include directory and puts a -I in front of each directory name before being used in a gcc statement
+INCLUDE_DIRS_FOR_GCC = $(patsubst %, -I %, $(INCLUDE_DIRS))
+#this takes the library directory and puts a -L in front of each directory name so it can be used in a gcc statement
+LIBRARY_DIRS_FOR_GCC = $(patsubst %,-L%, $(LIBRARY_DIRS))
+
+.PHONY : all clean run
+
+all: ColonetServer
+
+run:
+	cd ../../libwireless/lib; make colonet
+	make; ./ColonetServer
+
+vision/vision.o: vision/vision.c vision/vision.h
+	@echo "---------------------------"
+	@echo "---compiling vision code---"
+	cd vision; 	make
+	@echo "---finish compiling vision code---"
+	@echo "----------------------------------"
+
+$(COLONYROOT)/code/projects/libwireless/lib/libwireless_colonet.a: $(COLONYROOT)/code/projects/libwireless/lib/*.c $(COLONYROOT)/code/projects/libwireless/lib/*.h
+	@echo "---------------------------"
+	@echo "---compiling wireless library code---"
+	cd $(COLONYROOT)/code/projects/libwireless/lib; make colonet
+	@echo "---finish compiling wireless library code---"
+	@echo "----------------------------------"
+
+ColonetServer: $(COLONYROOT)/code/projects/libwireless/lib/libwireless_colonet.a $(COLONETCPPFILES) $(COLONETFILES) $(LOGGINGFILES) $(COLONETHEADERFILES) $(VISIONOBJECTS)
+	@echo "-----------------------"
+	@echo "---begin compiling server---"
+	@echo ""
+	@echo "-----creating object files-----"
+	$(CC) $(CFLAGS) -c $(COLONETFILES) $(INCLUDE_DIRS_FOR_GCC)
+	$(CC) $(CFLAGS) -c $(COLONETCPPFILES) $(INCLUDE_DIRS_FOR_GCC)
+	$(CC) $(CFLAGS) -c $(LOGGINGFILES) $(INCLUDE_DIRS_FOR_GCC)
+	@echo "-----finish creating object files-----"
+	@echo ""
+	@echo "-----linking files-----"
+	$(CC) $(CFLAGS) $(VISIONFLAGS) $(COLONETOBJECTS) $(COLONETCPPOBJECTS) $(LOGGINGOBJECTS) $(VISIONOBJECTS) $(LIBRARY_DIRS_FOR_GCC) -lpthread -lwireless_colonet -ljpeg  $(INCLUDE_DIRS_FOR_GCC) -o $@
+	@echo "-----finish linking files-----"
+	@echo ""
+	@echo "---finish compilation---"
+	@echo "-----------------------"
+
+clean:
+	rm -rf *.o ColonetServer *~
Index: branches/scout/projects/colonet/server/PositionMonitor.cpp
===================================================================
--- branches/scout/projects/colonet/server/PositionMonitor.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/PositionMonitor.cpp	(revision 1346)
@@ -0,0 +1,220 @@
+/**
+ * @file PositionMonitor.cpp
+ *
+ * @author Jason Knichel
+ *
+ * @date 2/4/08
+ */
+
+#include <assert.h>
+#include <map>
+#include <PositionMonitor.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <vision.h>
+
+using namespace std;
+
+//Based on 640x480 resolution
+//TODO: Change detection constants to be dependent on resolution
+#define MAX_POSITIONS 20
+#define SAME_ROBOT_DISTANCE_THRESHOLD 60 //TODO: This needs some tuning
+#define ROBOT_DELETE_BUFFER 10
+#define CAM_UPDATE_PERIOD 100000
+
+/**
+ * @brief Constructor for the PositionMonitor class
+ */
+PositionMonitor::PositionMonitor() {
+  //TODO: don't hardcode this file name
+  //TODO: check for error returned from init
+  vision_init(/*"/var/www/colonet.jpg"*/);
+  newIdToAssign = -1;
+
+  pthread_mutex_init(&position_map_lock, NULL);
+}
+
+/**
+ * @brief Destructor for the PositionMonitor class
+ */
+PositionMonitor::~PositionMonitor() {
+  vision_close();
+}
+
+/**
+ * @brief This function updates the positions of things in the image
+ *
+ * @return Void
+ */
+void PositionMonitor::run() {
+  while (1) {
+    if (updatePositions() == -1) {
+      fprintf(stderr, "updatePositions failed.\n");
+    }
+
+    usleep(CAM_UPDATE_PERIOD);
+  }
+}
+
+/**
+ * @brief This function asks the vision code for the position of things it identifies
+ */
+int PositionMonitor::updatePositions() {
+  VisionPosition* positions = NULL;
+  int numPositions = vision_get_robot_positions(&positions);
+
+  //debug output code
+  /*
+  printf("\nnumPositions is %d\n", numPositions);
+  for (int i = 0; i < numPositions; i++) {
+    printf("{%d,%d} ", positions[i].x, positions[i].y);
+  }
+  printf("\n");
+  */
+
+  if (numPositions == -1) {
+    fprintf(stderr, "%s: vision_get_robot_positions failed.\n", __FUNCTION__);
+    return -1;
+  } else {
+    map<int, VisionPosition> newPositionMap;
+
+    pthread_mutex_lock(&position_map_lock);
+
+    //go through each of the positions the vision system identified
+    for (int i = 0; i < numPositions; i++) {
+      VisionPosition newPos = positions[i];
+      map<int, VisionPosition>::iterator iter;
+
+      //go through all the positions we currently have in the position map
+      for (iter = positionMap.begin(); iter != positionMap.end(); iter++) {
+        VisionPosition oldPos = iter->second;
+
+        //figure out if the new point is probably the same robot as one of the old positions
+        if (isProbablySameRobot(newPos, oldPos)) {
+          //DEBUG
+          //printf("probably same robot: new = (%d, %d), old = (%d, %d)\n", newPos.x, newPos.y, oldPos.x, oldPos.y);
+
+          //if the new positions is the same robot as an old one, insert this new position into the new map
+          newPositionMap.insert(make_pair(iter->first, newPos));
+
+          //erase this robot from the map that is used to smooth over several frames in case of problems identifying robots
+          deleteBufferMap.erase(iter->first);
+          //insert this robot back into the map in order to refresh its delete buffer
+          deleteBufferMap.insert(make_pair(iter->first, ROBOT_DELETE_BUFFER));
+          break;
+        }
+      }
+
+      if (iter == positionMap.end()) {
+        //a position was found that probably isn't a known
+        //  robot so add it in case a new robot entered the field
+        printf("Inserting new robot: %d (%d,%d)\n", newIdToAssign, newPos.x, newPos.y);
+
+        //a position was found that probably isn't a known robot so add it in case a new robot entered the field
+        newPositionMap.insert(make_pair(newIdToAssign, newPos));
+        deleteBufferMap.insert(make_pair(newIdToAssign, ROBOT_DELETE_BUFFER));
+        newIdToAssign--;
+      }
+    }
+
+
+    map<int, VisionPosition>::iterator iter2;
+    for (iter2 = positionMap.begin(); iter2 != positionMap.end(); iter2++) {
+      int currId = iter2->first;
+      map<int, VisionPosition>::iterator checkContains = newPositionMap.find(currId);
+      if (checkContains == newPositionMap.end()) {
+        int bufferValue = deleteBufferMap[iter2->first];
+        bufferValue--;
+        if (bufferValue > 0) {
+          newPositionMap.insert(make_pair(currId, iter2->second));
+          deleteBufferMap.erase(currId);
+          deleteBufferMap.insert(make_pair(currId, bufferValue));
+        } else {
+          deleteBufferMap.erase(currId);
+        }
+      }
+    }
+
+    positionMap = newPositionMap;
+
+    /*
+    //DEBUG PRINT STATEMENTS
+    printf("positionMap size is %d and deleteBufferMap size is %d\n", positionMap.size(), deleteBufferMap.size());
+    map<int, VisionPosition>::iterator iter;
+    for (iter = positionMap.begin(); iter != positionMap.end(); iter++) {
+      printf("%d has position (%d, %d) with delete buffer %d\n", iter->first, iter->second.x, iter->second.y, deleteBufferMap[iter->first]);
+    }
+    */
+
+
+    pthread_mutex_unlock(&position_map_lock);
+
+    assert(positions != NULL);
+    free(positions);
+
+    return 0;
+  }
+}
+
+int PositionMonitor::assignRealId(int old_id, int real_id) {
+  printf("assigning real_id %d to old_id %d\n", real_id, old_id);
+
+  pthread_mutex_lock(&position_map_lock);
+
+  map<int,VisionPosition>::iterator iter = positionMap.find(old_id);
+
+  if (iter == positionMap.end()) {
+    fprintf(stderr, "assignRealId: old_id not found\n");
+    pthread_mutex_unlock(&position_map_lock);
+    return -1;
+  }
+
+  positionMap.insert(make_pair(real_id, iter->second));
+  positionMap.erase(old_id);
+  int oldDeleteBuffer = deleteBufferMap[old_id];
+  deleteBufferMap.insert(make_pair(real_id, oldDeleteBuffer));
+  deleteBufferMap.erase(old_id);
+
+  pthread_mutex_unlock(&position_map_lock);
+
+  return 0;
+}
+
+map<int, VisionPosition> PositionMonitor::getAllRobotPositions() {
+  // TODO return a copy instead of the actual map for synch purposes
+  return positionMap;
+}
+
+int PositionMonitor::getNumVisibleRobots() {
+  return positionMap.size();
+}
+
+VisionPosition PositionMonitor::getFirstPosition(void) {
+  return positionMap.begin()->second;
+}
+
+int PositionMonitor::getRobotPosition(int robot_id, int* xbuf, int* ybuf) {
+  //TODO: figure out what a map returns if the element doesn't exist
+
+  pthread_mutex_lock(&position_map_lock);
+
+  if (positionMap.find(robot_id) == positionMap.end()){
+    pthread_mutex_unlock(&position_map_lock);
+    return -1;
+  } else {
+    VisionPosition pos = positionMap[robot_id];
+
+    pthread_mutex_unlock(&position_map_lock);
+
+    *xbuf = pos.x;
+    *ybuf = pos.y;
+
+    return 0;
+  }
+}
+
+bool PositionMonitor::isProbablySameRobot(VisionPosition p1, VisionPosition p2) {
+  int xDiff = p1.x - p2.x;
+  int yDiff = p1.y - p2.y;
+  return (xDiff*xDiff + yDiff*yDiff < SAME_ROBOT_DISTANCE_THRESHOLD*SAME_ROBOT_DISTANCE_THRESHOLD);
+}
Index: branches/scout/projects/colonet/server/Command.cpp
===================================================================
--- branches/scout/projects/colonet/server/Command.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/Command.cpp	(revision 1346)
@@ -0,0 +1,449 @@
+/**
+ * @file Command.cpp
+ *
+ * @author Jason Knichel
+ * @date 10/9/07
+ *
+ * @todo make it so command doesn't rely on connection pool.  have methods
+ *       that may return a response return it by getting a response array passed in to them
+ *       that they fill in and then colonet server takes the contents of that response array
+ *       and sends it to the appropriate client
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <colonet_wireless.h>
+#include <wireless.h>
+
+#include <Command.h>
+#include <ConnectionPool.h>
+#include <map>
+#include <vision.h>
+
+using namespace std;
+
+/**
+ * @brief Constructor for the Command class
+ * 
+ * @param connection_pool_temp The connection pool this instance of the Command class is supposed to use
+ * @param cs The ColonetServer this instance of the Command class is supposed to use
+ */
+Command::Command(ConnectionPool * connection_pool_temp, ColonetServer* cs) {
+  connection_pool = connection_pool_temp;
+  colonet_server = cs;
+}
+
+/**
+ * @brief Destructor for the Command class
+ */
+Command::~Command() {}
+
+/**
+ * @brief Called by connection pool to parse command from client.
+ *
+ * @param command The command to parse
+ * @param pool_index The index in the connection pool of the client who generated this command
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int Command::parse_command(char* command, int pool_index) {
+  char tokens[MAX_TOKENS][MAX_TOKEN_SIZE];
+  int number_tokens = 0;
+  char* end_pointer = NULL;
+  int command_id;
+
+  if (!connection_pool || !command || pool_index < 0) {
+    return -1;
+  }
+
+  if ((number_tokens = tokenize_command(command, tokens)) < 0) {
+    return -1;
+  }
+
+  //the 10 in the function call indicates number is base 10
+  command_id = strtol(tokens[0], &end_pointer, 10);
+
+  if (!end_pointer || *end_pointer != '\0') {
+    printf("There was an error converting first token into a number.\n");
+    return -1;
+  }
+
+  if (command_id == SEND_TO_ROBOT) {
+    if (parse_send_to_robot(number_tokens, tokens, pool_index)) {
+      fprintf(stderr, "parse_send_to_robot failed.\n");
+      return -1;
+    }
+  } else if (command_id == REQUEST_FROM_SERVER) {
+    if (parse_request_from_server(number_tokens, tokens, pool_index)) {
+      return -1;
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Breaks a command up into tokens
+ *
+ * @param command The command to tokenize
+ * @param tokens A two dimensional character array to store the tokens in
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int Command::tokenize_command(char* command, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE]) {
+  char* next_token = command;
+  char* end_token = NULL;
+  int number_tokens = 0;
+
+  if (!command) {
+    return -1;
+  }
+
+  //look for the end of the next token (tokens are separated by spaces)
+  while ((end_token = strstr(next_token, " "))) {
+    //set the location of the space to a null terminator
+    *end_token = '\0';
+
+    //make sure the token isn't too long
+    if (strlen(next_token) > MAX_TOKEN_SIZE-1) {
+      return -1;
+    }
+
+    //copy the next token into the token array
+    strcpy(tokens[number_tokens], next_token);
+
+    number_tokens++;
+
+    next_token = end_token + 1;
+
+    //skip over extra whitespace if there is any between tokens
+    while (isspace(*next_token) && *next_token != '\0') {
+      next_token++;
+    }
+  }
+
+  //get the last token if there were no spaces at the end of the string to indicate an end of token
+  if (end_token == NULL && *next_token != '\0') {
+    if (strlen(next_token) > MAX_TOKEN_SIZE-1) {
+      return -1;
+    }
+
+    strcpy(tokens[number_tokens], next_token);
+
+    number_tokens++;
+  }
+
+  return number_tokens;
+}
+
+/**
+ * @brief checks a list of tokens to see if it's valid
+ *
+ * @param tokens The tokens to check
+ * @param number_tokens The number of tokens contained in the tokens parameter
+ *
+ * @return 0 if tokens is valid
+ */
+int Command::check_tokens(unsigned char* tokens, int number_tokens) {
+  if (number_tokens > 3 + PACKET_DATA_LEN) {
+    /* Too many tokens */
+    return -1;
+  }
+
+  if (number_tokens < 3) {
+    /* Not enough tokens */
+    return -1;
+  }
+
+  if (tokens[1] != COLONET_REQUEST && tokens[1] != COLONET_COMMAND) {
+    /* Invalid message type */
+    return -1;
+  }
+
+  return 0;
+}
+
+//TODO: fill in the doxygen comments for this
+/**
+* @brief Sends parsed command from server to robot(s).
+*
+* @param number_int_tokens 
+* @param tokens
+* @param pool_index
+*
+* @return 0 on success, negative error code on failure
+*/
+int Command::parse_send_to_robot(int number_int_tokens, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int pool_index) {
+  unsigned char int_tokens[MAX_TOKENS], arguments[PACKET_DATA_LEN];
+
+  /* GREG'S FILTHY HACK */
+  /*   PLEASE REMOVE    */
+  int cmd = atoi(tokens[3]);
+  int bot = atoi(tokens[1]);
+  if (cmd == 96) {
+    wl_set_channel(0xE);
+    wl_send_robot_to_robot_global_packet(3, 9, NULL, 0, bot, 0);
+    printf("Sent recharge request to %d on channel 0xE\n", bot);
+    wl_set_channel(0xC);
+    return 0;
+  }
+  if (cmd == 97) {
+    wl_set_channel(0xE);
+    wl_send_robot_to_robot_global_packet(3, 10, NULL, 0, bot, 0);
+    printf("Sent recharge stop request to %d\n", bot);
+    wl_set_channel(0xC);
+    return 0;
+  }
+  /* END OF HACK */
+
+  memset(arguments, 1, PACKET_DATA_LEN);
+
+  // Convert tokens to ints
+  for (int i = ROBOT_COMMAND_OFFSET; i < number_int_tokens; i++) {
+    int_tokens[i-ROBOT_COMMAND_OFFSET] = atoi(tokens[i]);
+  }
+
+  // Fill arguments buffer with arguments
+  for (int i = ROBOT_COMMAND_LEN; i < number_int_tokens-ROBOT_COMMAND_OFFSET; i++) {
+    arguments[i-ROBOT_COMMAND_LEN] = int_tokens[i];
+  }
+
+  // Check the tokens
+  if (check_tokens(int_tokens, number_int_tokens) < 0) {
+    fprintf(stderr, "%s: Error - Invalid robot command/request.\n", __FUNCTION__);
+    return -1;
+  }
+
+  //printf("parsed command from internet client: ");
+  for (int i = 0; i < number_int_tokens - ROBOT_COMMAND_OFFSET; i++) {
+    printf("%d ", int_tokens[i]);
+  }
+  printf("\n");
+
+  // Send packet to robot
+  if (colonet_wl_send((short)pool_index, int_tokens[0], (ColonetRobotMessageType)int_tokens[1], int_tokens[2],
+                      arguments) != 0) {
+    fprintf(stderr, "Error - Colonet_wl_send failed.\n");
+    exit(1);
+  }
+
+  return 0;
+}
+
+/**
+ * @brief This function parses a request where a client is asking for something from the server
+ *
+ * @param number_tokens Number of tokens in the tokens array
+ * @param tokens The parsed form of the command
+ * @param pool_index The index in the connection pool of the client who sent the command
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int Command::parse_request_from_server(int number_tokens, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int pool_index) {
+  char* end_pointer = NULL;
+
+	//make sure a connection pool is set
+  if (!connection_pool) {
+    return -1;
+  }
+
+	//make sure you enough enough tokens to be a valid command
+  if (number_tokens < 2) {
+    return -1;
+  }
+
+	//convert the second token to an integer
+  end_pointer=NULL;
+  int second_token = strtol(tokens[1], &end_pointer, 10);
+  if (!end_pointer || *end_pointer != '\0') {
+    printf("There was an error converting second token into a number.\n");
+    return -1;
+  }
+
+  int up_x, up_y, low_x, low_y;
+
+	//figure out which command was sent
+  switch (second_token) {
+	case REQUEST_BOM_MATRIX:
+		if (parse_request_bom_matrix(pool_index)) {
+      return -1;
+    }
+    break;
+
+  case REQUEST_XBEE_IDS:
+    if (parse_request_xbee_ids(pool_index)) {
+      return -1;
+    }
+    break;
+
+  case CLIENT_REQUEST_ROBOT_POSITIONS:
+    if (parse_request_robot_positions(pool_index)) {
+      return -1;
+    }
+    break;
+
+  case CLIENT_ASSIGN_ROBOT_ID:
+    colonet_server->getPositionMonitor()->assignRealId(atoi(tokens[2]), atoi(tokens[3]));
+    break;
+
+  case CLIENT_SET_VIRTUAL_WALL:
+    up_x = atoi(tokens[2]);
+    up_y = atoi(tokens[3]);
+    low_x = atoi(tokens[4]);
+    low_y = atoi(tokens[5]);
+
+    if (colonet_server->getVirtualWall()->set_coordinates(up_x, up_y, low_x, low_y) == 0) {
+      fprintf(stderr, "Wall set to ((%d, %d), (%d, %d)).\n", up_x, up_y, low_x, low_y);
+    } else {
+      fprintf(stderr, "Set wall failed ((%d, %d), (%d, %d)).\n", up_x, up_y, low_x, low_y);
+    }
+    break;
+
+  default:
+    char* my_current_message = "Invalid request!\n";
+    //printf("Sending %s\n", my_current_message);
+    connection_pool->write_to_client(pool_index, my_current_message, strlen(my_current_message));
+    break;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief This function parses a client's request for the bom matrix as far as the wireless library knows it.
+ *
+ * @param pool_index The index in the connection pool of the client who sent the command
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int Command::parse_request_bom_matrix(int pool_index) {
+  char response_bom_matrix_buffer[MAX_RESPONSE_LEN];
+  char temp_bom_matrix_buffer[MAX_RESPONSE_LEN];
+
+  if (!connection_pool) {
+    return -1;
+  }
+
+  int num_robots;
+  int * xbee_ids;
+	//get the sensor matrix from the wireless library
+  int** bom_matrix = colonet_get_sensor_matrix(&num_robots, &xbee_ids);
+
+  printf("number of robots is %d\n", num_robots);
+
+	//copy the information over into a linear array to send to the client
+  //TODO: make this better
+  //TODO: make sure I don't need to do MAX_RESPONSE_LENGTH-1
+  snprintf(response_bom_matrix_buffer, MAX_RESPONSE_LEN, "%d %d %d", RESPONSE_TO_CLIENT_REQUEST, REQUEST_BOM_MATRIX,
+           num_robots);
+  for (int i = 0; i < num_robots; i++) {
+    for (int j = 0; j < num_robots; j++) {
+      //TODO: don't use strcpy
+      strcpy(temp_bom_matrix_buffer, response_bom_matrix_buffer);
+      //TODO: put length checking in here so array doesn't go out of bounds
+      //TODO: maybe use strncat?
+      strcat(temp_bom_matrix_buffer," %d");
+      snprintf(response_bom_matrix_buffer, MAX_RESPONSE_LEN, temp_bom_matrix_buffer, bom_matrix[i][j]);
+    }
+  }
+  strcat(response_bom_matrix_buffer,"\n");
+
+	//send the bom matrix to the client that requested it
+  connection_pool->write_to_client(pool_index, response_bom_matrix_buffer, strlen(response_bom_matrix_buffer));
+  //printf("Sending %s", response_bom_matrix_buffer);
+  
+  for (int i = 0; i < num_robots; i++) {
+    free(bom_matrix[i]);
+  }
+  free(bom_matrix);
+
+  free(xbee_ids);
+
+  return 0;
+}
+
+/**
+ * @brief This functions parses a client's request for the positions of robots
+ * 
+ * @param pool_index The index in the connection pool of the client that sent this command
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int Command::parse_request_robot_positions(int pool_index) {
+  //printf("*****parse_request_robot_positions\n");
+
+	//ask the position monitor for where it sees robots
+  map<int, VisionPosition> positions = colonet_server->getPositionMonitor()->getAllRobotPositions();
+
+  map<int, VisionPosition>::iterator iter;
+
+  char position_buffer[256];
+  position_buffer[0] = 0;
+  sprintf(position_buffer, "%d %d", RESPONSE_TO_CLIENT_REQUEST, CLIENT_REQUEST_ROBOT_POSITIONS);
+ 
+  for (iter = positions.begin(); iter != positions.end(); iter++) {
+    char tmpbuf[80];
+    sprintf(tmpbuf, " %d %d %d", iter->first, iter->second.x, iter->second.y);
+    strcat(position_buffer, tmpbuf);
+  }
+
+  strcat(position_buffer, "\n");
+
+  //printf("position buffer is: %s\n", position_buffer);
+
+	//send the positions of the robots to the client that requested them
+  connection_pool->write_to_client(pool_index, position_buffer, strlen(position_buffer));
+
+  return 0;
+}
+
+/**
+ * @brief This functions parses a client's request for the ids of the xbees in the token ring
+ *
+ * @param pool_index The index in the connection pool of the client that requested the xbee ids
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int Command::parse_request_xbee_ids(int pool_index) {
+  char temp_xbee_id_buffer[MAX_RESPONSE_LEN];
+  char xbee_id_buffer[MAX_RESPONSE_LEN];
+
+  int num_robots;
+
+	//get a list of the xbee ids
+  int* xbee_ids = colonet_get_xbee_ids(&num_robots);
+
+  //printf("num_robots: %d\n", num_robots);
+  //printf("xbee_ids: ");
+  //for (int i = 0; i < num_robots; i++) {
+  //  printf("%d ", xbee_ids[i]);
+  //}
+  //printf("\n");
+
+  if (!connection_pool) {
+    return -1;
+  }
+
+  snprintf(xbee_id_buffer, MAX_RESPONSE_LEN, "%d %d %d", RESPONSE_TO_CLIENT_REQUEST, REQUEST_XBEE_IDS, num_robots);
+
+	//copy over the ids into a response to send to the client
+  for (int i = 0; i < num_robots; i++) {
+    strcpy(temp_xbee_id_buffer, xbee_id_buffer);
+    //TODO: put length checking in here so array doesn't go out of bounds
+    //TODO: maybe use strncat?
+    strcat(temp_xbee_id_buffer, " %d");
+    snprintf(xbee_id_buffer, MAX_RESPONSE_LEN, temp_xbee_id_buffer, xbee_ids[i]);
+  }
+  strcat(xbee_id_buffer, "\n");
+
+	//send the list of xbee ides to the client that requested them
+  connection_pool->write_to_client(pool_index, xbee_id_buffer, strlen(xbee_id_buffer));
+  //printf("Sending %s", xbee_id_buffer);
+
+  free(xbee_ids);
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/colonet_wireless.cpp
===================================================================
--- branches/scout/projects/colonet/server/colonet_wireless.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/colonet_wireless.cpp	(revision 1346)
@@ -0,0 +1,385 @@
+/** @file colonet_wireless.c
+ *
+ * @brief Implementation of server-side colonet wireless library
+ *
+ * @author Eugene Marinelli
+ */
+
+/********************************* Includes **********************************/
+#include <string>
+#include <pthread.h>
+#include <iostream>
+#include <fstream>
+#include <unistd.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include <ColonetServer.h>
+#include <wireless.h> // Colonet wireless library.
+#include <wl_token_ring.h>
+
+#include <colonet_defs.h>
+#include <colonet_wireless.h>
+
+/******************************* Definitions *********************************/
+
+//Enable debug printouts
+//#define DEBUG 1
+
+#ifdef DEBUG
+#define dbg_printf(...) printf(__VA_ARGS__)
+#define dbg_fprintf(...) fprintf(__VA_ARGS__)
+#else
+#define dbg_printf(...)
+#define dbg_fprintf(...)
+#endif
+
+extern ColonetServer colonet_server;
+
+static bool logging_enabled;
+static char log_filename[80];
+static pthread_t listener_thread;
+static char wl_port[40];
+
+/************************* Internal prototypes *******************************/
+static void* listen(void* args);
+static void timeout_handler(void);
+static void handle_response(int frame, int received);
+static void handle_receive(char type, int source, unsigned char* packet, int len);
+static void unregister(void);
+static int log_packet(unsigned char* packet, int len);
+
+/**************************** Public functions *******************************/
+/**
+ * @brief Initializes the wireless library
+ *
+ * @param wl_port_ The port to listen for wireless messages on
+ * @param log_filename_ The name of the log file
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int colonet_wl_init(char* wl_port_, char* log_filename_) {
+  if (log_filename_ != NULL) {
+    logging_enabled = true;
+    strcpy(log_filename, log_filename_);
+  }
+
+  strncpy(wl_port, wl_port_, 40);
+
+  wl_set_com_port(wl_port);
+
+  fprintf(stderr, "Calling wl_init(%s)...\n", wl_port);
+  if (wl_init() != 0) {
+    fprintf(stderr, "wl_init failed.\n");
+    return -1;
+  }
+
+  wl_token_ring_register();
+
+  fprintf(stderr, "Joining token ring...\n");
+  if (wl_token_ring_join() != 0) {
+    fprintf(stderr, "Failed to join token ring.\n");
+    return -1;
+  }
+  fprintf(stderr, "Joined token ring.\n");
+
+  return 0;
+}
+
+/**
+ * @brief This function will kill the thread that is listening for wireless messages
+ */
+void colonet_wl_kill_listener_thread() {
+  pthread_kill(listener_thread, 9);
+}
+
+/**
+ * @brief This function spawns a thread to listen for wireless messages
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int colonet_wl_run_listener_thread() {
+  dbg_printf("Spawning listener thread...\n");
+
+  if (pthread_create(&listener_thread, NULL, listen, NULL)) {
+    perror("pthread_create");
+    return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief This function sends a message out on the wireless
+ *
+ * @param client_source The index in the connection pool of the client that is sending the message
+ * @param dest The robot that is meant to receive this message
+ * @param msg_type The type of the message
+ * @param msg_code The message code
+ * @param args The arguments to send with the message
+ *
+ * @return 0 on success, a negative error code on failure
+ */
+int colonet_wl_send(short client_source, short dest, ColonetRobotMessageType msg_type, unsigned char msg_code,
+                    unsigned char* args) {
+  dbg_printf("colonet_wl_send: client_source:%d, dest:%d, msg_code:%d\n", client_source, dest, msg_code);
+
+  //create and set up new packet to be sent.
+  ColonetRobotServerPacket pkt;
+  pkt.client_id = client_source;
+  pkt.msg_code = msg_code;
+
+  //copy over the args into the data portion of the packet
+  if (args != NULL) {
+    dbg_printf("data ");
+    for (int i = 0; i < PACKET_DATA_LEN; i++) {
+      dbg_printf("%u, ", args[i]);
+      pkt.data[i] = args[i];
+    }
+    dbg_printf("\n");
+  }
+
+  if (dest == GLOBAL_DEST) {
+    //printf("sending to global dest\n");
+    int ret = wl_send_global_packet(COLONET_PACKET_GROUP_ID, (char)msg_type, (char*)(&pkt),
+                                    sizeof(ColonetRobotServerPacket), 0);
+    if (ret != 0) {
+      fprintf(stderr, "%s: wl_send_global_packet failed.\n", __FUNCTION__);
+      return -1;
+    }
+  } else {
+    //("sending to specific robot: %d.\n", dest);
+    int ret = wl_send_robot_to_robot_global_packet(COLONET_PACKET_GROUP_ID, (char)msg_type, (char*)(&pkt),
+                                                   sizeof(ColonetRobotServerPacket), dest,
+                                                   COLONET_RESPONSE_PACKET_FRAME_ID);
+    if (ret != 0) {
+      fprintf(stderr, "%s: wl_send_robot_to_robot_global_packet failed.\n", __FUNCTION__);
+      return -1;
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Used to get the number of robots in the token ring
+ *
+ * @return The result of wl_token_get_num_robots()
+ */
+int colonet_get_num_robots(void) {
+  return wl_token_get_num_robots();
+}
+
+/**
+ * @brief Gets a list of the xbee ids of the ones in the token ring
+ *
+ * @param numrobots A pointer to the variable where you want the number of robots to be stored
+ *
+ * @return A dynamically allocated piece of memory that contains the list of xbee ids.
+ *   The function calling this function must free this memory when done with it.
+ */
+int* colonet_get_xbee_ids(int* numrobots) {
+  int num_robots = wl_token_get_num_robots();
+  int* ids = (int*)malloc(num_robots * sizeof(int));
+
+  wl_token_iterator_begin();
+
+  int i = 0;
+  while (wl_token_iterator_has_next()) {
+    ids[i] = wl_token_iterator_next();
+    i++;
+  }
+
+  *numrobots = num_robots;
+  return ids;
+}
+
+/**
+ * @brief Gets the sensor matrix from the wireless library
+ *
+ * @param numrobots A pointer to the variable where you want the number of robots to be stored
+ * @param ids_ A pointer to a pointer that you want to point to the list of xbee ids.  This memory is dynamically
+ * allocated and should be freed by the calling process when it is done with it
+ *
+ * @return The 2d matrix reprsenting the sensor matrix.  This memory is dynamically allocated and should be freed by
+ * the calling process when it is done with it
+ */
+int** colonet_get_sensor_matrix(int* numrobots, int** ids_) {
+  int num_robots;
+  int* ids = colonet_get_xbee_ids(&num_robots);
+
+  int** m = (int**)malloc(num_robots * sizeof(int*));
+  for (int i = 0; i < num_robots; i++) {
+    m[i] = (int*)malloc(num_robots * sizeof(int*));
+  }
+
+  for (int i = 0; i < num_robots; i++) {
+    for (int j = 0; j < num_robots; j++) {
+      m[i][j] = wl_token_get_sensor_reading(ids[i], ids[j]);
+    }
+  }
+
+  *numrobots = num_robots;
+  *ids_ = ids;
+  return m;
+}
+
+/**************************** Private functions ******************************/
+
+//TODO: fill in the doxygen comments
+/**
+ * @brief
+ *
+ * @return Void
+ */
+static void timeout_handler() {
+  dbg_printf("colonet wireless - timeout!\n");
+}
+
+//TODO: fill in the doxygen comments
+/**
+ * @brief
+ *
+ * @param frame
+ * @param received
+ *
+ * @return Void
+ */
+static void handle_response(int frame, int received) {
+  //TODO: These are just here to get rid of compiler warnings
+  frame = frame;
+  received = received;
+}
+
+/**
+ * @brief When a packet is received via wireless, the data is passed to this function
+ *
+ * @param type
+ * @param source The robot the packet came from
+ * @param data The data the robot sent
+ * @param len The length of the data
+ *
+ * @return Void
+ */
+static void handle_receive(char type, int source_robot, unsigned char* data, int len) {
+  type = type; //TODO: This is just here to get rid of compiler warnings.
+
+  //printf("***Got packet from robot***\n");
+
+  ColonetRobotServerPacket* pkt = (ColonetRobotServerPacket*)data;
+
+  if (logging_enabled) {
+    log_packet(data, len);
+  }
+
+  //see if a robot wants the server to tell it where it is
+  if (pkt->msg_code == ROBOT_REQUEST_POSITION_FROM_SERVER) {
+    /* Robot has requested its position. */
+    int robot_x, robot_y;
+    PositionMonitor* pm = colonet_server.getPositionMonitor();
+    int num_robots = pm->getNumVisibleRobots();
+
+    //ask the position monitor for where that robot is.
+    int ret = pm->getRobotPosition(source_robot, &robot_x, &robot_y);
+    if (ret != 0 && num_robots != 1) {
+      //DEBUG
+      dbg_fprintf(stderr, "Robot %d requested position, but its position is not known.\n", source_robot);
+
+      if (colonet_wl_send(-1, source_robot, COLONET_COMMAND, SERVER_REPORT_ROBOT_LOST, NULL) != 0) {
+        fprintf(stderr, "colonet_wl_send failed!\n");
+        exit(1);
+      }
+    } else {
+      if (ret != 0 && num_robots == 1) {
+        VisionPosition pos = pm->getFirstPosition();
+        robot_x = pos.x;
+        robot_y = pos.y;
+      }
+
+      unsigned char response[80];
+      response[0] = (robot_x >> 8) & 0xFF;
+      response[1] = robot_x & 0xFF;
+      response[2] = (robot_y >> 8) & 0xFF;
+      response[3] = robot_y & 0xFF;
+
+      dbg_fprintf(stderr, "Robot %d requested position.  Its position is %d,%d.\n", source_robot, robot_x, robot_y);
+
+      if (colonet_wl_send(-1, source_robot, COLONET_COMMAND, SERVER_REPORT_POSITION_TO_ROBOT, response) != 0) {
+        fprintf(stderr, "colonet_wl_send failed!\n");
+        exit(1);
+      }
+    }
+  } else {
+    dbg_printf("Calling colonet_server.process_received_wireless_message\n");
+    char processed_data[80];
+    sprintf(processed_data, "%d %d %d %s\n", RESPONSE_TO_CLIENT_REQUEST, pkt->msg_code, source_robot, pkt->data);
+
+    dbg_fprintf(stderr, "client_id=%d; processed_data: %s\n", pkt->client_id, processed_data);
+
+    colonet_server.process_received_wireless_message(pkt->client_id, processed_data, strlen(processed_data));
+  }
+}
+
+//TODO: fill in the doxygen comments
+/**
+ * @brief
+ *
+ * @return Void
+ */
+static void unregister(void) {
+  printf("unregister\n");
+}
+
+/** @brief Analogous to the "SIGNAL" or "ISR" function on the robots.
+ * Listens for bytes on the wireless port and constructs packets based on them.
+ * Not part of the ColonetWireless class since a function pointer must be
+ * passed in starting the thread that runs it (tricky or impossible if it's
+ * a class function).
+ *
+ * @param args Pointer to arguments.  Can be safely casted to ListenerArgs type
+ * @return NULL
+ */
+static void* listen(void* args) {
+  args = args; //TODO: These are just here to get rid of compiler warnings.
+
+  fprintf(stderr, "Called listen.\n");
+
+  PacketGroupHandler pgh = {COLONET_PACKET_GROUP_ID, timeout_handler, handle_response, handle_receive, unregister};
+  wl_register_packet_group(&pgh);
+
+  while (1) {
+    wl_do();
+
+    //this sleep is here so the thread this runs in doesn't hog the cpu
+    usleep(1000);
+  }
+
+  fprintf(stderr, "Listen is returning.\n");
+
+  wl_terminate();
+  return NULL;
+}
+
+/**
+ * @brief
+ *
+ * @param pkt Packet to be logged
+ *
+ * @return 0 on success, -1 on failure
+ */
+int log_packet(unsigned char* packet, int len) {
+  FILE* logfile = fopen(log_filename, "a");
+
+  if (logfile == NULL) {
+    dbg_printf("%s: Error - fopen %s failed.\n", log_filename, __FUNCTION__);
+    return -1;
+  }
+
+  for (int i = 0; i < len; i++) {
+    fprintf(logfile, "%d ", *((unsigned char*)packet + i));
+  }
+  fprintf(logfile, "\n");
+
+  fclose(logfile);
+  return 0;
+}
Index: branches/scout/projects/colonet/server/includes/ColonetServer.h
===================================================================
--- branches/scout/projects/colonet/server/includes/ColonetServer.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/ColonetServer.h	(revision 1346)
@@ -0,0 +1,43 @@
+/**
+ * @author Jason Knichel
+ * @date 9/10/07
+ */
+
+#ifndef COLONETSERVER_H
+#define COLONETSERVER_H
+
+ class ConnectionPool;
+
+#include <ConnectionPool.h>
+#include <Log.h>
+#include <PositionMonitor.h>
+#include <VirtualWall.h>
+
+class ColonetServer {
+public:
+  ColonetServer();
+  ~ColonetServer();
+
+  int initialize_server(int argc, char * argv[]);
+  int start_listening(void);
+  int run_server(void);
+  int run_loop(void);
+  int process_received_wireless_message(int dest, char* data, int len);
+  PositionMonitor* getPositionMonitor(void);
+  VirtualWall* getVirtualWall(void);
+  int run_position_monitor(void);
+  
+  void loop_server(void);
+
+private:
+  ConnectionPool* connection_pool;
+  Log* logger;
+  int listen_socket;
+  PositionMonitor position_monitor;
+  VirtualWall virtual_wall;
+
+  int initialize_wireless(void);
+  int initialize_connection(int port);
+};
+
+#endif
Index: branches/scout/projects/colonet/server/includes/Command.h
===================================================================
--- branches/scout/projects/colonet/server/includes/Command.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/Command.h	(revision 1346)
@@ -0,0 +1,38 @@
+/**
+ * @file Command.h
+ *
+ * @author Jason Knichel
+ * @date 10/9/07
+ */
+
+#ifndef COMMAND_H
+#define COMMAND_H
+
+#include <ConnectionPool.h>
+#include <ColonetServer.h>
+#include <list>
+
+class Command {
+ public:
+  Command(ConnectionPool * connection_pool, ColonetServer* cs);
+  ~Command();
+
+  int parse_command(char* command, int pool_index);
+
+ private:
+  int tokenize_command(char* command, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE]);
+  int check_tokens(unsigned char* tokens, int number_tokens);
+
+  int parse_send_to_robot(int number_tokens, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int pool_index);
+  int parse_request_from_server(int number_tokens, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int pool_index);
+
+  int parse_request_bom_matrix(int pool_index);
+  int parse_request_xbee_ids(int pool_index);
+  int parse_request_robot_positions(int pool_index);
+
+  ConnectionPool * connection_pool;
+  ColonetServer* colonet_server;
+};
+
+
+#endif
Index: branches/scout/projects/colonet/server/includes/VirtualWall.h
===================================================================
--- branches/scout/projects/colonet/server/includes/VirtualWall.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/VirtualWall.h	(revision 1346)
@@ -0,0 +1,25 @@
+/**
+ * Eugene Marinelli
+ * 
+ */
+
+#ifndef VIRTUALWALL_H
+#define VIRTUALWALL_H
+
+class VirtualWall {
+ public:
+  VirtualWall(void);
+  ~VirtualWall(void);
+
+  int set_coordinates(int upper_x, int upper_y, int lower_x, int lower_y);
+  void clear(void);
+  int get_coordinates(int* upper_x, int* upper_y, int* lower_x, int* lower_y);
+  void send_to_robots(void);
+
+ private:
+  bool wall_available;
+  int upper_left_x, upper_left_y;
+  int lower_right_x, lower_right_y;
+};
+
+#endif
Index: branches/scout/projects/colonet/server/includes/PositionMonitor.h
===================================================================
--- branches/scout/projects/colonet/server/includes/PositionMonitor.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/PositionMonitor.h	(revision 1346)
@@ -0,0 +1,41 @@
+/**
+ * @file PositionMonitor.h
+ *
+ * @author Jason Knichel
+ *
+ * @date 2/4/08
+ */
+
+#ifndef POSITIONMONITOR_H
+#define POSITIONMONITOR_H
+
+#include <map>
+#include <vision.h>
+using namespace std;
+
+using namespace std;
+
+class PositionMonitor {
+ public:
+  PositionMonitor(void);
+  ~PositionMonitor(void);
+
+  void run(void);
+  //int stopMonitoring(void);
+  int updatePositions(void);
+
+  int assignRealId(int old_id, int real_id);
+  map<int, VisionPosition> getAllRobotPositions(void);
+  int getRobotPosition(int robot_id, int* xbuf, int* ybuf);
+  int getNumVisibleRobots(void);
+  VisionPosition getFirstPosition(void);
+
+ private:
+  map<int, VisionPosition> positionMap;
+  map<int, int> deleteBufferMap;
+  bool isProbablySameRobot(VisionPosition p1, VisionPosition p2);
+  int newIdToAssign;
+  pthread_mutex_t position_map_lock;
+};
+
+#endif
Index: branches/scout/projects/colonet/server/includes/ConnectionPool.h
===================================================================
--- branches/scout/projects/colonet/server/includes/ConnectionPool.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/ConnectionPool.h	(revision 1346)
@@ -0,0 +1,71 @@
+/**
+ * @author Jason Knichel
+ * @date 7/22/07
+ */
+
+#ifndef CONNECTION_POOL_H
+#define CONNECTION_POOL_H
+
+#include <sys/select.h>
+
+#include <colonet_wireless.h>
+#include <ColonetServer.h>
+
+#define MAX_TOKENS 15
+#define MAX_TOKEN_SIZE 30
+
+#define ROBOT_COMMAND_OFFSET 1
+#define ROBOT_COMMAND_LEN    3
+
+#define ERROR_INVALID_CLIENT_DESCRIPTOR -1
+#define ERROR_TOO_MANY_CLIENTS          -2
+#define ERROR_ALLOCATING_MEMORY         -3
+#define ERROR_NOT_ENOUGH_ROOM           -4
+#define ERROR_INVALID_COMMAND           -5
+#define ERROR_INVALID_CLIENT_ID         -6
+#define ERROR_INVALID_MESSAGE           -7
+#define ERROR_INVALID_MESSAGE_LENGTH    -8
+
+#define DECREMENT_INDEX_COUNTER          1
+
+#define MAX_CONNECTIONS 250
+#define READ_BUFFER_SIZE 1024
+#define WRITE_BUFFER_SIZE 4096
+
+class ColonetServer;
+
+class ConnectionPool {
+
+public:
+  ConnectionPool(ColonetServer* cs);
+  ~ConnectionPool();
+
+  int add_client(int client_file_descriptor);
+  int remove_client(int pool_index);
+  int check_clients();
+
+  int write_to_client(int pool_index, char * message, int length);
+  void add_new_socket_to_pool(int new_socket);
+  int perform_select(int listen_socket);
+  int is_socket_ready_to_read(int socket);
+  int get_number_clients_ready();
+
+private:
+  int max_file_descriptor;
+  int next_available_slot;
+  int number_clients_ready;
+  fd_set ready_set;
+  fd_set read_set;
+  fd_set write_set;
+  int client_file_descriptor_array[MAX_CONNECTIONS];
+  char * read_buffer[MAX_CONNECTIONS];
+  int read_buffer_size[MAX_CONNECTIONS];
+  char * write_buffer[MAX_CONNECTIONS];
+  int write_buffer_size[MAX_CONNECTIONS];
+  ColonetServer* colonet_server;
+
+  int read_data(int pool_index, int client_file_descriptor);
+  int write_data(int pool_index, int client_file_descriptor);
+};
+
+#endif
Index: branches/scout/projects/colonet/server/includes/options.h
===================================================================
--- branches/scout/projects/colonet/server/includes/options.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/options.h	(revision 1346)
@@ -0,0 +1,26 @@
+/**
+ * @file options.h
+ * @brief Options for ColonetServer
+ * @author Eugene Marinelli
+ * @date 2/13/07
+ */
+
+#ifndef OPTIONS_H
+#define OPTIONS_H
+
+#define DEFAULTPORT 10123
+#define SMALLEST_POSS_LISTEN_PORT 2000
+
+typedef struct {
+  int listen_port;
+  char wireless_port[80];
+  char log_filename[80];
+  bool logging_enabled;
+  bool listener_mode;
+} ColonetServerOptionsT;
+
+extern ColonetServerOptionsT optionsG;
+
+void options_parseCmdLine(int argc, char** argv);
+
+#endif
Index: branches/scout/projects/colonet/server/includes/Log.h
===================================================================
--- branches/scout/projects/colonet/server/includes/Log.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/Log.h	(revision 1346)
@@ -0,0 +1,38 @@
+/**
+ * @file Log.h
+ *
+ * @author Jason Knichel
+ *
+ */
+
+#ifndef LOG_H
+#define LOG_H
+
+#include <time.h>
+#include <stdio.h>
+
+#define LOG_TYPE_START_LOG  0
+#define LOG_TYPE_CONNECT    1
+#define LOG_TYPE_DISCONNECT 2
+#define LOG_TYPE_ERROR      3
+#define LOG_TYPE_MESSAGE    4
+
+#define LOG_MAX_TYPE_LENGTH 25
+#define LOG_MAX_TIME_LENGTH 64
+
+class Log {
+public:
+  Log(char * fileName);
+  ~Log(void);
+
+  int log_string(int type, char * message);
+  int log_error(char * message);
+  int log_message(char * message);
+
+private:
+  struct tm get_current_time();
+
+  FILE * log_file;
+};
+
+#endif
Index: branches/scout/projects/colonet/server/includes/colonet_wireless.h
===================================================================
--- branches/scout/projects/colonet/server/includes/colonet_wireless.h	(nonexistent)
+++ branches/scout/projects/colonet/server/includes/colonet_wireless.h	(revision 1346)
@@ -0,0 +1,49 @@
+/** @file colonet_wireless.h
+ *
+ * @brief Wireless library for communicating with colony robots
+ *
+ * @author Eugene Marinelli
+ * @date 10/10/07
+ */
+
+#ifndef COLONET_WIRELESS_H_
+#define COLONET_WIRELESS_H_
+
+#include <colonet_defs.h>
+
+/** @brief Initializes colonet wireless library
+ *
+ * @param wl_port Either SERIAL_PORT or USB_PORT (as defined in COLONET_DEFS)
+ * @param log_filename Path to log file - outputs all raw data on the network
+ * If set to NULL, logging is disabled.
+ * @param msg_handler Function to be called when a packet is received.
+ * Must take a ColonetPacket as an argument (see defn of MsgHandlerFunction)
+ *
+ * @return new ColonetWireless object
+ */
+int colonet_wl_init(char* wl_port, char* log_filename_);
+
+/** @brief Spawns a thread which reads data from the hardware interface
+ * with the colony (either a dongle or a robot programmed to relay data)
+ * and runs msg_handler when a full packet is received
+ *
+ * @return pointer to the thread
+ */
+int colonet_wl_run_listener_thread(void);
+
+void colonet_wl_kill_listener_thread(void);
+
+/**
+ * @brief ...
+ *
+ * @return void
+ */
+int colonet_wl_send(short client_source, short dest, ColonetRobotMessageType msg_type, unsigned char msg_code,
+                    unsigned char* args);
+
+int colonet_get_num_robots(void);
+
+int** colonet_get_sensor_matrix(int* numrobots, int** ids);
+int* colonet_get_xbee_ids(int* numrobots);
+
+#endif
Index: branches/scout/projects/colonet/server/ConnectionPool.cpp
===================================================================
--- branches/scout/projects/colonet/server/ConnectionPool.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/ConnectionPool.cpp	(revision 1346)
@@ -0,0 +1,403 @@
+/**
+ * @file ConnectionPool.cpp
+ *
+ * @author Jason Knichel
+ * @date 7/22/07
+ *
+ */
+
+#include <sys/select.h>
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <ConnectionPool.h>
+#include <Command.h>
+#include <colonet_defs.h>
+
+#include <colonet_wireless.h>
+
+/**
+ * @brief The default constructor for ConnectionPool
+ *
+ * @param cs The colonet server instance to use with this class
+ */
+ConnectionPool::ConnectionPool(ColonetServer* cs) {
+  colonet_server = cs;
+
+  max_file_descriptor = 0;
+  next_available_slot = 0;
+  number_clients_ready = 0;
+
+  FD_ZERO(&ready_set);
+  FD_ZERO(&read_set);
+  FD_ZERO(&write_set);
+
+  memset(&client_file_descriptor_array, 0, sizeof(int)*MAX_CONNECTIONS);
+  memset(&read_buffer, 0, sizeof(char *)*MAX_CONNECTIONS);
+  memset(&read_buffer_size, 0, sizeof(int)*MAX_CONNECTIONS);
+  memset(&write_buffer, 0, sizeof(char *)*MAX_CONNECTIONS);
+  memset(&write_buffer_size, 0, sizeof(int)*MAX_CONNECTIONS);
+}
+
+/**
+ * @brief The destructor for ConnectionPool
+ */
+ConnectionPool::~ConnectionPool() {
+}
+
+/**
+ * @brief Adds a client to the connection pool
+ *
+ * @param client_file_descriptor The file descriptor to add to the connection pool
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::add_client(int client_file_descriptor) {
+  if (client_file_descriptor < 0) {
+    return ERROR_INVALID_CLIENT_DESCRIPTOR;
+  }
+
+  if (next_available_slot == MAX_CONNECTIONS) {
+    return ERROR_TOO_MANY_CLIENTS;
+  }
+
+  if (client_file_descriptor > max_file_descriptor) {
+    max_file_descriptor = client_file_descriptor;
+  }
+
+	//add the new file descriptor to the set of ready descriptors
+  FD_SET(client_file_descriptor, &ready_set);
+
+  int next_slot = next_available_slot;
+
+	//put the new client into the connection pool
+  client_file_descriptor_array[next_slot] = client_file_descriptor;
+  read_buffer[next_slot] = (char*) malloc(sizeof(char) * READ_BUFFER_SIZE);
+  if (!(read_buffer[next_slot])) {
+    return ERROR_ALLOCATING_MEMORY;
+  }
+  read_buffer_size[next_slot] = 0;
+
+  write_buffer[next_slot] = (char *)malloc(sizeof(char) * WRITE_BUFFER_SIZE);
+  if (!(write_buffer[next_slot])) {
+    free(read_buffer[next_slot]);
+    return ERROR_ALLOCATING_MEMORY;
+  }
+  write_buffer_size[next_slot] = 0;
+
+  next_available_slot++;
+
+  return 0;
+}
+
+/**
+ * @brief Removes a client from the connection pool
+ *
+ * @param The index in the pool of the client to remove
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::remove_client(int pool_index) {
+  if (pool_index < 0 || pool_index >= next_available_slot) {
+    return ERROR_INVALID_CLIENT_DESCRIPTOR;
+  }
+
+  int client_file_descriptor = client_file_descriptor_array[pool_index];
+
+	//clear this client from all lists of file descriptors
+  if (FD_ISSET(client_file_descriptor, &ready_set)) {
+    FD_CLR(client_file_descriptor, &ready_set);
+  }
+  if (FD_ISSET(client_file_descriptor, &read_set)) {
+    FD_CLR(client_file_descriptor, &read_set);
+  }
+  if (FD_ISSET(client_file_descriptor, &write_set)) {
+    FD_CLR(client_file_descriptor, &write_set);
+  }
+
+	//free up the resources this client used
+  free(read_buffer[pool_index]);
+  free(write_buffer[pool_index]);
+
+	//shift the other clients down
+  for (int j = pool_index; j < next_available_slot - 1; j++) {
+    client_file_descriptor_array[pool_index] = client_file_descriptor_array[pool_index+1];
+    read_buffer[pool_index] = read_buffer[pool_index+1];
+    read_buffer_size[pool_index] = read_buffer_size[pool_index+1];
+    write_buffer[pool_index] = write_buffer[pool_index+1];
+    write_buffer_size[pool_index] = write_buffer_size[pool_index+1];
+  }
+  next_available_slot--;
+  int temp_max_file_descriptor = 0;
+
+	//figure out the newest max file descriptor
+  for (int j = 0; j < next_available_slot; j++) {
+    if (client_file_descriptor_array[j] > temp_max_file_descriptor)
+      temp_max_file_descriptor = client_file_descriptor_array[j];
+  }
+  max_file_descriptor = temp_max_file_descriptor;
+
+  printf("Client disconnected.\n");
+
+  return 0;
+}
+
+/**
+ * @brief Checks the status of the clients
+ *
+ * Sees is any clients are ready to read from their file descriptor or are
+ *  ready to write to their file descriptor.
+ *
+ * @return 0 on success, negative error code on error
+ */
+//TODO: test that it drops commands properly if it gets sent too much data
+//      do we want it to drop the data or drop the connection?
+int ConnectionPool::check_clients() {
+  int i;
+
+  for (i = 0; i < next_available_slot; i++) {
+    int client_file_descriptor = client_file_descriptor_array[i];
+
+		//check to see if this client is ready to be read from
+    if (FD_ISSET(client_file_descriptor, &read_set)) {
+      if (read_data(i, client_file_descriptor) == DECREMENT_INDEX_COUNTER) {
+				i--;
+				continue;
+      }
+    }
+
+		//check to see if this client is ready to write to
+    if (FD_ISSET(client_file_descriptor, &write_set)) {
+      write_data(i, client_file_descriptor);
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Puts text into a write buffer that will be written to a client's file
+ *  descriptor sometime when the client is ready to write.
+ *
+ * @param pool_index Index in the pool of the client to write to.  -1 for global.
+ * @param message The message to be written
+ * @param length The length of the message
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::write_to_client(int pool_index, char * message, int length) {
+  if (!message) {
+    return ERROR_INVALID_MESSAGE;
+  }
+
+  if (length < 0) {
+    return ERROR_INVALID_MESSAGE_LENGTH;
+  }
+
+  if (length > (WRITE_BUFFER_SIZE-write_buffer_size[pool_index])) {
+    //TODO: make this a logging statement instead of a print statement
+    printf("There is not enough room in the write buffer to send the data to the client.\n");
+    return ERROR_NOT_ENOUGH_ROOM;
+  }
+
+  if (pool_index == -1) {
+    // Global message.
+    for (int i = 0; i < number_clients_ready; i++) {
+      memcpy(write_buffer[i], message, length);
+      write_buffer_size[i] += length;
+    }
+  } else {
+    if (pool_index < 0 || pool_index >= next_available_slot) {
+      return ERROR_INVALID_CLIENT_ID;
+    }
+
+    //printf("Connection pool: attempting to write [%s], length %i to index %i.\n", message, length, pool_index);
+    memcpy(write_buffer[pool_index], message, length);
+    write_buffer_size[pool_index] += length;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Sets the socket to listen on
+ *
+ * @param listen_socket The socket to listen on
+ *
+ * @return void
+ */
+void ConnectionPool::add_new_socket_to_pool(int new_socket) {
+  if (new_socket < 0)
+    return;
+
+  FD_SET(new_socket, &ready_set);
+
+  if (new_socket > max_file_descriptor) {
+    max_file_descriptor = new_socket;
+  }
+}
+
+/**
+ * @brief Find out what file descriptors are ready to write to and read from
+ *
+ * @param listen_socket The socket to listen on
+ * @param select_timeout The timeout for the select statement
+ *
+ * @return 0
+ */
+int ConnectionPool::perform_select(int listen_socket) {
+  read_set = ready_set;
+  write_set = ready_set;
+
+  struct timeval select_timeout;
+  memset(&select_timeout, 0, sizeof(select_timeout));
+
+  //TODO(Jason): think about why I put this there
+  if (max_file_descriptor < listen_socket)
+    max_file_descriptor = listen_socket;
+
+	//call select.  select sees if any file descriptor in the read set is ready to be read and modifies the read set.  
+	// It sees if any file descriptor in the write set is ready to be written to and modifies the write set.
+  number_clients_ready = select(max_file_descriptor+1, &(read_set), &(write_set), NULL, &select_timeout);
+
+  if (number_clients_ready < 0) {
+    perror(__FUNCTION__);
+  }
+
+  return 0;
+}
+
+/**
+ * @return 1 if the socket is ready to be read, 0 otherwise
+ */
+int ConnectionPool::is_socket_ready_to_read(int socket) {
+  return FD_ISSET(socket, &read_set);
+}
+
+/**
+ * @return the number of clients that are ready
+ */ 
+int ConnectionPool::get_number_clients_ready() {
+  return number_clients_ready;
+}
+
+/**
+ * @brief Reads data from a particular client and checks to see if it contains a command and parses that command 
+ *   or buffers the data assuming the rest of the command will be sent later
+ *
+ * @param pool_index The index in the connection pool of the client to read from
+ * @param client_file_descriptor The file descriptor of the client to read from
+ *
+ * @return 0 on success, negative error code on error
+ */
+int ConnectionPool::read_data(int pool_index, int client_file_descriptor) {
+  char temporary_buffer[READ_BUFFER_SIZE];
+  char temporary_command_buffer[READ_BUFFER_SIZE+1];
+  int num_bytes_read;
+  int length;
+  int command_length;
+
+	//read data that the client is trying to send us
+  num_bytes_read = read(client_file_descriptor, temporary_buffer, READ_BUFFER_SIZE);
+
+	//check to see if the client disconnected
+  if (num_bytes_read == 0 || (num_bytes_read == -1 && errno == ECONNRESET)) {
+    remove_client(pool_index);
+    return DECREMENT_INDEX_COUNTER;
+  }
+
+	
+  while (num_bytes_read > 0) {
+    length = num_bytes_read;
+
+		//make sure this new data won't overflow the read buffer
+    if (length + read_buffer_size[pool_index] > READ_BUFFER_SIZE) {
+      length = READ_BUFFER_SIZE - read_buffer_size[pool_index];
+    }
+
+		//put the newly read data into the read buffer for this client
+    memcpy(read_buffer[pool_index]+read_buffer_size[pool_index], temporary_buffer, length);
+    read_buffer_size[pool_index] += length;
+    num_bytes_read -= length;
+
+    if (num_bytes_read > 0) {
+      memmove(temporary_buffer, temporary_buffer+length, READ_BUFFER_SIZE - length);
+    }
+
+    char* newline_position;
+
+    while ((newline_position = strstr(read_buffer[pool_index], "\n"))) {
+      //if no newline is found in the entire readbuffer (when its full),
+      // toss out the command
+      // because either the command being given is too long or someone is trying
+      // to do something bad to the server
+      //TODO: this is from before all this code was put in the loop.  reconsider
+      //      how to check this error condition and do it elsewhere
+      if (!newline_position && (read_buffer_size[pool_index] == READ_BUFFER_SIZE)) {
+        read_buffer_size[pool_index] = 0;
+        break;
+      }
+
+      //if no newline is found then there is not a command in the buffer
+      if (!newline_position) {
+        break;
+      }
+
+      command_length = (newline_position - read_buffer[pool_index])+1;
+
+      //the newline was found in garbage in the currently not used portion
+      // of the read buffer
+      if (command_length > read_buffer_size[pool_index]) {
+        break;
+      }
+
+      memcpy(temporary_command_buffer, read_buffer[pool_index], command_length);
+      //do command_length-1 to get rid of the newline terminating the command
+      temporary_command_buffer[command_length-1] = '\0';
+      //did this because telnet was putting a \r\n on the end instead of just \n
+      if (isspace(temporary_command_buffer[command_length-2])) {
+        temporary_command_buffer[command_length-2] = '\0';
+      }
+
+      memmove(read_buffer[pool_index], read_buffer[pool_index]+command_length, read_buffer_size[pool_index] - command_length);
+      read_buffer_size[pool_index] -= command_length;
+
+      if (command_length > MAX_COMMAND_LEN) {
+        fprintf(stderr, "Command was too long.  Tossing command out.\n");
+        break;
+      }
+
+      Command command(this, colonet_server);
+      if (command.parse_command(temporary_command_buffer, pool_index) != 0) {
+        fprintf(stderr, "Error parsing command\n");
+        break;
+      }
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * @brief This function takes data out of the write buffer for a client and tries to actually send it to the client
+ *
+ * @param pool_index The index in the connection pool of the client to write to
+ * @param client_file_descriptor The file descriptor to write out on
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::write_data(int pool_index, int client_file_descriptor) {
+  if (write_buffer_size[pool_index] == 0) {
+    return 0;
+  }
+
+  int sent = write(client_file_descriptor, write_buffer[pool_index], write_buffer_size[pool_index]);
+  memmove(write_buffer[pool_index], write_buffer[pool_index]+sent, WRITE_BUFFER_SIZE - sent);
+  write_buffer_size[pool_index] -= sent;
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/VirtualWall.cpp
===================================================================
--- branches/scout/projects/colonet/server/VirtualWall.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/VirtualWall.cpp	(revision 1346)
@@ -0,0 +1,66 @@
+/**
+ * Eugene Marinelli
+ */
+
+#include <VirtualWall.h>
+#include <colonet_wireless.h>
+
+VirtualWall::VirtualWall(void) {
+  wall_available = false;
+}
+
+VirtualWall::~VirtualWall(void) {
+}
+
+int VirtualWall::set_coordinates(int upper_x, int upper_y, int lower_x, int lower_y) {
+  if (upper_x < 0 || upper_y < 0 || lower_x < 0 || lower_y < 0) {
+    return -1;
+  }
+
+  upper_left_x = upper_x;
+  upper_left_y = upper_y;
+  lower_right_x = lower_x;
+  lower_right_y = lower_y;
+
+  wall_available = true;
+
+  /* Let the robots know. */
+  send_to_robots();
+
+  return 0;
+}
+
+void VirtualWall::send_to_robots() {
+  if (wall_available) {
+    unsigned char args[PACKET_DATA_LEN];
+
+    args[0] = (upper_left_x >> 8) & 0xFF;
+    args[1] = upper_left_x & 0xFF;
+    args[2] = (upper_left_y >> 8) & 0xFF;
+    args[3] = upper_left_y & 0xFF;
+    colonet_wl_send(0, GLOBAL_DEST, COLONET_COMMAND, SERVER_REPORT_VIRTUAL_WALL_UPPER, args);
+
+    args[0] = (lower_right_x >> 8) & 0xFF;
+    args[1] = lower_right_x & 0xFF;
+    args[2] = (lower_right_y >> 8) & 0xFF;
+    args[3] = lower_right_y & 0xFF;
+    colonet_wl_send(0, GLOBAL_DEST, COLONET_COMMAND, SERVER_REPORT_VIRTUAL_WALL_LOWER, args);
+  }
+}
+
+void VirtualWall::clear() {
+  wall_available = false;
+}
+
+int VirtualWall::get_coordinates(int* upper_x, int* upper_y, int* lower_x, int* lower_y) {
+  if (wall_available) {
+    *upper_x = upper_left_x;
+    *upper_y = upper_left_y;
+    *lower_x = lower_right_x;
+    *lower_y = lower_right_y;
+
+    return 0;
+  } else {
+    return -1;
+  }
+}
Index: branches/scout/projects/colonet/server/colonet_sniffer/colonetSniffer.cpp
===================================================================
--- branches/scout/projects/colonet/server/colonet_sniffer/colonetSniffer.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/colonet_sniffer/colonetSniffer.cpp	(revision 1346)
@@ -0,0 +1,293 @@
+/** @file colonetSniffer.cpp
+ * @brief A packet sniffer for the colony network.  Uses the colonet_wireless
+ * library
+ *
+ * @author Eugene Marinelli
+ * @date 2/13/06
+ */
+
+#include <iostream>
+#include <signal.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include <colonet_wireless.h>
+#include <colonet_defs.h>
+#include <set>
+#include <queue>
+#include <assert.h>
+
+typedef struct robot {
+  int id;
+} robot_t;
+
+static bool monitor_mode;
+static int cur_robot_id;
+static int last_robot_id;
+
+static queue<ColonetPacket*> pkt_queue;
+
+pthread_cond_t monitor_cvar;
+pthread_mutex_t pkt_queue_lock;
+
+void print_robot(robot_t* robot)
+{
+  assert(robot);
+
+  if (robot->id == cur_robot_id) {
+    cout<<" * ";
+  } else if (robot->id == last_robot_id) {
+    cout<<" > ";
+  } else {
+    cout<<"   ";
+  }
+
+  cout<<"robot "<<robot->id<<" ";
+
+  cout<<endl;
+}
+
+int set_contains_id(set<void*> s, int id)
+{
+  for (set<void*>::iterator itr = s.begin(); itr != s.end(); itr++) {
+    if (((robot_t*)*itr)->id == id) {
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+void set_remove_id(set<void*>* s, int id)
+{
+  for (set<void*>::iterator itr = s->begin(); itr != s->end(); itr++) {
+    if (((robot_t*)*itr)->id == id) {
+      s->erase(*itr);
+      return;
+    }
+  }
+}
+
+void* monitor_packets(void* args)
+{
+  static set<void*> robot_set;
+  int sender_id;
+  robot_t* new_robot;
+  ColonetPacket* pkt;
+  int errcode;
+
+  assert(monitor_mode);
+
+  pthread_cond_init(&monitor_cvar, NULL);
+  pthread_mutex_init(&pkt_queue_lock, NULL);
+
+  while (1) {
+    if (pkt_queue.empty()) {
+      pthread_mutex_lock(&pkt_queue_lock);
+      pthread_cond_wait(&monitor_cvar, &pkt_queue_lock);
+    }
+
+    assert(!pkt_queue.empty());
+
+    pkt = pkt_queue.front();
+    pkt_queue.pop();
+
+    pthread_mutex_unlock(&pkt_queue_lock);
+
+    errcode = ((char*)pkt)[WL_ERROR_LOC];
+    sender_id = pkt->token_src;
+    last_robot_id = pkt->token_src;
+    cur_robot_id = pkt->token_dest;
+
+    if (!set_contains_id(robot_set, sender_id)) {
+      assert(new_robot = (robot_t*) malloc(sizeof(robot_t)));
+      new_robot->id = sender_id;
+      robot_set.insert((void*)new_robot);
+    }
+
+    /* Handle errors */
+    if (pkt->token_dest == WL_ERROR_DEST) {
+      switch (errcode) {
+      case WL_ERRCODE_ROBOTDEATH: {
+        int dead_robot = ((char*)pkt)[WL_ERR_DEAD_LOC];
+        set_remove_id(&robot_set, dead_robot);
+
+        for (set<void*>::iterator itr = robot_set.begin(); itr != robot_set.end(); itr++) {
+          if (((robot_t*)*itr)->id > dead_robot) {
+            ((robot_t*)*itr)->id--;
+          }
+        }
+        break;
+      }
+      case WL_ERRCODE_NEEDTOCHARGE:
+        fprintf(stderr, "Need to charge error received\n");
+        break;
+      case WL_ERRCODE_CHARGESTATION:
+        fprintf(stderr, "Charge station error received\n");
+        break;
+      }
+    }
+
+    /* Display */
+    cout<<endl;
+    for (set<void*>::iterator itr = robot_set.begin(); itr != robot_set.end(); itr++) {
+      print_robot((robot_t*)*itr);
+    }
+
+    free(pkt);
+  }
+
+  return NULL;
+}
+
+int msg_handler(ColonetPacket* pkt)
+{
+  ColonetPacket* copy_pkt = (ColonetPacket*) malloc(sizeof(ColonetPacket));
+  assert(copy_pkt);
+
+  memcpy(copy_pkt, pkt, sizeof(ColonetPacket));
+
+  pthread_mutex_lock(&pkt_queue_lock);
+  pkt_queue.push(copy_pkt);
+  pthread_mutex_unlock(&pkt_queue_lock);
+
+  pthread_cond_signal(&monitor_cvar);
+
+  return 0;
+}
+
+void set_xbee_pan(char* port, int pan)
+{
+  int xbee_fd = open(port, O_RDWR);
+  char inbuf[8];
+  char panbuf[16];
+
+  sprintf(panbuf, "ATID %d\r", pan);
+
+  assert(xbee_fd);
+
+  write(xbee_fd, "+++", 3);
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  while (inbuf[0] != 'O') {
+    read(xbee_fd, inbuf, 1);
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  while (inbuf[0] != 'K') {
+    read(xbee_fd, inbuf, 1);
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  while (inbuf[0] != '\r') {
+    read(xbee_fd, inbuf, 1);
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  write(xbee_fd, panbuf, strlen(panbuf));
+
+  read(xbee_fd, inbuf, 1);
+  if (inbuf[0] != 'O') {
+    printf("XBEE ERROR! received %d\n", inbuf[0]);
+    return;
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  if (inbuf[0] != 'K') {
+    printf("XBEE ERROR! received %d\n", inbuf[0]);
+    return;
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  if (inbuf[0] != '\r') {
+    printf("XBEE ERROR! received %d\n", inbuf[0]);
+    return;
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  write(xbee_fd, "ATCN\r", 5);
+
+  printf("pan id set!\n");
+
+  close(xbee_fd);
+}
+
+int main(int argc, char** argv)
+{
+  ColonetWireless* cw;
+  pthread_t* wl_thr;
+  pthread_t monitor_thr;
+  int opt;
+  char* log_filename = NULL;
+  char* port = SERIAL_PORT;
+  bool join_network = false;
+  int pan = WL_DEFAULT_PAN;
+	bool ignore_token = false;
+
+  while ((opt = getopt(argc, argv, "l:mhp:ja:")) != -1) {
+    switch(opt) {
+    case 'm':
+      monitor_mode = true;
+      cout<<"Monitoring token\n";
+      break;
+    case 'l':
+      log_filename = optarg;
+      break;
+    case 'h':
+      cout<<"Usage: ./colonetSniffer [-l log_filename] [-m (token monitor)] [-h (help/usage)] [-a pan] [-j join nework] [-i ignore token] [-p port]\n";
+      cout<<"* latest destination\n";
+      cout<<"> latest sender\n";
+
+      return 1;
+      break;
+    case 'p':
+      port = optarg;
+      break;
+    case 'j':
+      join_network = true;
+      break;
+    case 'a':
+      pan = atoi(optarg);
+      break;
+		case 'i':
+			ignore_token = true;
+			break;
+    }
+  }
+
+  if (monitor_mode) {
+    assert(!pthread_create(&monitor_thr, NULL, monitor_packets, NULL));
+  }
+
+  //cout<<"Setting pan to "<<pan<<"...\n";
+  //set_xbee_pan(port, pan);
+
+  cw = new ColonetWireless(port, msg_handler, log_filename, join_network,
+													 ignore_token);
+
+  assert(wl_thr = cw->run_listener_thread());
+  
+  pthread_join(*wl_thr, NULL);
+  free(wl_thr);
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/colonet_sniffer/Makefile
===================================================================
--- branches/scout/projects/colonet/server/colonet_sniffer/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/server/colonet_sniffer/Makefile	(revision 1346)
@@ -0,0 +1,12 @@
+# colonet_wireless_test makefile
+
+CC = g++
+CFLAGS = -Wall -Wshadow -Wextra -g
+
+all: colonetSniffer colonetSniffer.cpp
+
+colonetSniffer: colonetSniffer.cpp ../../lib/libcolonet_wireless.a Makefile
+	$(CC) $(CFLAGS) -I../../lib -I../../lib/colonet_wireless colonetSniffer.cpp -o colonetSniffer -L../../lib -lpthread -lcolonet_wireless 
+
+clean: 
+	rm -rf *.o colonetSniffer
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/lights.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/lights.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/lights.h	(revision 1346)
@@ -0,0 +1,91 @@
+/*
+lights.h
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+//user LED
+#ifdef FFPP
+
+#define USERLED 15
+#define USERLED1 15
+#define USERLED2 31
+
+#else
+
+#define USERLED PING2
+#define USERLED1 PING2
+#define USERLED2 PING2 //only have 1
+
+//LEDs are on bank E
+#define REDLED   PE3
+#define GREENLED PE4
+#define BLUELED  PE5
+
+#endif
+
+//ORB
+#define RED       0xE0
+#define ORANGE    0xE8
+#define YELLOW    0xFC
+#define LIME      0x7C
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0x63
+#define PURPLE    0x23
+#define MAGENTA   0xE3
+#define WHITE     0xFF
+#define ORB_OFF   0x00
+
+
+
+//?
+#define COUNT_START 0x8000
+
+
+//user LED
+void led_init( void );
+void led_user(int value);
+
+
+// For function descriptions see orb.c 
+void orb_init(void);
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led); 
+void orb_set_color(int col);
+void orb_disable(void);
+void orb_enable(void);
+
+void orb_set_dio(int red, int green, int blue);
+
+#ifdef FFPP
+int orbs[32];
+
+//send now
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//force send
+void orb_send(void);
+
+void tlc5940test(void);
+
+void tlc_clock1(int data);//may not need these 2
+void tlc_clock2(int data);
+
+void tlc_send(void);
+void tlc_latch(void);
+
+
+void tlc5940init(void);
+#endif
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/motor.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/motor.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/motor.c	(revision 1346)
@@ -0,0 +1,107 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+#ifndef FFPP
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = 0xA1;
+	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+#else
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution at a frequency of
+	// PWM is mode 1, Freq = Clock I/O/1024. 
+	// OC1A and OC1B as pwm.
+	OCR1A = 0x00;
+	OCR1B = 0x00;
+	
+	PORTD &= 0x0F;
+	DDRD |= 0xF0;
+	DDRB |= 0x60;
+	
+	TCCR1A = 0xA1;
+	TCCR1B = 0x05;
+#endif
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x10;
+		PORTD &= 0xBF;
+	}
+	else {
+		PORTD |= 0x40;
+		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+#else
+
+	if(direction == FORWARD) {
+		PORTD = (PORTD & 0xCF) | 0x20;
+	}
+	else {
+		PORTD = (PORTD & 0xCF) | 0x10;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1A = speed;
+#endif
+
+}
+
+void motor2_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x20;
+		PORTD &= 0x7F;
+	}
+	else {
+		PORTD |= 0x80;
+		PORTD &= 0xDF;
+	}
+	OCR1BL = speed;
+#else
+
+	if(direction != FORWARD) {
+		PORTD = (PORTD & 0x3F) | 0x80;
+	}
+	else {
+		PORTD = (PORTD & 0x3F) | 0x40;
+	}
+	
+	OCR1B = speed;
+#endif
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/follow.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/follow.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/follow.c	(revision 1346)
@@ -0,0 +1,47 @@
+
+#include "firefly+_lib.h"
+#include "follow.h"
+
+#define FWD 0
+#define BCK 1    
+
+#define TOTAL 16
+
+
+/*
+int find_max
+returns the index of the BOM with the highest reading
+* note: index, not value
+*/
+
+void seek(int relative_position) 
+{
+	int speed = 255;
+	
+	//MOTOR1 - left
+	//MOTOR2 - right
+	
+	if(relative_position < 5 || relative_position > 13)
+	{ //turn right
+		motor2_set(BCK, 0);
+		motor1_set(FWD, speed);
+	}
+	else if(relative_position > 5 && relative_position <= 13)
+	{ //turn left
+		motor2_set(FWD, speed);
+		motor1_set(BCK, 0);
+	}
+	else 
+	{ //go forward
+		//turn_off_motors();
+		motor1_set(FWD, speed);
+		motor2_set(FWD, speed);
+	}
+}
+
+void drive_forward (void)
+{
+    int speed = 255;
+    motor1_set(FWD, speed);
+    motor2_set(FWD, speed);
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/wireless.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/wireless.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/wireless.h	(revision 1346)
@@ -0,0 +1,32 @@
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+/*
+Wireless - wireless functions for Colony
+
+Eugene Marinelli
+7/22/06
+*/
+
+#define WL_MSG_MAX_LEN 16
+#define WL_PACKET_MAX_LEN (WL_MSG_MAX_LEN+5)
+
+#define GLOBAL_DEST 200
+
+typedef struct {
+  char prefix[2];
+  char src;
+  char dest;
+  char msg[WL_MSG_MAX_LEN];
+  char checksum;
+} WL_Packet;
+
+int wl_init(int msg_len, char listener_address);
+int wl_send(char* msg, char dest);
+int wl_recv(char* msgbuf, char* src, char* dest);
+// get most recent valid message - implement message queue later
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet);
+char wl_get_checksum(WL_Packet* packet);
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/motor.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/motor.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/motor.h	(revision 1346)
@@ -0,0 +1,43 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+#ifdef FFPP
+
+#define IN1A PD4
+#define IN1B PD5
+#define IN2A PD6
+#define IN2B PD7
+
+/* truth table for this robot (w/ 17529 and nand gates)
+PWM	!A	!B	M+	M-
+L	X	X   Z	Z  - coast
+H	0	0	Z	Z  - coast
+H	0	1	1	0  - forward
+H	1	0	0	1  - backward
+H	1	1	0	0  - fast brake
+
+*/
+
+
+
+
+#endif
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off( void );
+
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/follow.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/follow.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/follow.h	(revision 1346)
@@ -0,0 +1,9 @@
+
+#ifndef _FOLLOW_H
+#define _FOLLOW_H
+
+
+void seek(int velocity);
+void drive_forward (void);
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/serial.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/serial.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/serial.c	(revision 1346)
@@ -0,0 +1,143 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	author: Robotics Club, Colony Project
+	
+	much code taken from FWR's library, author: Tom Lauwers
+	
+	
+	general note - serial -> uart
+				   serial1 -> uart1
+		this is done for clarity purposes
+*/
+
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+//setup uart0 (serial)
+void serial_init(unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR0H = 0x00;
+	UBRR0L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+}
+
+// uart_putchar - Low-level function which puts a value into the 
+// Tx buffer for transmission.  Automatically injects
+// a \r before all \n's
+int serial_putchar(char c)
+{
+
+    if (c == '\n')
+		putchar('\r');
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR0A, UDRE0);
+	// Load buffer with your character
+    UDR0 = c;
+    return 0;
+}
+
+// uart_getchar - Low-level function which waits for the Rx buffer
+// to be filled, and then reads one character out of it.
+// Note that this function blocks on read - it will wait until
+// something fills the Rx buffer.
+int serial_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+    c = UDR0;
+	return c;
+}
+
+// uart_getchar_nb - Low-level function which checks if the Rx buffer
+// is filled, and then reads one character out of it.
+// This is a non blocking version uart_getchar
+int serial_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR0A, RXC0);
+	if (UCSR0A & _BV(RXC0)){
+		// Read the receive buffer
+		c = UDR0;
+		return c;
+	}
+	return 0;
+		
+}
+
+//setup uart1 (serial1)
+void serial1_init( unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR1H = 0x00;
+	UBRR1L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  /* For use with fprintf() and related functions */
+  serial1_stream = fdevopen(serial1_putchar, serial1_putchar);
+  
+  /* To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); 
+     This call to fdevopen() does give a compile warning
+  but works fine.
+  -Greg Tress
+  */
+}
+
+//put to uart1 (serial1)
+int serial1_putchar(char c)
+{
+
+    if (c == '\n')
+		serial1_putchar('\r'); //changed from putchar aj
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR1A, UDRE1);
+	// Load buffer with your character
+    UDR1 = c;
+    return 0;
+}
+
+//get from uart1 (serial1)
+int serial1_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+    c = UDR1;
+	return c;
+}
+
+//get from uart1 non-block
+int serial1_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR1A, RXC1);
+	if (UCSR1A & _BV(RXC1)){
+		// Read the receive buffer
+		c = UDR1;
+		return c;
+	}
+	return 0;
+		
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/buzzer.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/buzzer.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/buzzer.c	(revision 1346)
@@ -0,0 +1,76 @@
+/*
+	buzzer.c - Contains the functions necessary for running the buzzer
+	
+	author: Robotics Club, Colony Project
+	
+	much taken from FWR's firefly library (author: Tom Lauwers)
+
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+	// Set pin D7 to output - D7 is buzzer pin
+	DDRB |= 0x80;
+	
+	// Set to Fast PWM mode, toggle the OC0A pin (D6) on output compare
+	// matches, and select a clock prescalar of 64 for the counter.
+	// Counter FREQ = 8000000/64 = 125000
+	//01011000
+	TCCR2 = 0x1B;
+	OCR2=100;
+	
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+	int buzz_value;
+	
+	buzz_value = 62500/buzz_freq - 1;
+
+	if(buzz_value > 255)
+		buzz_value = 255;
+	else if(buzz_value < 0)
+		buzz_value = 0;
+	
+	buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{	
+	buzzer_set_freq(buzz_freq);
+	
+	delay_ms(ms);
+		
+	buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off() 
+{
+	// Disable clock, to halt counter
+	TCCR2 &= 0xF8;
+	
+	// Set buzzer pin low in case it's high
+	PORTB &= 0x7F;
+}
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/serial.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/serial.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/serial.h	(revision 1346)
@@ -0,0 +1,49 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// Tested baud rates
+#define BAUD9600    103
+#define BAUD115200  8  //Warning--3.5% error
+
+// Untested baud rates that might be right --aaron
+#define BAUD1M	     0
+#define BAUD500K     1
+#define BAUD250K     3
+#define BAUD230400   3   //Warning--8.5% error
+#define BAUD76800    12
+#define BAUD57600    16  //Warning--2.1% error
+#define BAUD38400    25
+#define BAUD28800    34
+#define BAUD19200    51
+#define BAUD14400    68
+#define BAUD4800     207
+#define BAUD2400     416  //Might not work, since it needs some high bits set
+
+#include <stdio.h>
+FILE *serial1_stream;  //For use with fprintf() and related functions
+
+  /* NOTE: To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); */
+
+// Function descriptions are available in serial.c
+
+//serial (serial0) is the ttl serial (wireless)
+void serial_init( unsigned int ubrr);
+int serial_putchar(char c);
+int serial_getchar(void);
+int serial_getchar_nb(void);
+
+//serial1 is the rs-232 port (db9 connector) (except on robot0 where both are serial0)
+void serial1_init( unsigned int ubrr);
+int serial1_putchar(char c);
+int serial1_getchar(void);
+int serial1_getchar_nb(void);
+
+
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/manualControlRobot.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/manualControlRobot.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/manualControlRobot.c	(revision 1346)
@@ -0,0 +1,87 @@
+/*
+Ryan Kellogg 
+10/12/06
+manualControlRobot - Receives commands from server and executes
+*/
+
+/* Includes */
+#include <stdio.h>
+#include <string.h>
+ 
+#include <firefly+_lib.h>
+#include "pindefs_ff.h"
+
+#include <wireless.h>
+
+#define FORWARD 0xF0
+#define BACK 0xF1
+#define RIGHT 0xF2
+#define LEFT 0xF3
+#define STOP 0xF4
+
+void init_hardware(void);
+
+/* Main */
+int main(void){
+  char buf[80];
+  char src, dest;
+  
+  init_hardware();
+  wl_init(3,1);
+
+  orb_set_color(GREEN);
+
+  while(1){
+    if(wl_recv(buf, &src, &dest)){
+      lcd_putchar('[');
+      lcd_putchar(buf[0]);
+      lcd_putchar(']');
+      orb_set_color(RED);
+    }else{
+      printf(".");
+      orb_set_color(GREEN);
+    }
+    
+    switch(buf[0]){
+      case FORWARD:
+        motor1_set(0,255);
+        motor2_set(0,255);
+        break;
+      case BACK:
+        motor1_set(1,255);
+        motor2_set(1,255);
+        break;
+      case LEFT:
+        motor1_set(1,255);
+        motor2_set(0,255);
+        delay_ms(150);
+        motors_off();
+        break;
+      case RIGHT:
+        motor1_set(0,255);
+        motor2_set(1,255);
+        delay_ms(150);
+        motors_off();
+        break;
+      case STOP:
+        motors_off();
+      }
+      
+      buf[0] = 0;
+  }
+  
+  return 0;
+}
+
+void init_hardware(){
+  motors_init();
+  orb_init();
+  led_init();
+  analog_init();
+  
+  serial_init(BAUD9600);
+  serial1_init(BAUD115200);2
+  lcd_init();
+
+  fdevopen(&serial1_putchar, &serial1_getchar);
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/buzzer.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/buzzer.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/buzzer.h	(revision 1346)
@@ -0,0 +1,33 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+	
+	
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/localization.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/localization.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/localization.c	(revision 1346)
@@ -0,0 +1,84 @@
+#include "localization.h"
+
+#include "firefly+_lib.h"
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/Makefile
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/Makefile	(revision 1346)
@@ -0,0 +1,519 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = robotWirelessRelay
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 9600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/localization.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/localization.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/localization.h	(revision 1346)
@@ -0,0 +1,28 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+
+
+typedef struct{
+    //actual row of sensor values -- need to be able to have up to
+    //max_robots
+    unsigned char row[MAX_ROBOTS];
+    //actual length of the row
+    unsigned char len;
+    //'index' value of the row -- which robot it's for
+    unsigned char row_num;
+    
+ } SensorRow;
+ 
+ 
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS);
+ 
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/servo.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/servo.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/servo.c	(revision 1346)
@@ -0,0 +1,132 @@
+/*  
+	servo.c - Contains functions and interrupts necessary to activate servos
+	author:  Tom Lauwers
+	
+	3/1/06 Iain
+		Man, I don't know what a servo is. 
+*/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <servo.h>
+#include <dio.h>
+#include <lights.h>
+#include <lcd.h>
+//1677.7216 c/ms
+//i dunno must be 2^k
+//250
+//9C40 ~ 20ms
+//#A000 ~ 20.48 but prolly wont work
+//div by 256: 6.55078125 c/ms 80 ~ 19.5ms
+#define SERVO_PERIOD 0x80
+//needs be 1ms
+//is 1.22ms
+#define SERVO_CONSTANT 0x8
+
+/* dirty dirty
+unsigned int servo_vals[4] = {0,0,0,0}; // Stores the set servo values
+int current_servo = 0;  // Stores which servo is current in the interrupt routine
+*/
+unsigned int servo_vals[8] = {0,0,0,0,0,0,0,0}; // Stores the set servo values
+int phase_time=0;
+int phase_base=0;
+int servos_on = 0;      // Stores which servos are enabled
+int servos_enabled=0; //which are high
+int servo_flag = 0;     // Stores whether or not servos are enabled
+
+/* Timer 1 output compare B interrupt.  Does the following:
+	Checks to see if the current servo is 4, in which case just need
+	to set low servo 3's signal and return.
+	Else, check to see if the current servo is enabled, and set it's signal high
+	Then, set the previous servo's signal low
+	Now, set the next output compare to occur for some time from now 
+	specified by the current servo's value
+*/
+SIGNAL (SIG_OUTPUT_COMPARE3B)
+{
+	lcd_putchar('i');
+	if(servo_flag == 0)
+		return;
+	
+	int i;
+	if(phase_time == 0){
+		lcd_putchar('p');
+		for(i=0;i<8;i++){
+			if(servos_on & _BV(i))
+				digital_output((_PORT_E << 3) +i,1);
+		}
+		servos_enabled = servos_on;
+		phase_base = OCR3B;
+	}
+
+	unsigned int min=~0;
+	for(i=0;i<8;i++){
+		if(_BV(i) & servos_enabled){
+			if(SERVO_CONSTANT*servo_vals[i] <= phase_time){
+				digital_output((_PORT_E << 3) + i,0);
+				servos_enabled &= ~_BV(i);
+			}
+			else if(SERVO_CONSTANT*servo_vals[i] < min) {
+				min = servo_vals[i];
+			}
+		}
+	}
+	if(!servos_enabled){
+		OCR3B = phase_base + SERVO_PERIOD;
+		phase_time = 0;
+	}
+	else {
+		OCR3B = phase_base + min;
+		phase_time = min;
+	}
+	
+}	
+
+void init_servo()
+{
+	//1010 1001
+	TCCR3A = 0; 
+	//0000 0100
+	TCCR3B = 0x4;  //prescaler to 256
+	TCCR3C=0;
+	lcd_init();
+	ETIMSK |= 0x08;
+	servo_flag = 1;
+	OCR3B = 0x0;
+	lcd_putchar('i');
+}
+
+// Enable a servo specified by config
+void enable_servo(int config)
+{
+	servos_on |= _BV(config);
+}
+
+// Disable a servo specified by config
+void disable_servo(int config)
+{
+	servos_on &= (0xFF-_BV(config));
+}
+
+// Disables the timer1 interrupt, disabling the servos
+void disable_servos()
+{
+	// Disables interrupts
+	ETIMSK &= ~0x08;
+	servo_flag=0;
+
+}
+
+// Enables the timer1 interrupt, enabling the servos
+void enable_servos()
+{
+	// Enable interrupts on output compare B
+	ETIMSK |= 0x08;
+	servo_flag=1;
+}
+// Set a servo to a value.  Automatically enables the servo.
+void set_servo(int servo, unsigned int value)
+{
+	enable_servo(servo);
+	servo_vals[servo] = value;
+}
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/time.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/time.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/time.c	(revision 1346)
@@ -0,0 +1,100 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <help.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/*
+void rtc_init(void)
+call this function to start the real time timer
+use rtc() to get the time value and rtc_resest() to reset
+
+requires global interrupts to be enabled for proper use
+(I bit of SREG register should be set)
+
+uses TIMER0 on asynchronous mode
+*/
+
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void)){
+	int mask = _BV(TCN0UB) + _BV(OCR0UB) + _BV(TCR0UB);
+	char tmp;
+	
+	TIMSK &= ~(_BV(OCIE0) + _BV(TOIE0)); //1. disable interrupts
+	ASSR |= _BV(AS0); //2. selecting clock source (external)
+	
+	//3. writing new values to TCCR, TCNT, OCR
+	TCNT0 = 0;
+	OCR0 = ocr_val;
+	TCCR0 = (0x01 << 3) + (prescale_opt & 0x07); //setting CTC mode, prescaler is lowest 3 bits
+	
+	//4. waiting for busy bits to clear
+	tmp = ASSR;
+	while( tmp & mask ){
+		tmp = ASSR;
+	}
+	
+	TIFR &= ~(_BV(OCF0) + _BV(TOV0)); //5. clearing the interrupt flags
+	TIMSK |= _BV(OCIE0); // + _BV(TOIE0); //6. enabling interrupts
+	
+	_rtc_f = rtc_func;
+}
+
+int rtc(void){
+	return _rtc_val;
+}
+
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+SIGNAL (SIG_OUTPUT_COMPARE0){
+	_rtc_val++;
+	
+	if(_rtc_f != 0)
+		_rtc_f();
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/analog.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/analog.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/analog.c	(revision 1346)
@@ -0,0 +1,134 @@
+/*
+	analog.c - Contains the function implementations for manipulating the ADC
+	on the firefly+ board
+	
+	author:  CMU Robotics Club, Colony Project
+	code mostly taken from fwr analog file (author: Tom Lauwers)
+*/
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void analog_init(void){
+
+	/*
+		ADC Status Register A
+		Bit 7 - ADEN is set (enables analog)
+		Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+		Bit 5 - Enable Auto Trigger (for free running mode)
+		Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+		Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 16,000,000/128
+	*/
+	ADCSRA |= 0xEF;
+
+	/*
+		ADMUX register
+		Bit 7,6 - Set voltage reference to AVcc (0b01)
+		Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+		Bit 4 - X
+		Bit 3:0 - Sets the current channel
+	*/
+	ADMUX = 0x67;
+	
+	#ifdef FFPP
+	DDRA |= 0x70;
+	set_adc_mux(0x07);
+	#endif
+	
+}	
+
+#ifdef FFPP
+void set_adc_mux(int which)
+{
+  // A4..A6 set mux to port 0-7 via binary selection
+  
+  // mask so only proper bits are possible.
+  which &= 0x07;
+  PORTA &= 0x8F;
+  PORTA |= which << 4;
+}
+
+void enable_analog(int analog_setting)	//why do we need this?
+{
+	// Digital input disable - don't disable any of them
+	// Set any of the lower six bits to a 1 to disable that bit
+	DDRF = 0x00; //ALL_ANALOG;
+}
+#endif
+
+unsigned int analog8(int which){
+
+#ifdef FFPP
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)		//Why dont we combine this and the above?
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(10);
+	}
+
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+
+	_delay_ms(1); // need at least 130 us between conversions (for fwr robot, how much for new avr?)
+	return ADCH;
+}
+
+unsigned int analog10(int which){
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+	
+
+
+#ifdef FFPP
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)		//Why dont we combine this and the above?
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(10);
+	}
+
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void){
+	return analog8(WHEEL_PORT);
+}
+
+int battery(void){
+	return analog8(BATT_PORT) * 500 >>7; /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/firefly+_lib.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/firefly+_lib.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/firefly+_lib.c	(revision 1346)
@@ -0,0 +1,179 @@
+#include <firefly+_lib.h>
+#include <rangefinder.h>
+
+void button_test ( void);
+void motor_test (void);
+void serial_test( void );
+void lcd_test(void);
+void orb_test( void );
+void batt_test(void);
+void pullup_test(void);
+void ranger_test(void);
+
+/*
+int main( void ) {
+//	orb_init();
+	//motors_init();
+	tlc5940test();
+	//ranger_test();
+	//pullup_test();
+	//serial_test();
+	//lcd_test();
+	
+ orb_set_num(2, 255,0,0);
+	motor_test();
+ orb_set_num(3, 255,0,0);
+	return 0;
+}*/
+
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+void button_test ( void) 
+{
+
+	lcd_init();
+	
+	while(1) {
+	
+	
+		if(button1_read())
+			lcd_putchar('1');
+		if(button2_read())
+			lcd_putchar('2');
+			
+		delay_ms(100);
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	motor1_set(1, 255);
+	motor2_set(1, 255);
+	
+	delay_ms(10000);
+	
+	motors_off();
+	led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+void orb_test( void ) {
+	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	
+	
+	while(1) {
+		orb_set_color(orbs[orb_select]);
+		delay_ms(1000);
+		orb_select++;
+		if(orb_select == 14)
+			orb_select = 0;
+	}
+
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i;
+	lcd_init();
+	
+	for(i = 32; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+	}
+	
+	
+	return;
+	
+}
+
+/*
+prints all printable characters to the serial
+
+baud rate is 115200
+*/
+void serial_test( void ) {
+	int i;
+	
+	serial1_init(BAUD115200);
+	fdevopen(&serial1_putchar,&serial1_getchar);
+	for(i = 32; i <= 126; i++) {
+		printf("%d",i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+
+	analog_init();
+
+	while(1){
+		lcd_clear_screen();
+		lcd_putint(battery());
+		delay_ms(1000);
+	}
+}
+
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/lcd.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/lcd.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/lcd.c	(revision 1346)
@@ -0,0 +1,264 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+#include "oled.h"
+
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+	{ 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+#ifdef FFPP
+
+	OLED_init();
+
+#else
+
+	LCDDDR |= (D_C | SCE | SDI | SCK);
+	LCDRESETDDR |= RST;
+
+	LCDPORT &= ~(D_C | SCE | SDI | SCK);
+	
+	SPCR |= 0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+#endif
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+#ifdef FFPP
+	drawclear();
+#else
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+#endif
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+#ifndef FFPP
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+#endif
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+#ifndef FFPP
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+#endif
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+#ifndef FFPP
+  LCDPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDPORT |= D_C;
+#endif
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/servo.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/servo.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/servo.h	(revision 1346)
@@ -0,0 +1,16 @@
+/*  
+	servo.h - Contains function prototypes for servo activation
+	author:  Tom Lauwers
+*/
+#ifndef _SERVO_H_
+#define _SERVO_H_
+
+// Information on functions available in servo.c
+void init_servo(void);
+void enable_servos(void);
+void enable_servo(int config);
+void set_servo(int servo, unsigned int value);
+void disable_servos(void);
+void disable_servo(int );
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/time.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/time.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/time.h	(revision 1346)
@@ -0,0 +1,58 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#define TIMER_OFF         0x00
+#define PRESCALE_NONE     0x01
+#define PRESCALE_DIV_8    0x02
+#define PRESCALE_DIV_32   0x03
+#define PRESCALE_DIV_64   0x04
+#define PRESCALE_DIV_128  0x05
+#define PRESCALE_DIV_256  0x06
+#define PRESCALE_DIV_1024 0x07
+
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void));
+
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/move.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/move.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/move.c	(revision 1346)
@@ -0,0 +1,86 @@
+//Created 4/30/06 by James Kong
+
+#include "firefly+_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/analog.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/analog.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/analog.h	(revision 1346)
@@ -0,0 +1,95 @@
+/*
+	analog.h - Contains definitions and function prototypes for using the
+	ADC to detect analog signals on pins AN0 - AN7
+	AN6 and AN7 are used for the wheel and battery
+	
+	The pins labeled E6 and E7 are external interrupt pins and are not related to analog
+	
+	author: CMU Robotics Club, Colony Project
+	code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+
+#ifdef FFPP
+#define AN8 0x08
+#define AN9 0x09
+#define ANA 0x0A
+#define ANB 0x0B
+#define ANC 0x0C
+#define AND 0x0D
+#define ANE 0x0E
+#define ANF 0x0F
+
+#define EXT_MUX   0x07
+#define IR_READ   0x08
+#define IR1_READ  0x08
+#define IR2_READ  0x09
+#define IR3_READ  10
+#define IR4_READ  11
+#define IR5_READ  12
+#define ADC_BATT  13
+#define ADC_WHEEL 14
+#define ADC_3V3   15
+
+#define WHEEL_PORT ANE
+#define BATT_PORT AND
+
+#else
+
+#define WHEEL_PORT AN6
+#define BATT_PORT  AN7
+
+#endif
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+#ifdef FFPP
+ void enable_analog(int analog_setting);
+void set_adc_mux(int which);
+#endif
+
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/firefly+_lib.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/firefly+_lib.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/firefly+_lib.h	(revision 1346)
@@ -0,0 +1,33 @@
+/*
+
+firefly+_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+#ifndef _FIREFLY_LIB_H_
+#define _FIREFLY_LIB_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+//#include <avr/signal.h>
+#include <avr/interrupt.h>
+//#include <avr/delay.h>
+#include <util/delay.h>
+
+#include <analog.h>
+#include <dio.h>
+
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/lcd.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/lcd.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/lcd.h	(revision 1346)
@@ -0,0 +1,84 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+#ifndef FFPP
+
+//////lcd defines
+#define RST 0x04  // pe2 (GPIO)
+#define SCE 0x01  // pb0 (~SS)
+#define D_C 0x10  // pb4 (GPIO?)
+#define SDI 0x04  // pb2 (MOSI)
+#define SCK 0x02  // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTE
+#define LCDRESETDDR DDRE
+
+#else
+	
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow);
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+inline void drawclear(void);
+
+void drawscroll(char hoff, char srow, char rows, char speed);
+inline void drawscrollstart(void);
+inline void drawscrollstop(void);
+
+void drawIR(void);
+
+void crazycircle (void);
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+
+#endif
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/pindefs_ff.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/pindefs_ff.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/pindefs_ff.h	(revision 1346)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/move.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/move.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/move.h	(revision 1346)
@@ -0,0 +1,34 @@
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/dio.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/dio.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/dio.c	(revision 1346)
@@ -0,0 +1,312 @@
+/* 
+
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+	the first 3 (abc in this example) are used to select the bank
+		A = 001
+		B = 010
+		C = 011
+		D = 100
+		E = 101
+		F = 110
+		G = 111
+		
+		the bank can be found by doing portpin >> 3
+		
+	the next 3 (def in this example) are used to select the pin number
+	the 3 bits are just the binary representation of the pin number
+		0 = 000
+		1 = 001
+		2 = 010
+		3 = 011
+		4 = 100
+		5 = 101
+		6 = 110
+		7 = 111
+		
+		the pin number can be found by doing portping & 0b111
+		
+
+*/
+
+#include <avr/interrupt.h>
+
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+/*
+digital_input
+
+reads the value on the selected portpin, returns it as 1 or 0
+see general description (above) for definition of portpin
+
+*/
+int digital_input(int portpin){
+	int pin = portpin & 0x7;
+	int pin_val = 0;
+	
+	switch(portpin >> 3){
+		case _PORT_A:
+			DDRA &= ~_BV(pin);
+			pin_val = PINA;
+			return (pin_val >> pin) & 1;
+		case _PORT_B:
+			DDRB &= ~_BV(pin);
+			pin_val = PINB;
+			return (pin_val >> pin) & 1;
+		case _PORT_C:
+			DDRC &= ~_BV(pin);
+			pin_val = PINC;
+			return (pin_val >> pin) & 1;
+		case _PORT_D:
+			DDRD &= ~_BV(pin);
+			pin_val = PIND;
+			return (pin_val >> pin) & 1;
+		case _PORT_E:
+			DDRE &= ~_BV(pin);
+			pin_val = PINE;
+			return (pin_val >> pin) & 1;
+		case _PORT_F:
+			if(pin>=4){
+				MCUSR|=1<<7;
+				MCUSR|=1<<7;
+			}
+			DDRF &= ~_BV(pin);
+			pin_val = PINF;
+			return (pin_val >> pin) & 1;
+		case _PORT_G:
+			DDRG &= ~_BV(pin);
+			pin_val = PING;
+			return (pin_val >> pin) & 1;
+		default: break;
+	}
+	
+	return -1;
+}
+
+/*
+digital_pull_up
+Enables pullup on a pin.  if pin is output, it will make it output 1.
+
+*/
+void digital_pull_up(int portpin) {
+	int pins = portpin & 0x07;
+	
+
+	switch(portpin >> 3) {
+		case _PORT_A:
+			PORTA |= _BV(pins);
+			break;
+		case _PORT_B:
+			PORTB |= _BV(pins);
+			break;		
+		case _PORT_C:
+			PORTC |= _BV(pins);
+			break;		
+		case _PORT_D:
+			PORTD |= _BV(pins);
+			break;		
+		case _PORT_E:
+			PORTE |= _BV(pins);
+			break;		
+		case _PORT_F:
+			PORTF |= _BV(pins);
+			break;		
+		case _PORT_G:
+			PORTG |= _BV(pins);
+			break;
+	}
+	
+}
+
+/*
+digital_output
+
+sets portpin to the value
+
+see general description above for explanation of portpin
+
+val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+	int pins = portpin & 0x07;
+	
+	/*
+	if you want to set to 0
+	*/
+	if(val == 0) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA &= (0XFF - _BV(pins));
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG &= (0XFF - _BV(pins));
+				break;
+		}
+	}
+	else { /* ( val == 1) */ 
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA |= _BV(pins);
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB |= _BV(pins);
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC |= _BV(pins);
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD |= _BV(pins);
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE |= _BV(pins);
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF |= _BV(pins);
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG |= _BV(pins);
+				break;
+		}
+	}
+}
+
+
+
+
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	//return (BTN & (_BV(BTN1)) >> BTN1);
+	return (PIN_BTN >> BTN1) & 1;
+}
+
+/*
+similar to button1_read, but hold program until the button is actually pressed
+*/
+void button1_wait( void )
+{
+	while(!button1_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+/*
+same as button1_wait
+However, blink the led while waiting
+
+IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+void button1_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button1_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	return (PIN_BTN >> BTN2) & 1;
+}
+
+void button2_wait( void )
+{
+	while(!button2_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+void button2_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button2_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+	putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/dio.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/dio.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/dio.h	(revision 1346)
@@ -0,0 +1,183 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+
+/*
+
+these are ALL the pins
+don't use unless you know what you're doing
+
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32
+#define _PIN_D1 33
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42
+#define _PIN_E3 43
+#define _PIN_E4 44
+#define _PIN_E5 45
+#define _PIN_E6 46
+#define _PIN_E7 47
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#ifndef FFPP
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+#endif
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#ifndef FFPP
+#define PIN_LED1 58
+#endif
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+///////////////////////
+//////  BUTTONS  //////
+///////////////////////
+#define PIN_BTN PING
+
+#define BTN2 PING1
+#define BTN1 PING0
+
+int button1_read( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+
+#endif
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/oled.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/oled.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/oled.c	(revision 1346)
@@ -0,0 +1,394 @@
+#ifdef FFPP
+#include "firefly+_lib.h"
+/******************************************************************************/
+/*  OLED example.   8 bit mode                                           */
+/*      Spark Fun Electronics   5/3/06   OSO                                 */
+/******************************************************************************/
+/*                                                                            */
+/*    STOLEN and hacked to work with SPI, AVR     		                        */
+/******************************************************************************/
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor) {
+	write_c(0x86);
+	write_d(col);
+	write_d(row);
+	write_d(radius);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor) {
+	write_c(0x84);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor) {
+	write_c(0x83);
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+}
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) {
+	write_c(0x8A);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(ncol);
+	write_d(nrow);
+}
+
+void drawfill(char fill) {
+	write_c(0x92);    // fill enable command
+	write_d(0x01&fill); 
+}
+
+void drawclearwindow(char scol, char srow, char ecol, char erow) {
+	write_c(0x8e);    // clear window command
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+}
+
+inline void drawclear(void) {
+	drawclearwindow(0,0,130,130);
+}
+
+void drawscroll(char hoff, char srow, char rows, char speed) {
+	write_c(0x96);
+	write_d(hoff);
+	write_d(srow);
+	write_d((srow+rows>132)?132:rows);
+	write_d(0x00);
+	write_d(speed&0x3);
+	
+}
+
+inline void drawscrollstart(void) {
+	write_c(0x9F);
+}
+
+inline void drawscrollstop(void) {
+	write_c(0x9E);
+}
+
+#define ROBOSIZE 4
+
+#include "rangefinder.h"
+
+void drawIR(void) {
+/*	char d;
+	enable_IR();
+	drawclear();
+	delay_ms(500);
+	drawfill(1);
+	
+	delay_ms(10);
+
+	drawcircle(64,64-ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawcircle(64,64+ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawrect(64-ROBOSIZE,64-ROBOSIZE,64+ROBOSIZE,64+ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+
+	while(1){
+		
+		d=(convert_IR_distance(read_IR_val(1))-100)>>4;
+		if(d>63-ROBOSIZE*2){
+			d=0;//63-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(63, 0, 65, 63-ROBOSIZE*2);
+		drawline(64,63-ROBOSIZE*2-d,64,63-ROBOSIZE*2,C_RED);
+		delay_ms(5);
+		
+		
+		
+		
+
+		d=(convert_IR_distance(read_IR_val(0))-100)/11;
+		if(d>62-ROBOSIZE){
+			d=0;//64-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 0, 63-ROBOSIZE, 63-ROBOSIZE);
+		delay_ms(5);	
+		drawline(63-ROBOSIZE-d,63-ROBOSIZE-d,63-ROBOSIZE,63-ROBOSIZE,C_RED);
+		//delay_ms(25);	
+		delay_ms(5);
+		
+		
+
+//		d=(convert_IR_distance(read_IR_val(2))-100)/11;
+//		if(d>64){
+//			d=0;//64-ROBOSIZE*2;
+//		}
+//		delay_ms(100);	
+	
+//		drawclearwindow(65+ROBOSIZE,0, 128,128);
+//		delay_ms(5);	
+//		drawline(128-(65+ROBOSIZE+d),128-(65+ROBOSIZE-d),65+ROBOSIZE,(65-ROBOSIZE),C_RED);
+//		drawline(64,64-d,64+d,64,C_RED);
+		//delay_ms(25);	
+//		delay_ms(5);
+		
+		
+		
+		
+		
+		
+		d=(convert_IR_distance(read_IR_val(4))-100)>>4;
+		if(d>64-ROBOSIZE){
+			d=0;//64-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 63+ROBOSIZE, 63-ROBOSIZE, 65+ROBOSIZE);
+		drawline(64-ROBOSIZE-d,64+ROBOSIZE,63-ROBOSIZE,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+
+		d=(convert_IR_distance(read_IR_val(3))-100)>>4;
+		if(d>128-65-ROBOSIZE){
+			d=0;//128-65-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(65+ROBOSIZE, 63+ROBOSIZE, 127, 65+ROBOSIZE);
+		drawline(65+ROBOSIZE,64+ROBOSIZE,65+ROBOSIZE+d,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+		
+	}
+*/
+}
+
+void crazycircle (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+/*      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+	  */
+	  drawcircle(rand() % 130,rand() % 130,rand() %64, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void crazyrect (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+
+	  drawrect(rand() % 130,rand() % 130,rand() % 130,rand() % 130, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  drawclear();
+
+ delay_ms(100);
+  
+  drawfill(1);
+  
+  delay_ms(10);
+
+//  crazycircle();
+  
+//  delay_ms(500);
+  
+ // drawscroll(1,0,50,1);
+  //drawscrollstart();
+  //delay_ms(1000);
+  //drawscrollstop();
+  //drawcopy(0,0,100,100,50,50);
+ // delay_ms(100);
+//  drawfill(0);
+  //drawcircle(64,64,16,C_RED,C_GREEN);
+//  drawcircle(64,64,15,C_RED,C_GREEN);
+//  drawcircle(64,64,14,C_RED,C_GREEN);
+  
+  drawIR();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/rangefinder.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/rangefinder.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/rangefinder.c	(revision 1346)
@@ -0,0 +1,183 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "firefly+_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+int read_distance (int range_id) {  
+#ifndef FFPP
+	int bitcount;
+	int current = 0;
+	digital_output(RANGE_CTRL, 0);						//set Vin Low
+	while(digital_input(range_id) == 0);				//waits until Vout reads high
+	digital_output(RANGE_CTRL, 1);						//first Vin clock high transition
+	
+	for(bitcount = 8; bitcount != 0; bitcount--){
+		digital_output(RANGE_CTRL, 0);					//Vin clock low transition
+		//clock delay (unnecessary)
+		current = current << 1;							//shifts current 8-bit value left
+		current |= digital_input(range_id);				//LSB set to Vout value
+		digital_output(RANGE_CTRL, 1);					//Vin clock high transition
+		//clock delay (unnecessary)
+	}													//repeats until all 8 bits are stored
+	return current;
+#else
+	enable_IR();
+	_delay_ms(5);										///////Figure out what this should be!!!!!!  Maybe if not enabled already?
+	return read_IR_val(range_id);
+#endif
+}
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+
+int linearize_distance (int reading) {
+#ifndef FFPP
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+#else
+	return convert_IR_distance(reading);
+#endif
+}
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+int log_distance(int distance) {
+#ifndef FFPP
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+#endif
+	return 0;
+}
+
+
+#ifdef FFPP
+
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+void enable_IR()
+{
+  // active low, so set enable to low to turn on IR
+  PORTC &= ~(_BV(IR_ENABLE));
+  DDRC |= _BV(IR_ENABLE);
+}
+
+void disable_IR()
+{
+  // active low, so set line high and turn to input for good measure (line has pull-up)
+  PORTC |= _BV(IR_ENABLE);
+  DDRC &= ~(_BV(IR_ENABLE));
+}
+
+int read_IR_val(int which)
+{
+  return analog8(IR_READ + which);
+}
+
+int convert_IR_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+int get_IR_distance(int which)
+{
+  return convert_IR_distance(read_IR_val(which));
+}
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/oled.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/oled.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/oled.h	(revision 1346)
@@ -0,0 +1,82 @@
+#ifndef _OLED_H_
+#define _OLED_H_
+#ifdef FFPP
+
+#define C_BLUE 0x001f
+#define C_GREEN 0x07e0
+#define C_RED 0xf800 
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) ;
+
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+
+inline void drawclear(void) ;
+
+void drawscroll(char hoff, char srow, char rows, char speed) ;
+
+inline void drawscrollstart(void) ;
+inline void drawscrollstop(void) ;
+
+void drawIR(void);
+
+void crazycircle (void) ;
+
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+void OLED_init(void);
+
+void Reset_SSD1339(void);
+
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat);
+
+void RES(char stat);
+void CS(char stat);
+
+// send to the LCD
+void LCD_out(unsigned char cmd);
+
+
+#endif
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/rangefinder.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/rangefinder.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/rangefinder.h	(revision 1346)
@@ -0,0 +1,70 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+//old range_in0
+//#define RANGE_IN0 PIN_AN5
+
+/*  These do not exist yet.
+#define RANGE_IN1 PIN_??
+#define RANGE_IN2 PIN_
+#define RANGE_IN3 PIN_
+#define RANGE_IN4 PIN_
+#define RANGE_IN5 PIN_
+#define RANGE_IN6 PIN_
+#define RANGE_IN7 PIN_
+*/
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+#ifdef FFPP
+// IR range finders are indexed 0-4.
+// IR1 is front left, IR2 is front center, IR3 is front right, IR4 is rear right, IR5 is rear left.
+
+// active low
+#define IR_ENABLE PC7
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+
+void enable_IR(void);
+void disable_IR(void);
+int read_IR_val(int);
+int convert_IR_distance(int);
+int get_IR_distance(int);
+#endif
+
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/photovore.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/photovore.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/photovore.h	(revision 1346)
@@ -0,0 +1,25 @@
+#ifndef _PHOTOVORE_H_
+#define _PHOTOVORE_H_
+
+
+#define PHOTORESISTOR_LEFT AN1 //might be the opposite (Eugene)
+#define PHOTORESISTOR_RIGHT AN2
+
+//#define LIGHT_THRESHOLD 150 //hard coded for now...calculate dynamically later
+#define LIGHT_THRESHOLD 210 //hard coded for now...calculate dynamically later
+
+void do_photovore (void);
+unsigned char get_light_status (unsigned char me);
+void set_light_status (unsigned char robot, unsigned char lightstatus);
+
+
+void sense_light (void);
+inline char light_threshold(void);
+
+
+//define an array of length MAX_ROBOTS that has
+//1 if robot at index i can see the light, and 0
+//if it cannot
+//unsigned char robot_enlightenment[MAX_ROBOTS];
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/lights.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/lights.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/lights.c	(revision 1346)
@@ -0,0 +1,355 @@
+/*
+lights.c
+Controls led_user (small green LED) and the ORB (big light)
+
+author: CMU Robotics Club, Colony Project
+*/
+
+#include "lights.h"
+#include "firefly+_lib.h"
+
+// the below comment may not be correct
+// Initializes timer2 to count every 0.5 us, overflowing every 16.32 ms (because we set the counter to start at 0x8000)
+void orb_init() 
+{
+#ifndef FFPP
+	//enable the data direction register on the 3 orb LEDs
+	DDRE |= _BV(REDLED) | _BV(GREENLED) | _BV(BLUELED);
+	
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+	TCCR3B = 0x0C;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+
+// clear Output Compare Registers
+	OCR3AH=0x00;
+	OCR3AL=0x00;
+	OCR3BH=0x00;
+	OCR3BL=0x00;
+	OCR3CH=0x00;
+	OCR3CL=0x00;
+
+#else
+	tlc5940init();	
+#endif
+}
+
+// Sets the red, green and blue elements of the LED with 8-bit resolution
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+#ifdef FFPP
+	orbs[28]=blue_led<<4;
+	orbs[29]=green_led<<4;
+	orbs[30]=red_led<<4;
+	tlc_send();
+#else
+	OCR3AL = red_led;
+	OCR3BL = green_led;
+	OCR3CL = blue_led;
+#endif
+}
+
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+void orb_disable()
+{
+#ifndef FFPP
+	TCCR3A = 0x01;  // COM## disconnected, WGM 1:0 set to 1
+#endif
+}
+
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+#ifndef FFPP
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+#else
+	tlc5940init();
+#endif
+}
+
+
+/*
+This function turns each Orb element on or off
+Useful for using the Orb for debugging purposes without
+the overhead of the software PWM routine used for color fading.
+*/
+void orb_set_dio(int red, int green, int blue) 
+{
+#ifdef FFPP
+	orb_set(red*255, green*255, blue*255);
+#else
+	if(red == 0)
+		PORTE &= (0xFF - _BV(REDLED));
+	else
+		PORTE |= _BV(REDLED);
+	
+	
+	if(green == 0)
+		PORTE &= (0xFF - _BV(GREENLED));
+	else
+		PORTE |= _BV(GREENLED);
+		
+	
+	if(blue == 0)
+		PORTE &= (0xFF - _BV(BLUELED));
+	else
+		PORTE |= _BV(BLUELED);
+#endif
+}
+
+
+/////////////////////////////////////////
+///////////    user LED   ///////////////
+/////////////////////////////////////////
+void led_init( void )
+{
+#ifdef FFPP
+	tlc5940init();
+#else
+	DDRG |= _BV(USERLED);
+#endif
+}
+
+void led_user(int value) 
+{
+#ifdef FFPP
+	orbs[USERLED]=value*4095;
+	tlc_send();
+#else
+	if(value == 0) 
+		PORTG &= (0xFF - _BV(USERLED)); 
+	else
+		PORTG |= _BV(USERLED);
+#endif
+}
+
+
+
+
+
+#ifdef FFPP
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	int high = (num>4);
+	orbs[3*num+high]=blue_led<<4;
+	orbs[3*num+1+high]=green_led<<4;
+	orbs[3*num+2+high]=red_led<<4;
+}
+
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	orb_set_num_ns(num,red_led,green_led,blue_led);
+	tlc_send();
+}
+
+
+void orb_send(){
+	tlc_send();
+}
+
+void tlc_clock1(int data)
+{
+  PORTC &= ~0x02;
+  PORTC |= (data << 1)&0x02;
+  _delay_us(1);
+  PORTC |= 0x04;
+  _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_clock2(int data)
+{
+  PORTC &= ~0x01;
+  PORTC |= (data)&0x01;
+ // _delay_us(1);
+  PORTC |= 0x04;
+ // _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_send(void)
+{
+  int i,j;
+  for(j = 15; j >= 0; j--)
+  {
+    for(i = 11; i >= 0; i--)
+    {
+      PORTC &= ~0x03;
+      PORTC |= ((orbs[j]>>i)&0x01);
+      PORTC |= ((orbs[j+16]>>i)<<1)&0x02;
+      // _delay_us(1);
+      PORTC |= 0x04;
+      // _delay_us(1);
+      PORTC &= ~0x04;
+    }
+  }
+  PORTC |= 0x08;
+  PORTC &= ~(0x08);
+}
+/*
+void tlc_send2(int value)
+{
+  int i;
+  
+  for(i = 11; i >= 0; i--)
+  {
+    tlc_clock2(0x01 & (value >> i));
+  }
+}*/
+
+void tlc_latch(void)
+{
+  PORTC |= 0x08;
+//  _delay_us(1);
+  PORTC &= ~(0x08);
+}
+
+void tlc5940init(void)
+{
+  int i;
+  
+  // set PC0...5 to outputs
+  DDRC |= 0x3F;
+  DDRE |= 0x08;
+  DDRA |= 0x80;
+  // unblank buffer
+  PORTC &= ~0x10;
+ 
+  // set DC mode so we start in known state
+  PORTC |= 0x20;
+  delay_ms(2);
+  
+  // set DC to all 1's?  needed?
+/*  for(i = 0; i < 96; ++i)
+  {
+    tlc_clock1(1);
+  }
+  tlc_latch();
+  */
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  
+  delay_ms(2);
+
+  // set GS mode
+  PORTC &= ~0x20;
+
+  // clock in 0s to do init case
+/*  for(i = 0; i < 16; ++i)
+  {
+    tlc_send1(0);
+  }  
+  tlc_latch();*/
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  // extra clock needed after DC -> GS transition
+  tlc_clock1(0);
+  tlc_clock2(0); //probably not needed
+  
+  TCCR3A |=_BV(COM3A0);
+  TCCR3B |= _BV(CS30)|_BV(WGM32); //prescaler
+  OCR3A = 1;
+  TCNT3 = 0;
+ // ETIMSK |=_BV(OCIE3A);//interrupt
+
+
+  TCCR2 = 0x05; //prescaler
+  TIMSK |= _BV(OCIE2);//interrupt
+  OCR2 = 16;
+  TCNT2 = 0;
+  sei();
+  
+}
+
+//int blankcounter = 0;
+char status = 0;
+
+ISR(TIMER2_COMP_vect){
+//	int i = 0;
+	//status=!status;
+	//if(status){
+		PORTC |= 0x10;
+//		for(i=0;i<1;i++);
+		PORTC &= ~0x10;
+//	}
+	
+	TCNT2=0;
+	//chirp(250, 150);
+}
+
+void silly_clock(void)
+{
+ /* int i;
+  
+  DDRA |= 0x80;
+  
+  PORTC |= 0x10;
+  _delay_us(1);
+  
+  for(i = 0; i < 4095; ++i)
+  {
+    PORTA |= 0x80;
+    _delay_us(1);
+    PORTA &= ~(0x80);
+	_delay_us(1);
+  }
+  */
+//  delay_ms(1);
+}
+
+void tlc5940test()
+{
+  int j, k;
+  
+  tlc5940init();
+
+	// fade up
+	for(j = 0; j < 4096; ++j)
+	{
+		  
+	  //tlc_send1(j);
+
+	  for(k = 0; k < 8; ++k)
+	  {
+      orbs[2*k]=4096-j;
+      orbs[2*k+1]=j;     
+      orbs[2*k+16]=0;
+      orbs[2*k+17]=j;
+	  }
+	  tlc_send();
+	}
+	
+	delay_ms(1000);
+	
+	// fade down
+	for(j = 0; j < 4096; ++j)
+	{
+	
+	  //tlc_send(4095 - j);
+
+	  for(k = 0; k < 32; ++k)
+	  {
+      orbs[k]=4096-j;
+    }
+	  tlc_send();
+	}
+}
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/help.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/help.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/help.h	(revision 1346)
@@ -0,0 +1,31 @@
+#include "serial.h"
+
+char helper(char c){
+	switch(c){
+		case 0x00: return '0';
+		case 0x01: return '1';
+		case 0x02: return '2';
+		case 0x03: return '3';
+		case 0x04: return '4';
+		case 0x05: return '5';
+		case 0x06: return '6';
+		case 0x07: return '7';
+		case 0x08: return '8';
+		case 0x09: return '9';
+		case 0x0A: return 'A';
+		case 0x0B: return 'B';
+		case 0x0C: return 'C';
+		case 0x0D: return 'D';
+		case 0x0E: return 'E';
+		case 0x0F: return 'F';
+		default: return '?';
+	}
+}
+
+void print_hex(char val){
+	char hgh = (val & 0xF0) >> 4;
+	char low = (val & 0x0F);
+	
+	serial1_putchar(helper(hgh));
+	serial1_putchar(helper(low));
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlRobot/wireless.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlRobot/wireless.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlRobot/wireless.c	(revision 1346)
@@ -0,0 +1,248 @@
+/*
+Wireless
+Eugene Marinelli
+
+(See .h for details)
+*/
+
+/* Includes */
+#include <firefly+_lib.h>
+#include <string.h>
+#include <avr/interrupt.h>
+
+#include "wireless.h"
+
+/* Constants */
+#define PREFIX0 'R'
+#define PREFIX1 'C'
+
+//wl_buf positions
+#define WL_SRC_LOC 2
+#define WL_DEST_LOC 3
+#define WL_DATA_START 4
+
+#define WL_TIMEOUT 4
+#define WL_TIMEOUT_INITIAL 4
+
+/* Globals */
+static char wl_buf[WL_PACKET_MAX_LEN];
+static WL_Packet latest_packet;
+static WL_Packet tmp_packet;
+static char new_message;
+static char listener_addr;
+
+static int message_length;
+
+static unsigned int wl_index;
+static unsigned char wl_chksum;
+static unsigned char wl_to_flag;
+static unsigned int wl_to_count;
+
+static unsigned int wl_to_max;
+
+static char first_time;
+
+/* Internal function headers */
+static void wl_timeout_handler(void);
+
+/* External function definitions */
+int wl_init(int msg_len, char listener_address){
+  if(msg_len > WL_MSG_MAX_LEN){
+    printf("Error: %s: message length must be less than %d\n", __FUNCTION__, 
+	   WL_MSG_MAX_LEN);
+    return -1;
+  }
+
+  message_length = msg_len;
+
+  listener_addr = listener_address;
+
+  wl_index = 0;
+  wl_chksum = 1;
+  
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+  /* executes the function about every 1/4 sec */
+
+  wl_to_flag = 0;
+  wl_to_count = 0; 
+
+  first_time = 1;
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+  
+  sei();
+
+  new_message = 0;
+  memset(&latest_packet, 0, sizeof(WL_Packet));
+
+  return 0;
+}
+
+int wl_send(char* msg, char dest){
+  int i = 0;
+  WL_Packet packet;
+
+  if(strlen(msg) > WL_MSG_MAX_LEN){
+    printf("Error: %s: message is too long\n", __FUNCTION__);
+    return -1;
+  }
+
+  wl_create_packet(msg, listener_addr, dest, &packet);
+
+  serial_putchar(packet.prefix[0]);
+  serial_putchar(packet.prefix[1]);
+  serial_putchar(packet.src);
+  serial_putchar(packet.dest);
+
+  for(i = 0; i < message_length; i++){
+    serial_putchar(packet.msg[i]);
+  }
+
+  serial_putchar(packet.checksum);
+
+  //printf("%x %x %x %x", packet.prefix[0], packet.prefix[1], packet.src, 
+  //	 packet.dest);
+
+  return 0;
+}
+
+int wl_recv(char* msgbuf, char* src, char* dest){
+  if(!new_message){
+    return 0; //no new message
+  }
+
+  strcpy(msgbuf, latest_packet.msg);
+
+  *src = latest_packet.src;
+  *dest = latest_packet.dest;
+  
+  new_message = 0;
+
+  return strlen(msgbuf);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
+
+/* Internal function definitions */
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV){
+  char wl_input = UDR0;
+
+  /* LOCAL HACK!!! */
+  //orb_set_color(ORANGE);
+  //printf("%x ", wl_input);
+  lcd_putint(wl_input);
+
+  if(wl_index == 0){
+    //first packet? - check chksum to make sure we're not beginning
+    if(wl_input == PREFIX0) {
+      wl_to_count = 0; //at this point we're not timing out
+      wl_index = 1;
+    }
+  }else if(wl_index == 1){
+    if(wl_input != PREFIX1){
+      wl_index = 0;
+    }else{
+      wl_index = WL_SRC_LOC;
+    }
+  }else if(wl_index == WL_SRC_LOC){
+    tmp_packet.src = wl_input;
+    wl_index = WL_DEST_LOC;
+  }else if(wl_index == WL_DEST_LOC){
+    tmp_packet.dest = wl_input;
+    wl_index = WL_DATA_START;
+  }else if(wl_index < WL_DATA_START + message_length){
+    //getting the rest of the packet
+    tmp_packet.msg[wl_index-WL_DATA_START] = wl_input;
+    wl_index++;
+    
+    //printf("%d: %d; %d\n", wl_index, wl_input, wl_chksum);
+  }else if(wl_index == WL_DATA_START + message_length){
+    //we are at checksum location
+    tmp_packet.checksum = wl_input;
+    wl_chksum = wl_get_checksum(&tmp_packet);
+    
+    if(tmp_packet.checksum == wl_chksum) {
+      //checksum is correct
+      memcpy(&latest_packet, &tmp_packet, sizeof(WL_Packet));
+      new_message = 1;
+    } else { //chksum failed
+      serial1_putchar('F');
+      lcd_putchar('F');
+      
+      printf("checksum failed - was %d, should have been %d\n", wl_input, 
+	     wl_chksum);
+    }
+
+    wl_index = 0;
+  }
+}
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time one occurs.
+  In the case where a robot first turns on, it will wait for a long time before declaring itself the leader.
+  Otherwise, if enough time-outs occur in a row, wl_to_flag will be set to 1.  This will cause a timeout packet
+  to be sent next time around
+
+*/
+static void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  
+  static int wl_first_to_count =  0;
+  
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TIMEOUT_INITIAL) {
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+      
+      //you don't actually want to send out a packet 
+      //-- you would confuse other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+  } else {
+    //not the first time - regular time out routine
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT) {
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+    }
+  }
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.java
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.java	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.java	(revision 1346)
@@ -0,0 +1,103 @@
+
+import java.awt.*;
+import java.awt.event.*;
+import java.applet.*;
+import javax.swing.*;
+import java.net.*;
+import java.io.*;
+
+public class Colonet extends JApplet implements ActionListener {
+
+	JButton btnGo;
+	JButton btnLeft;
+	JButton btnRight;
+	JTextField txtHost;
+	JTextField txtPort;
+	JButton btnConnect;
+	JTextField txtStatus;
+	Socket socket;
+	OutputStreamWriter out;
+
+	public void init () {
+		Container content = getContentPane();
+		content.setLayout(new GridLayout(10,3));
+	
+		txtHost = new JTextField("localhost");
+		txtPort = new JTextField("5678");
+		btnConnect = new JButton("Connect");
+		txtStatus = new JTextField();
+		btnGo = new JButton("Forward");
+		btnLeft = new JButton("Left");
+		btnRight = new JButton("Right");
+		
+		content.add(new JLabel("Host"));
+		content.add(txtHost);
+		content.add(new JLabel("Port"));
+		content.add(txtPort);
+		content.add(btnConnect);
+		content.add(txtStatus);
+		content.add(btnGo);
+		content.add(btnLeft);
+		content.add(btnRight);
+		
+		btnGo.addActionListener(this);
+		btnLeft.addActionListener(this);
+		btnRight.addActionListener(this);
+		btnConnect.addActionListener(this);
+	
+	}
+	
+	
+	public void actionPerformed (ActionEvent event) {
+		Object source = event.getSource();
+		try {
+			if (source == btnGo) {
+				out.write('w');
+				out.flush();
+			} else if (source == btnLeft) {
+				out.write('a');
+				out.flush();
+			} else if (source == btnRight) {
+				out.write('d');
+				out.flush();
+			}
+		} catch (Exception e) {
+			txtStatus.setText("Could not send data");
+		}
+		if (source == btnConnect)
+			doSocket();
+	
+	}
+	
+	private void doSocket () {
+		txtStatus.setText("Connecting ...");
+		int port = 0;
+		try {
+			port = Integer.parseInt(txtPort.getText());
+		} catch (Exception e) {
+			txtStatus.setText("Invalid port");
+			return;
+		}
+		try {
+			socket = new Socket(txtHost.getText(), port);
+		} catch (UnknownHostException e) {
+			txtStatus.setText("Unknown Host Exception");
+			return;
+		} catch (IOException e) {
+			txtStatus.setText("IO Exception");
+			return;
+		}
+		txtStatus.setText("Connected.");
+		try {
+			out = new OutputStreamWriter(socket.getOutputStream());
+		} catch (IOException e) {
+			txtStatus.setText("Could not get OutputStream");
+		}
+	
+	}
+	
+	private void msg (String text) {
+		JOptionPane.showMessageDialog(null, text);
+	}
+
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.class
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.class
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.class	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.class	(revision 1346)

Property changes on: branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/Colonet.class
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/index.html
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/index.html	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/colonet_web_test/index.html	(revision 1346)
@@ -0,0 +1,9 @@
+
+<html>
+<head>Test Applet for Colonet</head>
+<body>
+<APPLET CODE="Colonet.class" WIDTH=500 HEIGHT=500>
+     <P>Colonet<P>
+</APPLET>
+</body>
+</html>
\ No newline at end of file
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/wireless.h
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/wireless.h	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/wireless.h	(revision 1346)
@@ -0,0 +1,38 @@
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+/*
+Wireless - wireless functions for Colony
+
+Eugene Marinelli
+7/22/06
+*/
+
+#define WL_MSG_MAX_LEN 16
+#define WL_PACKET_MAX_LEN (WL_MSG_MAX_LEN+5)
+
+#define GLOBAL_DEST 200
+
+typedef struct {
+  char prefix[2];
+  char src;
+  char dest;
+  char msg[WL_MSG_MAX_LEN];
+  char checksum;
+} WL_Packet;
+
+/* wl_init
+   msg_len (< WL_MSG_MAX_LEN) is the length of the messages sent 
+   in the packets.
+   listener_address is the address to listen on
+*/
+int wl_init(int msg_len, char listener_address);
+
+int wl_send(char* msg, char dest);
+int wl_recv(char* msgbuf, char* src, char* dest);
+// get most recent valid message - implement message queue later
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet);
+char wl_get_checksum(WL_Packet* packet);
+
+#endif
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/manualControlServer.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/manualControlServer.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/manualControlServer.c	(revision 1346)
@@ -0,0 +1,192 @@
+/* Colonet Server
+   Eugene Marinelli and Gregory Tress
+*/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <netdb.h>
+
+#include "wireless.h"
+
+#define SERIAL_PORT "/dev/ttyS0"  
+//#define SERIAL_PORT "/dev/ttyUSB0"
+#define SERVER_ID 213
+
+#define FORWARD 0xF0
+#define BACK 0xF1
+#define RIGHT 0xF2
+#define LEFT 0xF3
+#define STOP 0xF4
+
+#define message_length 3
+
+void send_command(char cmd, char dest);
+
+int mysocket;   //the socket that gets new connections
+int io_socket;  //the socket we use to communicate when a connection is initiated.
+
+int main (int argc, char **argv) {
+
+  unsigned int clientlen;
+  struct sockaddr_in clientaddr;
+  struct hostent *hp;
+  char *haddrp;
+  char newdata[100];
+  int newdatasize;
+  if (argc != 2) {
+    fprintf(stderr, "Usage: %s <port>\n", argv[0]);
+    return 0;
+  }
+   
+  //start server
+  printf("Starting server on port %i\n", atoi(argv[1]));
+  mysocket = open_listenfd(atoi(argv[1]));
+  if (mysocket < 0) {
+    fprintf(stderr, "Error listening on port.\n");
+    return -1;
+  } else {
+    printf("Server running, waiting for connection\n");
+  }
+			   
+  //accept connections
+  while (1) {
+    clientlen = sizeof(clientaddr);
+    io_socket = accept(mysocket, (struct sockaddr *) &clientaddr, &clientlen);
+     
+    //get client info
+    hp = gethostbyaddr((const char *) &clientaddr.sin_addr.s_addr, 
+		       sizeof(clientaddr.sin_addr.s_addr), AF_INET);
+    haddrp = inet_ntoa(clientaddr.sin_addr);
+    printf("Client connected: %s %s\n", hp->h_name, haddrp);
+	   
+    if (!fork()) { // this is the child process
+      close(mysocket); // child doesn't need the listener
+      newdata[0] = ' ';
+      while (newdata[0] != 'q') {
+	memset(newdata, '\0', strlen(newdata));
+	newdatasize = recv(io_socket, newdata, 99, 0);
+	//receive commands from clients and give them to robots
+	printf("Received: [%s]\n", newdata);
+	send_command(newdata[0], GLOBAL_DEST);
+      }
+      printf("\nClient has disconnected.\n");
+      close(io_socket);
+      return 0;
+    }
+    close(io_socket);
+  }
+								  
+  close(mysocket);
+  return 0;
+}
+
+//listen on port, as specified by 15-213 book.
+int open_listenfd(int port) {
+  int listenfd, optval=1;
+  struct sockaddr_in serveraddr;
+     
+  //create socket descriptor
+  if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    return -1;
+							    
+  //prevent "address already in use" error
+  if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &optval, 
+		 sizeof(int)) < 0)
+    return -1;
+  
+  bzero((char *) &serveraddr, sizeof(serveraddr));
+  serveraddr.sin_family = AF_INET;
+  serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
+  serveraddr.sin_port = htons((unsigned short)port);
+  if (bind(listenfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
+    return -1;
+  
+  //start listening
+  if (listen(listenfd, 128) < 0)
+    return -1;
+  return listenfd;
+}
+
+void send_command(char cmd, char dest){
+  FILE* serial;
+  WL_Packet pkt;
+  int i;
+  char robot_cmd[message_length];
+
+  if(cmd != 'w' && cmd != 'a' && cmd != 's' && cmd != 'd' && cmd != ' '){
+    fprintf(stderr, "Invalid command\n");
+    return;
+  }
+
+  robot_cmd[0] = 0;
+  robot_cmd[1] = '\0';
+
+  switch(cmd){
+  case 'w':
+    robot_cmd[0] = FORWARD;
+    break;
+  case 'a':
+    robot_cmd[0] = LEFT;
+    break;
+  case 's':
+    robot_cmd[0] = BACK;
+    break;
+  case 'd':
+    robot_cmd[0] = RIGHT;
+    break;
+  case ' ':
+    robot_cmd[0] = STOP;
+    break;
+  }
+
+  wl_create_packet(robot_cmd, SERVER_ID, dest, &pkt);
+
+  serial = fopen(SERIAL_PORT, "w");
+
+  fprintf(stderr, "%i %i %i %i ", pkt.prefix[0], pkt.prefix[1], pkt.src, 
+	  pkt.dest);
+  fprintf(serial, "%c%c%c%c", pkt.prefix[0], pkt.prefix[1], pkt.src,  
+	  pkt.dest);
+
+  for(i = 0; i < message_length; i++){
+    fprintf(stderr, "%i ", pkt.msg[i]);
+    fprintf(serial, "%c", pkt.msg[i]);
+  }
+
+  fprintf(stderr, "%i", pkt.checksum);
+  fprintf(serial, "%c", pkt.checksum);
+
+  fclose(serial);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/sockserver_test.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/sockserver_test.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/sockserver_test.c	(revision 1346)
@@ -0,0 +1,99 @@
+
+/* SERVER
+I am washing my socks.
+And hanging them out to dry.
+
+-Greg
+*/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <netdb.h>
+
+int mysocket;   //the socket that gets new connections
+int io_socket;  //the socket we use to communicate when a connection is initiated.
+
+int main (int argc, char **argv) {
+
+	unsigned int clientlen;
+	struct sockaddr_in clientaddr;
+	struct hostent *hp;
+	char *haddrp;
+	char newdata[100];
+	int newdatasize;
+
+	if (argc != 2) {
+		fprintf(stderr, "Usage: %s <port>\n", argv[0]);
+		return 0;
+	}
+	
+	//start server
+	printf("Starting server on port %i\n", atoi(argv[1]));
+	mysocket = open_listenfd(atoi(argv[1]));
+	if (mysocket < 0) {
+		fprintf(stderr, "Error listening on port.\n");
+		return -1;
+	} else {
+		printf("Server running, waiting for connection\n");
+	}
+	
+	//accept connections
+	while (1) {
+		clientlen = sizeof(clientaddr);
+		io_socket = accept(mysocket, (struct sockaddr *) &clientaddr, &clientlen);
+		
+		//get client info
+		hp = gethostbyaddr((const char *) &clientaddr.sin_addr.s_addr, sizeof(clientaddr.sin_addr.s_addr), AF_INET);
+		haddrp = inet_ntoa(clientaddr.sin_addr);
+		printf("Client connected: %s %s\n", hp->h_name, haddrp);
+		
+		if (!fork()) { // this is the child process
+            close(mysocket); // child doesn't need the listener
+			newdata[0] = ' ';
+			while (newdata[0] != 'q') {
+				memset(newdata, '\0', strlen(newdata));
+				newdatasize = recv(io_socket, newdata, 99, 0);
+				printf("Received: %s\n", newdata);
+				//send_command(cmd0, GLOBAL_DEST);
+			}
+			printf("\nClient has disconnected.\n");
+            close(io_socket);
+            return 0;
+        }
+		close(io_socket);
+	}
+	
+	close(mysocket);
+	return 0;
+}
+
+//listen on port, as specified by 15-213 book.
+int open_listenfd(int port) {
+	int listenfd, optval=1;
+	struct sockaddr_in serveraddr;
+	
+	//create socket descriptor
+	if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+		return -1;
+	
+	//prevent "address already in use" error
+	if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &optval, sizeof(int)) < 0)
+		return -1;
+		
+	bzero((char *) &serveraddr, sizeof(serveraddr));
+	serveraddr.sin_family = AF_INET;
+	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
+	serveraddr.sin_port = htons((unsigned short)port);
+	if (bind(listenfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
+		return -1;
+	
+	//start listening
+	if (listen(listenfd, 128) < 0)
+		return -1;
+	return listenfd;
+}
+
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/Makefile
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/Makefile	(revision 1346)
@@ -0,0 +1,9 @@
+# manualControlServer makefile
+
+all: manualControlServer
+
+manualControlServer: manualControlServer.c
+	gcc -I ../../wireless manualControlServer.c -o manualControlServer
+
+clean: 
+	rm -rf *o manualControlServer
\ No newline at end of file
Index: branches/scout/projects/colonet/server/manual_control/manualControlServer/wireless.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlServer/wireless.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlServer/wireless.c	(revision 1346)
@@ -0,0 +1,233 @@
+/*
+Wireless
+Eugene Marinelli
+
+(See .h for details)
+*/
+
+/* Includes */
+#include <firefly+_lib.h>
+#include <string.h>
+#include <avr/interrupt.h>
+
+#include "wireless.h"
+
+/* Constants */
+#define PREFIX0 'R'
+#define PREFIX1 'C'
+
+//wl_buf positions
+#define WL_SRC_LOC 2
+#define WL_DEST_LOC 3
+#define WL_DATA_START 4
+
+#define WL_TIMEOUT 4
+#define WL_TIMEOUT_INITIAL 4
+
+/* Globals */
+static WL_Packet latest_packet;
+static WL_Packet tmp_packet;
+static char new_message; //set to 1 if there is a new message, else 0
+static char listener_addr; //address that the robot is listening on
+
+static int message_length; //length of the messages sent/received
+
+//static unsigned char wl_to_flag;
+//static unsigned int wl_to_count;
+//static unsigned int wl_to_max;
+
+/* Internal function headers */
+static void wl_timeout_handler(void);
+
+/* External function definitions */
+int wl_init(int msg_len, char listener_address){
+  if(msg_len > WL_MSG_MAX_LEN){
+    printf("Error: %s: message length must be less than %d\n", __FUNCTION__, 
+	   WL_MSG_MAX_LEN);
+    return -1;
+  }
+
+  message_length = msg_len;
+
+  listener_addr = listener_address;
+
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+  /* executes the function about every 1/4 sec */
+
+  //wl_to_flag = 0;
+  //wl_to_count = 0; 
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+  
+  sei();
+
+  new_message = 0;
+  memset(&latest_packet, 0, sizeof(WL_Packet));
+
+  return 0;
+}
+
+int wl_send(char* msg, char dest){
+  int i = 0;
+  WL_Packet packet;
+
+  if(strlen(msg) > WL_MSG_MAX_LEN){
+    printf("Error: %s: message is too long\n", __FUNCTION__);
+    return -1;
+  }
+
+  wl_create_packet(msg, listener_addr, dest, &packet);
+
+  serial_putchar(packet.prefix[0]);
+  serial_putchar(packet.prefix[1]);
+  serial_putchar(packet.src);
+  serial_putchar(packet.dest);
+
+  for(i = 0; i < message_length; i++){
+    serial_putchar(packet.msg[i]);
+  }
+
+  serial_putchar(packet.checksum);
+
+  return 0;
+}
+
+int wl_recv(char* msgbuf, char* src, char* dest){
+  if(!new_message){
+    return 0; //no new message
+  }
+
+  strcpy(msgbuf, latest_packet.msg);
+
+  *src = latest_packet.src;
+  *dest = latest_packet.dest;
+  
+  new_message = 0;
+
+  return strlen(msgbuf);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
+
+/* Internal function definitions */
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV){
+  char wl_input = UDR0;
+  static unsigned int wl_index = 0;
+  static unsigned char wl_chksum = 0;
+
+  if(wl_index == 0){
+    //first packet? - check chksum to make sure we're not beginning
+    if(wl_input == PREFIX0) {
+      wl_to_count = 0; //at this point we're not timing out
+      wl_index = 1;
+    }
+  }else if(wl_index == 1){
+    if(wl_input != PREFIX1){
+      wl_index = 0;
+    }else{
+      wl_index = WL_SRC_LOC;
+    }
+  }else if(wl_index == WL_SRC_LOC){
+    tmp_packet.src = wl_input;
+    wl_index = WL_DEST_LOC;
+  }else if(wl_index == WL_DEST_LOC){
+    tmp_packet.dest = wl_input;
+    wl_index = WL_DATA_START;
+  }else if(wl_index < WL_DATA_START + message_length){
+    //getting the rest of the packet
+    tmp_packet.msg[wl_index-WL_DATA_START] = wl_input;
+    wl_index++;
+  }else if(wl_index == WL_DATA_START + message_length){
+    //we are at checksum location
+    tmp_packet.checksum = wl_input;
+    wl_chksum = wl_get_checksum(&tmp_packet);
+    
+    if(tmp_packet.checksum == wl_chksum) {
+      //checksum is correct
+      memcpy(&latest_packet, &tmp_packet, sizeof(WL_Packet));
+      new_message = 1;
+    } else { //chksum failed
+      serial1_putchar('F');
+      lcd_putchar('F');
+      
+      printf("checksum failed - was %d, should have been %d\n", wl_input, 
+	     wl_chksum);
+    }
+
+    wl_index = 0;
+  }
+}
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time 
+  one occurs. In the case where a robot first turns on, it will wait for a long
+  time before declaring itself the leader.  Otherwise, if enough time-outs 
+  occur in a row, wl_to_flag will be set to 1.  This will cause a timeout 
+  packet to be sent next time around
+
+*/
+static void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  
+  static int wl_first_to_count =  0;
+  static int first_time = 1;
+
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TIMEOUT_INITIAL) {
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+      
+      //you don't actually want to send out a packet 
+      //-- you would confuse other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+
+    first_time = 0;
+  } else {
+    //not the first time - regular time out routine
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT) {
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+    }
+  }
+}
Index: branches/scout/projects/colonet/server/manual_control/manualControlClient/Makefile
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlClient/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlClient/Makefile	(revision 1346)
@@ -0,0 +1,9 @@
+# manualControlClient makefile
+
+all: manualControlClient
+
+manualControlClient: manualControlClient.c
+	gcc -I ../../wireless/ manualControlClient.c -o manualControlClient
+
+clean: 
+	rm -rf *o manualControlClient
Index: branches/scout/projects/colonet/server/manual_control/manualControlClient/manualControlClient.c
===================================================================
--- branches/scout/projects/colonet/server/manual_control/manualControlClient/manualControlClient.c	(nonexistent)
+++ branches/scout/projects/colonet/server/manual_control/manualControlClient/manualControlClient.c	(revision 1346)
@@ -0,0 +1,127 @@
+/* Eugene Marinelli
+ * 10/12/06
+ * manualControlClient - controls the robot over the xbee dongle
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <wireless.h>
+
+#define SERIAL_PORT "/dev/ttyS0" //usb
+//#define SERIAL_PORT "/dev/ttyUSB0" //serial
+#define SERVER_ID 213
+
+#define FORWARD 0xF0
+#define BACK 0xF1
+#define RIGHT 0xF2
+#define LEFT 0xF3
+#define STOP 0xF4
+
+#define message_length 3
+
+void send_command(char cmd, char dest);
+
+int main(int argc, char** argv){  
+  char cmd0, cmd1;
+
+  fprintf(stderr, "Manual Control Client\n");
+  fprintf(stderr, "Commands: ");
+  fprintf(stderr, "w - move forward | ");
+  fprintf(stderr, "a - turn left | ");
+  fprintf(stderr, "s - move back | ");
+  fprintf(stderr, "d - turn right\n");
+  fprintf(stderr, "          q - quit\n");
+
+  cmd0 = getc(stdin);
+  cmd1 = getc(stdin);
+
+  while(cmd0 != 'q'){
+    send_command(cmd0, GLOBAL_DEST);
+    cmd0 = getc(stdin);
+    cmd1 = getc(stdin);
+  }
+
+  send_command(' ', GLOBAL_DEST);
+
+  return 0;
+}
+
+void send_command(char cmd, char dest){
+  FILE* serial;
+  WL_Packet pkt;
+  int i;
+  char robot_cmd[message_length];
+
+  if(cmd != 'w' && cmd != 'a' && cmd != 's' && cmd != 'd' && cmd != ' '){
+    fprintf(stderr, "Invalid command\n");
+    return;
+  }
+
+  robot_cmd[0] = 0;
+  robot_cmd[1] = '\0';
+
+  switch(cmd){
+  case 'w':
+    robot_cmd[0] = FORWARD;
+    break;
+  case 'a':
+    robot_cmd[0] = LEFT;
+    break;
+  case 's':
+    robot_cmd[0] = BACK;
+    break;
+  case 'd':
+    robot_cmd[0] = RIGHT;
+    break;
+  case ' ':
+    robot_cmd[0] = STOP;
+    break;
+  }
+
+  wl_create_packet(robot_cmd, SERVER_ID, dest, &pkt);
+
+  serial = fopen(SERIAL_PORT, "w");
+
+  //fprintf(stderr, "%x %x %x %x ", pkt.prefix[0], pkt.prefix[1], pkt.src, 
+	//  pkt.dest);
+  fprintf(serial, "%c%c%c%c", pkt.prefix[0], pkt.prefix[1], pkt.src, pkt.dest);
+
+  for(i = 0; i < message_length; i++){
+    //fprintf(stderr, "%x ", pkt.msg[i]);
+    fprintf(serial, "%c", pkt.msg[i]);
+  }
+
+  //fprintf(stderr, "%x", pkt.checksum);
+  fprintf(serial, "%c", pkt.checksum);
+
+  fclose(serial);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
Index: branches/scout/projects/colonet/server/Log.cpp
===================================================================
--- branches/scout/projects/colonet/server/Log.cpp	(nonexistent)
+++ branches/scout/projects/colonet/server/Log.cpp	(revision 1346)
@@ -0,0 +1,143 @@
+/**
+ * @file Log.cpp
+ *
+ * @brief This file contains the code to do logging for Colonet
+ *
+ * @author Jason Knichel
+ *
+ */
+
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <Log.h>
+
+/**
+ * @brief Constructor for the Log class
+ *
+ * @param filename The name of the file to output log statements to
+ */
+Log::Log(char * filename) {
+  printf("Creating log object\n");
+
+  if (!filename) {
+    fprintf(stderr, "Provided a null filename when trying to create a log.\n");
+    return;
+  }
+
+  log_file = fopen(filename, "a"); //open file for appending
+  if (!log_file) {
+    fprintf(stderr, "Error opening %s as log file.\n", filename);
+    return;
+  }
+
+  printf("About to log start message.\n");
+  log_string(LOG_TYPE_START_LOG, "Starting server");
+}
+
+/**
+ * @brief Destructor for the Log class
+ */
+Log::~Log() {
+  if (!log_file) {
+    fclose(log_file);
+  }
+}
+
+/**
+ * @brief A function to get the current time
+ *
+ * @return A struct tm that represents the current time
+ */
+struct tm Log::get_current_time() {
+  struct tm current_time;
+  memset(&current_time, 0, sizeof(struct tm));
+
+  time_t t = time(NULL);
+  localtime_r(&t, &current_time);
+
+  return current_time;
+}
+
+/**
+ * @brief This method logs a message with the specified type
+ *
+ * @param type The type of the message to log
+ * @param message The message to log
+ *
+ * @return 0 on success, negative error code on error
+ */
+int Log::log_string(int type, char * message) {
+  if (!log_file) {
+    fprintf(stderr, "Tried to log a message but the file pointer was null.\n");
+    return -1;
+  }
+
+  if (!message) {
+    fprintf(stderr, "Tried to log a null message.\n");
+    return -1;
+  }
+
+  static char * start_log = "Starting Log";
+  static char * connect = "Client Connecting";
+  static char * disconnect = "Client Disconnecting";
+  static char * error = "Error";
+  static char * log_generic_message = "Generic Message";
+
+  char * message_type;
+
+  switch(type) {
+  case LOG_TYPE_START_LOG:
+    message_type = start_log;
+    break;
+  case LOG_TYPE_CONNECT:
+    message_type = connect;
+    break;
+  case LOG_TYPE_DISCONNECT:
+    message_type = disconnect;
+    break;
+  case LOG_TYPE_ERROR:
+    message_type = error;
+    break;
+  case LOG_TYPE_MESSAGE:
+    message_type = log_generic_message;
+    break;
+  default:
+    fprintf(stderr, "Tried to log a message with an invalid type.\n");
+    return -1;
+  }
+
+  struct tm current_time = get_current_time();
+
+  char buffer[LOG_MAX_TIME_LENGTH];
+  asctime_r(&current_time, buffer);
+  int len = strlen(buffer);
+  buffer[len-1] = '\0'; //remove the newline that is put at the end by asctime_r
+  fprintf(log_file, "%s %*s   %s\n", buffer, LOG_MAX_TYPE_LENGTH, message_type, message);
+  fflush(log_file);
+
+  return 0;
+}
+
+/**
+ * @brief An easier way to log an error message
+ *
+ * @param message The message to log as an error
+ *
+ * @return 0 on success, negative error code on error
+ */
+int Log::log_error(char * message) {
+  return log_string(LOG_TYPE_ERROR, message);
+}
+
+/**
+ * @brief An easier way to log a normal message
+ *
+ * @param message The message to log as a normal message
+ *
+ * @return 0 on success, negative error code on error
+ */
+int Log::log_message(char *  message) {
+  return log_string(LOG_TYPE_MESSAGE, message);
+}
Index: branches/scout/projects/colonet/server/options.c
===================================================================
--- branches/scout/projects/colonet/server/options.c	(nonexistent)
+++ branches/scout/projects/colonet/server/options.c	(revision 1346)
@@ -0,0 +1,95 @@
+/**
+ * @file options.c
+ *
+ * @brief Options for ColonetServer
+ *
+ * @author Eugene Marinelli
+ *
+ * @date 2/13/07
+ *
+ * @bug Usage not written
+ */
+
+#include <stdio.h>
+#include <getopt.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <colonet_defs.h>
+
+#include <options.h>
+
+ColonetServerOptionsT optionsG;
+
+/**
+ * @brief Prints the usage of the program
+ */
+static void printUsage() {
+  printf("Colonet Server\n");
+  printf("  ./ColonetServer [-h (help)] [-p server_listen_port]\n");
+  printf("  [-w wireless_port_file_desc (e.g. /dev/ttyUSB0)]\n");
+  printf("  [-l log_filename] [-s (enable listener mode)]\n");
+}
+
+/**
+ * @brief Parses the command line arguments
+ *
+ * @param argc The number of arguments passed to the program
+ * @param argv The arguments passed to the program
+ *
+ * @return Void
+ */
+void options_parseCmdLine(int argc, char** argv) {
+  int c;
+
+  memset(&optionsG, 0, sizeof(ColonetServerOptionsT));
+
+  if (argc < 2) {
+    printf("No port was specified for listening for client connections. Defaulting to %d\n", DEFAULTPORT);
+  }
+
+  /* Defaults */
+  optionsG.listen_port = DEFAULTPORT;
+  strcpy(optionsG.wireless_port, USB_PORT);
+  optionsG.logging_enabled = false;
+  optionsG.listener_mode = false;
+
+  /* Parse args */
+  while (1) {
+    c = getopt(argc, argv, "p:l:w:sh");
+
+    if (c == -1) {
+      break;
+    }
+
+    switch (c) {
+    case 'p':
+      /* Listen port */
+      optionsG.listen_port = atoi(optarg);
+
+      if (optionsG.listen_port < SMALLEST_POSS_LISTEN_PORT) {
+        printf("You cannot listen on a port less than %d.\n", SMALLEST_POSS_LISTEN_PORT);
+        printf("Setting listener port to %d\n", DEFAULTPORT);
+        optionsG.listen_port = DEFAULTPORT;
+      }
+      break;
+    case 'w':
+      /* Set wireless port */
+      strcpy(optionsG.wireless_port, optarg);
+      printf("Wireless port set to %s.\n", optionsG.wireless_port);
+      break;
+    case 'l':
+      /* Set log filename (and enable logging) */
+      strcpy(optionsG.log_filename, optarg);
+      optionsG.logging_enabled = true;
+      break;
+    case 's':
+      /* Enable listener mode */
+      optionsG.listener_mode = true;
+      break;
+    case 'h':
+      printUsage();
+      exit(1);
+    }
+  }
+}
Index: branches/scout/projects/colonet/client/ColonetConstants.java
===================================================================
--- branches/scout/projects/colonet/client/ColonetConstants.java	(nonexistent)
+++ branches/scout/projects/colonet/client/ColonetConstants.java	(revision 1346)
@@ -0,0 +1,24 @@
+
+public class ColonetConstants {
+
+  // Used for painting circles around the robots
+  public static final int ROBOT_RADIUS = 30;
+  public static final int STATION_SIZE = 60;
+
+  // Used for the robot controller panel
+  public static final int VECTOR_CONTROLLER_HEIGHT = 190;
+  public static final int VECTOR_CONTROLLER_WIDTH = 320;
+  
+  // Used for webcam image
+  public static final int WEBCAM_BORDER = 16;
+	public static final int BATTERY_WIDTH = 50;
+	public static final int BATTERY_HEIGHT = 10;
+	public static final int WEBCAM_DELAY = 500;
+	public static final String WEBCAM_PATH = "http://128.2.99.176/colonet/overheadimage.php";
+
+  // Set the default look and feel - choose one
+  public static final String LOOK_AND_FEEL = javax.swing.UIManager.getSystemLookAndFeelClassName();
+  //public static final String LOOK_AND_FEEL = javax.swing.UIManager.getCrossPlatformLookAndFeelClassName();
+  //public static final String LOOK_AND_FEEL = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
+
+}
Index: branches/scout/projects/colonet/client/overheadimage.php
===================================================================
--- branches/scout/projects/colonet/client/overheadimage.php	(nonexistent)
+++ branches/scout/projects/colonet/client/overheadimage.php	(revision 1346)
@@ -0,0 +1,35 @@
+<?php
+header('Content-Type: image/jpeg');
+
+$sem_key = 0x40309999;
+$shm_key = 0x40305163;
+
+$sem_id = sem_get($sem_key, 1);
+if (!sem_acquire($sem_id))
+{
+   print "Error acquiring semaphore\n";
+   return;
+}
+
+$shm_id = shmop_open($shm_key, 'a', 0666, 150000);
+if ($shm_id===false)
+{
+   print "Error opening shared memory\n";
+   return;
+}
+
+$size = shmop_read($shm_id, 0, 4);
+$length = 0;
+for ($i=strlen($size)-1; $i >= 0; $i--)
+{
+   $length <<= 8;
+   $length |= ord(substr($size, $i));
+}
+$data = shmop_read($shm_id, 4, $length);
+
+shmop_close($shm_id);
+
+sem_release($sem_id);
+
+print $data;
+?>
Index: branches/scout/projects/colonet/client/AppletViewer.java
===================================================================
--- branches/scout/projects/colonet/client/AppletViewer.java	(nonexistent)
+++ branches/scout/projects/colonet/client/AppletViewer.java	(revision 1346)
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002.
+ * All rights reserved. Software written by Ian F. Darwin and others.
+ * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee
+ * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,
+ * pioneering role in inventing and promulgating (and standardizing) the Java 
+ * language and environment is gratefully acknowledged.
+ * 
+ * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
+ * inventing predecessor languages C and C++ is also gratefully acknowledged.
+ */
+
+import java.applet.Applet;
+import java.applet.AppletContext;
+import java.applet.AppletStub;
+import java.applet.AudioClip;
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.Label;
+import java.awt.Panel;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.swing.JFrame;
+
+/*
+ * AppletViewer - a simple Applet Viewer program.
+ * @author  Ian Darwin, http://www.darwinsys.com/
+ */
+public class AppletViewer {
+  /** The main Frame of this program */
+  JFrame f;
+  /** The AppletAdapter (gives AppletStub, AppletContext, showStatus) */
+  static AppletAdapter aa = null;
+  /** The name of the Applet subclass */
+  String appName = null;
+  /** The Class for the actual applet type */
+  Class ac = null;
+  /** The Applet instance we are running, or null. Can not be a JApplet
+   * until all the entire world is converted to JApplet. */
+  Applet ai = null;
+  /** The width of the Applet */
+  final int WIDTH = 250;
+  /** The height of the Applet */
+  final int HEIGHT = 200;
+
+  /** Main is where it all starts. 
+   * Construct the GUI. Load the Applet. Start it running.
+   */
+  public static void main(String[] av) {
+    if (av.length==0)
+    {
+      System.err.println("No class name specified\n");
+      System.exit(1);
+    }
+    
+    new AppletViewer(av[0]);
+  }
+
+  /** Construct the GUI for an Applet Viewer */
+  AppletViewer(String appName) {
+    super();
+
+    this.appName = appName;
+
+    f = new JFrame(appName);
+    f.addWindowListener(new WindowAdapter() {
+      public void windowClosing(WindowEvent e) {
+        f.setVisible(false);
+        f.dispose();
+        System.exit(0);
+      }
+    });
+    Container cp = f.getContentPane();
+    cp.setLayout(new BorderLayout());
+
+    // Instantiate the AppletAdapter which gives us
+    // AppletStub and AppletContext.
+    if (aa == null)
+      aa = new AppletAdapter();
+
+    // The AppletAdapter also gives us showStatus.
+    // Therefore, must add() it very early on, since the Applet's
+    // Constructor or its init() may use showStatus()
+    cp.add(BorderLayout.SOUTH, aa);
+
+    showStatus("Loading Applet " + appName);
+
+    loadApplet(appName , WIDTH, HEIGHT);  // sets ac and ai
+    if (ai == null)
+      return;
+
+    // Now right away, tell the Applet how to find showStatus et al.
+    ai.setStub(aa);
+
+    // Connect the Applet to the Frame.
+    cp.add(BorderLayout.CENTER, ai);
+
+    Dimension d = ai.getSize();
+    d.height += aa.getSize().height;
+    f.setSize(d);
+    f.setVisible(true);    // make the Frame and all in it appear
+
+    showStatus("Applet " + appName + " loaded");
+
+    // Here we pretend to be a browser!
+    ai.init();
+    ai.start();
+  }
+
+  /*
+   * Load the Applet into memory. Should do caching.
+   */
+  void loadApplet(String appletName, int w, int h) {
+    // appletName = ... extract from the HTML CODE= somehow ...;
+    // width =     ditto
+    // height =     ditto
+    try {
+      // get a Class object for the Applet subclass
+      ac = Class.forName(appletName);
+      // Construct an instance (as if using no-argument constructor)
+      ai = (Applet) ac.newInstance();
+    } catch(ClassNotFoundException e) {
+      showStatus("Applet subclass " + appletName + " did not load");
+      return;
+    } catch (Exception e ){
+      showStatus("Applet " + appletName + " did not instantiate");
+      return;
+    }
+    ai.setSize(w, h);
+  }
+
+  public void showStatus(String s) {
+    aa.getAppletContext().showStatus(s);
+  }
+}
+
+/*
+ * AppletAdaptor: partial implementation of AppletStub and AppletContext.
+ *
+ * This code is far from finished, as you will see.
+ *
+ * @author  Ian Darwin, http://www.darwinsys.com/, for Learning Tree Course 478
+ */
+class AppletAdapter extends Panel implements AppletStub, AppletContext {
+  /** The status window at the bottom */
+  Label status = null;
+
+  /** Construct the GUI for an Applet Status window */
+  AppletAdapter() {
+    super();
+
+    // Must do this very early on, since the Applet's
+    // Constructor or its init() may use showStatus()
+    add(status = new Label());
+
+    // Give "status" the full width
+    status.setSize(getSize().width, status.getSize().height);
+
+    showStatus("AppletAdapter constructed");  // now it can be said
+  }
+
+  /****************** AppletStub ***********************/
+  /** Called when the applet wants to be resized.  */
+  public void appletResize(int w, int h) {
+    // applet.setSize(w, h);
+  }
+
+  /** Gets a reference to the applet's context.  */
+  public AppletContext getAppletContext() {
+    return this;
+  }
+
+  /** Gets the base URL.  */
+  public URL getCodeBase() {
+    return getClass().getResource(".");
+  }
+
+  /** Gets the document URL.  */
+  public URL getDocumentBase() {
+    return getClass().getResource(".");
+  }
+
+  /** Returns the value of the named parameter in the HTML tag.  */
+  public String getParameter(String name) {
+    String value = null;
+    return value;
+  }
+  /** Determines if the applet is active.  */
+  public boolean isActive() {
+    return true;
+  }
+
+  /************************ AppletContext ************************/
+
+  /** Finds and returns the applet with the given name. */
+  public Applet getApplet(String an) {
+    return null;
+  }
+
+  /** Finds all the applets in the document */
+  public Enumeration<Applet> getApplets()  {
+    class AppletLister implements Enumeration<Applet> {
+      public boolean hasMoreElements() {
+        return false;
+      }
+      public Applet nextElement() {
+        return null;
+      }
+    }
+    return new AppletLister();
+  }
+
+  /** Create an audio clip for the given URL of a .au file */
+  public AudioClip getAudioClip(URL u) {
+    return null;
+  }
+
+  /** Look up and create an Image object that can be paint()ed */
+  public Image getImage(URL u)  {
+    return null;
+  }
+
+  /** Request to overlay the current page with a new one - ignored */
+  public void showDocument(URL u) {
+  }
+
+  /** as above but with a Frame target */
+  public void showDocument(URL u, String frame)  {
+  }
+
+  /** Called by the Applet to display a message in the bottom line */
+  public void showStatus(String msg) {
+    if (msg == null)
+      msg = "";
+    status.setText(msg);
+  }
+
+  /* StreamKey stuff - new in JDK1.4 */
+  Map<String, InputStream> streamMap = new HashMap<String, InputStream>();
+
+  /** Associate the stream with the key. */
+  public void setStream(String key, InputStream stream) throws IOException {
+    streamMap.put(key, stream);
+  }
+
+  public InputStream getStream(String key) {
+    return streamMap.get(key);
+  }
+
+  public Iterator<String> getStreamKeys() {
+    return streamMap.keySet().iterator();
+  }
+}
Index: branches/scout/projects/colonet/client/Makefile
===================================================================
--- branches/scout/projects/colonet/client/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/client/Makefile	(revision 1346)
@@ -0,0 +1,59 @@
+# Colonet GUI Makefile
+# Gregory Tress, Eugene Marinelli
+#
+# DIR is the name of the class output directory
+# CCFLAGS are the compiler options
+# CCWARN specifies which warnings should be displayed
+#
+# Complier Flags
+#  -g            Generate all debugging info
+#  -d <dir>      Specify where to place generated class files
+#  -target <vm>  Generate class files for a specific VM release (i.e. 1.6)
+#  -Xlint        Enable warnings
+
+CC = javac
+DIR = build
+CCFLAGS = -g -d $(DIR) -target 1.5
+CCWARN = -Xlint:deprecation,unchecked,fallthrough,path,finally
+
+COLONETFILES = BatteryIcon.java  Colonet.java  ColonetConstants.java \
+               ColonetServerInterface.java  GraphicsPanel.java  RobotIcon.java \
+               RobotList.java  TaskAddWindow.java  VectorController.java
+
+# Java file compilation instructions
+
+default: $(DIR) $(DIR)/Colonet.class $(DIR)/Colonet.jar
+
+$(DIR):
+	mkdir $(DIR)
+
+$(DIR)/Colonet.jar: $(DIR)/Colonet.class
+	@echo --- Creating archive file ---
+	cd $(DIR); jar cf Colonet.jar *.class; jarsigner -keystore ../colonetkey -storepass colonet Colonet.jar colonet
+	@echo --- Done ---
+
+$(DIR)/Colonet.class: $(COLONETFILES)
+	@echo --- Compiling ---
+	$(CC) $(CCWARN) $(CCFLAGS) Colonet.java
+
+# Install into the local computer's www directory.
+# The user should use sudo when running make install.
+
+install: default
+	@echo --- Copying files to /var/www/colonet ---
+	rm -rf /var/www/colonet/
+	mkdir /var/www/colonet/
+	cp $(DIR)/Colonet.jar /var/www/colonet/Colonet.jar
+	cp index.xhtml /var/www/colonet/index.xhtml
+	cp colonetstyle.css /var/www/colonet/colonetstyle.css
+	cp overheadimage.php /var/www/colonet/overheadimage.php
+
+clean:
+	$(RM) -r $(DIR)
+	$(RM) *~
+
+viewer:
+	$(CC) $(CCWARN) $(CCFLAGS) AppletViewer.java
+
+run:
+	appletviewer http://128.2.99.176/colonet
Index: branches/scout/projects/colonet/client/Colonet.java
===================================================================
--- branches/scout/projects/colonet/client/Colonet.java	(nonexistent)
+++ branches/scout/projects/colonet/client/Colonet.java	(revision 1346)
@@ -0,0 +1,1273 @@
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.imageio.*;
+import java.awt.*;
+import java.awt.image.*;
+import java.awt.event.*;
+import java.net.*;
+import java.io.*;
+import java.util.*;
+
+/**
+* The Colonet Graphical User Interface Applet for use locally and over an internet connection.
+* @author Gregory Tress
+*
+* To generate javadoc on this file or other java files, use javadoc *.java -d doc, where doc
+* is the name of the folder into which the files should be written.
+*/
+public class Colonet extends JApplet implements ActionListener, MouseInputListener, KeyListener {
+
+	// Connection
+	JTextField txtHost;
+	JTextField txtPort;
+	JButton btnConnect;
+	JButton btnGetXBeeIDs;
+	JLabel lblConnectionStatus;
+	JTextArea txtInfo;
+	JPanel panelConnect;
+	JPanel panelServerInterface;
+	Socket socket;
+	DataUpdater dataUpdater;
+
+	// Control
+	JTabbedPane tabPaneControl;
+	JPanel panelRobotControl;
+	JPanel panelRobotDirection;
+	JPanel panelRobotDirectionButtons;
+	JPanel panelRobotCommands;
+	JButton btnF, btnB, btnL, btnR, btnActivate;
+	JLabel lblBattery;
+	JLabel lblSelected;
+	BatteryIcon batteryIcon;
+	JPanel panelBattery;
+	VectorController vectorController;
+	BufferedImage imageVectorControl;
+	JButton btnAssignID;
+	JButton btnLocateStation;
+	boolean setStation;
+	ChargingStation station;
+	boolean setWaypoint;
+	int setWaypointID;
+	JButton btnSetBounds;
+	JButton btnClearBounds;
+	RobotBoundary boundary;
+	JButton btnCommand_MoveTo;
+	JButton btnCommand_MoveAll;
+	JButton btnCommand_StopTask;
+	JButton btnCommand_ResumeTask;
+	JButton btnCommand_ChargeNow;
+	JButton btnCommand_StopCharging;
+
+	// Task Manager
+	JPanel panelTaskManager;
+	JScrollPane spTaskManager;
+	JPanel panelTaskManagerControls;
+	JPanel panelTaskManagerControlsPriority;
+	DefaultListModel taskListModel;
+	JList taskList;
+	JButton btnAddTask;
+	JButton btnRemoveTask;
+	JButton btnMoveTaskUp;
+	JButton btnMoveTaskDown;
+	JButton btnUpdateTasks;
+	TaskAddWindow taskAddWindow;
+
+	// Webcam
+	WebcamPanel panelWebcam;
+	GraphicsConfiguration gc;
+	JTabbedPane tabPaneMain;
+	WebcamLoader webcamLoader;
+	
+	// Robots
+	volatile int selectedBot;	 //the user has selected this bot graphically
+	volatile RobotList robotIcons;	 //contains boundary shapes around bots for click detection
+	volatile int[] xbeeID;
+
+	Colonet self = this;
+	volatile ColonetServerInterface csi;
+
+	public void init () {
+		// Set the default look and feel
+		String laf = ColonetConstants.LOOK_AND_FEEL;
+		try {
+			UIManager.setLookAndFeel(laf);
+		} catch (UnsupportedLookAndFeelException exc) {
+			System.err.println ("Warning: UnsupportedLookAndFeel: " + laf);
+		} catch (Exception exc) {
+			System.err.println ("Error loading " + laf + ": " + exc);
+		}
+
+		// We should invoke and wait to avoid browser display difficulties
+		Runnable r = new Runnable() {
+			public void run() {
+				createAndShowGUI();
+			}
+		};
+
+		try {
+			SwingUtilities.invokeAndWait(r);
+		} catch (InterruptedException e) {
+			//Not really sure why we would be in this situation
+			System.out.println("InterruptedException in init: " + e);
+		} catch (java.lang.reflect.InvocationTargetException e) {
+			//This could happen for various reasons if there is a problem in createAndShowGUI
+			e.printStackTrace();
+		}
+	}
+
+	public void destroy () {
+		if (csi != null) {
+			csi.disconnect();
+		}
+	}
+
+	private synchronized void createAndShowGUI () {
+		// Webcam
+		gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
+		panelWebcam = new WebcamPanel();
+		tabPaneMain = new JTabbedPane();
+		tabPaneMain.setFont(new Font("arial", Font.PLAIN, 14));
+		tabPaneMain.add(panelWebcam, "Webcam");
+
+		// Robots
+		selectedBot = -1;
+		robotIcons = new RobotList();
+
+		// Connection area
+		txtInfo = new JTextArea();
+		txtInfo.setBorder(BorderFactory.createTitledBorder("Info"));
+		txtHost = new JTextField(this.getDocumentBase().getHost());
+		txtHost.setBorder(BorderFactory.createTitledBorder("Host"));
+		txtPort = new JTextField("10123");
+		txtPort.setBorder(BorderFactory.createTitledBorder("Port"));
+		btnConnect = new JButton("Connect");
+		btnConnect.setFont(new Font("arial", Font.BOLD, 16));
+		btnGetXBeeIDs = new JButton("Get XBee IDs");
+		getRootPane().setDefaultButton(btnConnect);
+		lblConnectionStatus = new JLabel("Status: Offline");
+		panelConnect = new JPanel();
+		panelConnect.setLayout(new GridLayout(6,1));
+		panelConnect.add(lblConnectionStatus);
+		panelConnect.add(txtHost);
+		panelConnect.add(txtPort);
+		panelConnect.add(btnConnect);
+		panelServerInterface = new JPanel();
+		panelServerInterface.setLayout(new GridLayout(2,1));
+		panelServerInterface.add(panelConnect);
+		panelServerInterface.add(txtInfo);
+
+		// Robot direction panel
+		panelRobotDirection = new JPanel();
+		panelRobotDirectionButtons = new JPanel();
+
+		Font f = new Font(null, Font.PLAIN, 16);
+		btnF = new JButton("\u2191");
+		btnF.setFont(f);
+		btnB = new JButton("\u2193");
+		btnB.setFont(f);
+		btnL = new JButton("\u2190");
+		btnL.setFont(f);
+		btnR = new JButton("\u2192");
+		btnR.setFont(f);
+		btnActivate = new JButton("\u25A0");
+		btnActivate.setFont(new Font(null, Font.BOLD, 24));
+
+		panelRobotDirectionButtons.setLayout(new GridLayout(1,5));
+		panelRobotDirectionButtons.add(btnActivate);
+		panelRobotDirectionButtons.add(btnF);
+		panelRobotDirectionButtons.add(btnB);
+		panelRobotDirectionButtons.add(btnL);
+		panelRobotDirectionButtons.add(btnR);
+
+		imageVectorControl = gc.createCompatibleImage(ColonetConstants.VECTOR_CONTROLLER_WIDTH, ColonetConstants.VECTOR_CONTROLLER_HEIGHT);
+		vectorController = new VectorController(imageVectorControl, self);
+		panelRobotDirection.setLayout(new BorderLayout());
+		panelRobotDirection.add(vectorController, BorderLayout.CENTER);
+		panelRobotDirection.add(panelRobotDirectionButtons, BorderLayout.SOUTH);
+
+		// Robot Control and Commands
+		panelRobotCommands = new JPanel();
+		panelRobotCommands.setLayout(new GridLayout(6,2));
+		// Battery subset
+		batteryIcon = new BatteryIcon(0);
+		lblBattery = new JLabel(batteryIcon);
+		lblSelected = new JLabel("None");
+		// Management subset
+		setStation = false;
+		setWaypoint = false;
+		setWaypointID = -1;
+		btnAssignID = new JButton("Assign ID");
+		btnLocateStation = new JButton("Identify Station");
+		boundary = new RobotBoundary();
+		btnSetBounds = new JButton("Set Boundary");
+		btnClearBounds = new JButton("Clear Boundary");
+		// Control subset
+		btnCommand_MoveTo = new JButton("Move to ...");
+		btnCommand_MoveAll = new JButton("Move all ...");
+		btnCommand_StopTask = new JButton("Stop Current Task");
+		btnCommand_ResumeTask = new JButton("Resume Current Task");
+		btnCommand_ChargeNow = new JButton("Recharge Now");
+		btnCommand_StopCharging = new JButton("Stop Recharging");
+		panelRobotCommands.add(new JLabel("Battery Level: "));
+		panelRobotCommands.add(lblBattery);
+		panelRobotCommands.add(new JLabel("Selected Icon: "));
+		panelRobotCommands.add(lblSelected);
+		panelRobotCommands.add(btnAssignID);
+    panelRobotCommands.add(btnLocateStation);
+		panelRobotCommands.add(btnCommand_ChargeNow);
+		panelRobotCommands.add(btnCommand_StopCharging);
+		panelRobotCommands.add(btnSetBounds);
+    panelRobotCommands.add(btnClearBounds);
+		panelRobotCommands.add(btnCommand_MoveTo);
+		panelRobotCommands.add(btnCommand_MoveAll);
+		//panelRobotCommands.add(btnCommand_StopTask);
+		//panelRobotCommands.add(btnCommand_ResumeTask);
+		panelRobotControl = new JPanel();
+		panelRobotControl.setLayout(new GridLayout(2,1));
+		panelRobotControl.add(panelRobotDirection);
+		panelRobotControl.add(panelRobotCommands);
+
+		// Task Manager
+		panelTaskManager = new JPanel();
+		panelTaskManager.setLayout(new BorderLayout());
+		taskListModel = new DefaultListModel();
+		taskList = new JList(taskListModel);
+		taskList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		taskList.setSelectedIndex(0);
+		spTaskManager = new JScrollPane(taskList);
+		panelTaskManagerControls = new JPanel();
+		panelTaskManagerControls.setLayout(new GridLayout(1,4));
+		panelTaskManagerControlsPriority = new JPanel();
+		panelTaskManagerControlsPriority.setLayout(new GridLayout(1,2));
+		btnAddTask = new JButton("Add...");
+		btnRemoveTask = new JButton("Remove");
+		btnMoveTaskUp = new JButton("^");
+		btnMoveTaskDown = new JButton("v");
+		btnUpdateTasks = new JButton("Update");
+		panelTaskManagerControlsPriority.add(btnMoveTaskUp);
+		panelTaskManagerControlsPriority.add(btnMoveTaskDown);
+		panelTaskManagerControls.add(btnAddTask);
+		panelTaskManagerControls.add(btnRemoveTask);
+		panelTaskManagerControls.add(btnUpdateTasks);
+		panelTaskManagerControls.add(panelTaskManagerControlsPriority);
+		panelTaskManager.add(spTaskManager, BorderLayout.CENTER);
+		panelTaskManager.add(panelTaskManagerControls, BorderLayout.SOUTH);
+		panelTaskManager.add(new JLabel("Current Task Queue"), BorderLayout.NORTH);
+		taskAddWindow = new TaskAddWindow();
+
+		// Main control mechanism
+		tabPaneControl = new JTabbedPane(JTabbedPane.TOP);
+		tabPaneControl.setFont(new Font("arial", Font.PLAIN, 14));
+		tabPaneControl.setPreferredSize(new Dimension(ColonetConstants.VECTOR_CONTROLLER_WIDTH, 0));
+		tabPaneControl.addTab("Connection", panelServerInterface);
+		tabPaneControl.addTab("Robots", panelRobotControl);
+		//tabPaneControl.addTab("Tasks", panelTaskManager);
+
+		// Put all elements in the ContentPane
+		this.getContentPane().setLayout(new BorderLayout());
+		this.getContentPane().add(tabPaneMain, BorderLayout.CENTER);
+		this.getContentPane().add(tabPaneControl, BorderLayout.EAST);
+		this.setVisible(true);
+		
+		// Disable components before connecting
+		btnConnect.setText("Connect");
+    lblConnectionStatus.setText("Status: Disconnected");
+    setComponentsEnabled(false);
+
+		/* Add all listeners here */
+		// Task Management
+		btnAddTask.addActionListener(this);
+		btnRemoveTask.addActionListener(this);
+		btnMoveTaskUp.addActionListener(this);
+		btnMoveTaskDown.addActionListener(this);
+		btnUpdateTasks.addActionListener(this);
+		// Robot Control
+		btnF.addActionListener(this);
+		btnB.addActionListener(this);
+		btnL.addActionListener(this);
+		btnR.addActionListener(this);
+		btnF.addKeyListener(this);
+		btnB.addKeyListener(this);
+		btnL.addKeyListener(this);
+		btnR.addKeyListener(this);
+		btnActivate.addActionListener(this);
+		btnActivate.addKeyListener(this);
+		btnCommand_MoveTo.addActionListener(this);
+		btnCommand_MoveAll.addActionListener(this);
+		btnCommand_StopTask.addActionListener(this);
+		btnCommand_ResumeTask.addActionListener(this);
+		btnCommand_ChargeNow.addActionListener(this);
+		btnCommand_StopCharging.addActionListener(this);
+		// Other
+		btnConnect.addActionListener(this);
+		btnGetXBeeIDs.addActionListener(this);
+		btnAssignID.addActionListener(this);
+		btnLocateStation.addActionListener(this);
+    btnSetBounds.addActionListener(this);
+    btnClearBounds.addActionListener(this);
+		panelWebcam.addMouseListener(this);
+		panelWebcam.addMouseMotionListener(this);
+	}
+	
+	public ColonetServerInterface getCSI () {
+	  return csi;
+	}
+
+	public void paint (Graphics g) {
+		super.paint(g);
+	}
+
+	public void update (Graphics g) {
+		paint(g);
+	}
+
+	/**
+	* Gets the JTextArea used for displaying debugging information. 
+	*
+	* @return the JTextArea where debugging information can be displayed.
+	*/
+	public JTextArea getInfoPanel () {
+		return txtInfo;
+	}
+
+	/**
+	* Parses a String containing BOM matrix information.
+	* The ColonetServerInterface receives lines of the BOM matrix.	(For encoding
+	* information, see the ColonetServerInterface documentation.)	 The entire matrix is passed
+	* to the client when requested. This method takes a string of the form
+	* "[command code] [command code] [number of robots] [data0] [data1] ..."
+	* with tokens separated by spaces and containing no brackets.
+	* The [command code]s are predefined values identifying this String as a BOM data
+	* String, [number of robots] is an integer, and the values that follow are
+	* the sensor readings of the robots in order, starting with robot 0.	Only [number of robots]^2
+	* data entries will be read.	The matrix values are saved locally until the next String is parsed.
+	*
+	*
+	* @param line the String containing BOM matrix information.
+	* @throws ArrayIndexOutOfBoundsException if there are fewer than [number of robots]^2 data entries in the String
+	*/
+	public void parseMatrix (String line) {
+		txtInfo.setText("");
+		String [] str = line.split(" ");
+		int num = Integer.parseInt(str[2]);
+		for (int i = 0; i < num; i++) {
+			for (int j = 0; j < num; j++) {
+				String next = str[3 + i*num + j];
+				if (next.equals("-1")) {
+					txtInfo.append("-");
+				} else {
+					txtInfo.append(next);
+				}
+
+				if (j < num - 1) {
+					txtInfo.append(" ");
+				}
+			}
+
+			if (i < num - 1) {
+				txtInfo.append("\n");
+			}
+		}
+		repaint();
+	}
+
+	public void connect () {
+    if (csi != null)
+      return;
+    csi = new ColonetServerInterface(self);
+    csi.connect(txtHost.getText(), txtPort.getText());
+    if (!csi.isReady()) {
+      csi = null;
+      return;
+    }
+    webcamLoader = new WebcamLoader(self);
+    dataUpdater = new DataUpdater();
+    dataUpdater.start();
+    webcamLoader.start();
+    Runnable r = new Runnable() {
+      public void run () {
+        btnConnect.setText("Disconnect");
+        lblConnectionStatus.setText("Status: Connected");
+        setComponentsEnabled(true);
+      }
+    };
+    SwingUtilities.invokeLater(r);
+	}
+
+	public void disconnect () {
+    try {
+        dataUpdater.interrupt();
+    } catch (Exception e) {
+    }
+    csi = null;
+		Runnable r = new Runnable() {
+      public void run () {
+		    btnConnect.setText("Connect");
+	      lblConnectionStatus.setText("Status: Disconnected");
+        setComponentsEnabled(false);
+        boundary = null;
+        station = null;
+	    }
+		};
+		SwingUtilities.invokeLater(r);
+	}
+	
+	private void setComponentsEnabled (boolean enabled) {
+    btnF.setEnabled(enabled);
+    btnB.setEnabled(enabled);
+    btnL.setEnabled(enabled);
+    btnR.setEnabled(enabled);
+    btnActivate.setEnabled(enabled);
+    btnAssignID.setEnabled(enabled);
+    btnLocateStation.setEnabled(enabled);
+    btnSetBounds.setEnabled(enabled);
+    btnClearBounds.setEnabled(enabled);
+    btnCommand_ChargeNow.setEnabled(enabled);
+    btnCommand_StopCharging.setEnabled(enabled);
+    btnCommand_MoveTo.setEnabled(enabled);
+    btnCommand_MoveAll.setEnabled(enabled);
+	}
+
+	/**
+	* Parses a String containing a task queue update.
+	* Format is currently not specified.
+	* This method currently does nothing.
+	*
+	* @param line the String containing task queue update information.
+	*/
+	public void parseQueue (String line) {
+
+	}
+
+	/**
+	* Parses a String containing XBee ID values.
+	* The ColonetServerInterface receives Strings of XBee information.	(For encoding
+	* information, see the ColonetServerInterface documentation.)	 This method takes
+	* a string of the form "[command code] [command code] [number of robots] [id0] [id1] ..."
+	* with tokens separated by spaces and containing no brackets.
+	* The [command code]s are predefined values identifying this String as an XBee
+	* ID String, [number of robots] is an integer, and the values that follow are
+	* the IDs of the robots in order, starting with robot 0.	Only [number of robots]
+	* will be read.	 The ID values are saved locally until the next String is parsed.
+	* The purpose of having this list is to ensure that robots are properly identified for control purposes.
+	* This keeps robot identification consistent between sessions and prevents arbitrary assignment.
+	*
+	* @param line the String containing XBee ID information.
+	* @throws ArrayIndexOutOfBoundsException if there are fewer than [number of robots] IDs in the String
+	* @see ColonetServerInterface#sendXBeeIDRequest()
+	*/
+	public void parseXBeeIDs (String line) {
+		String [] str = line.split(" ");
+		int num = Integer.parseInt(str[2]);
+		xbeeID = new int[num];
+		for (int i = 0; i < num; i++) {
+			xbeeID[i] = Integer.parseInt(str[i+3]);
+		}
+	}
+
+	/**
+	* Parses a String containing battery information.
+	* The ColonetServerInterface receives Strings of battery information.	 (For encoding
+	* information, see the ColonetServerInterface documentation.)	 This method takes
+	* a string of the form "[command code] [command code] [robot ID] [value]"
+	* with tokens separated by spaces and containing no brackets.
+	* The [command code]s are predefined values identifying this String as a battery
+	* information String, [robot ID] is an integer, and [value] is a battery measurement.
+	* This updates the batery information for a single robot.
+	*
+	*
+	* @param line the String containing battery information.
+	* @see ColonetServerInterface#sendBatteryRequest(int)
+	*/
+	public void parseBattery (String line) {
+	  int botNum, level;
+	  try {
+		    String [] str = line.split(" ");
+		    botNum = Integer.parseInt(str[2]);
+		    level = Integer.parseInt(str[3]);
+		} catch (NumberFormatException e) {
+		    System.out.println("Could not parse battery update");
+		    return;
+		}
+
+		RobotIcon r = robotIcons.get(botNum);
+		if (r != null) {
+		    r.setBattery(batteryIcon.convert(level));  // set contextual battery meter
+		    batteryIcon.setLevel(level);             // set solo battery meter
+		}
+		super.repaint();
+	}
+
+	/**
+	* Parses a String containing visual robot position information along with
+	* canonical ID assignments.
+	*/
+	public void parsePositions (String line) {
+		String [] str = line.split(" ");
+		RobotList newList = new RobotList();
+
+		for (int i = 2; i < str.length; i+=3) {
+			int id = Integer.parseInt(str[i]);
+			int x = Integer.parseInt(str[i+1]);
+			int y = Integer.parseInt(str[i+2]);
+			RobotIcon newIcon = new RobotIcon(id, x, y);
+			// Save previous robot information
+			RobotIcon oldIcon = robotIcons.get(id);
+			if (oldIcon != null) {
+		    newIcon.setBattery(oldIcon.getBattery());
+				newIcon.setDestination(oldIcon.getDestination());
+			}
+			if (newIcon.getID() >= 0) {
+				newIcon.setColor(Color.GREEN);
+			}
+			newList.put(id, newIcon);
+		}
+		robotIcons = newList;
+		repaint();
+	}
+  
+  /**
+    * Parses a message that indicates a robot has reached its destination
+   */
+  public void parseMoveUpdate (String line) {
+    System.out.println("Got move update: " + line);
+    String [] str = line.split(" ");
+    int id = Integer.parseInt(str[1]);
+    robotIcons.get(id).clearDestination();
+  }
+	
+	/**
+	* Set the ID of the selected robot
+	*/
+	public void setSelectedBot (int id) {
+	    this.selectedBot = id;
+	    lblSelected.setText("" + this.selectedBot);
+	}
+	
+	/**
+	* Returns the ID of the selected robot
+	*/
+	public int getSelectedBot () {
+	    return this.selectedBot;
+	}
+
+	//
+	// MouseListener methods
+	//
+	public void mousePressed(MouseEvent e) {
+		//Start a new Thread to handle the MouseEvent
+		(new MouseHandler(e)).start();
+	}
+	public void mouseExited(MouseEvent e) {
+	}
+	public void mouseEntered(MouseEvent e) {
+	}
+	public void mouseReleased(MouseEvent e) {
+    (new MouseHandler(e)).start();
+	}
+	public void mouseClicked(MouseEvent e) {
+	}
+	public void mouseDragged(MouseEvent e) {
+    (new MouseHandler(e)).start();
+	}
+	public void mouseMoved(MouseEvent e) {
+	}
+
+	//
+	// KeyListener methods
+	//
+	public void keyPressed (KeyEvent e) {
+		//Start a new Thread to handle the KeyEvent
+		(new KeyHandler(e)).start();
+		repaint();
+	}
+	public void keyReleased (KeyEvent e) {
+	}
+	public void keyTyped (KeyEvent e) {
+	}
+
+	//
+	// ActionListener method
+	//
+	public void actionPerformed (ActionEvent e) {
+		// Start a new Thread to handle the ActionEvent
+		(new ActionHandler(e)).start();
+		repaint();
+	}
+
+	class MouseHandler extends Thread {
+		MouseEvent e;
+
+		public MouseHandler (MouseEvent event) {
+			super("MouseHandler");
+			this.e = event;
+		}
+
+		public void run () {
+			Point pt = panelWebcam.convertClick(e);
+
+			// If we are selecting a waypoint (destination) for a specific bot
+			if (setWaypoint && setWaypointID >= 0 && e.getID() == MouseEvent.MOUSE_PRESSED) {
+			  // If the user clicks outside the boundary, do nothing
+			  if (boundary.isActive() && !boundary.contains(e.getX(), e.getY())) {
+			    return;
+			  }
+				setWaypoint = false;
+				panelWebcam.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+				if (selectedBot < 0) {
+					return;
+				}
+				
+				RobotIcon r = robotIcons.get(selectedBot);
+				if (r != null) {
+					r.setDestination(pt);
+					if (csi != null) {
+						csi.sendAbsoluteMove(r.getID(), pt.x, pt.y);
+					}
+				}
+				return;
+			}
+			
+			// If we are ordering a charge (right-click on a station)
+			if ((e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON3)  
+          && e.getID() == MouseEvent.MOUSE_PRESSED
+          && station != null && station.contains(e.getX(), e.getY())) {
+        if (selectedBot >= 0) {
+          RobotIcon r = robotIcons.get(selectedBot);
+          if (r != null) {
+            Point p = panelWebcam.convertPoint(station.getX(), station.getY());
+            r.setDestination(p);
+          }
+          csi.sendRecharge(selectedBot);
+        }
+				return;
+			}
+
+			// Right-click also means we are moving a robot
+			if ((e.getButton() == MouseEvent.BUTTON2 || e.getButton() == MouseEvent.BUTTON3)  
+          && e.getID() == MouseEvent.MOUSE_PRESSED) {
+        // If the user clicks outside the boundary, do nothing
+			  if (boundary.isActive() && !boundary.contains(e.getX(), e.getY())) {
+			    return;
+			  }
+				if (selectedBot < 0) {
+					return;
+				}
+				RobotIcon r = robotIcons.get(selectedBot);
+				if (r != null) {
+					r.setDestination(pt);
+					if (csi != null) {
+						csi.sendAbsoluteMove(r.getID(), pt.x, pt.y);
+					}
+				}
+				return;
+			}
+
+			// If we are setting all waypoints
+			if (setWaypoint && e.getID() == MouseEvent.MOUSE_PRESSED) {
+			  // If the user clicks outside the boundary, do nothing
+			  if (boundary.isActive() && !boundary.contains(e.getX(), e.getY())) {
+			    return;
+			  }
+				setWaypoint = false;
+				panelWebcam.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+				for (Map.Entry<Integer,RobotIcon> entry : robotIcons.entrySet()) {
+					RobotIcon r = entry.getValue();
+					r.setDestination(pt);
+          //TODO: send absolute move commands
+				}
+				return;
+			}
+      
+      // If we are drawing a boundary rectangle
+      if (boundary != null && boundary.isSetting()) {
+        // Begin 
+        if (e.getID() == MouseEvent.MOUSE_PRESSED) {
+          boundary.panel_p1 = new Point(e.getX(), e.getY());
+          boundary.panel_p2 = new Point(e.getX(), e.getY());
+          boundary.img_p1 = new Point(pt.x, pt.y);
+        }
+        // Resize
+        else if (e.getID() == MouseEvent.MOUSE_DRAGGED){
+          boundary.panel_p2 = new Point(e.getX(), e.getY());
+        }
+        // Finish
+        else if (e.getID() == MouseEvent.MOUSE_RELEASED){
+          boundary.panel_p2 = new Point(e.getX(), e.getY());
+          boundary.img_p2 = new Point(pt.x, pt.y);
+          panelWebcam.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
+          boundary.set = false;
+          boundary.active = true;
+          boundary.sendToServer();
+        }
+        return;
+      }
+      
+      // If we are locating a charging station
+      if (setStation) {
+        setStation = false;
+        station = new ChargingStation(e.getX(), e.getY());
+        station.setActive(true);
+        return;
+      }
+
+			// Otherwise, we are selecting a bot, or doing nothing
+			RobotIcon r = robotIcons.getBoundingIcon(pt);
+      if (r != null)
+      {
+        selectedBot = r.getID();
+        lblSelected.setText("" + selectedBot);
+      }
+		}
+	}
+
+	class KeyHandler extends Thread {
+		KeyEvent e;
+
+		public KeyHandler (KeyEvent event) {
+			super("KeyHandler");
+			this.e = event;
+		}
+
+		public void run () {
+			int code = e.getKeyCode();
+			if (code == KeyEvent.VK_UP) {
+				vectorController.setMaxForward();
+				vectorController.sendToServer();
+			} else if (code == KeyEvent.VK_DOWN) {
+				vectorController.setMaxReverse();
+				vectorController.sendToServer();
+			} else if (code == KeyEvent.VK_LEFT) {
+				vectorController.setMaxLeft();
+				vectorController.sendToServer();
+			} else if (code == KeyEvent.VK_RIGHT) {
+				vectorController.setMaxRight();
+				vectorController.sendToServer();
+			} else if (code == KeyEvent.VK_S) {
+				vectorController.setZero();
+				vectorController.sendToServer();
+			}
+		}
+	}
+
+	class ActionHandler extends Thread {
+		ActionEvent e;
+
+		public ActionHandler (ActionEvent event) {
+			super("ActionHandler");
+			this.e = event;
+		}
+
+		public void run () {
+			Object source = e.getSource();
+
+			// General Actions
+			if (source == btnConnect) {
+				if (csi == null) {
+					connect();
+				} else {
+					disconnect();
+				}
+			} else if (source == btnGetXBeeIDs) {
+				csi.sendXBeeIDRequest();
+			} else if (source == btnAssignID) {
+				String message;
+				if (selectedBot < 0) {
+					message = "That robot is unidentified. Please specify its ID.";
+				} else {
+					message = "That robot has ID " + selectedBot + ". You may reassign it now.";
+				}
+				String result = JOptionPane.showInputDialog(self, message, "Robot Identification", JOptionPane.QUESTION_MESSAGE);
+				if (result == null) {
+					return;
+				}
+				int newID = -1;
+				try {
+					newID = Integer.parseInt(result);
+				} catch (Exception ex) {
+					csi.warn("Invalid ID.");
+					return;
+				}
+				// Assign new ID and update display
+				if (csi != null) {
+					csi.sendIDAssignment(selectedBot, newID);
+				}
+				selectedBot = newID;
+				lblSelected.setText("" + newID);
+		  } else if (source == btnLocateStation) {
+		    setStation = true;
+			} else if (source == btnF) { // Robot Movement Controls
+				vectorController.setMaxForward();
+				vectorController.sendToServer();
+				robotIcons.get(selectedBot).clearDestination();
+			} else if (source == btnB) {
+				vectorController.setMaxReverse();
+				vectorController.sendToServer();
+				robotIcons.get(selectedBot).clearDestination();
+			} else if (source == btnL) {
+				vectorController.setMaxLeft();
+				vectorController.sendToServer();
+				robotIcons.get(selectedBot).clearDestination();
+			} else if (source == btnR) {
+				vectorController.setMaxRight();
+				vectorController.sendToServer();
+				robotIcons.get(selectedBot).clearDestination();
+			} else if (source == btnActivate) {
+				vectorController.setZero();
+				vectorController.sendToServer();
+				if (selectedBot >= 0)
+				{
+					robotIcons.get(selectedBot).clearDestination();
+				}
+      } else if (source == btnSetBounds) {
+        boundary.set = true;
+        panelWebcam.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
+      } else if (source == btnClearBounds) {
+        boundary.active = false;
+        boundary.set = false;
+        boundary.img_p1 = new Point(-1, -1);
+        boundary.img_p2 = new Point(-1, -1);
+        boundary.panel_p1 = new Point(-1, -1);
+        boundary.panel_p2 = new Point(-1, -1);
+        boundary.sendToServer();
+			} else if (source == btnCommand_MoveTo) {
+				if (selectedBot < 0) {
+					return;
+				}
+				panelWebcam.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
+				setWaypoint = true;
+				setWaypointID = selectedBot;
+			} else if (source == btnCommand_MoveAll) {
+				panelWebcam.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
+				setWaypoint = true;
+				setWaypointID = -1;
+			} else if (source == btnCommand_StopTask) {
+
+			} else if (source == btnCommand_ResumeTask) {
+
+			} else if (source == btnCommand_ChargeNow) {
+			  if (selectedBot >= 0)
+			    csi.sendRecharge(selectedBot);
+			  else
+          csi.sendRecharge(2);
+			} else if (source == btnCommand_StopCharging) {
+			  if (selectedBot >= 0) {
+			    robotIcons.get(selectedBot).clearDestination();
+			    csi.sendRechargeStop(selectedBot);
+			  } else {
+			    robotIcons.get(2).clearDestination();
+          csi.sendRechargeStop(2);
+        }
+			} else if (source == btnAddTask) { // Queue Management
+				taskAddWindow.prompt();
+			} else if (source == btnRemoveTask) {
+				if (taskList.getSelectedIndex() >= 0) {
+					csi.sendQueueRemove(taskList.getSelectedIndex());
+				}
+				csi.sendQueueUpdate();
+			} else if (source == btnMoveTaskUp) {
+				csi.sendQueueReorder(taskList.getSelectedIndex(), taskList.getSelectedIndex() - 1);
+				csi.sendQueueUpdate();
+			} else if (source == btnMoveTaskDown) {
+				csi.sendQueueReorder(taskList.getSelectedIndex(), taskList.getSelectedIndex() + 1);
+				csi.sendQueueUpdate();
+			} else if (source == btnUpdateTasks) {
+				csi.sendQueueUpdate();
+			}
+
+		}
+	}
+
+	/*
+	* DataUpdater thread.
+	*	The purpose of this thread is to request data from the server at regular intervals.
+	*	Types of data requested: XBee IDs, robot positions, battery levels.
+	*
+	*/
+	class DataUpdater extends Thread {
+		final int DATAUPDATER_DELAY = 500;
+		int count;
+		public DataUpdater () {
+			super("Colonet DataUpdater");
+			count = 0;
+		}
+
+		public synchronized void run () {
+			while (true) {
+				try {
+					if (csi != null && csi.isReady()) {
+						// XBee ID Request
+						if (count % 5 == 0) {
+							csi.sendXBeeIDRequest();
+						}
+						// Robot Position Request
+						if (count % 1 == 0) {
+							csi.sendPositionRequest();
+						}
+						// Battery Request
+						if (count % 30 == 0) {
+							for (Map.Entry<Integer,RobotIcon> entry : robotIcons.entrySet()) {
+								RobotIcon r = entry.getValue();
+									int id = r.getID();
+										if (id >= 0) {
+										csi.sendBatteryRequest(id);
+									}
+							}
+						}
+					}
+					count++;
+					if (count > 1000)
+						count = 0;
+					Thread.sleep(DATAUPDATER_DELAY);
+				} catch (InterruptedException e) {
+					return;
+				} catch (NullPointerException e) {
+				    // This probably indicates that an object was destroyed by shutdown.
+				    return;
+				}
+			}
+		}
+	}
+
+
+	/*
+	* WebcamPanel class
+	* Contains the webcam image
+	*/
+	class WebcamPanel extends JPanel {
+
+		volatile BufferedImage img;
+		BufferedImage buffer;
+
+		public WebcamPanel () {
+			super(true);
+		}
+
+		public synchronized void setImage (BufferedImage newimg) {
+			if (img != null) {
+				img.flush();
+			}
+			System.gc();
+			img = newimg;
+			repaint();
+		}
+
+		public synchronized void paint (Graphics g) {
+			if (img == null) {
+				return;
+			}
+
+			// Calculate scaling
+			int maxWidth = getWidth() - 2*ColonetConstants.WEBCAM_BORDER;
+			int maxHeight = getHeight() - 2*ColonetConstants.WEBCAM_BORDER;
+			double widthRatio = 1.0 * maxWidth / img.getWidth();
+			double heightRatio = 1.0 * maxHeight / img.getHeight();
+			double scale = 0;
+			int newWidth = 0;
+			int newHeight = 0;
+			int x = 0;
+			int y = 0;
+
+			if (widthRatio > heightRatio) {	 //height is the limiting factor
+				scale = heightRatio;
+				newHeight = maxHeight;
+				newWidth = (int) (img.getWidth() * scale);
+				y = ColonetConstants.WEBCAM_BORDER;
+				x = (maxWidth - newWidth) / 2 + ColonetConstants.WEBCAM_BORDER;
+			} else {	//width is the limiting factor
+				scale = widthRatio;
+				newWidth = maxWidth;
+				newHeight = (int) (img.getHeight() * scale);
+				x = ColonetConstants.WEBCAM_BORDER;
+				y = (maxHeight - newHeight) / 2 + ColonetConstants.WEBCAM_BORDER;
+			}
+
+			// Draw image onto the buffer
+			buffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
+			Graphics2D bufferedGraphics = (Graphics2D)buffer.getGraphics();
+			bufferedGraphics.setColor(Color.GRAY);
+			bufferedGraphics.fillRect(0, 0, this.getWidth(), this.getHeight());
+			Image imgScaled = img.getScaledInstance(newWidth, newHeight, Image.SCALE_FAST);
+			bufferedGraphics.drawImage(imgScaled, x, y, this);
+
+      // Draw boundary
+      if (boundary != null && (boundary.isSetting() || boundary.isActive())) {
+         bufferedGraphics.setColor(Color.BLUE);
+         int width = boundary.panel_p2.x - boundary.panel_p1.x;
+         int height = boundary.panel_p2.y - boundary.panel_p1.y;
+         bufferedGraphics.drawRect(boundary.panel_p1.x, boundary.panel_p1.y, width, height);
+      }
+      
+      // Draw charging station
+      if (station != null && station.isActive()) {
+        bufferedGraphics.setStroke(new BasicStroke(2));
+        bufferedGraphics.setColor(Color.ORANGE);
+        int width = ColonetConstants.STATION_SIZE;
+        bufferedGraphics.drawRect(station.getX() - width/2, station.getY() - width/2, width, width);
+      }
+
+			// Draw Identifiers and battery levels
+			if (robotIcons != null) {
+				bufferedGraphics.setStroke(new BasicStroke(2));
+				for (Map.Entry<Integer,RobotIcon> entry : robotIcons.entrySet()) {
+					RobotIcon r = entry.getValue();
+					bufferedGraphics.setColor(r.getColor());
+					// Identifier circle
+					int px = (int) (x + r.getLocation().x * scale);
+					int py = (int) (y + r.getLocation().y * scale);
+					int radius = ColonetConstants.ROBOT_RADIUS;
+					bufferedGraphics.drawOval(px-radius, py-radius, 2*radius, 2*radius);
+					// ID, if applicable
+					if (r.getID() > 0) {
+					    bufferedGraphics.setFont(new Font("arial", Font.PLAIN, 36));
+					    bufferedGraphics.drawString("" + r.getID(), px-10, py+10);
+					}
+					// Battery
+					if (r.getBattery() >= 0) {
+					    int pixels = r.getBattery() * ColonetConstants.BATTERY_WIDTH / 100;
+						if (r.getBattery() > 50)
+						    bufferedGraphics.setColor(Color.GREEN);
+						else if (r.getBattery() > 25)
+						    bufferedGraphics.setColor(Color.YELLOW);
+						else
+						    bufferedGraphics.setColor(Color.RED);
+						bufferedGraphics.fillRect(px+20, py+20, pixels, ColonetConstants.BATTERY_HEIGHT);
+						bufferedGraphics.setColor(Color.BLACK);
+						bufferedGraphics.drawRect(px+20, py+20, ColonetConstants.BATTERY_WIDTH, ColonetConstants.BATTERY_HEIGHT);
+					}
+					// If the robot has a destination, draw the vector
+					if (r.hasDestination()) {
+						bufferedGraphics.drawLine(px, py, (int)(x + r.getDestination().x * scale), (int)(y + r.getDestination().y * scale));
+					}
+				}
+			}
+
+			// Identify currently-selected robot
+			RobotIcon r = robotIcons.get(selectedBot);
+			if (r != null) {
+				int px = (int) (x + r.getLocation().x * scale);
+				int py = (int) (y + r.getLocation().y * scale);
+				int radius = ColonetConstants.ROBOT_RADIUS;
+				bufferedGraphics.setColor(Color.BLACK);
+				bufferedGraphics.drawOval(px-radius-6, py-radius-6, 2*radius+12, 2*radius+12);
+			}
+
+			//Display buffered content
+			g.drawImage(buffer, 0, 0, this);
+		}
+
+		/**
+		* Convert a click on the webcam panel to a coordinate that is consistent with the
+		* original size of the image that the panel contains.
+		*/
+		public Point convertClick (MouseEvent e) {
+			if (img == null) {
+				return new Point(e.getX(), e.getY());
+			}
+			return convertPoint(e.getX(), e.getY());
+		}
+		
+		/**
+		* Convert a point on the webcam panel to a coordinate that is consistent with the
+		* original size of the image that the panel contains.
+		*/
+		public Point convertPoint (int panelx, int panely) {
+
+			// Calculate scaling
+			int border = ColonetConstants.WEBCAM_BORDER;
+			int clickx = panelx;
+			int clicky = panely;
+			int maxWidth = getWidth() - 2*border;
+			int maxHeight = getHeight() - 2*border;
+			double widthRatio = 1.0 * maxWidth / img.getWidth();
+			double heightRatio = 1.0 * maxHeight / img.getHeight();
+			double scale = 0;
+			int newWidth = 0;
+			int newHeight = 0;
+			int px = 0;
+			int py = 0;
+
+			if (widthRatio > heightRatio) {	 //height is the limiting factor
+				scale = heightRatio;
+				newHeight = maxHeight;
+				newWidth = (int) (img.getWidth() * scale);
+				py = clicky - border;
+				px = clickx - border - (maxWidth - newWidth) / 2;
+			} else {	//width is the limiting factor
+				scale = widthRatio;
+				newWidth = maxWidth;
+				newHeight = (int) (img.getHeight() * scale);
+				px = clickx - border;
+				py = clicky - border - (maxHeight - newHeight) / 2;
+			}
+			py = (int) (py / scale);
+			px = (int) (px / scale);
+			return new Point(px, py);
+		}
+		
+	}
+
+	/*
+	* WebcamLoader class
+	* Handles the loading of the webcam image.
+	*/
+	class WebcamLoader extends Thread
+	{
+		URL imagePath;
+		MediaTracker mt;
+		BufferedImage image;
+		Random rand;
+
+		public WebcamLoader (JApplet applet)
+		{
+			super("ColonetWebcamLoader");
+			mt = new MediaTracker(applet);
+			ImageIO.setUseCache(false);
+			rand = new Random();
+		}
+
+		public void run ()
+		{
+			while (true) {
+				try {
+					Thread.sleep(ColonetConstants.WEBCAM_DELAY);
+					if (image != null)
+						image.flush();
+					System.gc();
+					try {
+						imagePath = new URL(ColonetConstants.WEBCAM_PATH);
+					} catch (MalformedURLException e) {
+						System.out.println("Malformed URL: could not form URL from: [" + ColonetConstants.WEBCAM_PATH + "]\n");
+					}
+					image = ImageIO.read(imagePath);
+					// The MediaTracker waitForID pauses the thread until the image is loaded.
+					// We don't want to display a half-downloaded image.
+					mt.addImage(image, 1);
+					while(!mt.checkID(1))
+						Thread.sleep(20);
+					mt.removeImage(image);
+					// Save
+					panelWebcam.setImage(image);
+				} catch (InterruptedException e) {
+					return;
+				} catch (java.security.AccessControlException e) {
+					csi.warn("Could not load webcam.\n" + e);
+					return;
+				} catch (IOException e) {
+					getInfoPanel().append("IOException while trying to load image.\n");
+				}
+			}
+		}
+	}
+  
+  class RobotBoundary {
+    public volatile boolean active, set;
+    public volatile Point img_p1, img_p2;
+    public volatile Point panel_p1, panel_p2;
+    
+    public RobotBoundary () {
+      active = false;
+      set = false;
+      img_p1 = new Point(-1,-1);
+      img_p2 = new Point(-1,-1);
+      panel_p1 = new Point(-1,-1); 
+      panel_p2 = new Point(-1,-1);
+    }
+    
+    public void sendToServer () {
+      if (csi != null) {
+        if (img_p1.x == -1 || img_p1.y == -1)
+          csi.sendBoundaryClear();
+        else
+          csi.sendBoundary(img_p1.x, img_p1.y, img_p2.x, img_p2.y);
+      }
+    }
+    
+    public boolean isActive () {
+      return active;
+    }
+    
+    public boolean isSetting () {
+      return set;
+    }
+    
+    /**
+    *  Returns a Rectangle designating the active area 
+    *  in the coordinate system of the JPanel.
+    *  Returns null if the boundary is not active.
+    */
+    public Rectangle toRectangle () {
+      if (!active)
+        return null;
+      return new Rectangle (panel_p1.x, panel_p1.y, (panel_p2.x-panel_p1.x), (panel_p2.y-panel_p1.y));
+    }
+    
+    /** 
+    *  Determines whether a coordinate in the coordinate
+    *  system of the JPanel is contained within the boundary.
+    *  If the boundary is not active, then this method 
+    *  returns false.
+    */
+    public boolean contains (int px, int py) {
+      Rectangle rect = this.toRectangle();
+      if (rect == null || !this.active)
+        return false;
+      return rect.contains(px, py);
+    }
+        
+  }
+  
+  class ChargingStation {
+    private int x, y;
+    private boolean active;
+    
+    public ChargingStation () {
+      super();
+    }
+    
+    public ChargingStation (int x, int y) {
+      this();
+      setLocation(x, y);
+    }
+    
+    public int getX () {
+      return x;
+    }
+    
+    public int getY () {
+      return y;
+    }
+    
+    /**
+    *  Sets the center of the charging station to
+    *  the specified coordinate point.
+    */
+    public void setLocation (int x, int y) {
+      this.x = x;
+      this.y = y;
+    }
+    
+    public boolean isActive () {
+      return active;
+    }
+    
+    public void setActive (boolean status) {
+      this.active = status;
+    }
+    
+    /**
+    *  Determines whether a coordinate is contained within
+    *  the graphical area of the charging station.
+    *  Returns false if the charging station is not active.
+    */
+    public boolean contains (int px, int py) {
+      if (!active)
+        return false;
+      int width = ColonetConstants.STATION_SIZE;
+      Rectangle rect = new Rectangle(this.x - width/2, this.y - width/2, width, width);
+      return rect.contains(px, py);
+    }
+  
+  }
+
+}
Index: branches/scout/projects/colonet/client/ColonetServerInterface.java
===================================================================
--- branches/scout/projects/colonet/client/ColonetServerInterface.java	(nonexistent)
+++ branches/scout/projects/colonet/client/ColonetServerInterface.java	(revision 1346)
@@ -0,0 +1,584 @@
+/*
+* ColonetServerInterface.java
+* Gregory Tress
+*/
+
+import java.net.*;
+import java.io.*;
+import javax.swing.JOptionPane;
+import javax.swing.JTextArea;
+
+/**
+* The Colonet server interface class. This class handles direct communication with the Colonet server. The general
+* contract is that this class will encapsulate the process of sending commands and requests to the server and
+* receiving responses. This class should provide methods to send specific commands and requests so that the
+* Colonet can easily communicate with the server. When data is received from the server, the ColonetServerInterface
+* decides how to handle it and in many cases this means simply passing it to the Colonet.
+* <p>
+* The motivation is that any number of Colonet-type classes could be designed for different purposes if needed, with
+* this class being used by each one for communication.
+* For instance, if an application is designed which only monitors sensor data, or that only has access to
+* the task queue, etc., the application could easily plug in to this interface.
+* The Colonet should generally not contain communication-specific code or Strings of command and request data.
+* If additional commands and requests are needed for permanent implementation, it is suggested that convenience
+* classes be created in the ColonetServerInterface and called from the Colonet.
+*
+* @author Gregory Tress
+*/
+public class ColonetServerInterface
+{
+/*	Old packet structure:
+
+		COMMAND PACKET STRUCTURE
+	1:	SEND_TO_ROBOT
+	2:	# of robot, or GLOBAL_DEST
+	3:	COLONET_COMMMAND
+	4:	message code (i.e. ORB_SET)
+	5:	any data, as many that fit in the packet
+
+	REQUEST PACKET STRUCTURE
+	1:	REQUEST_FROM_SERVER
+	2:	# of robot
+	3:	COLONET_REQUEST
+	4:	???
+
+	9/12/07 New server interface structure
+		Client will no longer send full robot packets to the server.
+		Commands will be defined as necessary.
+	*/
+
+	//General Colonet Interface
+	public static final String SEND_TO_ROBOT = "0";
+	public static final String REQUEST_FROM_SERVER = "1";
+	public static final String RESPONSE_TO_CLIENT_REQUEST = "2";
+	public static final String COLONET_COMMAND = "13"; //0x0D
+	public static final String COLONET_REQUEST = "14"; //0x0E
+	public static final String CORONET_RESPONSE = "15"; //0x0F
+	public static final String GLOBAL_DEST = "200";
+	
+	//Common requests
+	public static final String CLIENT_REQUEST_ROBOT_POSITIONS = "86";
+	public static final String CLIENT_ASSIGN_ROBOT_ID = "87";
+  public static final String CLIENT_SET_VIRTUAL_WALL = "89";
+  public static final String SERVER_CLEAR_VIRTUAL_WALL = "92";
+	public static final String MOVE_TO_ABSOLUTE_POSITION = "83"; //0x53
+	public static final String ROBOT_REPORT_ARRIVED_AT_POSITION = "93"; //0x5D
+	public static final String REQUEST_BOM_MATRIX = "144";
+	public static final String REQUEST_XBEE_IDS = "145";
+	public static final String RECHARGE = "96";  //0x60
+	public static final String RECHARGE_STOP = "97";  //0x61
+
+	//Queue instructions
+	public static final String COLONET_QUEUE = "100";
+	public static final String QUEUE_UPDATE = "101";
+	public static final String QUEUE_ADD = "102";
+	public static final String QUEUE_REMOVE = "103";
+	public static final String QUEUE_REORDER = "104";
+
+	//Use BATTERY to request battery level
+	public static final String BATTERY = "56"; //0x38
+
+	//MOTORS
+	public static final String MOTORS_INIT = "23"; //0x17
+	public static final String MOTOR1_SET = "24"; //0x18
+	public static final String MOTOR2_SET = "25"; //0x19
+	public static final String MOTORS_OFF = "26"; //0x1A
+	public static final String MOVE = "27"; //0x1B
+	public static final String MOVE_AVOID = "28"; //0x1C
+	public static final String MOVE_R = "29"; //0x1D
+	public static final String MOVE_L = "30"; //0x1E
+	public static final String MOVE_F = "31"; //0x1F
+	public static final String MOVE_B = "32"; //0x1G
+
+	//BUZZER
+	public static final String BUZZER_INIT = "0"; //0x00
+	public static final String BUZZER_SET_VAL = "1"; //0x01
+	public static final String BUZZER_SET_FREQ = "2"; //0x02
+	public static final String BUZZER_CHIRP = "3"; //0x03
+	public static final String BUZZER_OFF = "4"; //0x04
+
+	//ORB
+	public static final String ORB_INIT = "12"; //0x0C
+	public static final String ORB_SET = "13"; //0x0D
+	public static final String ORB_SET_COLOR = "14"; //0x0E
+	public static final String ORB_DISABLE = "15"; //0x0F
+	public static final String ORB_ENABLE = "16"; //0x10
+	public static final String ORB_SET_DIO = "17"; //0x11
+	public static final String LED_INIT = "18"; //0x12
+	public static final String LED_USER = "19"; //0x13
+	public static final String ORB_SET_NUM_NS = "20"; //0x14
+	public static final String ORB_SET_NUM = "21"; //0x15
+	public static final String ORB_SEND = "22"; //0x16
+
+	Colonet colonet;	//save reference to the entire applet locally
+	Socket socket;
+	OutputStreamWriter out;
+	BufferedReader reader;
+	DataListener dataListener;
+
+	/*
+	* FUNCTION IMPLEMENTATIONS
+	*/
+
+	/**
+	* Constructs a new ColonetServerInterface. When constructing a ColonetServerInterface, a valid Colonet object
+	* reference must be provided to ensure that data is routed correctly.
+	*
+	* @param colonet The Colonet object to save locally. This reference cannot be changed once the
+	*		ColonetSreverInterface has been contsructed.
+	* @throws NullPointerException if colonet is null
+	*
+	*/
+	public ColonetServerInterface (Colonet colonet) {
+		this.colonet = colonet;
+		dataListener = new DataListener();
+	}
+
+	public Socket getSocket () {
+		return socket;
+	}
+
+	public OutputStreamWriter getOutputStreamWriter () {
+		return out;
+	}
+
+	public BufferedReader getBufferedReader () {
+		return reader;
+	}
+
+	public boolean isReady () {
+		if (socket == null || out == null || reader == null)
+			return false;
+		if (!socket.isConnected() || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown())
+			return false;
+		return true;
+	}
+
+	public boolean isInputReady () {
+		try {
+			if (reader.ready()) return true;
+		} catch (Exception e) {
+			return false;
+		}
+		return false;
+	}
+
+	public String getLine () throws IOException {
+		return reader.readLine();
+	}
+
+	/**
+	 * Create socket connection to Colonet server.
+	 * If successful, start thread for listening for incoming data.
+	 */
+	public void connect (String strHost, String strPort) {
+		//make sure hostname and port are valid
+		if (strHost.equals("") || strPort.equals("")) {
+			err("Please enter a hostname and port.");
+			return;
+		}
+		int port = 0;
+		try {
+			port = Integer.parseInt(strPort);
+		} catch (Exception e) {
+			err("Invalid port");
+			return;
+		}
+
+		//make sure we aren't already connected.
+		if (socket != null && socket.isConnected()) {
+			return;
+		}
+
+		try {
+			socket = new Socket(strHost, port);
+			socket.setKeepAlive(true);
+		} catch (UnknownHostException e) {
+			err("Unknown Host Exception");
+			return;
+		} catch (IOException e) {
+			err("Failed to connect to " + strHost + ".\n");
+			return;
+		} catch (java.security.AccessControlException e) {
+			err("Permission denied.\n\n"
+				+ "You may only connect to the server from which this applet was loaded.");
+			return;
+		}
+
+		if (socket == null || !socket.isConnected()) {
+			return;
+		}
+		try {
+			out = new OutputStreamWriter(socket.getOutputStream());
+			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+		} catch (IOException e) {
+			warn("Could not get transfer streams from socket connection.");
+		}
+
+		dataListener.start();
+	}
+
+	public void disconnect () {
+		try {
+			if (reader != null) {
+				reader.close();
+			}
+			if (out != null) {
+				out.close();
+			}
+			colonet.disconnect();
+		} catch (IOException e) {
+		}
+	}
+
+	/*
+	* Send a general String to the OutputStream.
+	*/
+	private void sendString (String s) {
+		//make sure we can send
+		if (!this.isReady()) {
+			colonet.getInfoPanel().append("Could not send data.\n");
+			return;
+		}
+		//send packet
+		try {
+			Thread.sleep(100);	 //pause to be safe
+			out.write(s);
+			out.flush();
+		} catch (IOException e) {
+			colonet.getInfoPanel().setText("Could not send data.\n");
+		} catch (InterruptedException e) {
+		}
+	}
+
+	/**
+	* General send-to-server method. This method is used by other command methods, which are usually convenience
+	* methods that simply specify arguments to this method. A command consists of a String which holds integers
+	* separated by spaces. This method should not be used directly unless you know the format of the particular
+	* command you are sending. If implementing a particular command for permanent use, it is recommended that
+	* you create a new wrapper method specific to that command in the ColonetServerInterface file.
+	*
+	* Note that no checking is performed in this method to ensure the correct formatting of the String arguments.
+	* If malformed commands or robot numbers are specified, the behavior of the request at the server will be
+	* undefined and could result in server failure.
+	*
+	* @param s The command String in its correct format. The format of a command String is ultimately specified
+	* by the Colonet server application and may change.
+	* @param robotNumber The number of the robot that is the subject of the command, if any. The robot number
+	* is specified as a single integer in a String. If the command does not have a single robot subject, this
+	* argument can be null or an empty String, whichever is convenient.
+	*/
+	public void sendData (String s, String robotNumber) {
+		//create packet
+		String packet = "";
+		packet += ColonetServerInterface.SEND_TO_ROBOT;
+		if (robotNumber != null)
+			packet += " " + robotNumber;
+		packet += " " + ColonetServerInterface.COLONET_COMMAND;
+		packet += " " + s;	//add	 the command code here
+		packet += "\n";
+		sendString(packet);
+		//colonet.getInfoPanel().append("S:" + packet);
+	}
+
+	/**
+	* General request-from-server method. This method is used by other request methods, which are usually convenience
+	* methods that simply specify arguments to this method. A request consists of a String which holds integers
+	* separated by spaces. This method should not be used directly unless you know the format of the particular
+	* request you are making. If implementing a particular request, it is recommended that you create a new method
+	* specific to that request in the ColonetServerInterface file.
+	*
+	*/
+	private void sendRequest (String s, String robotNumber) {
+		//create packet
+		String packet = "";
+		packet += ColonetServerInterface.REQUEST_FROM_SERVER;
+		packet += " " + robotNumber;
+		packet += " " + s;	//add	 the command code here
+		packet += "\n";
+		sendString(packet);
+	}
+
+	/**
+	* Sends a request to the server to report the entire BOM sensor matrix. The server will reply at its convenience.
+	* No guarantee is made (end-to-end or otherwise) that the server will respond in a timely manner or at all
+	* to any individual request.
+	*/
+	public void sendSensorDataRequest () {
+		sendRequest(ColonetServerInterface.REQUEST_BOM_MATRIX, "");
+	}
+
+	/**
+	* Sends a request to the server to report a list of XBee IDs. The server will reply at its convenience.
+	* The purpose of having this list is to ensure that robots are properly identified for control purposes.
+	* This keeps robot identification consistent between sessions and prevents arbitrary assignment.
+	* No guarantee is made (end-to-end or otherwise) that the server will respond in a timely manner or at all
+	* to any individual request.
+	*
+	* @see Colonet#parseXBeeIDs(String)
+	*/
+	public void sendXBeeIDRequest () {
+		sendRequest(ColonetServerInterface.REQUEST_XBEE_IDS, "");
+	}
+
+	/**
+	* Sends a battery request for a specific robot to the server. The server will reply at its convenience.
+	* Behavior is undefined if an invalid robot number is specified. The server will probably not respond in
+	* this case.
+	* No guarantee is made (end-to-end or otherwise) that the server will respond in a timely manner or at all
+	* to any individual request.
+	*
+	* @param robotNum The number of the robot for which we are requesting the battery. Note that this value
+	* is sent as-is to the server. No mapping to or from XBee IDs is performed. The contract for this is
+	* currently undefined.
+	* @see Colonet#parseBattery(String)
+	*/
+	public void sendBatteryRequest (int robotNum) {
+		//create packet
+		String packet = "";
+		packet += ColonetServerInterface.SEND_TO_ROBOT;
+		packet += " " + robotNum;
+		packet += " " + ColonetServerInterface.COLONET_REQUEST;
+		packet += " " + ColonetServerInterface.BATTERY;	 //add	the command code here
+		packet += "\n";
+		sendString(packet);
+		//System.out.println("Sent battery request: " + packet);
+	}
+
+	/**
+	* Requests a list of all robot positions and correspondind robot IDs.
+	*/
+	public void sendPositionRequest () {
+		sendRequest(ColonetServerInterface.CLIENT_REQUEST_ROBOT_POSITIONS, "");
+	}
+
+	/**
+	* Send a robot ID assignment update to store on the server.
+	*/
+	public void sendIDAssignment (int oldID, int newID) {
+		String packet = "";
+		packet += ColonetServerInterface.REQUEST_FROM_SERVER;
+		packet += " " + CLIENT_ASSIGN_ROBOT_ID;
+		packet += " " + oldID + " " + newID;
+		packet += "\n";
+		sendString(packet);
+	}
+
+	/**
+    * Order a robot to move to an absolute coordinate point.
+    */
+	public void sendAbsoluteMove (int id, int x, int y) {
+      int x_high = (x>>8) & 0xff;
+      int x_low = x & 0xff;
+      int y_high = (y>>8) & 0xff;
+      int y_low = y & 0xff;
+
+			sendData(MOVE_TO_ABSOLUTE_POSITION + " " + x_high + " " + x_low + " " + y_high + " " + y_low, "" + id);
+	}
+	
+	/**
+	*  Tell a robot to recharge now
+	*/
+	public void sendRecharge (int id) {
+	  sendData(RECHARGE + "", id + "");
+	  System.out.println("Sent recharge command to ID " + id);
+	}
+
+	/**
+	*  Tell a robot to stop recharing now
+	*/
+	public void sendRechargeStop (int id) {
+	  sendData(RECHARGE_STOP + "", id + "");
+	  System.out.println("Sent recharge stop command to ID " + id);
+	}
+
+    /**
+    * Establish a boundary for robot motion.
+    */
+    public void sendBoundary (int x1, int y1, int x2, int y2) {
+        String packet = "";
+		    packet += ColonetServerInterface.REQUEST_FROM_SERVER;
+		    packet += " " + CLIENT_SET_VIRTUAL_WALL;
+        packet += " " + x1 + " " + y1 + " " + x2 + " " + y2;
+        packet += "\n";
+        sendString(packet);
+    }
+    
+    /**
+    * Clear the boundary for robot motion.
+    */
+    public void sendBoundaryClear () {
+        String packet = "";
+		    packet += ColonetServerInterface.REQUEST_FROM_SERVER;
+		    packet += " " + SERVER_CLEAR_VIRTUAL_WALL;
+        packet += "\n";
+        sendString(packet);
+    }
+
+	/*
+	* Queue management
+	*/
+	private void sendQueueInstruction (String inst) {
+		String packet = "";
+		packet += ColonetServerInterface.COLONET_QUEUE;
+		packet += " " + inst;
+		packet += "\n";
+		sendString(packet);
+	}
+
+	/**
+	* Notifies the Colonet server to add a task to the current task queue. The Colonet server holds the canonical
+	* task queue. Any applet can send tasks to add to the queue. Local copies of the queue in the applet are for
+	* display purposes only, and are not authoritative when adding tasks. All clients send additions asynchronously,
+	* and as a result no guarantee is made that a task will be added in the specificed location in the queue or at
+	* all. If an invalid position is specified, the task will probably not be added to the queue and may cause
+	* server failure. Due to the asynchronous nature of the queue, we cannot easily account for concurrent
+	* modification failures on the client side.
+	*
+	* @param pos The position in the queue at which we would like the task to be placed. Note that this is not
+	* guaranteed. Invalid positions may cause the task to be discarded at the server.
+	* @param data The String containing the command code(s) for the task and any arguments necessary to fully
+	* define the behavior of the task. This format is currently not specified. In the future, the canonical format
+	* of the data String will ultimately be defined by the Colonet server.
+	* @param description A String that contains a description of the task. This will be the message displayed to
+	* the user when information about the task is requested.
+	*/
+	public void sendQueueAdd (int pos, String data, String description) {
+		String packet = "";
+		packet += ColonetServerInterface.QUEUE_ADD;
+		packet += " " + pos;
+		packet += " " + data;
+		packet += " [" + description + "]";
+		packet += "\n";
+		sendQueueInstruction(packet);
+	}
+
+	/**
+	* Notifies the Colonet server to remove a task from the current task queue. The Colonet server holds the canonical
+	* task queue. Any applet can remove a task from the queue. Local copies of the queue in the applet are for
+	* display purposes only, and are not authoritative when removing tasks. All clients remove tasks asynchronously,
+	* and as a result no guarantee is made that the correct task will actually be removed.
+	* If an invalid position is specified, the state of the queue is undefined and server failure may result.
+	* Due to the asynchronous nature of the queue, we cannot easily account for concurrent
+	* modification failures on the client side.
+	*
+	* @param pos The position in the queue at which we would like the task to be removed. Note that this is not
+	* guaranteed. Invalid positions may result in a corrupted queue.
+	*/
+	public void sendQueueRemove (int pos) {
+		String packet = "";
+		packet += ColonetServerInterface.QUEUE_REMOVE;
+		packet += " " + pos;
+		packet += "\n";
+		sendQueueInstruction(packet);
+	}
+
+	/**
+	* Notifies the Colonet server to reorder tasks in the current task queue. The Colonet server holds the canonical
+	* task queue. Any applet can reorder tasks in the queue. Local copies of the queue in the applet are for
+	* display purposes only, and are not authoritative when reordering tasks. All clients reorder tasks asynchronously,
+	* and as a result no guarantee is made that the correct tasks will actually be reordered.
+	* If an invalid position is specified, the state of the queue is undefined and server failure may result.
+	* Due to the asynchronous nature of the queue, we cannot easily account for concurrent
+	* modification failures on the client side.
+	*
+	* @param pos1 The queue position of a task which we would like to reorder.
+	* @param pos2 The queue position of a task which we would like to reorder.
+	*/
+	public void sendQueueReorder (int pos1, int pos2) {
+		String packet = "";
+		packet += ColonetServerInterface.QUEUE_REORDER;
+		packet += " " + pos1;
+		packet += " " + pos2;
+		packet += "\n";
+		sendQueueInstruction(packet);
+	}
+
+	public void sendQueueUpdate () {
+		sendQueueInstruction(ColonetServerInterface.QUEUE_UPDATE);
+	}
+
+	/**
+	 * Display informational message box on the screen. Used for casual communicaton to the user.
+	 * @param text Text to display
+	 */
+	public void msg (String text) {
+		JOptionPane.showMessageDialog(colonet, text, "Colonet", JOptionPane.INFORMATION_MESSAGE);
+	}
+
+	/**
+	 * Display warning message box on the screen. Used for minor alerts or exceptions.
+	 * @param text Text to display
+	 */
+	public void warn (String text) {
+		JOptionPane.showMessageDialog(colonet, text, "Colonet", JOptionPane.WARNING_MESSAGE);
+	}
+
+	/**
+	 * Display error message box on the screen. Used for major errors or exceptions in the program.
+	 * @param text Text to display
+	 */
+	public void err (String text) {
+		JOptionPane.showMessageDialog(colonet, text, "Colonet", JOptionPane.ERROR_MESSAGE);
+	}
+
+
+	/*
+	* DataListener thread.
+	*
+	*/
+	class DataListener extends Thread {
+		final int DATALISTENER_DELAY = 122;
+
+		public DataListener () {
+			super("Colonet DataListener");
+		}
+
+		public void run () {
+			String line;
+			while (true) {
+				try {
+					line = reader.readLine();
+					if (line == null) {
+						throw new IOException();
+					}
+					parseData(line);
+					Thread.sleep(DATALISTENER_DELAY);
+				} catch (InterruptedException e) {
+					return;
+				} catch (IOException e) {
+					disconnect();
+					return;
+				}
+			}
+		}
+
+		public void parseData (String line) {
+			// Sensor Matrix
+			if (line.startsWith(ColonetServerInterface.RESPONSE_TO_CLIENT_REQUEST + " " +
+				ColonetServerInterface.REQUEST_BOM_MATRIX))
+				colonet.parseMatrix(line);
+			// Task Queue
+			else if (line.startsWith(ColonetServerInterface.COLONET_QUEUE))
+				colonet.parseQueue(line);
+			// XBee IDs
+			else if (line.startsWith(ColonetServerInterface.RESPONSE_TO_CLIENT_REQUEST + " " +
+				ColonetServerInterface.REQUEST_XBEE_IDS))
+				colonet.parseXBeeIDs(line);
+			// Battery
+			else if (line.startsWith(ColonetServerInterface.RESPONSE_TO_CLIENT_REQUEST + " " +
+				ColonetServerInterface.BATTERY))
+				colonet.parseBattery(line);
+			// Robot Positions
+			else if (line.startsWith(ColonetServerInterface.RESPONSE_TO_CLIENT_REQUEST + " " +
+				ColonetServerInterface.CLIENT_REQUEST_ROBOT_POSITIONS))
+				colonet.parsePositions(line);
+      else if (line.startsWith(ColonetServerInterface.ROBOT_REPORT_ARRIVED_AT_POSITION))
+        colonet.parseMoveUpdate(line);
+			// Unknown type
+			else {
+				System.out.println("Got unknown data: " + line + "\n");
+			}
+		}
+	}
+}
Index: branches/scout/projects/colonet/client/RobotIcon.java
===================================================================
--- branches/scout/projects/colonet/client/RobotIcon.java	(nonexistent)
+++ branches/scout/projects/colonet/client/RobotIcon.java	(revision 1346)
@@ -0,0 +1,170 @@
+
+import java.awt.*;
+
+/**
+*	 RobotIcon class
+*	 Provides a means for graphically representing and keeping track of webcam bots.
+*/
+public class RobotIcon {
+	private int id;  // the XBee ID of the robot
+	private Color color;  // the color used for painting the robot on screen.
+	private Point location;  // the position of the robot in the coordinate system of the webcam image
+	private Point destination;  // the destination of the robot, if homing or charging
+	private int battery;  // the battery level, if available
+
+	public RobotIcon (int id, int x, int y) {
+		setID(id);
+		setColor(Color.RED);
+		setLocation(x, y);
+		clearDestination();
+		setBattery(-1);
+	}
+	
+	/**
+	*  Returns the ID of this RobotIcon.
+	*/
+	public int getID () {
+	  return id;
+	}
+	
+	/** 
+	*  Sets the ID of this RobotIcon.
+	*/
+	public void setID (int newid) {
+	  this.id = newid;
+	}
+	
+	/**
+	*  Returns the Color used for representing this RobotIcon on screen.
+	*/
+	public Color getColor () {
+	  return color;
+	}
+	
+	/** 
+	*  Sets the Color used for representing this RobotIcon on screen.
+	*/
+	public void setColor (Color newcolor) {
+	  this.color = newcolor;
+	}
+	
+	/**
+	*  Returns the battery level of this RobotIcon.
+	*  TODO: what numbering system is this?
+	*/ 
+	public int getBattery () {
+	  return battery;
+	}
+	
+	/**
+	*  Sets the battery level of this RobotIcon.
+	*  TODO: what numbering system is this?
+	*/
+	public void setBattery (int newbattery) {
+	  this.battery = newbattery;
+	}
+	
+	/**
+	*  Returns the location of this RobotIcon as a Point. The location is specified 
+	*  in the coordinate system of the original webcam image, NOT the coordinate
+	*  system of the scaled image as seen on screen.
+	*/
+	public Point getLocation () {
+	  return location;
+	}
+
+	/**
+	*	 Sets the location of this RobotIcon. The location should be specified in the
+	*  coordinate system of the original webcam image, NOT the coordinate system of
+	*  the scaled image as seen on screen.
+	*/
+	public void setLocation (int x, int y) {
+		location = new Point(x, y);
+	}
+	
+  /**
+	*	 Sets the location of this RobotIcon. The location should be specified in the
+	*  coordinate system of the original webcam image, NOT the coordinate system of
+	*  the scaled image as seen on screen.
+	*/
+	public void setLocation (Point p) {
+    location = p;
+	}
+	
+	/**
+	*  Returns the destination of this RobotIcon as a Point. The location is specified 
+	*  in the coordinate system of the original webcam image, NOT the coordinate
+	*  system of the scaled image as seen on screen. If the RobotIcon has no current
+	*  destination, then this method returns null.
+	*/
+	public Point getDestination () {
+	  if (!hasDestination())
+	    return null;
+	  return destination;
+	}
+	
+	/**
+	*  Determines whether this RobotIcon currently has a destination, e.g., for homing
+	*  to a specific point in the environment or finding a charging bay.
+	*/
+	public boolean hasDestination () {
+	  return (destination != null && destination.x >= 0 && destination.y >= 0);
+	}
+	
+	/**
+	*	 Sets the destination of this RobotIcon for the purposes of homing to a specific
+	*  point in the environment of finding a charging bay. The destination point should
+	*  be specified in the coordinate system of the original webcam image, NOT the 
+	*  coordinate system of the scaled image as seen on screen.
+	*/
+	public void setDestination (int x, int y) {
+		destination = new Point(x, y);
+	}
+	
+	/**
+	*	 Sets the destination of this RobotIcon for the purposes of homing to a specific
+	*  point in the environment of finding a charging bay. The destination point should
+	*  be specified in the coordinate system of the original webcam image, NOT the 
+	*  coordinate system of the scaled image as seen on screen.
+	*/
+	public void setDestination (Point p) {
+		destination = p;
+	}
+	
+	/**
+	*  Clears the destination Point for this RobotIcon, indicating that the robot is
+	*  no longer homing.
+	*/
+	public void clearDestination () {
+	  setDestination(-1, -1);
+	}
+
+	/**
+	*	 Determines whether a given point is within the rectangle that circumscribes the
+	*	 robot's circlular icon. Used for click detection on robots in webcam view. The
+	*  parameter point should be specified in the coordinate system of the original
+	*  webcam image, NOT the coordinate system of the scaled image as seen on screen.
+	*/
+	public boolean contains (int px, int py) {
+		return this.getBoundingRectangle().contains(px, py);
+	}
+	
+	/**
+	*  Returns the Rectangle object that circumscribes the RobotIcon identifier circle
+	*  that is painted on screen. The Rectangle is in the coordinate system of the 
+	*  original webcam image NOT the coordinate system of the scaled image as seen 
+	*  on screen.
+	*/
+	public Rectangle getBoundingRectangle () {
+	  int radius = ColonetConstants.ROBOT_RADIUS;
+	  return new Rectangle(location.x-radius, location.y-radius, 2*radius, 2*radius);
+	}
+
+  /**
+  *  Provides a text representation of this RobotIcon object
+  */
+	public String toString () {
+		String s = "RobotIcon at (" + location.x + "," + location.y + "), id " + id;
+		return s;
+	}
+}
Index: branches/scout/projects/colonet/client/RobotList.java
===================================================================
--- branches/scout/projects/colonet/client/RobotList.java	(nonexistent)
+++ branches/scout/projects/colonet/client/RobotList.java	(revision 1346)
@@ -0,0 +1,34 @@
+import java.util.Map;
+import java.util.HashMap;
+import java.awt.Point;
+
+public class RobotList extends HashMap <Integer, RobotIcon> {
+  
+  /**
+  * Creates a new RobotList
+  */
+  public RobotList () {
+    super();
+  }
+
+  /**
+  * For a given Point, finds the robot that conatins this Point
+  * graphically. The coordinate system is based on the dimensions
+  * of the image returned by the webcam loader, not the coordinates
+  * of the panel containing the image in the applet. Returns null
+  * if no robot contains the Point, or if the Point is null. If
+  * multiple robots overlap the point, one will be chosen arbitrarily.
+  */
+  public RobotIcon getBoundingIcon (Point p) {
+    if (p == null)
+      return null;
+    for (Map.Entry <Integer,RobotIcon> entry : this.entrySet()) {
+			RobotIcon r = entry.getValue();
+			if (r.contains(p.x, p.y)) {
+				return r;
+			}
+		}
+		return null;
+  }  
+
+}
Index: branches/scout/projects/colonet/client/VectorController.java
===================================================================
--- branches/scout/projects/colonet/client/VectorController.java	(nonexistent)
+++ branches/scout/projects/colonet/client/VectorController.java	(revision 1346)
@@ -0,0 +1,280 @@
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+/**
+* Controls robot motion graphically, using a mouse-controlled adjustable "vector." 
+* The controller uses the input vector to calculate a resulting velocity for each
+* wheel on the robot. These velocities are also shown graphically. The vecolities
+* are "normalized" internally to approximately eliminate the "dead zone" in which
+* the robot applies partial power to the motors but does not move.
+* @author Gregory Tress
+*/
+public class VectorController extends GraphicsPanel implements MouseListener, MouseMotionListener {
+	// State variables
+	int x, y, cx, cy;
+	final Colonet colonet;
+	
+	// Painting constants
+	final int WIDTH, HEIGHT;
+	final int SIDE;
+	final int BOT_SIZE = 70;
+	final int WHEEL_SIZE = 15;
+
+	public VectorController (Image img, Colonet colonet) {
+		super (img);
+		WIDTH = img.getWidth(null);
+		HEIGHT = img.getHeight(null);
+		cx = WIDTH/2;
+		cy = HEIGHT/2;
+		x = cx;
+		y = cy;
+		if (WIDTH < HEIGHT) {
+			SIDE = WIDTH;
+		} else {
+			SIDE = HEIGHT;
+		}
+		this.colonet = colonet;
+		
+		this.addMouseListener(this);
+		this.addMouseMotionListener(this);
+	}
+
+	/**  Set the robot motion vector. The "vector" is defined as 
+	* (0,0)->(x,y) where (0,0) is in the center of the targeting ring.
+	* Does nothing if the specified point is outside the ring.
+	* @param x The x coordinate of the point.
+	* @param y The y coordinate of the point.
+	*/
+	public void setPoint (int x, int y) {
+		if (isValidPoint(x, y)) {
+			this.x = x;
+			this.y = y;
+		}
+	}
+
+	/**  Determines whether a point is inside the targeting ring.
+	* @param x The x coordinate of the point.
+	* @param y The y coordinate of the point.
+	* @return True if a point is within the targeting ring.
+	*/
+	public boolean isValidPoint (int x, int y) {
+		double xsq = Math.pow(1.0*(x - cx)/(SIDE/2), 2);
+		double ysq = Math.pow(1.0*(y - cy)/(SIDE/2), 2);
+		return (xsq + ysq <= 1);
+	}
+
+	/**  Notifies the controller that a MouseEvent has occurred
+	* on the controller surface. This should be called when a 
+	* MouseListener attached to the controller has detected 
+	* that a MouseEvent has occurred that may influence the state
+	* of the controller, such as mouseClicked, mouseDragged, or
+	* mouseReleased events.
+	*
+	* @param e The MouseEvent object which contains the details of the event.
+	* @param send Determines whether the motion vector established
+	*    as a result of the MouseEvent should subsequently
+	*    be sent to the robot(s).
+	*/
+	public void notifyMouseEvent (MouseEvent e, boolean send) {
+		if (!isValidPoint(e.getX(), e.getY())) {
+			return;
+		}
+		setPoint(e.getX(), e.getY());
+		repaint();
+		if (send) {
+			Runnable r = new Runnable () {
+				public void run () {
+					sendToServer();
+				}
+			};
+			(new Thread(r)).start();
+		}
+	}
+
+	public void mouseExited(MouseEvent e) {
+	}
+	public void mouseEntered(MouseEvent e) {
+	}
+	public void mouseReleased(MouseEvent e) {
+		notifyMouseEvent(e, true);
+	}
+	public void mouseClicked(MouseEvent e) {
+		notifyMouseEvent(e, false);
+	}
+	public void mousePressed(MouseEvent e) {
+	}
+	public void mouseDragged(MouseEvent e) {
+		notifyMouseEvent(e, false);
+	}
+	public void mouseMoved(MouseEvent e) {
+	}
+
+	/**  Calculates the magnitude of the vector. 
+	* @return An int that is the truncated value of the speed of the vector.
+	*/
+	public int getSpeed () {
+		int dx = x - cx;
+		int dy = y - cy;
+		int s = (int) Math.sqrt( Math.pow(dx, 2) + Math.pow(dy, 2) );
+		int maxspeed = SIDE/2;
+		return s * 512 / SIDE;
+	}
+
+	/**
+	* Returns the angle of the control vector in positive degrees west of north,
+	* or negative degrees east of north, whichever is less than or equal to
+	* 180 degrees total.
+	*/
+	public int getAngle () {
+		int dx = x - cx;
+		int dy = cy - y;
+		// find reference angle in radians
+		double theta = Math.atan2(Math.abs(dx), Math.abs(dy));
+		// transform to degrees
+		theta = theta * 180 / Math.PI;
+		// adjust for quadrant
+		if (dx < 0 && dy < 0)
+			theta = 90 + theta;
+		else if (dx < 0 && dy >= 0)
+			theta = 90 - theta;
+		else if (dx >= 0 && dy < 0)
+			theta = -90 - theta;
+		else
+			theta = -90 + theta;
+		return (int) theta;
+	}
+	
+	private int getMotorL () {
+		if (getSpeed() == 0)
+			return 0;
+		int dx = x - cx;
+		int dy = (cy - y) * 255 / getSpeed();
+		int val = 0;
+		// Dependent on quadrant
+		if (dx < 0 && dy < 0)
+			val = -255;
+		else if (dx < 0 && dy >= 0)
+			val = dy * 1024 / SIDE - 255;
+		else if (dx >= 0 && dy < 0)
+			val = dy * 1024 / SIDE + 255;
+		else
+			val = 255;
+		// Normalize to 0-255
+		return val * getSpeed() / 255;
+	}
+	
+	private int getMotorR () {
+		if (getSpeed() == 0)
+			return 0;
+		int dx = x - cx;
+		int dy = (cy - y) * 255 / getSpeed();
+		int val = 0;
+		// Dependent on quadrant
+		if (dx < 0 && dy < 0)
+			val = dy * 1024 / SIDE + 255;
+		else if (dx < 0 && dy >= 0)
+			val = 255;
+		else if (dx >= 0 && dy < 0)
+			val = -255;
+		else
+			val = dy * 1024 / SIDE - 255;
+		// Normalize to 0-255
+		return val * getSpeed() / 255;
+	}
+	
+	private int eliminateDeadZone (int x) {
+		final int START = 150;
+		int val;
+		if (x == 0)
+			return 0;
+		if (x > 0)
+			val = (int) ((1 - 1.0 * START / 255) * x + START);
+		else
+			val = (int) ((1 - 1.0 * START / 255) * x - START);
+		return val;
+	
+	}
+
+	public void paint (Graphics g) {
+		// Clear image
+		g.setColor(Color.BLACK);
+		g.fillRect(0, 0, WIDTH, HEIGHT);
+		((Graphics2D)g).setStroke(new BasicStroke(1));
+		
+		// Motor indicators
+		int motor1 = getMotorL() * BOT_SIZE / 512;
+		int motor2 = getMotorR() * BOT_SIZE / 512;
+		g.setColor(Color.YELLOW);
+		if (motor1 < 0)
+			g.fillRect(cx-BOT_SIZE/2 - WHEEL_SIZE, cy, WHEEL_SIZE, -motor1);
+		else
+			g.fillRect(cx-BOT_SIZE/2 - WHEEL_SIZE, cy-motor1, WHEEL_SIZE, motor1);
+		if (motor2 < 0)
+			g.fillRect(cx+BOT_SIZE/2, cy, WHEEL_SIZE, -motor2);
+		else
+			g.fillRect(cx+BOT_SIZE/2, cy-motor2, WHEEL_SIZE, motor2);
+		
+		// Watermark
+		g.setColor(Color.GRAY);
+		g.drawOval(cx-BOT_SIZE/2, cy-BOT_SIZE/2, BOT_SIZE, BOT_SIZE);
+		g.drawRect(cx-BOT_SIZE/2 - WHEEL_SIZE, cy-BOT_SIZE/2, WHEEL_SIZE, BOT_SIZE);
+		g.drawRect(cx+BOT_SIZE/2, cy-BOT_SIZE/2, WHEEL_SIZE, BOT_SIZE);
+		
+		// Targeting circle
+		g.setColor(Color.RED);
+		g.drawOval(cx-SIDE/2, cy-SIDE/2, SIDE, SIDE);
+		((Graphics2D)g).setStroke(new BasicStroke(2));
+		
+		// Vector Line
+		g.setColor(Color.GREEN);
+		g.drawLine(cx, cy, x, y);
+		g.fillOval(x-3, y-3, 6, 6);
+	}
+
+	/** Set the controller to the maximum forward velocity. */
+	public void setMaxForward () {
+		setPoint(cx, cy - (SIDE/2) + 1);
+	}
+
+	/** Set the controller to the maximum reverse velocity. */
+	public void setMaxReverse () {
+		setPoint(cx, cy + (SIDE/2) - 1);
+	}
+
+	/** Set the controller to the maximum left velocity, 
+	* causing to robot to turn counter-clockwise.
+	*/
+	public void setMaxLeft () {
+		setPoint(cx - (SIDE/2) + 1, cy);
+	}
+
+	/** Set the controller to the maximum right velocity, 
+	* causing to robot to turn clockwise.
+	*/
+	public void setMaxRight () {
+		setPoint(cx + (SIDE/2) - 1, cy);
+	}
+
+	/** Set the controller to (0,0), the stopped state. */
+	public void setZero () {
+		setPoint(cx, cy);
+	}
+
+	/** Sends the current vector to the robot(s). */
+	public void sendToServer () {
+		// Determine destination ID
+		String dest = ColonetServerInterface.GLOBAL_DEST;
+		ColonetServerInterface csi = colonet.getCSI();
+		if (csi == null)
+			return;
+		int motor1 = eliminateDeadZone(getMotorL());
+		int motor2 = eliminateDeadZone(getMotorR());
+		String motor1_string = (motor1 > 0) ? " 1 " + motor1 : " 0 " + (-motor1);
+		String motor2_string = (motor2 > 0) ? " 1 " + motor2 : " 0 " + (-motor2);
+		
+		csi.sendData(ColonetServerInterface.MOVE + motor1_string + motor2_string, dest);
+	}
+
+}
+
Index: branches/scout/projects/colonet/client/BatteryIcon.java
===================================================================
--- branches/scout/projects/colonet/client/BatteryIcon.java	(nonexistent)
+++ branches/scout/projects/colonet/client/BatteryIcon.java	(revision 1346)
@@ -0,0 +1,102 @@
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+*	 BatteryIcon class
+*	 Graphical representation of battery level
+*/
+public class BatteryIcon implements Icon {
+	private int width;
+	private int height;
+	private int level;
+
+	/**
+	* Constructs a new BatteryIcon with all default parameters.
+	* Default width and height are 50.
+	* Default level is 100.
+	*/
+	public BatteryIcon(){
+		this(100, 50, 50);
+	}
+
+	/**
+	* Constructs a new BatteryIcon with default width and height, and with the specified level.
+	* Default width and height are 50.
+	*/
+	public BatteryIcon(int startLevel){
+		this(startLevel, 50, 50);
+	}
+
+	/**
+	* Constructs a new BatteryIcon with the specified level, width, and height.
+	*/
+	public BatteryIcon(int startLevel, int w, int h){
+		level = startLevel;
+		width = w;
+		height = h;
+	}
+
+	public void paintIcon(Component c, Graphics g, int x, int y) {
+		Graphics2D g2d = (Graphics2D) g.create();
+		//clear the background
+		g2d.setColor(Color.WHITE);
+		g2d.fillRect(x + 1, y + 1, width - 2, height - 2);
+		//outline
+		g2d.setColor(Color.BLACK);
+		g2d.drawRect((int)(x + width*.3), y + 2, (int)(width*.4), height - 4);
+		//battery life rectangle
+
+		if (level > 50)
+			g2d.setColor(Color.GREEN);
+		else if (level > 25)
+			g2d.setColor(Color.YELLOW);
+		else
+			g2d.setColor(Color.RED);
+
+		int greenX = (int)(x + 1 + width*.3);
+		int greenY = (int)((y+3) + Math.abs(level-100.0)*(height-6)/(100));
+		int greenWidth = (int)(width*.4 - 2)+1;
+		int greenHeight = 1+(int)(level-0.0)*(height-6)/(100);
+		g2d.fillRect(greenX, greenY, greenWidth, greenHeight);
+		//text
+		g2d.setColor(Color.BLACK);
+		g2d.drawString(level + "%", greenX + greenWidth/2 - 10, greenY + greenHeight/2 + 5);
+
+		g2d.dispose();
+	}
+
+	/**
+	* Sets the battery level for this BatteryIcon. The level should be given in raw form, i.e. 0-255 directly
+	* from the robot. The value will be converted to a representative percentage automatically.
+	*
+	* @param newLevel the new battery reading from the robot that this BatteryIcon will display.
+	*/
+	public void setLevel(int newLevel) {
+		level = convert(newLevel);
+	}
+
+	public int getIconWidth() {
+		return width;
+	}
+
+	public int getIconHeight() {
+		return height;
+	}
+
+	/**
+	* Converts a robot battery reading into representable form.
+	* Readings from the robot are returned as raw values, 0-255. This method converts the reading into a value
+	* from 0 to 100 so that the practical remaining charge is represented.
+	*
+	* @param x The battery level as returned by the robot.
+	* @return The representable battery percentage.
+	*/
+	public int convert (int x) {
+	    final int DEAD = 110;
+	    final int FULL = 170;
+	    if (x < DEAD)
+	        return 1;
+		return (int) ((x-DEAD) * 100 / (FULL-DEAD));
+	}
+}
Index: branches/scout/projects/colonet/client/GraphicsPanel.java
===================================================================
--- branches/scout/projects/colonet/client/GraphicsPanel.java	(nonexistent)
+++ branches/scout/projects/colonet/client/GraphicsPanel.java	(revision 1346)
@@ -0,0 +1,24 @@
+import java.awt.*;
+import javax.swing.*;
+
+/*
+* GraphicsPanel class
+* An extension of JPanel, designed for holding an image that will be repainted regularly.
+*/
+public class GraphicsPanel extends JPanel {
+	protected Image img;
+
+	public GraphicsPanel (Image img) {
+		this(img, true);
+	}
+
+	public GraphicsPanel (Image img, boolean isDoubleBuffered) {
+		super(isDoubleBuffered);
+		this.img = img;
+	}
+
+	public void paint (Graphics g) {
+		// Place the buffered image on the screen, inside the panel
+		g.drawImage(img, 0, 0, Color.WHITE, this);
+	}
+}
\ No newline at end of file
Index: branches/scout/projects/colonet/client/cgi/Makefile
===================================================================
--- branches/scout/projects/colonet/client/cgi/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/client/cgi/Makefile	(revision 1346)
@@ -0,0 +1,13 @@
+
+default: install
+
+install: 
+	@echo --- Compiling Java Application ---
+	javac *.java
+	cp *.class /tmp/
+	@echo --- Installing CGI Script ---
+	cp colonet.cgi /usr/lib/cgi-bin/
+	@echo --- Installing Web Access Files ---
+	cp index_iphone.xhtml /var/www/
+	cp colonet.js /var/www/
+	@echo --- Done ---
Index: branches/scout/projects/colonet/client/cgi/ColonetCGI.java
===================================================================
--- branches/scout/projects/colonet/client/cgi/ColonetCGI.java	(nonexistent)
+++ branches/scout/projects/colonet/client/cgi/ColonetCGI.java	(revision 1346)
@@ -0,0 +1,27 @@
+
+import java.io.*;
+import java.net.*;
+
+public class ColonetCGI {
+
+	public static void main (String [] args)
+			throws IOException, UnknownHostException, java.security.AccessControlException {
+		if (args.length < 1) {
+			System.out.println("No command specified. Terminating.");
+			return;
+		}
+		ColonetCGI ccgi = new ColonetCGI(args[0]);
+	}
+	
+	public ColonetCGI (String strCommand) 
+			throws IOException, UnknownHostException, java.security.AccessControlException {
+		System.out.println("Attempting to connect to server...");
+		ColonetCGIServerInterface ccsi = new ColonetCGIServerInterface(this);
+		ccsi.connect("128.2.99.176", "10123");
+		System.out.println("Sending data...");	
+		ccsi.sendData(ColonetCGIServerInterface.MOTOR2_SET + " 0 225", "200");
+		ccsi.sendData(ColonetCGIServerInterface.MOTOR1_SET + " 0 225", "200");
+		System.out.println("Sent data successfully.");	
+	}
+
+}
Index: branches/scout/projects/colonet/client/cgi/ColonetCGIServerInterface.java
===================================================================
--- branches/scout/projects/colonet/client/cgi/ColonetCGIServerInterface.java	(nonexistent)
+++ branches/scout/projects/colonet/client/cgi/ColonetCGIServerInterface.java	(revision 1346)
@@ -0,0 +1,200 @@
+/*
+* ColonetCGIServerInterface.java
+* Gregory Tress
+*/
+
+import java.net.*;
+import java.io.*;
+import javax.swing.JOptionPane;
+
+
+public class ColonetCGIServerInterface
+{
+/*	Old packet structure:
+
+		COMMAND PACKET STRUCTURE
+	1:	SEND_TO_ROBOT
+	2:	# of robot, or GLOBAL_DEST
+	3:	COLONET_COMMMAND
+	4:	message code (i.e. ORB_SET)
+	5:	any data, as many that fit in the packet
+
+	REQUEST PACKET STRUCTURE
+	1:	REQUEST_FROM_SERVER
+	2:	# of robot
+	3:	COLONET_REQUEST
+	4:	???
+
+	9/12/07 New server interface structure
+		Client will no longer send full robot packets to the server.
+		Commands will be defined as necessary.
+	*/
+
+	//General Colonet Interface
+	public static final String SEND_TO_ROBOT = "0";
+	public static final String REQUEST_FROM_SERVER = "1";
+	public static final String RESPONSE_TO_CLIENT_REQUEST = "2";
+	public static final String REQUEST_BOM_MATRIX = "144";
+	public static final String REQUEST_XBEE_IDS = "145";
+
+	public static final String COLONET_COMMAND = "13"; //0x0D
+	public static final String COLONET_REQUEST = "14"; //0x0E
+	public static final String CORONET_RESPONSE = "15"; //0x0F
+	public static final String GLOBAL_DEST = "200";
+	public static final String CLIENT_REQUEST_ROBOT_POSITIONS = "86";
+	public static final String CLIENT_ASSIGN_ROBOT_ID = "87";
+	public static final String MOVE_TO_ABSOLUTE_POSITION = "83"; //0x53
+
+	//Queue instructions
+	public static final String COLONET_QUEUE = "100";
+	public static final String QUEUE_UPDATE = "101";
+	public static final String QUEUE_ADD = "102";
+	public static final String QUEUE_REMOVE = "103";
+	public static final String QUEUE_REORDER = "104";
+
+	//Use BATTERY to request battery level
+	public static final String BATTERY = "56"; //0x38
+
+	//MOTORS
+	public static final String MOTORS_INIT = "23"; //0x17
+	public static final String MOTOR1_SET = "24"; //0x18
+	public static final String MOTOR2_SET = "25"; //0x19
+	public static final String MOTORS_OFF = "26"; //0x1A
+	public static final String MOVE = "27"; //0x1B
+	public static final String MOVE_AVOID = "28"; //0x1C
+
+	//BUZZER
+	public static final String BUZZER_INIT = "0"; //0x00
+	public static final String BUZZER_SET_VAL = "1"; //0x01
+	public static final String BUZZER_SET_FREQ = "2"; //0x02
+	public static final String BUZZER_CHIRP = "3"; //0x03
+	public static final String BUZZER_OFF = "4"; //0x04
+
+	//ORB
+	public static final String ORB_INIT = "12"; //0x0C
+	public static final String ORB_SET = "13"; //0x0D
+	public static final String ORB_SET_COLOR = "14"; //0x0E
+	public static final String ORB_DISABLE = "15"; //0x0F
+	public static final String ORB_ENABLE = "16"; //0x10
+	public static final String ORB_SET_DIO = "17"; //0x11
+	public static final String LED_INIT = "18"; //0x12
+	public static final String LED_USER = "19"; //0x13
+	public static final String ORB_SET_NUM_NS = "20"; //0x14
+	public static final String ORB_SET_NUM = "21"; //0x15
+	public static final String ORB_SEND = "22"; //0x16
+
+	ColonetCGI colonet;      //save reference to the entire applet locally
+	Socket socket;
+	OutputStreamWriter out;
+	BufferedReader reader;
+	//DataListener dataListener;
+
+	/*
+	* FUNCTION IMPLEMENTATIONS
+	*/
+
+	/**
+	* Constructs a new ColonetCGIServerInterface. When constructing a ColonetCGIServerInterface, a valid Colonet object
+	* reference must be provided to ensure that data is routed correctly.
+	*
+	* @param colonet The Colonet object to save locally. This reference cannot be changed once the
+	*		ColonetSreverInterface has been contsructed.
+	* @throws NullPointerException if colonet is null
+	*
+	*/
+	public ColonetCGIServerInterface (ColonetCGI colonet) {
+		this.colonet = colonet;
+	}
+
+	public boolean isReady () {
+		if (socket == null || out == null || reader == null)
+			return false;
+		if (!socket.isConnected() || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown())
+			return false;
+		return true;
+	}
+
+	public boolean isInputReady () {
+		try {
+			if (reader.ready()) return true;
+		} catch (Exception e) {
+			return false;
+		}
+		return false;
+	}
+
+	public String getLine () throws IOException {
+		return reader.readLine();
+	}
+
+	/**
+	 * Create socket connection to Colonet server.
+	 * If successful, start thread for listening for incoming data.
+	 */
+	public void connect (String strHost, String strPort) 
+			throws IOException, UnknownHostException, java.security.AccessControlException {
+		//make sure hostname and port are valid
+		if (strHost.equals("") || strPort.equals("")) {
+			throw new RuntimeException("Bad host or port");
+		}
+		int port = 0;
+		try {
+			port = Integer.parseInt(strPort);
+		} catch (Exception e) {
+			throw new RuntimeException("Bad port");
+		}
+
+		//make sure we aren't already connected.
+		if (socket != null && socket.isConnected()) {
+			return;
+		}
+
+		socket = new Socket(strHost, port);
+		if (socket == null)
+			throw new RuntimeException("Connection dropped!");
+		out = new OutputStreamWriter(socket.getOutputStream());
+		reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+
+	}
+
+	public void disconnect () {
+		try {
+			if (reader != null) {
+				reader.close();
+			}
+			if (out != null) {
+				out.close();
+			}
+		} catch (IOException e) {
+		}
+	}
+
+	private void sendString (String s) throws IOException {
+		//send packet
+		try {
+			Thread.sleep(50);	 //pause to be safe
+			out.write(s);
+			out.flush();
+			//log.append("Sent: " + s + "\n");
+		} catch (InterruptedException e) {
+		}
+	}
+
+	public void sendData (String s, String robotNumber) throws IOException {
+		//create packet
+		String packet = "";
+		packet += ColonetCGIServerInterface.SEND_TO_ROBOT;
+		if (robotNumber != null)
+			packet += " " + robotNumber;
+		packet += " " + ColonetCGIServerInterface.COLONET_COMMAND;
+		packet += " " + s;	//add	 the command code here
+		packet += "\n";
+		sendString(packet);
+	}
+
+
+
+
+
+
+}
Index: branches/scout/projects/colonet/client/cgi/colonet.js
===================================================================
--- branches/scout/projects/colonet/client/cgi/colonet.js	(nonexistent)
+++ branches/scout/projects/colonet/client/cgi/colonet.js	(revision 1346)
@@ -0,0 +1,40 @@
+
+
+		var req;
+    
+    	function send (data) {
+    		document.getElementById("div1").firstChild.nodeValue = "Creating XMLHttpRequest Object ...";
+    		try {
+    			req = new XMLHttpRequest();
+    			req.onreadystatechange = stateChanged;
+    		} catch (e) {
+    			document.getElementById("div2").firstChild.nodeValue = "Failed";
+    			return;
+    		}
+    		
+    		document.getElementById("div2").firstChild.nodeValue = "Opening connection ...";
+    		try {
+    			req.open("GET", 
+"http://128.2.99.176/cgi-bin/colonet.cgi?command=" + data);
+    		} catch (e) {
+    			document.getElementById("div3").firstChild.nodeValue = "Failed";
+    			return;
+    		}
+    		
+    		document.getElementById("div3").firstChild.nodeValue = "Sending Data ...";
+    		try {
+				req.send(null);
+    		} catch (e) {
+    			document.getElementById("div4").firstChild.nodeValue = "Failed";
+    			return;
+    		}
+    		
+    		document.getElementById("div4").firstChild.nodeValue = "Done!";
+    		return;
+    	}
+    	
+    	
+    	function stateChanged () {
+    		document.getElementById("div5").firstChild.nodeValue = "State: " + req.readyState;
+    		document.getElementById("div6").innerHTML = req.responseText;
+    	}

Property changes on: branches/scout/projects/colonet/client/cgi/colonet.js
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/colonet/client/cgi/index_iphone.xhtml
===================================================================
--- branches/scout/projects/colonet/client/cgi/index_iphone.xhtml	(nonexistent)
+++ branches/scout/projects/colonet/client/cgi/index_iphone.xhtml	(revision 1346)
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+      
+  <head>
+    <title>XMLHttpRequest</title>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+  </head>
+  
+  <body>
+  
+  <script type="text/javascript" src="colonet.js" />
+  
+  <div>
+  <form name="inputform" action="">
+  <br />
+  <h3>
+  <input type="button" onclick="send('forward');" value="     Go     " /> <br />
+  <input type="button" onclick="send('stop');" value="   Stop   " /> <br />
+  </h3>
+  <br />
+  </form>
+  </div>
+  <div id="div1">
+  Idle.<br />
+  </div>
+  <div id="div2">
+  <br />
+  </div>
+  <div id="div3">
+  <br />
+  </div>
+  <div id="div4">
+  <br />
+  </div>
+  <div id="div5">
+  <br />
+  </div>
+  <div id="div6">
+  <br />
+  </div>
+  
+  
+  </body>
+</html>

Property changes on: branches/scout/projects/colonet/client/cgi/index_iphone.xhtml
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/colonet/client/cgi/colonet.cgi
===================================================================
--- branches/scout/projects/colonet/client/cgi/colonet.cgi	(nonexistent)
+++ branches/scout/projects/colonet/client/cgi/colonet.cgi	(revision 1346)
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+
+@values = split(/&/,$ENV{'QUERY_STRING'});
+foreach $i (@values) {
+	($varname, $mydata) = split(/=/,$i);
+	if ($varname eq "command") {
+		my $execstr = "cd /tmp; java ColonetCGI " . $mydata;
+		exec($execstr);
+	}
+}
+
+

Property changes on: branches/scout/projects/colonet/client/cgi/colonet.cgi
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/scout/projects/colonet/client/colonetkey
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/projects/colonet/client/colonetkey
===================================================================
--- branches/scout/projects/colonet/client/colonetkey	(nonexistent)
+++ branches/scout/projects/colonet/client/colonetkey	(revision 1346)

Property changes on: branches/scout/projects/colonet/client/colonetkey
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/projects/colonet/client/TaskAddWindow.java
===================================================================
--- branches/scout/projects/colonet/client/TaskAddWindow.java	(nonexistent)
+++ branches/scout/projects/colonet/client/TaskAddWindow.java	(revision 1346)
@@ -0,0 +1,120 @@
+
+import javax.swing.*;
+import javax.swing.event.*;
+import java.awt.*;
+import java.awt.event.*;
+
+/**
+* TaskAddWindow class
+* A window that provides a simple way to add tasks to a task queue.
+*/
+public class TaskAddWindow extends JFrame implements ActionListener, ListSelectionListener {
+	JPanel panelButtons;
+	JPanel panelParameters;
+	JPanel panelSouth;
+	JPanel panelSelection;
+	JButton btnSubmit;
+	JButton btnCancel;
+	DefaultListModel availableListModel;
+	JList availableList;
+	JScrollPane spAvailableTasks;
+	JTextArea txtDescription;
+	JTextField txtParameters;
+
+	public TaskAddWindow () {
+		super("Add a Task");
+		super.setSize(500,500);
+		super.setLayout(new BorderLayout());
+
+		// set up buttons
+		btnSubmit = new JButton("Submit");
+		btnCancel = new JButton("Cancel");
+		panelButtons = new JPanel();
+		panelButtons.setLayout(new FlowLayout());
+		panelButtons.add(btnSubmit);
+		panelButtons.add(btnCancel);
+		this.getRootPane().setDefaultButton(btnSubmit);
+
+		// set up task list
+		availableListModel = new DefaultListModel();
+		availableListModel.addElement("Map the Environment");
+		availableListModel.addElement("Clean Up Chemical Spill");
+		availableListModel.addElement("Grow Plants");
+		availableListModel.addElement("Save the Cheerleader");
+		availableListModel.addElement("Save the World");
+		availableList = new JList(availableListModel);
+		availableList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		availableList.setSelectedIndex(-1);
+		spAvailableTasks = new JScrollPane(availableList);
+		spAvailableTasks.setBorder(BorderFactory.createTitledBorder("Select A Task"));
+		txtDescription = new JTextArea();
+		txtDescription.setEditable(false);
+		txtDescription.setLineWrap(true);
+		txtDescription.setWrapStyleWord(true);
+		txtDescription.setBorder(BorderFactory.createTitledBorder("Description"));
+
+		//set up parameter area
+		panelParameters = new JPanel();
+		panelParameters.setLayout(new BorderLayout());
+		txtParameters = new JTextField();
+		panelParameters.add(new JLabel("Optional parameters for this task: "), BorderLayout.WEST);
+		panelParameters.add(txtParameters);
+
+		// assemble objects
+		panelSelection = new JPanel();
+		panelSelection.setLayout(new GridLayout(1,2));
+		panelSelection.add(spAvailableTasks);
+		panelSelection.add(txtDescription);
+
+		panelSouth = new JPanel();
+		panelSouth.setLayout(new GridLayout(2,1));
+		panelSouth.add(panelParameters);
+		panelSouth.add(panelButtons);
+
+		this.getContentPane().add(panelSouth, BorderLayout.SOUTH);
+		this.getContentPane().add(panelSelection, BorderLayout.CENTER);
+		this.setLocationRelativeTo(null);
+
+		// add listeners here
+		availableList.addListSelectionListener(this);
+		btnSubmit.addActionListener(this);
+		btnCancel.addActionListener(this);
+	}
+
+	public void prompt () {
+		this.setVisible(true);
+	}
+
+	private String getDescription (int index) {
+		if (index < 0)
+			return "";
+		switch (index) {
+			case 0: return "SLAM and junk";
+			case 1: return "I'm not sure this works";
+			case 2: return "Push them into the light";
+			case 3: return "...";
+			case 4: return "...";
+
+			default: return "Task not recognized";
+		}
+	}
+
+	public void actionPerformed (ActionEvent e) {
+		Object source = e.getSource();
+		if (source == btnSubmit) {
+			txtParameters.setText(txtParameters.getText().trim());
+
+
+			this.setVisible(false);
+		} else if (source == btnCancel) {
+			this.setVisible(false);
+		}
+	}
+
+	public void valueChanged (ListSelectionEvent e) {
+		int index = availableList.getSelectedIndex();
+		if (index >= 0)
+			txtDescription.setText(getDescription(index));
+	}
+
+}
Index: branches/scout/projects/colonet/client/index.xhtml
===================================================================
--- branches/scout/projects/colonet/client/index.xhtml	(nonexistent)
+++ branches/scout/projects/colonet/client/index.xhtml	(revision 1346)
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
+  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <title>Colony Control Applet - Carnegie Mellon Robotics Club</title>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+    <link rel="stylesheet" type="text/css" href="colonetstyle.css" />
+  </head>
+
+  <body>
+
+    <div class="top">
+      <h3>Colonet</h3>
+      <img src="http://roboclub8.frc.ri.cmu.edu/mainwiki/roboclublogo.png" alt="RoboClub Logo" />
+    </div>
+
+    <div class="app">
+      <p>
+	<object class = "applet"
+	   archive = "Colonet.jar"
+	   type = "application/x-java-applet"
+	   width = "950"
+	   height = "550"
+	   codebase = "."
+	   codetype = "application/x-java-applet"
+	   name = "Colonet"
+	   title = "Colonet" >
+	  <param name="type" value="application/x-java-applet" /> 
+	  <param name = "code" value = "Colonet.class" />
+	  <param name = "cache_option" value = "No" />
+	</object>
+	<br />
+	Requires Java 5.
+	<br />
+      </p>
+    </div>
+
+    <div class="bottom">
+      <p><b>Colony Project Home page:</b>&nbsp;<a href="http://www.robotcolony.org/">www.robotcolony.org</a></p>
+
+      <p><b>Validator:</b><br />
+	<a href="http://validator.w3.org/check?uri=referer">
+	  <img src="http://www.w3.org/Icons/valid-xhtml11-blue"
+	       alt="Valid XHTML 1.0 Transitional"
+	       height="31"
+	       width="88"
+	       />
+	</a>
+	<br />
+      </p>
+
+    </div>
+
+  </body>
+</html>
Index: branches/scout/projects/colonet/client/colonetstyle.css
===================================================================
--- branches/scout/projects/colonet/client/colonetstyle.css	(nonexistent)
+++ branches/scout/projects/colonet/client/colonetstyle.css	(revision 1346)
@@ -0,0 +1,45 @@
+/* Colonet Applet Stylesheet */
+/* Gregory Tress */
+
+div
+{
+	background-color: #A00016;
+	color: white;
+	font-family: verdana, arial, helvetica, sans-serif;
+	padding: 2px 2px 2px 2px;
+}
+
+/* Top bar */
+div.top
+{
+	font-size: 14pt;
+}
+div.top img
+{
+	position: absolute;
+	top: 10px;
+	right: 10px;
+}
+
+/* The Applet */
+div.app
+{
+	background-color: white;
+	color: black;
+}
+
+object.applet
+{
+    
+}
+
+/* Bottom bar */
+div.bottom
+{
+	font-size: 12pt;
+}
+div.bottom a
+{
+	color: #DDFFFF;
+}
+
Index: branches/scout/projects/colonet/common/colonet_defs.h
===================================================================
--- branches/scout/projects/colonet/common/colonet_defs.h	(nonexistent)
+++ branches/scout/projects/colonet/common/colonet_defs.h	(revision 1346)
@@ -0,0 +1,178 @@
+/* Eugene Marinelli, Fan
+ * 10/27/06
+ *
+ * Colonet Definitions - common definitions and structs used in all colonet
+ * applications
+ */
+
+#ifndef COLONET_DEFS_H_
+#define COLONET_DEFS_H_
+
+// PacketGroup id for wireless library.
+#define COLONET_PACKET_GROUP_ID 8
+#define COLONET_RESPONSE_PACKET_FRAME_ID COLONET_PACKET_GROUP_ID
+
+//Colonet Client commands
+//TODO: renamed these to end in LENGTH
+#define MAX_COMMAND_LEN 128
+#define MAX_RESPONSE_LEN 1024
+
+typedef enum {SEND_TO_ROBOT = 0, REQUEST_FROM_SERVER = 1, RESPONSE_TO_CLIENT_REQUEST = 2} ColonetClientMessageType;
+typedef enum {COLONET_COMMAND = 13, COLONET_REQUEST = 14, COLONET_RESPONSE = 15} ColonetRobotMessageType;
+
+//Packet properties
+#define PACKET_DATA_LEN 16
+
+#define WL_DEFAULT_PAN 3332
+
+#define SERIAL_PORT "/dev/ttyS0"
+#define USB_PORT "/dev/ttyUSB0"
+
+// Message dests
+#define GLOBAL_DEST 200
+#define COLONET_SERVER_RESPONSE_ADDR 201
+
+#define USER_DEFINED_MSG_ID_START 0xF0
+#define USER_DEFINED_MSG_ID_END 0xFF
+#define USER_DEFINED_MSG_TOTAL 0x0F
+
+/* This is the packet structure of the data buffer sent from the colonet
+ * wireless library to the robots and from the robots to the colonet wireless
+ * library. */
+typedef struct {
+  short client_id; // ID number of the client sending the packet. Size of short is common to robots and server.
+  unsigned char msg_code; // Specific instruction for the robot -- see below.
+  unsigned char data[PACKET_DATA_LEN];
+} ColonetRobotServerPacket;
+
+/* Message codes */
+//BUZZER
+#define BUZZER_INIT 0x00
+#define BUZZER_SET_VAL 0x01
+#define BUZZER_SET_FREQ 0x02
+#define BUZZER_CHIRP 0x03
+#define BUZZER_OFF 0x04
+
+//LCD
+#define LCD_INIT 0x05
+#define LCD_CLEAR_SCREEN 0x06
+#define LCD_PUTBYTE 0x07
+#define LCD_PUTCHAR 0x08
+#define LCD_PUTSTR 0x09
+#define LCD_GOTOXY 0x0A
+#define LCD_PUTINT 0x0B
+
+//ORB
+#define ORB_INIT 0x0C
+#define ORB_SET 0x0D
+#define ORB_SET_COLOR 0x0E
+#define ORB_DISABLE 0x0F
+#define ORB_ENABLE 0x10
+#define ORB_SET_DIO 0x11
+#define LED_INIT 0x12
+#define LED_USER 0x13
+#define ORB_SET_NUM_NS 0x14
+#define ORB_SET_NUM 0x15
+#define ORB_SEND 0x16
+
+//MOTORS
+#define MOTORS_INIT 0x17
+#define MOTOR1_SET 0x18
+#define MOTOR2_SET 0x19
+#define MOTORS_OFF 0x1A
+#define MOVE 0x1B
+#define MOVE_AVOID 0x1C
+
+//SHARP
+#define READ_DISTANCE 0x24
+#define LINEARIZE_DISTANCE 0x25
+#define LOG_DISTANCE 0x26
+#define ENABLE_IR 0x27
+#define DISABLE_IR 0x28
+
+//SERIAL
+#define XBEE_INIT 0x29
+#define XBEE_PUTC 0x2A
+#define XBEE_GETC 0x2B
+
+#define USB_INIT 0x2D
+#define USB_PUTC 0x2E
+#define USB_GETC 0x2F
+
+
+
+//DELAY_MS
+#define DELAY_MS 0x31
+
+//ANALOG
+#define ANALOG_INIT 0x32
+#define SET_ADC_MUX 0x33
+#define ENABLE_ANALOG 0x34
+#define CALL_ANALOG8 0x35
+#define CALL_ANALOG10 0x36
+#define WHEEL 0x37
+#define BATTERY 0x38
+
+//BOM
+#define GETMAXBOM 0x39
+#define BOM_ON 0x3A
+#define BOM_OFF 0x3B
+#define OUTPUT_HIGH 0x3C
+#define OUTPUT_LOW 0x3D
+
+//DIO
+#define DIGITAL_INPUT 0x3E
+#define DIGITAL_OUTPUT 0x3F
+#define BUTTON1_READ 0x41
+#define BUTTON1_WAIT 0x42
+#define BUTTON1_WAIT_LED 0x43
+#define BUTTON2_READ 0x44
+#define BUTTON2_WAIT 0x45
+#define BUTTON2_WAIT_LED 0x46
+
+//WL
+#define WL_INIT 0x47
+#define PARSE_BUFFER 0x48
+#define WL_SEND 0x49
+
+//BUMPER
+#define DETECT_BUMP 0x50
+
+//Other
+#define PRINTF 0x51
+#define KILL_ROBOT 0x52
+
+#define MOVE_TO_ABSOLUTE_POSITION 0x53
+#define ROBOT_REQUEST_POSITION_FROM_SERVER 0x54
+#define SERVER_REPORT_POSITION_TO_ROBOT 0x55
+
+#define CLIENT_REQUEST_ROBOT_POSITIONS 0x56
+#define CLIENT_ASSIGN_ROBOT_ID 0x57
+
+#define SERVER_REPORT_ROBOT_LOST 0x58
+
+#define CLIENT_SET_VIRTUAL_WALL 0x59
+
+#define SERVER_REPORT_VIRTUAL_WALL_UPPER 0x5A
+#define SERVER_REPORT_VIRTUAL_WALL_LOWER 0x5B
+
+#define SERVER_CLEAR_VIRTUAL_WALL 0x5C
+#define ROBOT_REPORT_ARRIVED_AT_POSITION 0x5D
+
+#define RECHARGE 0x60
+
+///////////////////////////
+//Colonet specific commands
+//////////////////////////
+
+#define REQUEST_BOM_MATRIX 0x90
+//request: REQUEST_FROM_SERVER REQUEST_BOM_MATRIX
+//response: RESPONSE_TO_CLIENT_REQUEST REQUEST_BOM_MATRIX <numRobots> <row by row, values separated by spaces>
+// if you don't know a value in the matrix, put -1 in there
+
+#define REQUEST_XBEE_IDS 0x91
+//request: REQUEST_FROM_SERVER REQUEST_XBEE_IDS
+//response: RESPONSE_TO_CLIENT_REQUEST REQUEST_XBEE_IDS <numRobots> <id0> <id1> ... <idNumRobots>
+
+
+#endif
Index: branches/scout/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c
===================================================================
--- branches/scout/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c	(revision 1346)
@@ -0,0 +1,570 @@
+/** @file colonet.c
+ * @brief Colonet library for DRAGONFLY colony robots
+ *
+ * @author Eugene Marinelli
+ * @date 10/10/07
+ *
+ * @bug Handler registration not tested
+ * @bug Request reponding not implemented - only accepts commands.
+ */
+
+#include <assert.h>
+#include <battery.h>
+#include <colonet_defs.h>
+#include <colonet_dragonfly.h>
+#include <dragonfly_lib.h>
+#include <math.h>
+#include <string.h>
+#include <wireless.h>
+
+#define TARGET_POSITION_STOP_DISTANCE_THRESHOLD (550)
+
+typedef struct {
+  unsigned char msgId; //is this necessary?
+  void (*handler)(void);
+} UserHandler;
+
+typedef struct {
+  int up_x;
+  int up_y;
+  int low_x;
+  int low_y;
+} VirtualWall;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+static volatile unsigned robot_x, robot_y;
+static volatile unsigned last_x, last_y;
+static volatile unsigned target_x, target_y;
+static volatile int updated_robot_pos_ready;
+static volatile int robot_lost; //set to 1 if robot's position is not known by the server, else 0.
+static volatile VirtualWall virtual_wall;
+
+typedef enum {MOVING, MOVING_TO_POSITION, RECHARGING, NO_COMMAND} ColonetRobotCommandState;
+static volatile ColonetRobotCommandState robot_state;
+
+static volatile int virtual_wall_up_available, virtual_wall_low_available;
+
+#define ERROR_MAG_TO_MOTOR_DIFFENTIAL_CONST (1)
+
+/* Internal function prototypes */
+static unsigned two_bytes_to_int(unsigned char high, unsigned char low);
+static void colonet_handle_receive(char type, int source, unsigned char* packet, int length);
+static void move_to_position_routine(unsigned x, unsigned y);
+static int dist_squared(int x1, int y1, int x2, int y2);
+static void move_routine(void);
+
+static PacketGroupHandler colonet_pgh;
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+static unsigned int two_bytes_to_int(unsigned char high, unsigned char low) {
+  return (high<<8) | low;
+}
+
+static int virtual_wall_available() {
+  return virtual_wall_up_available && virtual_wall_low_available;
+}
+
+/* Public functions */
+int colonet_init() {
+  colonet_pgh.groupCode = COLONET_PACKET_GROUP_ID;
+  colonet_pgh.timeout_handler = NULL;
+  colonet_pgh.handle_response = NULL;
+  colonet_pgh.handle_receive = colonet_handle_receive;
+  colonet_pgh.unregister = NULL;
+
+  // TODO this should return an error if wl_init has not been called yet.
+  wl_register_packet_group(&colonet_pgh);
+
+  robot_x = last_x = 0;
+  robot_y = last_y = 0;
+  updated_robot_pos_ready = 0;
+  robot_lost = 1;
+
+  virtual_wall_up_available = 0;
+  virtual_wall_low_available = 0;
+
+  virtual_wall.up_x = 0;
+  virtual_wall.up_y = 0;
+  virtual_wall.low_x = 0;
+  virtual_wall.low_y = 0;
+
+  robot_state = NO_COMMAND;
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void)) {
+  if(msgId < USER_DEFINED_MSG_ID_START  /* || msgId > USER_DEFINED_MSG_ID_END */){
+    return -1;
+  }
+
+  /* Register this function in the array */
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+void get_absolute_position(int* x, int* y) {
+  *x = robot_x;
+  *y = robot_y;
+}
+
+static void report_arrived() {
+  //usb_puts("requesting_abs_position\n");
+  ColonetRobotServerPacket pkt;
+  pkt.client_id = -1; //global
+  pkt.msg_code = ROBOT_REPORT_ARRIVED_AT_POSITION;
+  wl_send_global_packet(colonet_pgh.groupCode, 0, (char*)&pkt, sizeof(ColonetRobotServerPacket), 0);
+}
+
+void request_abs_position() {
+  //usb_puts("requesting_abs_position\n");
+  ColonetRobotServerPacket pkt;
+  pkt.client_id = -1; //global
+  pkt.msg_code = ROBOT_REQUEST_POSITION_FROM_SERVER;
+  wl_send_global_packet(colonet_pgh.groupCode, 0, (char*)&pkt, sizeof(ColonetRobotServerPacket), 0);
+}
+
+static int dist_squared(int x1, int y1, int x2, int y2) {
+  int dx = x1 - x2;
+  int dy = y1 - y2;
+  return dx*dx + dy*dy;
+}
+
+/** Differential is the intended left motor speed - right motor speed. */
+static void set_motors_with_differential(int differential) {
+  int ml, mr;
+
+  if (differential >= 0) {
+    /* Going left or straight. */
+    ml = 200;
+    mr = ml - differential;
+  } else {
+    /* Turning right. */
+    mr = 200;
+    ml = mr + differential;
+  }
+
+  int motor1_dir = mr < 0 ? 0 : 1;
+  int motor2_dir = ml < 0 ? 0 : 1;
+
+  motor1_set(motor1_dir, mr);
+  motor2_set(motor2_dir, ml);
+}
+
+static int get_motor_differential(int e_x, int e_y, int v_x, int v_y) {
+  //  char buf[80];
+  //  sprintf(buf,"ex:%d ey:%d vx:%d vy:%d\n", e_x, e_y, v_x, v_y);
+  //  usb_puts(buf);
+
+  return 250;
+
+  /*
+  long e_mag = sqrt_100_approx(e_x*e_x + e_y*e_y);
+  long v_mag = sqrt_100_approx(v_x*v_x + v_y*v_y);
+  long e_norm_x = (1000 * e_x) / e_mag;
+  long e_norm_y = (1000 * e_y) / e_mag;
+  long v_norm_x = (1000 * v_x) / v_mag;
+  long v_norm_y = (1000 * v_y) / v_mag;
+  long e_dot_v = e_norm_x*v_norm_x + e_norm_y*v_norm_y;
+  */
+
+
+}
+
+static int inside_virtual_wall(int x, int y) {
+  if (virtual_wall_available()) {
+    if (robot_x < virtual_wall.up_x || robot_x > virtual_wall.low_x || robot_y < virtual_wall.up_y
+        || robot_y > virtual_wall.low_y) {
+      return 0;
+    } else {
+      return 1;
+    }
+  } else {
+    return 1;
+  }
+}
+
+
+/**
+ * Main loop which responds to commands.
+ */
+void colonet_run(void (*step)(void)) {
+  char buf[80];
+
+  while (1) {
+    wl_do();
+    request_abs_position();
+    step();
+
+    switch (robot_state) {
+    case NO_COMMAND:
+      break;
+
+    case MOVING:
+      if (robot_lost) {
+        motors_off();
+        robot_state = NO_COMMAND;
+      } else {
+        if (updated_robot_pos_ready) {
+          if (!inside_virtual_wall(robot_x, robot_y)) {
+            usb_puts("outside of boundary\n");
+            motors_off();
+            robot_state = NO_COMMAND;
+          }
+
+          updated_robot_pos_ready = 0;
+        }
+      }
+      break;
+
+    case MOVING_TO_POSITION:
+      usb_puts("move to absolute position\n");
+
+      if (robot_lost) {
+        motors_off();
+        robot_state = NO_COMMAND;
+      } else {
+        if (updated_robot_pos_ready) {
+          updated_robot_pos_ready = 0;
+
+          if (!inside_virtual_wall(robot_x, robot_y)) {
+            usb_puts("outside of boundary\n");
+            motors_off();
+            robot_state = NO_COMMAND;
+          } else {
+            int dist = 0;
+            if ((dist = dist_squared(robot_x, robot_y, target_x, target_y)) < TARGET_POSITION_STOP_DISTANCE_THRESHOLD) {
+              // Reached destination.
+              motors_off();
+              robot_state = NO_COMMAND;
+
+              // Notify server that robot arrived.
+              report_arrived();
+            } else {
+              // e is the error vector (where we want to go)
+              //char buf[80];
+              //		sprintf(buf, "target_x:%d target_y:%d robot_x:%d robot_y:%d\n", target_x, target_y, robot_x, robot_y);
+              //		usb_puts(buf);
+
+              int e_x = (int)target_x - (int)robot_x;
+              int e_y = (int)target_y - (int)robot_y;
+
+              //		sprintf(buf, "e: (x:%d,y:%d)\n", e_x, e_y);
+              //		usb_puts(buf);
+
+              // v is the velocity vector (where we just went)
+              int v_x = (int)robot_x - (int)last_x;
+              int v_y = (int)robot_y - (int)last_y;
+
+              //sprintf(buf, "v: (x:%d,y:%d)\n", v_x, v_y);
+              //usb_puts(buf);
+
+              if (abs(v_x) < 2 && abs(v_x) < 2) {
+                // if we didn't move since the last check, just go forward.
+                motor1_set(1, 180);
+                motor2_set(1, 180);
+              } else {
+                int e_dot_v = e_x * v_x + e_y * v_y;
+
+                // move according to algortihm
+                int e_mag = e_x*e_x + e_y*e_y;
+                //       int motor_differential = 180;//e_mag >> 7;
+                int motor_differential = get_motor_differential(e_x, e_y, v_x, v_y);
+
+                // p is perpendicular to v, directed to the "left" of the robot.
+                int p_x = v_y;
+                int p_y = -v_x;
+                int dot_product_pe = p_x * e_x + p_y * e_y;
+
+                // if the dot product of p and e is negative, we should turn right. otherwise turn left.
+                if (dot_product_pe < 0) {
+                  motor_differential = -motor_differential;
+                }
+
+                set_motors_with_differential(motor_differential);
+              }
+            }
+          }
+        }
+      }
+      break;
+      
+    case RECHARGING:
+      orb_set_color(PURPLE);
+      break;
+        
+      
+    }
+  }
+}
+
+
+/* Private functions */
+
+/** @brief Handles colonet packets.  Should be called by parse_buffer
+ * when it is determined that a colonet message has been received.
+ *
+ * @param robot_id The robot id
+ * @param pkt_buf The packet buffer (e.g. wl_buf)
+ *
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+static void colonet_handle_receive(char type, int wl_source, unsigned char* packet, int length) {
+  length = length;
+  wl_source = wl_source;
+
+  ColonetRobotServerPacket* pkt = (ColonetRobotServerPacket*)packet;
+  unsigned char* args; //up to 7 char args
+  unsigned int_args[3]; //up to 3 int (2-byte) args
+  char buf[40];
+
+
+  /*  
+  usb_puts("Packet received.\n");
+
+  sprintf(buf, "length=%d\n", length);
+
+  int i;
+  for (i = 0; i < length; i++) {
+    sprintf(buf, "%d: %d ", i, packet[i]);
+    usb_puts(buf);
+ }
+  usb_puts("\n");
+  */
+
+  //sprintf(buf, "received message from client_id=%d of length %d\n", pkt->client_id, length);
+  //usb_puts(buf);
+
+  ///assert(length == sizeof(ColonetRobotServerPacket));
+
+  /*
+  sprintf(buf, "client_id:%d, msg_code:%d\n", pkt.client_id, pkt.msg_code);
+  usb_puts(buf);*/
+
+  args = pkt->data;
+
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if (type == COLONET_REQUEST) {
+    //sprintf(buf, "received colonet request: pkt msgcode is %d\n", pkt->msg_code);
+    //usb_puts(buf);
+
+    switch (pkt->msg_code) {
+      //Sharp
+    case READ_DISTANCE:
+      break;
+
+      //Analog
+    case WHEEL:
+      break;
+
+    case BATTERY:
+      sprintf((char*)pkt->data, "%d", (int)battery8());
+      // NOTE: wl_send_robot_to_robot_global_packet does not work here!
+      wl_send_global_packet(COLONET_PACKET_GROUP_ID, 0, (char*)pkt, sizeof(ColonetRobotServerPacket), 0);
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+    case DIGITAL_INPUT:
+      break;
+    }
+  } else if (type == COLONET_COMMAND) {
+    // sprintf(buf, "colonet command ... pkt->msg_code=%d\n", pkt->msg_code);
+    // usb_puts(buf);
+
+/* TODO uncomment this stuff */
+/*     if (pkt.msg_code >= USER_DEFINED_MSG_ID_START && */
+/*         pkt.msg_code <= USER_DEFINED_MSG_ID_END) { */
+/*       if (user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler) { */
+/*         /\* Call the user's handler function if it the function's address */
+/*          * is non-zero (has been set) *\/ */
+/*         user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler(); */
+/*       } */
+/*     } */
+
+    switch (pkt->msg_code) {
+/*     default: */
+/*       printf("%s: Error - message code %d not implemented\n", __FUNCTION__, */
+/*              pkt.msg_code); */
+/*       break; */
+
+    case SERVER_REPORT_ROBOT_LOST:
+      last_x = robot_x;
+      last_y = robot_y;
+
+      robot_lost = 1;
+
+      usb_puts("lost\n");
+
+      motors_off();
+      break;
+
+    case SERVER_CLEAR_VIRTUAL_WALL:
+      virtual_wall_up_available = 0;
+      virtual_wall_low_available = 0;
+      break;
+
+    case SERVER_REPORT_VIRTUAL_WALL_UPPER:
+      virtual_wall.up_x = int_args[0];
+      virtual_wall.up_y = int_args[1];
+
+      virtual_wall_up_available = 1;
+
+      sprintf(buf, "%d %d\n", virtual_wall.up_x, virtual_wall.up_y);
+      usb_puts(buf);
+      break;
+
+    case SERVER_REPORT_VIRTUAL_WALL_LOWER:
+      virtual_wall.low_x = int_args[0];
+      virtual_wall.low_y = int_args[1];
+
+      sprintf(buf, "%d %d\n", virtual_wall.low_x, virtual_wall.low_y);
+      usb_puts(buf);
+
+      virtual_wall_low_available = 1;
+      break;
+
+    case SERVER_REPORT_POSITION_TO_ROBOT:
+      last_x = robot_x;
+      last_y = robot_y;
+      robot_x = (unsigned)int_args[0];
+      robot_y = (unsigned)int_args[1];
+
+      updated_robot_pos_ready = 1;
+      robot_lost = 0;
+
+      //      sprintf(buf, "pos is: (x:%d, y:%d)\n", robot_x, robot_y);
+      //usb_puts(buf);
+      break;
+
+    case MOVE_TO_ABSOLUTE_POSITION:
+			sprintf(buf, "move to abs (x:%u, y:%u)\n", (unsigned)int_args[0], (unsigned)int_args[1]);
+			usb_puts(buf);
+
+      target_x = (unsigned)int_args[0];
+      target_y = (unsigned)int_args[1];
+
+      robot_state = MOVING_TO_POSITION;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+
+      //Orb
+    case ORB_INIT:
+      orb_init();
+      break;
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+
+      //Motors
+    case MOTORS_INIT:
+      usb_puts("calling motors_init\n");
+      motors_init();
+      break;
+
+    case MOTORS_OFF:
+      robot_state = NO_COMMAND;
+
+      usb_puts("calling motors_off\n");
+      motors_off();
+      break;
+
+    case MOVE:
+      if (args[1] == 0 && args[3] == 0) {
+        motors_off();
+        robot_state = MOVING;
+
+        usb_puts("stopped\n");
+      } else {
+        /* format for move: left direction, left velocity, right direction, right velocity */
+        motor1_set(args[0], args[1]);
+        motor2_set(args[2], args[3]);
+
+        /* Loop and update position for virtual wall. */
+        robot_state = MOVING;
+      }
+      break;
+      
+    case RECHARGE:
+      robot_state = RECHARGING;
+      break;
+
+    case PRINTF:
+      usb_puts((char*)pkt->data);
+      break;
+
+    case KILL_ROBOT:
+      robot_state = NO_COMMAND;
+
+      motors_off();
+      buzzer_off();
+      exit(0); //kill the robot
+      break;
+    //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      //TODO: how do we really init the analog? this doesn't work:
+      //analog_init();
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+
+    //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    }
+  } else {
+    sprintf(buf, "%s: Error: Invalid colonet message type\n", __FUNCTION__);
+    usb_puts(buf);
+  }
+}
Index: branches/scout/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.h
===================================================================
--- branches/scout/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.h	(revision 1346)
@@ -0,0 +1,35 @@
+/** @file colonet.h
+ * @brief Colonet library for colony robots
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ */
+
+#ifndef COLONET_DRAGONFLY_H_
+#define COLONET_DRAGONFLY_H_
+
+#include <colonet_defs.h>
+
+/**
+ */
+int colonet_init(void);
+
+/**
+ */
+void colonet_run(void (*step)(void));
+
+/** @brief Registers a new colonet message handler function.  If a message
+ * with msgId is received, then handler will be called.
+ *
+ * @param msgId The message id of the handler to be registered.  Must be
+ * between USER_DEFINED_MSG_ID_START and USER_DEFINED_MSG_ID_END
+ * @param handler The function to be called if a colonet packet with message
+ * id msgId is received
+ *
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+void request_abs_position(void);
+void get_absolute_position(int* x, int* y);
+
+#endif
Index: branches/scout/projects/colonet/robot/colonet_dragonfly/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/colonet_dragonfly/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/colonet_dragonfly/Makefile	(revision 1346)
@@ -0,0 +1,24 @@
+COLONYROOT = ../../../../..
+
+# colonet_wireless_test makefile
+MCU = atmega128
+F_CPU = 8000000
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+CC = avr-gcc
+CFLAGS = -Wall -Wshadow -Wextra -g -mmcu=$(MCU) -lm
+INCLUDES = -I$(COLONYROOT)/code/projects/colonet/common -I$(COLONYROOT)/code/projects/libwireless/lib -I$(COLONYROOT)/code/lib/include/libdragonfly -I.
+
+all: colonet_dragonfly.o
+
+$(COLONYROOT)/code/projects/libwireless/lib/libwireless.a: $(COLONYROOT)/code/projects/libwireless/lib/*.c $(COLONYROOT)/code/projects/libwireless/lib/*.h
+	cd $(COLONYROOT)/code/projects/libwireless/lib; make
+
+colonet_dragonfly.o: $(COLONYROOT)/code/projects/libwireless/lib/libwireless.a colonet_dragonfly.c colonet_dragonfly.h
+	$(CC) $(CDEFS) $(CFLAGS) $(INCLUDES) -c colonet_dragonfly.c
+	ar rc libcolonet_dragonfly.a colonet_dragonfly.o
+	ranlib libcolonet_dragonfly.a
+	cp libcolonet_dragonfly.a $(COLONYROOT)/code/lib/bin/
+
+clean: 
+	rm -rf *.o *.a
Index: branches/scout/projects/colonet/robot/joystick/keyboard_slave/slave.c
===================================================================
--- branches/scout/projects/colonet/robot/joystick/keyboard_slave/slave.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/keyboard_slave/slave.c	(revision 1346)
@@ -0,0 +1,131 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include "../../../common/colonet_defs.h"
+
+#define WL_CNTL_GROUP 4
+
+#define FORWARD 0
+#define BACK    1
+#define LEFT    2
+#define RIGHT   3
+#define LEFT_CURVE 4
+#define RIGHT_CURVE 5
+#define STOP    6
+#define VEL_UP  7
+#define VEL_DOWN 8
+
+int state;
+int velocity;
+char buf[100];
+
+void packet_receive (char type, int source, unsigned char* packet, int length);
+void set_motion (void);
+
+PacketGroupHandler packetHandler = {WL_CNTL_GROUP, NULL, NULL, &packet_receive, NULL};
+
+int main (void) {
+    dragonfly_init(ALL_ON);
+    wl_init();
+    wl_set_channel(0xF);
+    wl_register_packet_group(&packetHandler);
+    orb_enable();
+    //orb_disable();
+    //orb_set(255,255,255);
+    orb_set_color(PURPLE);
+    //delay_ms(1000);
+    //while(1);
+
+    int xb_addr = xbee_get_address();
+
+    sprintf(buf, "beginning: xbee addr=%d\n", xb_addr);
+    usb_puts(buf);
+
+    velocity = 160;
+    state = STOP;
+    while (1) {
+        wl_do();
+    }
+ 
+    return 0;
+}
+
+void packet_receive (char type, int source, unsigned char* packet, int length) {
+    sprintf(buf, "received packet: %d\n", type);
+    usb_puts(buf);
+    switch (type) {
+        case FORWARD:
+            state = FORWARD;
+            break;
+        case BACK:
+            state = BACK;
+            break;
+        case LEFT:
+            state = LEFT;
+            break;
+        case RIGHT:
+            state = RIGHT;
+            break;
+        case LEFT_CURVE:
+            state = LEFT_CURVE;
+            break;
+        case RIGHT_CURVE:
+            state = RIGHT_CURVE;
+            break;
+        case STOP:
+            state = STOP;
+            break;
+        case VEL_UP:
+            if (velocity > 250)
+                velocity = 250;
+            else
+                velocity += 5;
+            break;
+        case VEL_DOWN:
+            velocity -= 5;
+            if (velocity < 150)
+                velocity = 150;
+            break;
+        default:
+            state = STOP;
+            break;
+    }
+    set_motion();
+}
+
+void set_motion (void) {
+    switch (state) {
+        case FORWARD:
+            orb_set_color(GREEN);
+            move(velocity, 0);
+            break;
+        case BACK:
+            orb_set_color(BLUE);
+            move(-velocity, 0);
+            break;
+        case LEFT:
+            orb_set_color(ORANGE);
+            motor1_set(0, velocity);
+            motor2_set(1, velocity);
+            break;
+        case RIGHT:
+            orb_set_color(YELLOW);
+            motor1_set(1, velocity);
+            motor2_set(0, velocity);
+            break;
+        case LEFT_CURVE:
+            orb_set_color(MAGENTA);
+            motor1_set(1, 150);
+            motor2_set(1, velocity);
+            break;
+        case RIGHT_CURVE:
+            orb_set_color(CYAN);
+            motor1_set(1, velocity);
+            motor2_set(1, 150);
+            break;
+        case STOP:
+            orb_set_color(RED);
+            move(0, 0);
+            break;
+    }
+}
+
Index: branches/scout/projects/colonet/robot/joystick/keyboard_slave/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/joystick/keyboard_slave/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/keyboard_slave/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../../../..
+endif
+
+# Target file name (without extension).
+TARGET = slave
+
+# Uncomment this to use the wireless library
+ USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/colonet/robot/joystick/discrete_control/joystick.c
===================================================================
--- branches/scout/projects/colonet/robot/joystick/discrete_control/joystick.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/discrete_control/joystick.c	(revision 1346)
@@ -0,0 +1,164 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_defs.h>
+#include "../../../common/colonet_defs.h"
+#include <serial.h>
+#include <stdio.h>
+
+/* Current state codes */
+#define TRIGGER_DOWN              1
+#define TRIGGER_UP               (1<<1)
+#define BUTTON_DOWN              (1<<2)
+#define BUTTON_UP                (1<<3)
+#define X_LEFT                   (1<<4)
+#define X_CENTER                 (1<<5)
+#define X_RIGHT                  (1<<6)
+#define Y_UP                     (1<<7)
+#define Y_CENTER                 (1<<8)
+#define Y_DOWN                   (1<<9)
+
+/* State change codes */
+#define TRIGGER_PRESSED           1
+#define TRIGGER_RELEASED          (1<<1)
+#define BUTTON_PRESSED            (1<<2)
+#define BUTTON_RELEASED           (1<<3)
+#define MOVED_LEFT                (1<<4)
+#define MOVED_X_CENTER            (1<<5)
+#define MOVED_RIGHT               (1<<6)
+#define MOVED_UP                  (1<<7)
+#define MOVED_Y_CENTER            (1<<8)
+#define MOVED_DOWN                (1<<9)
+
+int joystick_status (void);
+int joystick_change (int old, int new);
+
+int main (void) {
+  dragonfly_init(SERIAL | USB | COMM | ORB | ANALOG);
+	ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
+	xbee_init();
+
+  orb_set_color(BLUE);
+  
+  int change;
+  int last_status = 0; 
+  int cur_status = 0;
+  
+  while (1) {
+    last_status = cur_status;
+    cur_status = joystick_status();
+    change = joystick_change(last_status, cur_status);
+    
+    char buf[100];
+    sprintf(buf, "status: %d\n", cur_status);
+    usb_puts(buf);
+    
+    if (change & MOVED_UP) {
+      orb_set_color(GREEN);
+      xbee_putc('f');
+    }
+    if (change & MOVED_Y_CENTER) {
+      orb_set_color(RED);
+      xbee_putc('s');
+    }
+    if (change & MOVED_DOWN) {
+      orb_set_color(BLUE);
+      xbee_putc('b');
+    }
+    if (change & MOVED_LEFT) {
+      orb_set_color(ORANGE);
+      xbee_putc('l');
+    }
+    if (change & MOVED_X_CENTER) {
+      orb_set_color(RED);
+      xbee_putc('s');
+    }
+    if (change & MOVED_RIGHT) {
+      orb_set_color(YELLOW);
+      xbee_putc('r');
+    }
+    if (change & TRIGGER_PRESSED) {
+      orb_set_color(PURPLE);
+      xbee_putc('t');
+    }
+    if (change & BUTTON_PRESSED) {
+      orb_set_color(YELLOW);
+      xbee_putc('u');
+    }
+    delay_ms(100);
+  }
+  
+}
+
+int joystick_change (int old, int new) {
+  int trigger_change = 0;
+  int button_change = 0;
+  int x_change = 0;
+  int y_change = 0;
+  /* Check for trigger change */
+  if ((old & TRIGGER_DOWN) && (new & TRIGGER_UP))
+    trigger_change = TRIGGER_RELEASED;
+  if ((old & TRIGGER_UP) && (new & TRIGGER_DOWN)) 
+    trigger_change = TRIGGER_PRESSED;
+  /* Check for button change */
+  if ((old & BUTTON_DOWN) && (new & BUTTON_UP))
+    button_change = BUTTON_RELEASED;
+  if ((old & BUTTON_UP) && (new & BUTTON_DOWN))
+    button_change = BUTTON_PRESSED;
+  /* Check for X change */
+  if ((old & X_CENTER) && (new & X_RIGHT))
+    x_change = MOVED_RIGHT;
+  if ((old & X_CENTER) && (new & X_LEFT))
+    x_change = MOVED_LEFT;
+  if (!(old & X_CENTER) && (new & X_CENTER))
+    x_change = MOVED_X_CENTER;
+  /* Check for Y change */
+  if ((old & Y_CENTER) && (new & Y_UP))
+    y_change = MOVED_UP;
+  if ((old & Y_CENTER) && (new & Y_DOWN))
+    y_change = MOVED_DOWN;
+  if (!(old & Y_CENTER) && (new & Y_CENTER))
+    y_change = MOVED_Y_CENTER;
+  return trigger_change | button_change | x_change | y_change;
+}
+
+/**
+ * Get the current status of the joystick.
+ * This includes the X and Y axes and the buttons.
+ */
+int joystick_status (void) {
+	int trigger_status = 0;
+	int button_status = 0;
+	int x_status = 0; 
+	int y_status = 0;
+	int xval, yval;
+    
+  if (analog_get8(AN0) > 200)
+    trigger_status = TRIGGER_DOWN;
+  else
+    trigger_status = TRIGGER_UP;
+    
+  if (analog_get8(AN1) > 200)
+    button_status = BUTTON_DOWN;
+  else
+    button_status = BUTTON_UP;
+  
+  xval = analog_get8(AN4); // actually AN6, AN7 for connection
+  yval = analog_get8(AN5);
+  
+  if (xval > 150)
+    x_status = X_LEFT;
+  else if (xval < 75)
+    x_status = X_RIGHT;
+  else
+    x_status = X_CENTER;
+  
+  if (yval > 150)
+    y_status = Y_UP;
+  else if (yval < 75)
+    y_status = Y_DOWN;
+  else
+    y_status = Y_CENTER;
+
+
+  return trigger_status | button_status | x_status | y_status;
+}
Index: branches/scout/projects/colonet/robot/joystick/discrete_control/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/joystick/discrete_control/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/discrete_control/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../../../..
+endif
+
+# Target file name (without extension).
+TARGET = joystick
+
+# Uncomment this to use the wireless library
+ USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/colonet/robot/joystick/simple_slave/slave.c
===================================================================
--- branches/scout/projects/colonet/robot/joystick/simple_slave/slave.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/simple_slave/slave.c	(revision 1346)
@@ -0,0 +1,59 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include "../../../common/colonet_defs.h"
+
+
+
+int main (void) {
+  dragonfly_init(SERIAL | USB | COMM | ORB | ANALOG | MOTORS | BUZZER);
+	ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
+	xbee_init();
+	orb_set_color(PURPLE);
+  
+  char buf[100];
+  char c;
+  while (1) {
+    c = xbee_getc();
+    orb_set_color(GREEN);
+    sprintf(buf, "got char: %c\n", c);
+    usb_puts(buf);
+    
+    if (c == 'f') {
+      orb_set_color(GREEN);
+      motor1_set(1, 250);
+      motor2_set(1, 250);
+    }
+    if (c == 'b') {
+      orb_set_color(BLUE);
+      motor1_set(0, 250);
+      motor2_set(0, 250);
+    }
+    if (c == 'l') {
+      orb_set_color(ORANGE);
+      motor1_set(0, 250);
+      motor2_set(1, 250);
+    }
+    if (c == 'r') {
+      orb_set_color(YELLOW);
+      motor1_set(1, 250);
+      motor2_set(0, 250);
+    }
+    if (c == 's') {
+      orb_set_color(RED);
+      motor1_set(0, 0);
+      motor2_set(0, 0);
+    }
+    if (c == 't') {
+      orb_set_color(PURPLE);
+      buzzer_chirp(1000, C5);
+    }
+    if (c == 'u') {
+      orb_set_color(YELLOW);
+      buzzer_chirp(1000, A4);
+    }
+    
+    delay_ms(100);
+  }
+  
+}
+
Index: branches/scout/projects/colonet/robot/joystick/simple_slave/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/joystick/simple_slave/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/simple_slave/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../../../..
+endif
+
+# Target file name (without extension).
+TARGET = slave
+
+# Uncomment this to use the wireless library
+ USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/colonet/robot/joystick/continuous_control/tankcontrol.c
===================================================================
--- branches/scout/projects/colonet/robot/joystick/continuous_control/tankcontrol.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/continuous_control/tankcontrol.c	(revision 1346)
@@ -0,0 +1,56 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_defs.h>
+#include "../../../common/colonet_defs.h"
+#include <serial.h>
+#include <stdio.h>
+#include <xbee.h>
+
+#define YCENTER 90
+#define XCENTER 90
+
+int joystick_pos (void);
+
+int main (void) {
+  int cur_pos = 0;
+  int x_pos, y_pos;
+  int vx, vy;
+  char buf[100];
+
+  /* init stuff */
+  dragonfly_init(SERIAL | USB | COMM | ORB | ANALOG);
+	ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
+	xbee_init();
+  orb_set_color(BLUE);
+  
+  
+  while (1) {
+    cur_pos = joystick_pos();
+    x_pos = cur_pos & 0xFF;
+    y_pos = (cur_pos >> 8) & 0xFF;
+    
+    vx = (x_pos - XCENTER) * 10;
+    vy = (y_pos - YCENTER) * 10;
+    
+    sprintf(buf, "%d,%d\0", vx, vy);
+    usb_puts(buf);
+    usb_puts("\n");
+
+    delay_ms(200);
+  }
+  
+}
+
+
+/**
+ * Get the current X and Y axis readings.
+ */
+int joystick_pos (void) {
+	char x_pos, y_pos;
+	char buf[100];
+  
+  x_pos = (char) analog_get8(AN4);
+  y_pos = (char) analog_get8(AN5);
+
+  return x_pos | (y_pos << 8);
+}
Index: branches/scout/projects/colonet/robot/joystick/continuous_control/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/joystick/continuous_control/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/joystick/continuous_control/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../../../..
+endif
+
+# Target file name (without extension).
+TARGET = tankcontrol
+
+# Uncomment this to use the wireless library
+ USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/colonet/robot/robot_slave/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/robot_slave/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/robot_slave/Makefile	(revision 1346)
@@ -0,0 +1,507 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+#ifndef COLONYROOT
+COLONYROOT = ../../../../..
+#endif
+
+# Target file name (without extension).
+TARGET = robot_slave
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB1
+#AVRDUDE_PORT = /dev/ttyUSB0
+#AVRDUDE_PORT = /dev/ttyUSB2
+
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/projects/libwireless/lib -I$(COLONYROOT)/code/projects/colonet/common -I$(COLONYROOT)/code/projects/colonet/robot/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless -lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+$(COLONYROOT)/code/projects/colonet/robot/colonet_dragonfly/libcolonet_dragonfly.a: $(COLONYROOT)/code/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.c $(COLONYROOT)/code/projects/colonet/robot/colonet_dragonfly/colonet_dragonfly.h
+	cd $(COLONYROOT)/code/projects/colonet/robot/colonet_dragonfly; make
+
+build: $(COLONYROOT)/code/projects/colonet/robot/colonet_dragonfly/libcolonet_dragonfly.a elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
Index: branches/scout/projects/colonet/robot/robot_slave/robot_slave.c
===================================================================
--- branches/scout/projects/colonet/robot/robot_slave/robot_slave.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/robot_slave/robot_slave.c	(revision 1346)
@@ -0,0 +1,43 @@
+/**
+ * Eugene Marinelli
+ * 4/5/07
+ *
+ * Robot slave program -- just listens for packets
+ */
+
+#include <dragonfly_lib.h>
+#include <colonet_dragonfly.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <serial.h>
+#include <stdio.h>
+
+int behavior_status;
+
+static void step() {}
+
+int main(void) {
+  dragonfly_init(ALL_ON);
+
+  orb_set_color(RED);
+  usb_puts("calling wl_init\n");
+
+  wl_init();
+  colonet_init();
+
+  wl_token_ring_register();
+
+  if (wl_token_ring_join() == 0) {
+    orb_set_color(GREEN);
+
+    colonet_run(step);
+  } else {
+    orb_set_color(RED);
+  }
+
+  usb_puts("Failed to join token ring.\n");
+
+  while(1);
+
+  return 0;
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lights.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lights.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lights.h	(revision 1346)
@@ -0,0 +1,90 @@
+/*
+lights.h
+
+Contains function prototypes, variables, and pins used by the Orbs and PWM
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+Change Log:
+1.25.07 - KWoo
+	Removed FF+ code. Cleaned up and commented all variables.
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+/***** Port and Pin Definitions ****/
+
+//Orb Ports and Registers
+#define ORB_PORT	PORTC
+#define ORB_DDR		DDRC
+
+//Orb Pins
+#define ORB1_RED	0x00
+#define ORB1_GREEN	0x01
+#define ORB1_BLUE	0x02
+#define ORB2_RED 	0x04
+#define ORB2_GREEN 	0x05
+#define ORB2_BLUE 	0x06
+
+//ORB Colors
+#define RED       0xE0
+#define ORANGE    0xE4
+#define YELLOW    0xE8
+#define LIME      0x68
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0xA6 
+#define PURPLE    0x41
+#define MAGENTA   0xE3
+#define WHITE     0xFE
+#define ORB_OFF   0x00
+
+
+
+#include <avr/interrupt.h>
+
+
+#define ORB_RESET 1025
+
+#define ORBPORT PORTC
+
+#define ORBDDR DDRC
+
+#define ORBMASK 0x77
+
+
+
+/**** Function Prototypes ****/
+//Enables counter and PWM for use with the orb.
+void orb_init(void);
+
+//Sets both orbs to a specified color 
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led);
+//Sets Orb1 to the specified color
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led); 
+//Sets Orb2 to the specified color
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led);
+
+//Sets both orbs to the same color using a color name
+void orb_set_color(int col);
+//Sets orb1 to a color using a color name
+void orb1_set_color(int col);
+//Sets orb2 to a color using a color name
+void orb2_set_color(int col);
+
+//Turns off the PWM and thus the Orbs
+void orb_disable(void);
+//Turns on the PWM and thus the Orbs
+void orb_enable(void);
+
+//Runs through some colors
+void orb_tester(void);
+//Set just one channel
+void orb_set_angle(int servo, int angle);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/motor.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/motor.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/motor.c	(revision 1346)
@@ -0,0 +1,102 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	PORTA &= 0x0F;
+	DDRA |= 0xF0;
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
+	TCCR1B = _BV(WGM12) | _BV(CS10);
+//	TCCR1A = 0xA1;
+//	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+
+	if(direction == 0) {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x10)
+		{
+		  OCR1A = 0;
+		}	
+		PORTA = (PORTA & 0xCF) | 0x10;
+//		PORTD |= 0x10;
+//		PORTD &= 0xBF;
+	}
+	else {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x20)
+		{
+		  OCR1A = 0;
+		}
+		PORTA = (PORTA & 0xCF) | 0x20;
+//		PORTD |= 0x40;
+//		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+
+
+}
+
+void motor2_set(int direction, int speed) {
+
+	if(direction == 0) {
+//		PORTD |= 0x20;
+//		PORTD &= 0x7F;
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x80)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x80;
+	}
+	else {
+//		PORTD |= 0x80;
+//		PORTD &= 0xDF;
+
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x40)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x40;
+	}
+	OCR1BL = speed;
+
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonflyWirelessRelay.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonflyWirelessRelay.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonflyWirelessRelay.c	(revision 1346)
@@ -0,0 +1,40 @@
+/**
+ * Eugene Marinelli
+ * 4/5/07
+ *
+ * Robot wireless relay - dragonfly edition
+ */
+
+#include "dragonfly_lib.h"
+#include <stdio.h>
+#include <string.h>
+
+int main(void)
+{
+  orb_init();
+  orb_enable();
+  usb_init();
+  xbee_init();
+
+  // orb_set_color(GREEN);
+  orb_set_color(GREEN);
+
+  //UCSR0B |= _BV(RXCIE);
+  UCSR1B |= _BV(RXCIE);
+  sei();
+
+  while (1) {
+    xbee_putc(usb_getc());
+    orb_set_color(YELLOW);
+  }
+  
+  return 0;
+}
+
+ISR(USART1_RX_vect)
+{
+  //char buf = UDR1;
+
+  usb_putc(UDR1);
+  //orb_set_color(RED);
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/motor.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/motor.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/motor.h	(revision 1346)
@@ -0,0 +1,22 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off(void);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonfly_lib.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonfly_lib.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonfly_lib.c	(revision 1346)
@@ -0,0 +1,729 @@
+#include <dragonfly_lib.h>
+
+/* init_dragonfly - Initializes functions based on configuration parameters
+   examples:
+
+   init_dragonfly (0, 0, 0); - just initialize the digital IO (buttons, potentiometer)
+
+   init_dragonfly (ANALOG | SERIAL | BUZZER, C0_C1_ANALOG, BAUD115200); 
+   Initialize ADC and set C0 and C1 as analog inputs.  Initialize serial and set baud rate
+   to 115200 bps.  Initialize the buzzer.
+   
+   init_dragonfly (MOTORS | ORB, 0, 0);
+   Initialize motor driving and the color fading abilities of the ORB. */
+   
+void dragonfly_init(int config) 
+{
+	// Set directionality of various IO pins
+	DDRG &= ~(_BV(PING0)|_BV(PING1));
+	PORTG |= _BV(PING0)|_BV(PING1);
+	
+	if(config & ANALOG) {
+		analog_init();
+	}
+	
+	if(config & COMM) {
+    //Defaults to 115200. Check serial.h for more information.
+    sei();
+    usb_init();
+    xbee_init();
+	}
+	
+	if(config & BUZZER) {
+    sei();
+		buzzer_init();
+	}
+	
+	if(config & ORB) {
+    sei();
+		orb_init();
+	}
+	
+	if(config & MOTORS) {
+		motors_init();
+	}
+	
+	if(config & SERVOS) {
+		sei();
+    //Servos not yet implemented
+    //servo_init();
+	}
+
+	if(config & LCD) {
+		lcd_init();
+	}
+	
+	if(config & (SERVOS | ORB)) {
+    sei();
+    orb_init();
+    //Servos not yet implemented
+	}
+	
+	// delay a bit for stability
+	_delay_ms(1);
+}
+
+void adc_gain_test(void);
+void analog_test(void);
+void batt_test(void);
+void button_test(void);
+void buzzer_test(void);
+void dio_test(void);
+void general_test(void);
+void i2c_test(void);
+void lcd_test(void);
+void motor_test(void);
+void orb_test(void);
+void pullup_test(void);
+void ranger_test(void);
+void reset_test(void);
+void ring_buffer_tester(void);
+void rtc_test(void);
+void rtc_test_pulse(void);
+void serial_test(void);
+void servo_orb_test(void);
+void wl_receive_test(void);
+void wl_send_test(void);
+void wl_send_packet_test(void);
+void move_test(void);
+
+void move_test(void){
+  range_init();
+  motors_init();
+  analog_init();
+  while(1){
+    move_avoid(200,0,50 );
+  }
+}  
+
+void general_test(){
+	int i;
+	dragonfly_init(MOTORS|BUZZER|ORB|USB);
+
+	while(1){
+		if(button1_read()){
+
+			for(i=0;i<17;i++){
+				buzzer_set_val(i);
+				delay_ms(100);
+			}
+			
+			buzzer_off();
+			
+			motor1_set(1, 255);
+			motor2_set(1, 255);
+			
+			delay_ms(3000);
+			
+			motor1_set(1, 200);
+			
+			delay_ms(1000);
+			motor1_set(0, 255);
+			motor2_set(0, 255);
+			
+			delay_ms(3000);
+			motors_off();
+		}
+		if(button2_read()){
+			orb_enable();
+			orb1_set_color(RED);
+			delay_ms(500);
+			orb2_set_color(GREEN);
+			delay_ms(500);
+			orb1_set_color(YELLOW);
+			delay_ms(500);
+			orb2_set_color(CYAN);
+			delay_ms(500);
+			orb1_set_color(WHITE);
+			delay_ms(500);
+			orb2_set_color(WHITE);
+			delay_ms(500);
+			orb_disable();
+			
+		}
+	
+	}
+}
+
+void reset_test() {
+
+    dragonfly_init(ORB|SERIAL);
+    
+    delay_ms(1000);
+    usb_puti((int)DDRE);
+    
+    orb_set_color(RED);
+    delay_ms(1000);
+    
+    orb_set_color(GREEN);
+    delay_ms(1000);
+    
+    DDRE |= 0x80;
+    
+    reset();
+    
+    /*
+    alternate implelmentation using external interrupts
+    maintains register values on reset
+    
+    sei();
+    EIMSK |= 0x80;
+    EICRB |= 0xC0;
+    DDRE |= 0x80;
+    PORTE &= 0x7F;
+    PORTE |= 0x80;
+    */
+    
+    /*
+    should not reach here
+    */
+    
+    orb_set_color(BLUE);
+    delay_ms(1000);
+}
+
+void ring_buffer_tester (void) {
+
+	dragonfly_init(ALL_ON & ~ORB);
+	orb_disable();
+
+	RING_BUFFER_NEW(ring_buffer, 12, int, buffer);
+	RING_BUFFER_INIT(buffer, 12);
+	RING_BUFFER_CLEAR(buffer);
+	
+	for(int i=0;i<10;i++)
+		RING_BUFFER_ADD(buffer, 0);
+	
+	int x;
+	for(int i = 0; i < 100; i++) {
+	
+		RING_BUFFER_REMOVE(buffer, x);
+		
+		RING_BUFFER_ADD(buffer, i);
+		
+		usb_puti(i-x);
+		usb_putc(' ');
+	
+	}
+	
+	usb_puts("\n\rfull? " );
+	usb_puti(RING_BUFFER_FULL(buffer));
+	
+	while(!RING_BUFFER_FULL(buffer))
+		RING_BUFFER_ADD(buffer, 0);
+	
+	usb_puts("\n\rfilling... full? " );
+	usb_puti(RING_BUFFER_FULL(buffer));
+	
+	usb_puts("\n\rempty? " );
+	usb_puti(RING_BUFFER_EMPTY(buffer));
+	usb_puts("\n\rclearing... empty? ");
+	RING_BUFFER_CLEAR(buffer);
+	usb_puti(RING_BUFFER_EMPTY(buffer));
+	
+	usb_puts("\n\r");
+	
+	
+}
+
+#define WL_BAUD BAUD115200
+//serial -- XBEE
+//serial1 -- USB
+
+void wl_send_test(void) {
+
+	int i;
+	
+	usb_init();		//WIRED
+	xbee_init();	//WIRELESS
+	
+	orb_init();
+	sei();
+	
+	while(1) {
+	
+		for(i = 32; i <= 126; i++) {
+			
+			if(i%4) {
+				orb1_set(255, 0, 0);
+			}
+			else {
+				orb1_set(0,0,0);
+			}
+			
+			usb_putc(i);		//wired
+			xbee_putc(i);		//wireless
+			delay_ms(100);
+	
+		}
+
+	}
+
+	return;
+}
+
+void wl_send_packet_test(void) {
+
+	int i;
+	
+	usb_init();		//WIRED
+	xbee_init();	//WIRELESS
+	
+	orb_init();
+	sei();
+	
+	while(1) {
+	
+		for(i = 65; i <= 122; i++) {
+			usb_putc(i);		//wired
+			xbee_putc(i);		//wireless
+      //delay_ms(100);
+		}
+    
+    delay_ms(1000);
+
+	}
+
+	return;
+}
+
+volatile char c;
+volatile char haveNew = 0;
+
+
+void wl_receive_test(void) {
+
+
+	usb_init();
+	xbee_init();
+	orb_init();
+	
+	
+	c = '.';
+	
+  xbee_putc('r');
+	
+	
+	UCSR1B |= _BV(RXCIE);
+	UCSR0B |= _BV(RXCIE);
+	sei();
+	
+	orb1_set(255, 0, 0);		//blue
+
+	
+	while(1)	 {
+	
+		if(haveNew) {
+			xbee_putc(c);
+			haveNew = 0;
+		}
+	}
+	
+	orb1_set(0, 0, 255);		//green
+	
+	while(1);
+
+}
+/*
+ISR(USART1_RX_vect) {
+	
+	c = UDR1;
+	haveNew = 1;
+}
+
+ISR(USART0_RX_vect) {
+	
+	c = UDR0;
+	haveNew = 1;
+}
+*/
+void buzzer_test(void)
+{
+	sei();
+	buzzer_init();
+	unsigned int i = 0;
+	
+	while(1) {
+		buzzer_set_val(i);
+		if (i == 20) {
+			i = 0;
+			delay_ms(250);
+		} else {
+			i++;
+		}
+		
+		delay_ms(100);
+	}
+}
+
+void adc_gain_test(void)
+{
+  analog_init();
+  lcd_init();
+  
+  while(1)
+  {
+    
+    lcd_putint(ADCH);
+    delay_ms(100);
+    lcd_clear_screen();
+  }
+  
+  
+
+}
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+
+void button_test ( void) 
+{
+    dragonfly_init(ALL_ON);
+    
+    
+    move(200,0);
+
+	while(1) {
+	
+	
+		if(button1_read()) {
+			//lcd_putchar('1');
+			usb_putc('1');
+		} else if(button2_read()) {
+			//lcd_putchar('2');
+			usb_putc('2');
+		}
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	//motor1_set(1, 255);
+	//motor2_set(1, 255);
+	move(200,0);
+	
+	delay_ms(5000);
+	
+	//motor1_set(0, 200);
+	move(200,100);
+	
+	delay_ms(5000);
+	
+	//motor2_set(0, 170);
+	move(200,0);
+	
+	delay_ms(5000);
+	motors_off();
+	//LED USER NO LONGER EXISTS
+	//led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+
+void orb_test( void ) {
+	int orbs[12] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	lcd_init();
+	orb_init();
+	sei();
+	orb2_set(254, 253, 252);
+	orb1_set(251, 250, 249);
+	while(1) {
+	
+		orb_set_color(orbs[orb_select]);
+		/*orb_set1(251, 250, 249);
+		delay_ms(2000);
+		orb_set1(255, 1,2);
+		delay_ms(1000);
+		orb_set1(1, 255, 2);
+		delay_ms(1000);
+		orb_set1(1, 2, 255);
+		*/
+		delay_ms(3000);
+		
+		orb_select++;
+		
+		
+		
+		if(orb_select == 13) {
+			orb_disable();
+			delay_ms(2000);
+			orb_enable();
+			orb_select = 0;
+		}
+	
+	/*
+		for (int i = 0; i < 256; i++) {
+			for (int j = 0; j < 256; j++) {
+				for (int k = 0; k < 256; k++) {
+					orb_set(i, j, k);
+				}
+			}
+		}
+	*/
+	}
+	return;
+
+}
+
+void servo_orb_test( void ) {
+//	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	sei();
+	orb_set_angle(1,250);
+	orb_set_angle(2,250);
+	orb_set_angle(4,0);
+	orb_set_angle(5,0);
+	orb_set_angle(6,0);
+
+	while(1) {
+	
+		//orb_set_color(orbs[orb_select]);
+		
+		orb_set_angle(0,orb_select+1);
+	//	orb_set_angle(1,orb_select+1);
+	//	orb_set_angle(2,orb_select+1);
+		delay_ms(50);
+		orb_select++;
+		
+		
+		
+		if(orb_select == 255) {
+			
+			orb_select = 0;
+		}
+	
+	/*
+		for (int i = 0; i < 256; i++) {
+			for (int j = 0; j < 256; j++) {
+				for (int k = 0; k < 256; k++) {
+					orb_set(i, j, k);
+				}
+			}
+		}
+	*/
+	}
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i, j;
+	lcd_init();
+	
+	for(i = 32,j = 1; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+        if(j > 50) {
+            lcd_clear_screen();
+            j = 0;
+        }
+        j++;
+	}
+	
+	
+	return;
+	
+}
+
+void serial_test( void ) {
+	int i;
+	
+	usb_init();
+
+	for(i = 32; i <= 126; i++) {
+		usb_putc(i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+  usb_init();
+
+	analog_init();
+
+	while(1){
+    usb_puti(battery8());
+    usb_putc(' ');
+		delay_ms(10000);
+	}
+}
+
+
+void analog_test(void){
+  //int i;
+  analog_init();
+  usb_init();
+  range_init();
+  usb_puts(" information:\n");
+  while(1){
+    printAllBoms();
+    /*for(i=0;i<16;i++){
+      digital_output(MONK0,i&1);
+      digital_output(MONK1, (i>>1)&1);
+      digital_output(MONK2, (i>>2)&1);
+      digital_output(MONK3, (i>>3)&1);
+      usb_puts("Bom ");
+      usb_puti(i);
+      usb_puts(": ");
+      usb_puti(analog8(MONKI));
+      usb_puts("\n\r");
+    }*/
+  
+    /*for(i=1;i<8;i++){
+      usb_puts("Analog Ext ");
+      usb_puti(i);
+      usb_puts(":  ");
+      usb_puti(analog8(i));
+      usb_puts("\n\r");
+    }
+    
+    usb_puts("IR1 val: ");
+    usb_puti(read_distance(IR1));
+    usb_puts("\n\rIR2 val: ");
+    usb_puti(read_distance(IR2));
+    usb_puts("\n\rIR3 val: ");
+    usb_puti(read_distance(IR3));
+    usb_puts("\n\rIR4 val: ");
+    usb_puti(read_distance(IR4));
+    usb_puts("\n\rIR5 val: ");
+    usb_puti(read_distance(IR5));
+    */
+    delay_ms(2000);
+  }
+}
+
+void dio_test()
+{
+	while(1)
+	{
+		digital_output(_PIN_E5,1);
+		delay_ms(1000);
+		digital_output(_PIN_E5,0);
+		delay_ms(1000);
+	}
+}
+
+void rtc_test_pulse() {
+	usb_putc('s');
+}
+
+void rtc_test() {
+	sei();
+	usb_init();
+	usb_putc('a');
+	rtc_init(HALF_SECOND, &rtc_test_pulse);
+}
+
+#define RECEIVE 1
+
+#define MY_ADDR (RECEIVE == 1 ? 0x01 : 0x02)
+#define TARGET_ADDR (RECEIVE == 1 ? 0x02 : 0x01)
+
+void i2c_test() {
+  char c = 0;
+  char i = 0;
+  
+  sei();
+  i2c_init(MY_ADDR);
+  usb_init();
+
+  usb_putc('5');
+  delay_ms(1000);
+  
+  while(1) {
+    if (RECEIVE) {
+      while(c != 'z') {
+        if(!i2c_getc(&c)) {
+          usb_putc(c);
+          usb_putc(' ');
+        }
+      }
+    } else {
+    while(i < 26) {
+      if(!i2c_putc(TARGET_ADDR, i + 0x61))
+        i++;
+      }
+    }
+  
+    delay_ms(1000);
+  
+    if (!RECEIVE) {
+      while(c != 'z') {
+        if(!i2c_getc(&c)) {
+          usb_putc(c);
+          usb_putc(' ');
+        }
+      }
+    } else {
+      while(i < 26) {
+        if(!i2c_putc(TARGET_ADDR, i + 0x61))
+          i++;
+      }
+    }
+    
+    c = 0;
+    i = 0;
+  }
+  while(1);
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/i2c.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/i2c.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/i2c.c	(revision 1346)
@@ -0,0 +1,125 @@
+/* I2C.c
+
+*/
+
+#include <avr/interrupt.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+#include "ring_buffer.h"
+
+
+static int start_flag;
+RING_BUFFER_NEW(i2c_buffer, 64, char, i2c_write_buff, i2c_addr_buff, i2c_read_buff);
+
+void i2c_init(char address) {
+	// Enable I2C and turn on the interrupt
+  //TWCR = 0;
+  
+  /* initialize the buffers */
+  RING_BUFFER_CLEAR(i2c_write_buff);
+  RING_BUFFER_CLEAR(i2c_addr_buff);
+  RING_BUFFER_CLEAR(i2c_read_buff);
+  
+	TWCR =  (_BV(TWEA) | _BV(TWEN) | _BV(TWIE));
+
+  //Set bit rate 12 = 100kbit/s
+  TWBR = 0x0C;
+    
+	TWAR = (address << 1);	//0b0000001 address, 0 for global commands to be off
+	
+  //usb_putint(TWAR);
+  //i2cTXFlag = 0;
+  //i2cRXFlag = 0;
+}
+
+char i2c_putc(char dest, char data) {
+  if(RING_BUFFER_FULL(i2c_write_buff))
+    return -1;
+  
+  cli();
+  RING_BUFFER_ADD(i2c_write_buff, data);
+  RING_BUFFER_ADD(i2c_addr_buff, dest << 1);
+  sei();
+  
+	//Start bit
+  if(!start_flag) {
+    start_flag = 1;
+    TWCR |= _BV(TWSTA);
+    TWCR |= _BV(TWINT);
+  }
+  
+  return 0;
+}
+
+char i2c_getc(char * c) {
+  if(RING_BUFFER_EMPTY(i2c_read_buff))
+    return -1;
+  else
+    RING_BUFFER_REMOVE(i2c_read_buff, *c);
+  
+  return 0;
+}
+ 
+ISR(TWI_vect) {
+  static char data_to_send;
+  static char addr_to_send = -1;
+  char addr, statusCode;
+  
+    //Get status code (only upper 5 bits)
+    statusCode = (TWSR & 0xF8);
+  
+  switch (statusCode) {
+    //Start sent successfully
+    case TW_START:
+    case TW_REP_START:
+      //Send address and write
+      //ring_buffer will not be empty
+      RING_BUFFER_REMOVE(i2c_addr_buff, addr_to_send);
+      RING_BUFFER_REMOVE(i2c_write_buff, data_to_send);
+      
+      TWDR = addr_to_send; /* first send the address */
+      /* we will send the data next time around */
+      
+      //Turn off start bits
+      TWCR &= ~_BV(TWSTA);
+      break;
+    //Address sent successfully
+    case TW_MT_SLA_ACK:
+      //Send byte
+      TWDR = data_to_send;
+      break;
+    //Packet complete, close line
+    case TW_MT_DATA_ACK:
+      if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+        RING_BUFFER_PEEK(i2c_addr_buff, addr);
+        if(addr == addr_to_send) {
+          RING_BUFFER_REMOVE(i2c_addr_buff, addr);
+          RING_BUFFER_REMOVE(i2c_write_buff, TWDR);
+          break;
+        }
+        else { /* no more bytes to this addr, bytes to send to new addr */
+          /* doing the start signal again */
+          TWCR |= _BV(TWSTA);
+          break;
+        }
+      }
+      
+      /* there are no bytes to send */
+      TWCR |= _BV(TWSTO);
+      start_flag = 0;
+      
+      break;
+    case TW_SR_SLA_ACK:
+      break;
+    case TW_SR_DATA_ACK:
+      if(!RING_BUFFER_FULL(i2c_read_buff))
+        RING_BUFFER_ADD(i2c_read_buff, TWDR);
+      break;
+    case TW_SR_STOP:
+      break;
+  }
+      
+  TWCR |= _BV(TWINT);
+	
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/serial.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/serial.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/serial.c	(revision 1346)
@@ -0,0 +1,190 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	authors: Robotics Club, Colony Project, pkv
+	much code taken from FWR's library, author: Tom Lauwers
+*/
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+/* usb_init() - sets up AVR for communication over the usb serial port */
+void usb_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (USB_BAUD == 115200)
+    UBRR0H = 0x00;
+    UBRR0L = 8;
+    UCSR0A |= _BV(U2X0);
+  #elif (USB_BAUD == 9600)
+    UBRR0H = 0x00;
+    UBRR0L = 107;
+    UCSR0A |= _BV(U2X0);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+  /*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    usb_fd = fdevopen(usb_putc, usb_getc);
+  #endif
+}
+
+/* xbee_init() - sets up AVR for communication over the xbee serial port */
+void xbee_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (XBEE_BAUD == 115200)
+    UBRR1H = 0x00;
+    UBRR1L = 8;
+    UCSR1A |= _BV(U2X1);
+  #elif (XBEE_BAUD == 9600)
+    UBRR1H = 0x00;
+    UBRR1L = 107;
+    UCSR1A |= _BV(U2X1);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+	//Enable receiver and transmitter
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	// Set frame format: 8data, 1stop bit, asynchronous normal mode
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    xbee_fd = fdevopen(xbee_putc, xbee_getc);
+  #endif
+}
+
+/* usb_putc(c) - waits until the usb serial tx buffer is clear, then 
+  puts the character c into the buffer */
+int usb_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR0A, UDRE0);
+	
+  // Load buffer with your character
+  UDR0 = c;
+  return 0;
+}
+
+/* xbee_putc(c) - waits until the xbee serial tx buffer is clear, then 
+  puts the character c into the buffer */
+int xbee_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR1A, UDRE1);
+	
+  // Load buffer with your character
+  UDR1 = c;
+  return 0;
+}
+
+/* usb_puts(c) - writes each character from the string to the usb */
+int usb_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		usb_putc(*t);
+		t++;
+	}
+  return 0;
+}
+
+
+/* usb_getc() - waits until the usb serial rx buffer is not empty, then 
+  returns the first character in the buffer */
+int usb_getc(void)
+{
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+	return UDR0;
+}
+
+/* xbee_getc() - waits until the xbee serial rx buffer is not empty, then 
+  returns the first character in the buffer */
+int xbee_getc(void)
+{
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+	return UDR1;
+}
+
+/* usb_getc_nb(*c) - checks if the usb serial rx buffer is empty or not:
+  -If it is empty, c is unchanged and -1 is returned.  
+  -If is not empty, the first character in the buffer is loaded into c,
+    and 0 is returned */
+int usb_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR0A & _BV(RXC0)) {
+    // Read the receive buffer
+    (*c) = UDR0;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+/* xbee_getc_nb(*c) - checks if the xbee serial rx buffer is empty or not:
+  -If it is empty, c is unchanged and -1 is returned.  
+  -If is not empty, the first character in the buffer is loaded into c,
+    and 0 is returned */
+int xbee_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR1A & _BV(RXC1)) {
+    // Read the receive buffer
+    (*c) = UDR1;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+
+/*
+prints an int to serial
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+uses usb_putc
+*/
+int usb_puti(int value ) {
+	unsigned char usb_data[6]={'0','0','0','0','0','0' }, position=sizeof(usb_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { usb_putc('-'); value=-value; }    
+        do { position--; *(usb_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(usb_data)-1);position++)
+          {
+            
+            usb_putc(usb_data[position]);
+          }
+
+	return 0;
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonfly_lib.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonfly_lib.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dragonfly_lib.h	(revision 1346)
@@ -0,0 +1,54 @@
+/*
+dragonfly_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+
+// Configuration definitions
+#define ANALOG 0x01
+#define SERIAL 0x02
+#define USB    0x02
+#define COMM   0x02
+#define ORB    0x04
+#define MOTORS 0x08
+#define SERVOS 0x10
+#define I2C    0x20
+#define BUZZER 0x40
+#define LCD	   0x80
+#define ALL_ON 0xFF
+
+// initializes the board with the functions specified by config
+void dragonfly_init(int config);
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+#include <i2c.h>
+#include <ring_buffer.h>
+#include <reset.h>
+#include <math.h>
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/buzzer.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/buzzer.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/buzzer.c	(revision 1346)
@@ -0,0 +1,73 @@
+/*
+  buzzer.c - Contains the functions necessary for running the buzzer
+  
+  author: Robotics Club, Colony Project
+  
+  much taken from FWR's firefly library (author: Tom Lauwers)
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+//NOTE: This is mostly handled by buzzer_Set_val for now
+	// Set pin B7 to output - B7 is buzzer pin
+//	DDRB |= _BV(DDB7);
+	
+		
+	//Fast PWM Mode, Clear OCR0 on compare match and set at bottom, clock/64
+//	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+	DDRB |= _BV(DDB7);
+  OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest 
+// buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0xBF;
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/i2c.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/i2c.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/i2c.h	(revision 1346)
@@ -0,0 +1,8 @@
+#ifndef _I2C_H_
+#define _I2C_H_
+
+void i2c_init(char address);
+char i2c_putc(char dest, char data);
+char i2c_getc(char * c);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/serial.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/serial.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/serial.h	(revision 1346)
@@ -0,0 +1,61 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+    usb_*() -> UART0
+    xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+    #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+#define USB_BAUD 115200
+#endif
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+#define XBEE_BAUD 115200
+#endif
+
+#include <stdio.h>
+FILE *usb_fd;  //For use with fprintf() and related stdio functions
+FILE *xbee_fd;  //For use with fprintf() and related stdio functions
+
+void usb_init(void);
+int usb_putc(char c);
+int usb_getc(void);
+int usb_getc_nb(char *c);
+int usb_puts(char *s);
+int usb_puti(int value);
+
+void xbee_init(void);
+int xbee_putc(char c);
+int xbee_getc(void);
+int xbee_getc_nb(char *c);
+int xbee_puts(char *s);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/buzzer.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/buzzer.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/buzzer.h	(revision 1346)
@@ -0,0 +1,32 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/Makefile
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik RouleauF
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = dragonflyWirelessRelay
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+#DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/ttyUSB0
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/servo.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/servo.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/servo.c	(revision 1346)
@@ -0,0 +1,213 @@
+#include "servo.h"
+
+
+#define SERVO_COUNT 16	//please dont change this, or bad things might happen
+
+
+
+struct SERVO_NODE {
+   uint8_t num;
+   uint16_t angle;
+};
+
+struct SERVO_CHANGE {
+   uint16_t port_val;
+   uint16_t split_time_period;
+};
+
+
+struct SERVO_STATUS_STRUCT {
+   struct SERVO_NODE servos[SERVO_COUNT];
+   uint16_t servo_angles[SERVO_COUNT];
+   struct SERVO_CHANGE changes[SERVO_COUNT+1];
+   uint8_t change_count;
+   uint16_t ms;
+   uint8_t new_angles;
+   uint8_t in_pulse;
+   uint8_t current_servo;
+
+} SERVO_STATUS;
+
+
+void servo_sort(void);
+void servo_setup_pulse(void);
+void servo_set_next_interrupt(uint16_t ticks, struct SERVO_CHANGE *sn);
+
+
+
+
+SIGNAL (SIG_OUTPUT_COMPARE3B){
+
+   if (SERVO_STATUS.in_pulse) {
+   
+		//pull the correct ones down
+      SERVOPORT1 &= (~SERVOMASK1)|SERVO_STATUS.changes[SERVO_STATUS.current_servo].port_val;
+      SERVOPORT2 &= (~SERVOMASK2)|(SERVO_STATUS.changes[SERVO_STATUS.current_servo].port_val >> 8);
+
+      ++SERVO_STATUS.current_servo; //now look at next servo
+
+      if (SERVO_STATUS.current_servo < SERVO_STATUS.change_count) { //if it isnt the end...
+	  
+			//setup timer for next pull down
+         OCR3B = SERVO_STATUS.changes[SERVO_STATUS.current_servo].split_time_period;
+		 TCNT3 = 0;
+     }
+      else { //we are done with these pulses
+//         SERVO_STATUS.in_pulse = 0;
+//         SERVO_STATUS.ms = 0;
+//         OCR3B += SERVO_MS; //NOTE--this might mean the negative width is a function of max pos width
+//		 TCNT3 = 0;
+		servo_setup_pulse();
+      }
+
+   }
+   else { //we are between pulses
+      ++SERVO_STATUS.ms;  //increment ms counter
+
+      if (SERVO_STATUS.ms >= SERVO_PERIOD) { //see how many ms have passed
+         servo_setup_pulse(); //Seems like we could do this while not on the clock, but who knows
+      }
+      else {
+         OCR3B = SERVO_MS;  //go another ms
+		 TCNT3 = 0;
+         
+      }
+   }
+}
+
+
+
+void servo_init(void) {
+   int i;
+   uint8_t mysreg;
+   
+   SERVODDR1 |= SERVOMASK1;	//all outputs
+   SERVODDR2 |= SERVOMASK2;
+
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+   for (i = 0; i < SERVO_COUNT; ++i) {
+      SERVO_STATUS.servos[i].num = i;
+      SERVO_STATUS.servos[i].angle = 127;
+      SERVO_STATUS.servo_angles[i] = 127;
+   }
+
+   SERVO_STATUS.ms = 0;
+   SERVO_STATUS.new_angles = 1;
+   SERVO_STATUS.in_pulse = 0;
+   SERVO_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C=0;
+	TCNT3=0;
+	ETIMSK |= _BV(OCIE3B);
+	OCR3B = SERVO_MS;
+
+	SREG=mysreg;
+}
+
+void servo_set_angle(int servo, int angle) {
+	uint8_t mysreg;
+	if(servo>=8){ //2nd port flipped (on avrxbee at least)
+		servo= 23-servo;
+	}
+   if (SERVO_STATUS.servo_angles[servo] != angle) {
+	  mysreg=SREG;
+	  cli();
+      SERVO_STATUS.servo_angles[servo] = angle;
+      SERVO_STATUS.new_angles = 1;
+	  SREG=mysreg;
+   }
+}
+
+
+void servo_sort(void) {
+   int done = 0, i;
+   
+   while (! done) {
+      done = 1;
+
+      for (i = 0; i < SERVO_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+         if (SERVO_STATUS.servos[i].angle > SERVO_STATUS.servos[i+1].angle) {
+            SERVO_STATUS.servos[i].angle ^= SERVO_STATUS.servos[i+1].angle;
+            SERVO_STATUS.servos[i+1].angle ^= SERVO_STATUS.servos[i].angle;
+            SERVO_STATUS.servos[i].angle ^= SERVO_STATUS.servos[i+1].angle;
+
+            SERVO_STATUS.servos[i].num ^= SERVO_STATUS.servos[i+1].num;
+            SERVO_STATUS.servos[i+1].num ^= SERVO_STATUS.servos[i].num;
+            SERVO_STATUS.servos[i].num ^= SERVO_STATUS.servos[i+1].num;
+
+            done = 0;
+         }
+      }
+   }
+}
+
+void servo_setup_pulse(void) {
+   int i;
+   uint16_t my_port;
+   uint16_t sum = 0;
+   uint16_t split_time;
+
+   my_port = 0xffff; //all on
+
+   if (SERVO_STATUS.new_angles) {
+
+      SERVO_STATUS.change_count = 0;
+
+      for (i = 0; i < SERVO_COUNT; ++i) {
+         SERVO_STATUS.servos[i].angle = SERVO_STATUS.servo_angles[SERVO_STATUS.servos[i].num];
+      }
+
+      servo_sort();
+      SERVO_STATUS.new_angles = 0;
+
+      for (i = 0; i < SERVO_COUNT; ++i) {
+         split_time = /*SERVO_MIN + ((((((long int)(SERVO_MAX-SERVO_MIN)) >> 3) ) *
+                                  SERVO_STATUS.servos[i].angle) >> 5) */SERVO_STATUS.servos[i].angle - sum;
+         my_port &= ~_BV(SERVO_STATUS.servos[i].num);
+         for (; i < SERVO_COUNT - 1 && SERVO_STATUS.servos[i].angle == SERVO_STATUS.servos[i+1].angle; ++i) {
+            my_port &= ~_BV(SERVO_STATUS.servos[i+1].num);
+         }
+		 
+         SERVO_STATUS.changes[SERVO_STATUS.change_count].port_val = my_port;
+         servo_set_next_interrupt(split_time, &SERVO_STATUS.changes[SERVO_STATUS.change_count]);
+         
+		 ++SERVO_STATUS.change_count;
+		 
+         sum += split_time;
+      }
+
+      SERVO_STATUS.changes[SERVO_STATUS.change_count].port_val = my_port;
+      servo_set_next_interrupt(SERVO_RESET - split_time, &SERVO_STATUS.changes[SERVO_STATUS.change_count]);
+
+      ++SERVO_STATUS.change_count;
+
+   }
+
+
+
+   SERVO_STATUS.current_servo = 0;
+   SERVO_STATUS.in_pulse = 1;
+
+
+   SERVOPORT1 |= SERVOMASK1;
+   SERVOPORT2 |= SERVOMASK2;
+
+	OCR3B = SERVO_STATUS.changes[0].split_time_period;
+	TCNT3=0;
+}
+
+void servo_set_next_interrupt(uint16_t ticks, struct SERVO_CHANGE *sn) { 
+	//this function is a holdover from when we used a worse clock. 
+
+      (*sn).split_time_period = ticks;
+
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/time.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/time.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/time.c	(revision 1346)
@@ -0,0 +1,134 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+Change Log:
+	2.5.07 - Kevin
+		Aaron fixed the orb/servo code and made them use timer3 but compare registers B and C. He hard set the prescaler
+		to 8 so the RTC broke. Changed it so that we use a 8 prescaler which sets the compare match at 1/16th of a second.
+		You now count how many 16ths of a second you want until you trigger your actual interrupt. Works. Changed defines
+		for time so you can still call rtc_init with a scale but now it is defined in terms of actual time like second, quarter_second
+		etc. Read that section in the time.h file for more information. Tested and works, though the clock drifts more than
+		it used to
+	1.30.07 - Kevin
+		Modified the clock to run on timer3 on the Dragonfly. Works with decent accuracy. Using a prescaler of 256
+	the timer counts up to a precomputer value which will trigger an interrupt and reset the timer. Multiples of
+	256 change it by that multiple. Refer to the time.h file for all possible prescalers.
+		The interrupt will call a specified function _rtc_func every pulse.
+		All of it has been tested and it works.
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static volatile int _rtc_pulse = 0;
+static volatile int _rtc_scale = 32;	//Defaults to 1 Second per pulse
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/* 	Prescales defined in time.h. SECOND will give you 1 second.
+	More scales are defined in the time.h file.
+	rtc_func is the address to a function that you want called every clock tick. */
+void rtc_init(int prescale_opt, void (*rtc_func)(void)) {
+	
+	//Clear timer register for Timer 3
+	TCNT3 = 0;
+	
+	/* 	This sets the Waveform Generation Module to CTC (Clear Timer on Compare) Mode (100)
+		See page135 in Atmega128 Docs for more modes and explanations */
+	TCCR3B |= _BV(WGM32);
+	
+	/* 	This sets the prescaler for the system clock (8MHz) ie: divides the clock by some number.
+		Currently set to a prescaler of 8 because that is what the orb and servos use (they are on this timer as well)
+		See page137 in Atemga128 Docs for all the available prescalers */
+	TCCR3B |= _BV(CS31);
+	
+	/* 	Sets the two regsiters that we compare against. So the timer counts up to this number and
+		then resets back to 0 and calls the compare match interrupt.
+		8x10^6 / 8 = 1/16 Second. All values are based off of this number. Do not change it unless you
+		are l337*/
+		
+	OCR3A = 0xF424;	
+
+	/* 	Enable Output Compare A Interrupt. When OCR3A is met by the timer TCNT3 this interrupt will be
+		triggerd. (See page140 in Atmega128 Docs for more information */
+	ETIMSK |= _BV(OCIE3A);
+	
+	/*	Store the pointer to the function to be used in the interrupt */
+	_rtc_f = rtc_func;
+	
+	/*	Store how many 1/16ths of a second you want to let by before triggering an interrupt */
+	_rtc_scale = prescale_opt;
+}
+
+//Returns the real time clock counter to 0
+int rtc(void){
+	return _rtc_val;
+}
+
+//Resets the real time clock counter
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+/*	Called every pulse. Function in _rtc_f is called every _rtc_scale and also the counter is updated.
+	Bascially, since the pulse is hard set at 1/16s  you want to count how many 16ths of a second have passed
+	and when it reaches the amount of time you want, execute the code. */
+SIGNAL(TIMER3_COMPA_vect) {
+
+	if (_rtc_pulse ==  _rtc_scale) {
+		//Increment the real time clock counter
+		_rtc_val++;
+		
+		//Calls the function tied to the real time clock if defined
+		if(_rtc_f != 0)
+			_rtc_f();
+		
+		//Resets the pulse until the next scale is matched
+		_rtc_pulse = 0;
+	}	
+	
+	//Updates the amount of pulses seen since the last scale match
+	_rtc_pulse++;
+	
+}
+
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/analog.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/analog.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/analog.c	(revision 1346)
@@ -0,0 +1,133 @@
+/*
+ * analog.c - Contains the function implementations for manipulating the ADC
+ * on the firefly+ board
+ * 
+ * author:  CMU Robotics Club, Colony Project
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ */
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void set_adc_mux(int which)
+{
+  // FIX THIS IN NEXT REVISION
+  // ADDR2 ADDR1 ADDR0
+  // G2.G4.G3 set mux to port 0-7 via binary selection
+  // math would be much cleaner if it was G4.G3.G2
+  
+  // mask so only proper bits are possible.  
+  PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04);
+}
+
+void analog_init(void)
+{
+
+
+	// ADC Status Register A
+	// Bit 7 - ADEN is set (enables analog)
+	// Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+	// Bit 5 - Enable Auto Trigger (for free running mode)
+	// Bit 4 - ADC interrupt flag, 0
+	// Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+	// Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 8,000,000/128
+	ADCSRA |= 0xEF;
+
+	// ADC Status Register B
+	// Bit 7, 5-3 - Must be cleared
+	// Bit 2:0 - Set mode, currently cleared for free running operation
+	// Bit 6 - Analog comparator mode - cleared
+//	ADCSRB = 0x00;
+	
+	// ADMUX register
+	// Bit 7,6 - Set voltage reference to AVcc (0b01)
+	// Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+	// Bit 4 - X
+	// Bit 3:0 - Sets the current channel, set to ADC7 (the external mux)
+	ADMUX = 0x67;
+
+	// Set external mux lines to outputs
+	DDRG |= 0x1C;
+	set_adc_mux(0x07);
+
+
+}	
+
+
+
+unsigned int analog8(int which)
+{
+
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+	
+	_delay_ms(1); // need at least 130 us between conversions
+	return ADCH;
+	
+}
+
+
+
+
+unsigned int analog10(int which)
+{
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void)
+{
+	return analog8(WHEEL_PORT);
+}
+
+int battery8(void)
+{
+  return analog8(BATT_PORT);
+}
+
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+	return analog8(BATT_PORT) * 500 >>7;
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lcd.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lcd.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lcd.c	(revision 1346)
@@ -0,0 +1,471 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void crazycircle (void) {
+/*  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+
+      delay_ms(10);
+  }
+*/
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  write_c(0x8e);    // clear window command
+  write_d(0);
+  write_d(0);
+  write_d(130);
+  write_d(130);
+
+  delay_ms(100);
+  
+  write_c(0x92);    // fill enable command
+  write_d(0x01); 
+  
+  delay_ms(10);
+
+  crazycircle();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+//**************************************Old shit below!*****************
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+
+
+	LCDDDR |= (SCE | SDI | SCK);
+	LCDRESETDDR |= (RST|D_C);
+
+	LCDPORT &= ~( SCE | SDI | SCK);
+	LCDRESETPORT &=~(D_C);
+  
+	SPCR |= 0x50; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDRESETPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+  LCDRESETPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDRESETPORT |= D_C;
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/servo.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/servo.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/servo.h	(revision 1346)
@@ -0,0 +1,29 @@
+
+#ifndef SERVO_H
+#define SERVO_H
+
+#include <avr/interrupt.h>
+
+
+#define SERVO_MS 2000          // Number of ticks per ms
+#define SERVO_PERIOD 0          // Amount of time to wait between pulses
+#define SERVO_RESET 15000
+
+#define SERVO_MIN 1800            // Smallest pulse length (ticks)
+#define SERVO_MAX 4200           // Largest pulse length (ticks)
+
+#define SERVOPORT1 PORTA
+#define SERVOPORT2 PORTC	//note that this port will be "backwards", i.e. pin0 is servo 15
+
+#define SERVODDR1 DDRA
+#define SERVODDR2 DDRC
+
+#define SERVOMASK1 0x0F
+#define SERVOMASK2 0x77
+
+void servo_init(void);
+void servo_set_angle(int servo, int angle);
+
+
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/time.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/time.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/time.h	(revision 1346)
@@ -0,0 +1,59 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+#define SIXTEENTH_SECOND 1
+#define EIGTH_SECOND 2
+#define QUARTER_SECOND 4
+#define HALF_SECOND	8
+#define SECOND 16
+#define TWO_SECOND 32
+#define FOUR_SECOND 64
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/move.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/move.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/move.c	(revision 1346)
@@ -0,0 +1,191 @@
+//Created 4/30/06 by James Kong
+
+#include "dragonfly_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+void move (int velocity, int omega) {
+  int vl = 0;
+  int vr = 0;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  //
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+/*@strength, the strength of the avoid behavior from 0 to 100,
+255 gives full control to avoid, 0 none. defines here for now*/
+
+void move_avoid(int velocity, int omega, int strength){
+  int pControl;
+  int vl = 0;
+  int vr = 0;
+  int temp;
+  
+  temp=read_distance(IR1);
+  d1 = (temp == -1) ? d1 : temp;
+  
+  temp=read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /* Avoid obstacles ahead
+  if(d2>170)
+    v*=-1;
+    
+  Naturally slow down if there is something in the way.
+  if(d2>150 || d1>180 || d3>180){
+    v>>=1;
+  */
+  
+  pControl= (((d3-d1) + (d4-d5))*strength)/100;
+  omega = (omega*(100-strength))/100 + pControl;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr) {
+	//omega: angle measure, positive couter-clockwise from front.
+	// -180 <= omega <= 180
+	//velocity: -255 <= velocity <= 255
+  
+  long int vltemp, vrtemp;
+  
+  //make sure values are in bounds
+  if (velocity < -255 || velocity >255 || omega < -255 || omega > 255) return;
+	
+  //compute
+	vrtemp = velocity + omega * 3;
+	vltemp = velocity - omega * 3;
+	
+	//check to see if max linear velocities have been exceeded.
+  if (vrtemp > 255) {
+    vltemp = 255 * vltemp / vrtemp;
+    vrtemp = 255;
+  }
+  if (vltemp > 255) {	   
+	vrtemp = 255 * vrtemp / vltemp;    
+	vltemp = 255;  
+  }
+  if (vrtemp < -255) {
+    vltemp = -255 * vltemp / vrtemp;
+    vrtemp = -255;
+  }
+  if (vltemp < -255) {
+    vrtemp = -255 * vrtemp / vltemp;
+    vltemp = -255;
+  }
+  
+  *vr = (int)vrtemp;
+  *vl = (int)vltemp;
+	
+
+}
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/analog.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/analog.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/analog.h	(revision 1346)
@@ -0,0 +1,100 @@
+/*
+ * analog.h - Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7
+ * AN6 and AN7 are used for the wheel and battery
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog
+	
+ * author: CMU Robotics Club, Colony Project
+ * code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+#define AN8 0x08
+#define AN9 0x09
+#define AN10 0x0a
+#define AN11 0x0b
+#define AN12 0x0c
+#define AN13 0x0d
+#define AN14 0x0e
+#define AN15 0x0f
+
+#define ANALOG0 AN0
+#define ANALOG1 AN1
+#define ANALOG2 AN8
+#define ANALOG3 AN9
+#define ANALOG4 AN2
+#define ANALOG5 AN3
+#define ANALOG6 AN4
+#define ANALOG7 AN5
+#define ANALOG8 AN6
+
+#define EXT_MUX AN7
+#define WHEEL_PORT AN10
+#define BATT_PORT  AN11
+
+//Macros for Battery
+//Constants determined experimentally 2/9/2007 - James Kong
+//See Battery8_data.xls for experiment data
+#define NORMALV 6
+#define CHARGINGV 7.00
+#define LOWV 5.25
+
+#define BATT_NRMLV (int)(25.7*NORMALV)
+#define BATT_CHRGV (int)(25.7*CHARGINGV)
+#define BATT_LOWV (int)(25.7*LOWV)
+
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+/*
+  returns the current analog8 reading of the battery voltage
+  128 ~= 5 volts, higher value -> higher voltage
+  analog_init() must be called before a call to this function
+*/
+int battery8(void);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lcd.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lcd.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lcd.h	(revision 1346)
@@ -0,0 +1,31 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+
+
+//////lcd defines
+#define RST _BV(4)  // pd4 (GPIO)
+#define SCE _BV(0)  // pb0 (~SS)
+#define D_C _BV(5)  // pd5 (GPIO?)
+#define SDI _BV(2)  // pb2 (MOSI)
+#define SCK _BV(1) // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTD
+#define LCDRESETDDR DDRD
+
+
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/pindefs_ff.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/pindefs_ff.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/pindefs_ff.h	(revision 1346)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/move.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/move.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/move.h	(revision 1346)
@@ -0,0 +1,46 @@
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+int d1,d2,d3,d4,d5;  /*Move avoid distance variables*/
+
+void move(int velocity, int omega);
+
+void move_avoid(int velocity, int omega, int strength);
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr);
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dio.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dio.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dio.c	(revision 1346)
@@ -0,0 +1,324 @@
+/* 
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+the first 3 (abc in this example) are used to select the bank
+A = 001
+B = 010
+C = 011
+D = 100
+E = 101
+F = 110
+G = 111
+		
+the bank can be found by doing portpin >> 3
+		
+the next 3 (def in this example) are used to select the pin number
+the 3 bits are just the binary representation of the pin number
+0 = 000
+1 = 001
+2 = 010
+3 = 011
+4 = 100
+5 = 101
+6 = 110
+7 = 111
+		
+the pin number can be found by doing portping & 0b111
+*/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/*
+ * digital_input
+ * Reads the value on the selected portpin, returns it as 1 or 0
+ * see general description (above) for definition of portpin
+ */
+int digital_input(int portpin){
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3){
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4){
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/*
+  digital_pull_up
+  Enables pullup on a pin.  if pin is output, it will make it output 1.
+*/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/*
+  digital_output
+
+  sets portpin to the value
+  see general description above for explanation of portpin
+  val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  }else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+  return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING0);
+	PORTG|= _BV(PING0);
+    pin_val = PING;
+	return !((pin_val & _BV(PING0)));
+  
+}
+
+/* similar to button1_read, but hold program until the button is actually 
+ * pressed
+*/
+void button1_wait( void )
+{
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/* USER LED 
+  same as button1_wait
+  However, blink the led while waiting
+
+  IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+/*
+void button1_wait_led( void )
+{
+  int i = 0;
+  
+  while(!button1_read()){
+    if(i < 8){
+      led_user(1);
+    }else{
+      led_user(0);
+    }
+    //increment i, but restart when i = 15;
+    i = (i+1) & 0xF;
+    delay_ms(15);
+  }
+  
+  led_user(0);
+}
+*/
+//click waits until the button is realesed to return true
+//return false immediatley
+int button1_click()
+{
+  if(button1_read()){
+    while(button1_read());
+    return 1;
+  }else{
+    return 0;
+  }
+}
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING1);
+	PORTG|= _BV(PING1);
+    pin_val = PING;
+	return !((pin_val & _BV(PING1)));
+}
+
+void button2_wait( void )
+{
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+/*USER LED NO LONGER EXISTS
+void button2_wait_led(void)
+{
+  int i = 0;
+  
+  while(!button2_read()){
+    if(i < 8){
+			led_user(1);
+    }else{
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+*/
+int button2_click()
+{
+	if(button2_read()){
+    while(button2_read());
+    return 1;
+  }else{
+		return 0;
+  }
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/bom.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/bom.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/bom.c	(revision 1346)
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include <dragonfly_lib.h>
+#include "bom.h"
+#include "dio.h"
+#include "analog.h"
+
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+int getMaxBom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+              
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+	printf("max_bom_temp = %d\n", max_bom_temp);
+	return max_bom_temp;
+}
+
+char bytetosymb(unsigned int c)
+{
+  c = 255 - c;
+
+  if (c < 32)
+    return ' ';
+  if (c < 64)
+    return '_';
+  if (c < 96)
+    return ',';
+  if (c < 128)
+    return '.';
+  if (c < 160)
+    return '-';
+  if (c < 192)
+    return '~';
+  if (c < 224)
+    return '\'';
+  return '`';
+}
+
+void bom_on(void)
+{
+  output_high(MONKL);
+
+}
+
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
+int printAllBoms(void){
+  int i,j;
+  for(i=0;i<16;i++){
+      j=lookup[i];
+      digital_output(MONK0,j&1);
+      digital_output(MONK1, (j>>1)&1);
+      digital_output(MONK2, (j>>2)&1);
+      digital_output(MONK3, (j>>3)&1);
+      usb_puts("Bom ");
+      usb_puti(i);
+      usb_puts(": ");
+      usb_puti(analog8(MONKI));
+      usb_puts("\n\r");
+    }
+    return 1;
+}
+
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dio.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dio.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/dio.h	(revision 1346)
@@ -0,0 +1,182 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+these are ALL the pins
+don't use unless you know what you're doing
+*/
+
+/*
+DIO pins on new dragonfly boards are shown below:
+-----------------------------------------------
+| _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+-----------------------------------------------
+| _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+-----------------------------------------------
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+#define _PIN_D1 33  // pin DIO7
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42  // pin DIO0
+#define _PIN_E3 43  // pin DIO1
+#define _PIN_E4 44  // pin DIO2
+#define _PIN_E5 45  // pin DIO3
+#define _PIN_E6 46  // pin DIO4
+#define _PIN_E7 47  // pin DIO5
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#define PIN_LED1 58
+
+
+/* Buttons */
+#define PIN_BTN PING
+#define BTN2 PING1
+#define BTN1 PING0
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+int button1_read( void );
+int button1_click( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+int button2_click( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/reset.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/reset.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/reset.c	(revision 1346)
@@ -0,0 +1,27 @@
+/*
+reset.h - contains reset() function that resets the AVR
+author: James Kong
+
+Last Modified:
+
+3.7.2007 - James
+    created reset.c
+*/
+
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <reset.h>
+
+/*
+Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+to reset the AVR.  The reset clears all memory and resets all registers
+with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+and Status Register (MCUCSR).
+*/
+void reset(void)
+{
+    WDTCR &= 0xF8;
+    WDTCR |= 0x08;
+    _delay_ms(15);
+}
+
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/bom.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/bom.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/bom.h	(revision 1346)
@@ -0,0 +1,55 @@
+
+#ifndef _BOM_H
+#define _BOM_H
+
+
+/*
+
+
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+
+*/
+
+
+/*
+the analog pin definitions from dio.h DO NOT work here,
+so we must use PF0 from avrgcc (as opposed to _PIN_F0).
+BUT the dio pin definitions from dio.h must be used (no PE...).
+
+also, _PIN_E2 is initialized to high for some reason,
+which turns the BOM on when the robot is turned on.
+WORK-AROUND: call digital_output(_PIN_E2,0) at some point.
+
+*/
+
+#define MONKI PF0         //analog (yellow)
+//------------------------//
+#define MONKL _PIN_E2     //green
+#define MONK1 _PIN_E3     //blue
+#define MONK0 _PIN_E4     //white
+//------------------------//
+#define MONK3 _PIN_E6     //blue
+#define MONK2 _PIN_E7     //white 
+
+
+int getMaxBom( void );
+
+int printAllBoms(void);
+char bytetosymb(unsigned int c);
+
+void bom_on(void);
+void bom_off(void);
+
+void output_high(int which);
+void output_low(int which);
+
+
+#endif
+
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/rangefinder.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/rangefinder.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/rangefinder.c	(revision 1346)
@@ -0,0 +1,135 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "dragonfly_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+void range_init(void){
+  digital_output(_PIN_B4,0);
+}
+
+int read_distance (int range_id) {  
+  return analog8(range_id);
+}
+
+
+int linearize_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+
+
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+/*
+int linearize_distance (int reading) {
+
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+
+}*/
+
+
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+
+/*
+int log_distance(int distance) {
+
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+
+	return 0;
+
+*/
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/reset.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/reset.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/reset.h	(revision 1346)
@@ -0,0 +1,12 @@
+/*
+reset.h - contains reset() function that resets the AVR
+*/
+
+
+/*
+Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+to reset the AVR.  The reset clears all memory and resets all registers
+with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+and Status Register (MCUCSR).
+*/
+void reset(void);
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/rangefinder.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/rangefinder.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/rangefinder.h	(revision 1346)
@@ -0,0 +1,62 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+
+#define IR1 6
+#define IR2 5
+#define IR3 4
+#define IR4 3
+#define IR5 2
+
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+
+void range_init(void);
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lights.c
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lights.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/lights.c	(revision 1346)
@@ -0,0 +1,310 @@
+/*
+  lights.c
+  Controls orb1 and orb2. Also contains the framework for a software PWM that may be used for servos in the future.
+
+  author: CMU Robotics Club, Colony Project
+
+  Change Log:
+  2.4.07 - Aaron
+	Revamped orb code so it works.  Need to check interaction with rtc, and tweak some colors.
+
+  2.1.07 - James
+	Modified sort_buffer() to prune for repeats.  PWM now uses orb_buf_size for the number of orb values in orb_time_arr[].
+  Changed sorting algorithm used in sort_buffer() to selection sort (faster). And it works now.
+
+  1.25.07 - KWoo
+	Deleted old FF+ code to make it cleaner. Commented code. This all works. Note however that if you ever plan to use the
+  software PWM (which is this) you will need to change the implementation of orb_enable() and orb_disable() to not
+  shutdown the PWM.
+
+*/
+
+#include "lights.h"
+#include "dragonfly_lib.h"
+
+#define ORB_COUNT 8	//please dont change this, or bad things might happen
+
+struct ORB_NODE {
+  uint8_t num;
+  uint16_t angle;
+};
+
+struct ORB_CHANGE {
+  uint16_t port_val;
+  uint16_t split_time_period;
+};
+
+
+struct ORB_STATUS_STRUCT {
+  struct ORB_NODE orbs[ORB_COUNT];
+  uint16_t orb_angles[ORB_COUNT];
+  struct ORB_CHANGE changes[ORB_COUNT+1];
+  uint8_t change_count;
+  uint8_t new_angles;
+  uint8_t current_orb;
+
+} ORB_STATUS;
+
+void orb_sort(void);
+void orb_setup_pulse(void);
+
+SIGNAL (SIG_OUTPUT_COMPARE3C){
+
+  //pull the correct ones down
+  ORBPORT &= (~ORBMASK)|(ORB_STATUS.changes[ORB_STATUS.current_orb].port_val);
+
+  ++ORB_STATUS.current_orb; //now look at next orb transition
+
+  if (ORB_STATUS.current_orb < ORB_STATUS.change_count) { //if it isnt the end...
+	  
+    //setup timer for next pull down
+    OCR3C = TCNT3+ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period;
+		 
+  }
+  else { //we are done with these pulses
+		orb_setup_pulse();
+  }
+
+}
+
+
+//sets a channel to a value
+void orb_set_angle(int orb, int angle) {
+	uint8_t mysreg;
+	
+	orb=orb&0x07; //only have 8
+	angle=angle&0xff; //only accept 0-255
+	angle=255-angle; //inverse intensity
+	angle=angle<<2; //scale up so that we dont run it too often
+	angle+=3; //0 values dont really work
+  if (ORB_STATUS.orb_angles[orb] != angle) { //if the angle has changed
+	  mysreg=SREG; 
+	  cli(); //disable interrupts
+    ORB_STATUS.orb_angles[orb] = angle; //update angle
+    ORB_STATUS.new_angles = 1;
+	  SREG=mysreg; //put interrupt status back
+  }
+}
+
+
+void orb_sort(void) {
+  int done = 0, i;
+   
+  while (! done) {
+    done = 1;
+
+    for (i = 0; i < ORB_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+      if (ORB_STATUS.orbs[i].angle > ORB_STATUS.orbs[i+1].angle) {
+        ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+        ORB_STATUS.orbs[i+1].angle ^= ORB_STATUS.orbs[i].angle;
+        ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+
+        ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+        ORB_STATUS.orbs[i+1].num ^= ORB_STATUS.orbs[i].num;
+        ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+
+        done = 0;
+      }
+    }
+  }
+}
+
+//calculate the split times
+void orb_setup_pulse(void) {
+  int i;
+  uint16_t my_port;
+  uint16_t sum = 0;
+  uint16_t split_time;
+
+  my_port = 0xff; //all on
+
+  if (ORB_STATUS.new_angles) {
+
+    ORB_STATUS.change_count = 0;
+	  for (i = 0; i < ORB_COUNT; ++i) { //get the new values
+      ORB_STATUS.orbs[i].angle = ORB_STATUS.orb_angles[ORB_STATUS.orbs[i].num];
+    }
+
+    orb_sort(); //sort them
+    ORB_STATUS.new_angles = 0;
+
+    for (i = 0; i < ORB_COUNT; ++i) { //calculate split times
+      split_time = ORB_STATUS.orbs[i].angle - sum;
+      my_port &= ~_BV(ORB_STATUS.orbs[i].num);
+		 
+      for (; i < ORB_COUNT - 1 && ORB_STATUS.orbs[i].angle == ORB_STATUS.orbs[i+1].angle; ++i) {
+        my_port &= ~_BV(ORB_STATUS.orbs[i+1].num); //look for doups
+      }
+		 
+      ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port; //which pins are low
+      ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = split_time;
+         
+      ++ORB_STATUS.change_count;
+		 
+      sum += split_time;
+    }
+
+    ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port;
+    ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = ORB_RESET - sum; //get a constant period
+
+    ++ORB_STATUS.change_count;
+
+  }
+
+
+
+  ORB_STATUS.current_orb = 0;
+
+  ORBPORT |= ORBMASK; //start with all high
+	OCR3C = TCNT3 + ORB_STATUS.changes[0].split_time_period; //wait for first split
+
+}
+
+
+//Initializes the PWM for Orb control. This must be called before the Orbs are used for them to function.
+void orb_init() 
+{	
+  int i;
+  uint8_t mysreg;
+   
+  ORBDDR |= ORBMASK;	//all outputs
+   
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+  for (i = 0; i < ORB_COUNT; ++i) {
+    ORB_STATUS.orbs[i].num = i;
+    ORB_STATUS.orbs[i].angle = 1023;	//127 is a pretty stupid start angle, but oh well
+    ORB_STATUS.orb_angles[i] = 1023;
+  }
+
+  ORB_STATUS.new_angles = 1;
+  ORB_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C = 0;
+	ETIMSK |= _BV(OCIE3C); //turn on oc3c interrupt
+	OCR3C = TCNT3+ORB_RESET;
+
+	SREG=mysreg;
+
+}
+
+//Set both Orbs (1 and 2) to the same color as specified
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb1_set(red_led,green_led,blue_led);
+	orb2_set(red_led,green_led,blue_led);
+
+}
+
+//Sets Orb1 to the specified color
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb_set_angle(0,red_led);
+	orb_set_angle(1,green_led);
+	orb_set_angle(2,blue_led);
+}
+
+//Sets Orb2 to the specified color
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {	
+	orb_set_angle(4,red_led);
+	orb_set_angle(5,green_led);
+	orb_set_angle(6,blue_led);
+}
+
+
+//Sets both orbs to the same color using the color defines
+void orb_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb_set(red, green, blue);
+}
+//Sets both orbs to the same color using the color defines
+void orb1_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb1_set(red, green, blue);
+}
+//Sets both orbs to the same color using the color defines
+void orb2_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb2_set(red, green, blue);
+}
+
+//DOES THIS WORK?
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+/* If we use the PWM for anything else besides the ORB, this implementation needs to be done better */
+void orb_disable()
+{
+	TCCR3B &= 0;  	//Turn off everything
+	ORB_PORT |= _BV(ORB1_RED);
+	ORB_PORT |= _BV(ORB1_GREEN);
+	ORB_PORT |= _BV(ORB1_BLUE);
+	ORB_PORT |= _BV(ORB2_RED);
+	ORB_PORT |= _BV(ORB2_GREEN);
+	ORB_PORT |= _BV(ORB2_BLUE);
+}
+
+//DOES THIS WORK?
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+//	TCCR0 |= _BV(COM01) | _BV(COM00)  | _BV(WGM00) | _BV(CS01);	//Toggle OC Pin on match, FAST PWM Mode, clock/8
+	TCCR3B =_BV(CS31);
+
+}
+
+void orb_tester()
+{
+	orb_init();
+	lcd_init();
+	sei();
+
+	while(1)
+	{
+		orb_set_color(RED);
+		//orb_set1(128,128,128);
+		//orb_set2(1,56,255);
+		delay_ms(100);
+		for (int i = 0; i < ORB_COUNT; i++) {
+			lcd_putint(ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period>>3);
+			lcd_putchar(' ');
+		}
+		
+		delay_ms(2000);
+		lcd_clear_screen();
+		orb_set_color(GREEN);
+		//orb_set1(128,128,128);
+		//orb_set2(128,128,128);
+		delay_ms(100);
+		for (int i = 0; i < ORB_COUNT; i++) {
+			lcd_putint(ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period>>3);
+			lcd_putchar(' ');
+		}
+		
+		delay_ms(2000);
+		lcd_clear_screen();
+	}
+}
Index: branches/scout/projects/colonet/robot/dragonfly_wireless_relay/ring_buffer.h
===================================================================
--- branches/scout/projects/colonet/robot/dragonfly_wireless_relay/ring_buffer.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/dragonfly_wireless_relay/ring_buffer.h	(revision 1346)
@@ -0,0 +1,115 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs Could not create buffer of non byte-sized elements due to modding with sizeof(queue).  
+ * 		  Fixed 3/2/07, Felix Duvallet and Brad Neuman
+ */
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+		uint8_t buffer_size;			\
+	} __VA_ARGS__
+
+
+/** @brief Initializes the ring buffer, setting its size to the correct value
+ *
+ *	@param buf The ring buffer to initialize.
+ *
+ *  @param size The size of the ring buffer (in array elements)
+ */
+#define RING_BUFFER_INIT(buf, size) 			\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % (buf).buffer_size == (buf).start)
+
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % (buf).buffer_size;	\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % (buf).buffer_size;	\
+	} while (0)
+
+/** @brief Checks the value at the head of the ring buffer without removing it
+ *  and puts it into val_ret. Note that val_ret must be the same type used in
+ *  creating the ring buffer to prevent the compiler from spewing confusing
+ *  errors. Also, this assumes that the ring buffer is not empty.
+ *
+ *  @param buf The ring buffer to check from
+ *  @param val_ret where to put the value checked from the head of the ring
+ */
+ #define RING_BUFFER_PEEK(buf, val_ret)  \
+  do { \
+    (val_ret) = (buf).queue[(buf).start]; \
+  } while(0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/scout/projects/colonet/robot/colonet_firefly+/colonet.c
===================================================================
--- branches/scout/projects/colonet/robot/colonet_firefly+/colonet.c	(nonexistent)
+++ branches/scout/projects/colonet/robot/colonet_firefly+/colonet.c	(revision 1346)
@@ -0,0 +1,335 @@
+/** @file colonet.c
+ * @brief Colonet library for colony robots
+
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ * 
+ * @bug Handler registration not tested
+ * @bug Request reponding not implemented - only accepts commands.
+ */
+
+#include <firefly+_lib.h>
+
+#include "colonet.h"
+
+typedef struct {
+  unsigned char msgId; //is this necessary?
+  void (*handler)(void);
+} UserHandler;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+/* Internal function prototypes */
+void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf);
+unsigned int two_bytes_to_int(char high, char low);
+
+/* Public functions */
+int colonet_handle_message(unsigned char robot_id, char* pkt_buf)
+{
+  ColonetPacket pkt;
+  unsigned char* args; //up to 7 char args
+  unsigned int int_args[3]; //up to 3 int (2-byte) args
+
+  packet_string_to_struct(&pkt, pkt_buf);
+
+  if(pkt.msg_dest != GLOBAL_DEST && pkt.msg_dest != robot_id){ 
+    //message not intended for us
+    return 1;
+  }
+
+  args = pkt.data;
+  
+  /* Hack - could be done more 1337ly with casting, but this way we don't have
+   * to worry about little/big endian stuff */
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if(pkt.msg_type == COLONET_REQUEST){
+    switch(pkt.msg_code){
+      //Sharp
+    case READ_DISTANCE:
+      break;
+    case LINEARIZE_DISTANCE:
+      break;
+    case LOG_DISTANCE:
+      break;
+
+      //Serial
+    case SERIAL_GETCHAR:
+      break;
+    case SERIAL_GETCHAR_NB:
+      break;
+    case SERIAL1_GETCHAR:
+      break;
+    case SERIAL1_GETCHAR_NB:
+      break;
+
+      //Analog
+    case ANALOG8:
+      break;
+    case ANALOG10:
+      break;
+    case WHEEL:
+      break;
+    case BATTERY:
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+      //Dio
+    case DIGITAL_INPUT:
+      break;
+    case BUTTON1_READ:
+      break;
+    case BUTTON2_READ:
+      break;
+
+      //Bumper
+    case DETECT_BUMP:
+      break;
+    }
+
+    /* TODO - send back data! */
+
+  }else if(pkt.msg_type == COLONET_COMMAND){
+    if(pkt.msg_code >= USER_DEFINED_MSG_ID_START && 
+       pkt.msg_code <= USER_DEFINED_MSG_ID_END){
+      if (user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler) {
+        /* Call the user's handler function if it the function's address
+         * is non-zero (has been set) */
+        user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler();
+      }
+
+      return 0;
+    }
+
+    switch(pkt.msg_code){
+    default:
+      printf("%s: Error - message code %d not implemented\n", __FUNCTION__,
+             pkt.msg_code);
+      return -1;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+      
+      //LCD
+    case LCD_INIT:
+      lcd_init();
+      break;
+    case LCD_CLEAR_SCREEN:
+      lcd_clear_screen();
+      break;
+    case LCD_PUTBYTE:
+      lcd_putbyte(args[0]);
+      break;
+    case LCD_PUTCHAR:
+      lcd_putchar((char)args[0]);
+      break;
+    case LCD_PUTSTR:
+      lcd_putstr((char*)args);
+      break;
+    case LCD_GOTOXY: 
+      lcd_gotoxy(int_args[0], int_args[1]);
+      break;
+    case LCD_PUTINT: 
+      lcd_putint(int_args[0]);
+      break;
+    case ORB_INIT:
+      orb_init();
+      break;
+      //Orb
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+    case ORB_SET_DIO:
+      orb_set_dio(int_args[0], int_args[1], int_args[2]);
+      break;
+    case LED_INIT:
+      led_init();
+      break;
+    case LED_USER:
+      led_user(int_args[0]);
+      break;
+    case ORB_SEND:
+      //orb_send();
+      break;
+      //Motors
+    case MOTORS_INIT:
+      motors_init();
+      break;
+    case MOTOR1_SET:
+      motor1_set(int_args[0], int_args[1]);
+      break;
+    case MOTOR2_SET:
+      motor2_set(int_args[0], int_args[1]);
+      break;
+    case MOTORS_OFF:
+      motors_off();
+      break;
+
+      /*
+    case MOVE:
+      
+      break;
+      */
+
+      //SERIAL
+    case SERIAL_INIT:
+      serial_init(int_args[0]);
+      break;
+    case SERIAL_PUTCHAR:
+      serial_putchar((char)args[0]);
+      break;
+    case SERIAL1_INIT:
+      serial1_init(int_args[0]);
+      break;
+    case SERIAL1_PUTCHAR:
+      serial1_putchar((char)args[0]);
+      break;
+    case PRINTF:
+      printf("%s", pkt.data);
+      break;
+    case KILL_ROBOT:
+      motors_off();
+      buzzer_off();
+      exit(0); //kill the robot
+      break;
+      //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      analog_init();
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+    case OUTPUT_HIGH:
+      output_high(int_args[0]);
+      break;
+    case OUTPUT_LOW:
+      output_low(int_args[0]);
+      break;
+
+      //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    case BUTTON1_WAIT:
+      button1_wait();
+      break;
+    case BUTTON1_WAIT_LED:
+      button1_wait_led();
+      break;
+    case BUTTON2_WAIT:
+      button2_wait();
+      break;
+    case BUTTON2_WAIT_LED:
+      button2_wait_led();
+      break;
+
+      //WL
+    case WL_INIT:
+      wl_init();
+      break;
+    case PARSE_BUFFER:
+      parse_buffer();
+      break;
+    case WL_SEND:
+      wl_send();
+      break;
+    }
+  }else{
+    printf("%s: Error: Invalid colonet message type", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void))
+{
+  if(msgId < USER_DEFINED_MSG_ID_START || msgId > USER_DEFINED_MSG_ID_END){
+    return -1;
+  }
+
+  /* Register this function in the array */
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+/* Private functions */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf)
+{
+  int i;
+  
+  printf("\npacket:");
+  for(i = 0; i < 16; i++){
+    printf("%d ", pkt_buf[i]);
+  }
+
+  printf("\n");
+
+  dest_pkt->prefix[0] = pkt_buf[0];
+  dest_pkt->prefix[1] = pkt_buf[1];
+  dest_pkt->token_src = pkt_buf[2];
+  dest_pkt->token_dest = pkt_buf[3];
+  dest_pkt->msg_dest = pkt_buf[4];
+  dest_pkt->msg_type = pkt_buf[5];
+  dest_pkt->msg_code = pkt_buf[6];
+  
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    dest_pkt->data[i] = pkt_buf[7+i];
+  }
+
+  dest_pkt->num_robots = pkt_buf[PACKET_SIZE-2];
+  dest_pkt->checksum = pkt_buf[PACKET_SIZE-1];
+}
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+static unsigned int two_bytes_to_int(char high, char low)
+{
+  return (((unsigned int)high)<<8) + (unsigned int)low;
+}
Index: branches/scout/projects/colonet/robot/colonet_firefly+/colonet.h
===================================================================
--- branches/scout/projects/colonet/robot/colonet_firefly+/colonet.h	(nonexistent)
+++ branches/scout/projects/colonet/robot/colonet_firefly+/colonet.h	(revision 1346)
@@ -0,0 +1,34 @@
+/** @file colonet.h
+ * @brief Colonet library for colony robots
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ */
+
+#ifndef COLONET_H_
+#define COLONET_H_
+
+#include <colonet_defs.h>
+
+/** @brief Handles colonet packets.  Should be called by parse_buffer 
+ * when it is determined that a colonet message has been received.
+ *
+ * @param robot_id The robot id
+ * @param pkt_buf The packet buffer (e.g. wl_buf)
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_handle_message(unsigned char robot_id, char* packet);
+
+/** @brief Registers a new colonet message handler function.  If a message
+ * with msgId is received, then handler will be called.
+ * 
+ * @param msgId The message id of the handler to be registered.  Must be
+ * between USER_DEFINED_MSG_ID_START and USER_DEFINED_MSG_ID_END
+ * @param handler The function to be called if a colonet packet with message
+ * id msgId is received
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+#endif
Index: branches/scout/projects/colonet/Makefile
===================================================================
--- branches/scout/projects/colonet/Makefile	(nonexistent)
+++ branches/scout/projects/colonet/Makefile	(revision 1346)
@@ -0,0 +1,30 @@
+SERVER=server/ColonetServer
+CLIENT=client/build/Colonet.jar
+ROBOT=robot/robot_slave/robot_slave.elf
+
+SERVER_FILES=server/*.cpp server/includes/*.h
+CLIENT_FILES=client/*.java
+ROBOT_FILES=robot/robot_slave/*.c robot/colonet_dragonfly/*.c
+
+default: $(SERVER) $(CLIENT) $(ROBOT)
+
+clean: clean_server clean_client clean_robot
+
+$(SERVER): $(SERVER_FILES)
+	cd server/vision; make
+	cd server; make
+
+$(CLIENT): $(CLIENT_FILES)
+	cd client; make
+
+$(ROBOT): $(ROBOT_FILES)
+	cd robot/robot_slave; make
+
+clean_server:
+	cd server; make clean
+
+clean_robot:
+	cd robot/robot_slave; make clean
+
+clean_client:
+	cd client; make clean
Index: branches/scout/projects/colonet/README
===================================================================
--- branches/scout/projects/colonet/README	(nonexistent)
+++ branches/scout/projects/colonet/README	(revision 1346)
@@ -0,0 +1,40 @@
+Eugene Marinelli
+1/29/07
+
+How to run Colonet.
+
+Part I - Robot setup.
+  1) Go to colony/trunk/code/projects/libwireless/lib and run "make".
+  2) Go to colony/trunk/code/projects/colonet/robot/colonet_dragonfly and run "make".
+  3) Put a robot in programming mode and plug it into the computer.
+  4) Go to colony/trunk/code/projects/colonet/robot/robot_slave and run "make program".
+  Now the robot is ready.
+
+Part II - Server setup.
+  NOTE: The computer running the server must have OpenCV installed.  It can
+  be downloaded from http://opencvlibrary.sourceforge.net/.
+
+  1) Go to colony/trunk/code/projects/libwireless/lib and run "make colonet".
+  2) Go to colony/trunk/code/projects/colonet/server and run "make".
+  3) In the same directory, run "./ColonetServer".
+  Now the server is ready.
+
+Part III - Client (GUI) setup.
+  1) Go to colony/trunk/code/projects/colonet/client and run "make".
+  2) In the same directory, run "sudo make install" to copy the program to the www directory.
+  3) In your browser, to go http://server_hostname/colonet, where server_hostname is the hostname of the computer that
+     the server is running and the GUI app is hosted.
+  Now the client is ready.
+
+
+TROUBLESHOOTING
+
+If you get an error like:
+   Failed to write to xbee, error 9.
+   Failed to join token ring.
+   ERROR - colonet_wl_init failed.
+   initialize_server: initWireless failed
+
+The xbee on the specified wireless port/file descriptor is not being recognized by the computer (assuming it is
+plugged in and you are using the right port (/dev/ttyUSB0, /dev/ttyUSB1)).  Try unplugging it and plugging it in again.
+Check the wireless port (-w option of ColonetServer).
Index: branches/scout/projects/girlscouts/gs.h
===================================================================
--- branches/scout/projects/girlscouts/gs.h	(nonexistent)
+++ branches/scout/projects/girlscouts/gs.h	(revision 1346)
@@ -0,0 +1,12 @@
+#ifndef _GS_H_
+#define _GS_H_
+
+
+#define forward(t) move(175,0); delay_ms((t)); move(0,0); delay_ms(200);
+#define left(t) move(0,60); delay_ms((t)); move(0,0); delay_ms(200);
+#define right(t) move(0,-60); delay_ms((t)); move(0,0); delay_ms(200);
+
+#define START_PROGRAM int main(void){dragonfly_init(ALL_ON);
+#define END_PROGRAM  while(1); return 0; }
+
+#endif
Index: branches/scout/projects/girlscouts/main.c
===================================================================
--- branches/scout/projects/girlscouts/main.c	(nonexistent)
+++ branches/scout/projects/girlscouts/main.c	(revision 1346)
@@ -0,0 +1,12 @@
+#include <dragonfly_lib.h>
+#include <move.h>
+#include "gs.h"
+
+START_PROGRAM
+
+forward(1000)
+left(500)
+right(700)
+
+END_PROGRAM
+
Index: branches/scout/projects/girlscouts/Makefile
===================================================================
--- branches/scout/projects/girlscouts/Makefile	(nonexistent)
+++ branches/scout/projects/girlscouts/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+# USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/driver.c
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/driver.c	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/driver.c	(revision 1346)
@@ -0,0 +1,238 @@
+/** driver for bfs swarming
+	execute bfs behavior
+*/
+
+#define COLOR_DETECT // comment out if color detect hardware is unavailable
+
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <dio.h>
+#include <analog.h>
+#include "bfs_fsm.h"
+#include "smart_run_around_fsm.h"
+
+
+//A6
+#define RED_LED PIN_ADC4
+//A8
+#define GREEN_LED PIN_ADC5
+//A7
+#define BLUE_LED PIN_ADC6
+
+
+// COLOR_NOTHING {255,255,255}
+#define COLOR_WALL 2 // ratio of blue/green
+#define COLOR_GREEN 1
+
+
+#define SWARM_GROUP   15
+#define SWARM_ACTION  16
+
+
+/* swarm wireless packet handlers */
+void swarm_receive (char type, int source, unsigned char* packet,
+                          int length);
+PacketGroupHandler swarmHandler = {SWARM_GROUP, NULL, NULL, 
+                                     &swarm_receive, NULL};
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  orb_init();
+  orb_set_color(PURPLE);
+  wl_init();
+  wl_set_channel(0xF); // set wireless channel
+  
+  // register swarm packet
+  wl_register_packet_group(&swarmHandler);
+  
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+  usb_init();
+  
+  usb_puts("start\n\r");
+  
+  
+#ifdef COLOR_DETECT
+  /* set up color detect */
+  int rgb[3] = {0,0,0};
+  int rgb_old1[3] = {-1,0,0};
+  int rgb_old2[3] = {-1,0,0};
+  int rgb_avg[3] = {0,0,0};
+	
+	//long int distance_red;
+	//long int distance_green;
+	//long int distance_blue;
+  
+  int ratio_gb;
+  
+	//int blue[3] = {255,245,249};
+	//int red[3] = {190,122,126};
+	//int green[3] = {118, 80, 86};
+
+  analog_init(ADC_START);
+  
+#else
+
+  run_around_init();
+
+#endif
+
+  int object = 0;
+	
+
+
+  while(1) {
+    wl_do(); // do wireless
+    
+#ifdef COLOR_DETECT
+    // need color sensor code here
+    digital_output(BLUE_LED, 1);
+		
+		delay_ms(5);
+		analog_stop_loop();
+		rgb[2] = analog8(AN9);
+		analog_start_loop();
+		
+		digital_output(BLUE_LED,0);
+		digital_output(RED_LED, 1);
+		delay_ms(5);
+		
+		analog_stop_loop();
+		rgb[0] = analog8(AN9);
+		analog_start_loop();
+		
+		digital_output(RED_LED, 0);
+		digital_output(GREEN_LED,1);
+		delay_ms(5);
+		
+		analog_stop_loop();
+		rgb[1] = analog8(AN9);
+		analog_start_loop();
+		
+		digital_output(GREEN_LED,0);
+    
+    // check with older values
+    if (rgb_old1[0] != -1 && rgb_old2[0] != -1) {
+      rgb_avg[0] = (rgb[0]+rgb_old1[0]+rgb_old2[0])/3;
+      rgb_avg[1] = (rgb[1]+rgb_old1[1]+rgb_old2[1])/3;
+      rgb_avg[2] = (rgb[2]+rgb_old1[2]+rgb_old2[2])/3;
+    } else {
+      rgb_avg[0] = rgb[0];
+      rgb_avg[1] = rgb[1];
+      rgb_avg[2] = rgb[2];
+    }
+    
+    if (rgb_old1[0] == -1) {
+      rgb_old1[0] = rgb[0];
+      rgb_old1[1] = rgb[1];
+      rgb_old1[2] = rgb[2];
+    } else {
+      if (rgb_old1[0] < rgb[0]+20 
+        && rgb_old1[0] > rgb[0]-20) {
+        rgb_old1[0] = rgb[0];        
+        rgb_old2[0] = rgb_old1[0];
+      }
+      if (rgb_old1[1] < rgb[1]+20 
+        && rgb_old1[1] > rgb[1]-20) {
+        rgb_old1[1] = rgb[1];
+        rgb_old2[1] = rgb_old1[1];
+      }
+      if (rgb_old1[2] < rgb[2]+20 
+        && rgb_old1[2] > rgb[2]-20) {
+        rgb_old1[2] = rgb[2];
+        rgb_old2[2] = rgb_old1[2];
+      }
+    }    
+    
+    // check ratio
+    ratio_gb = rgb_avg[1] - rgb_avg[2];
+    if (ratio_gb < -20)
+      ratio_gb = 2;
+    else if (ratio_gb > 20)
+      ratio_gb = 0;
+    else
+      ratio_gb = 1;
+    
+    if (rgb_avg[0] > 200 && rgb_avg[1] > 200 && rgb_avg[2] > 200) {
+      // we think this is open area
+      move(170,0);
+    } else if (ratio_gb == COLOR_WALL) {
+      // we think this is a wall, so turn away
+      move(170,90);
+      delay_ms(400);
+      move(170,0);
+    } else if (ratio_gb == COLOR_GREEN) {
+      // we think this is a green object, so swarm
+      object = 1;
+      move(0,0);
+    }
+    else
+      move(170,0); // just go forth
+		
+		/*distance_red = 1;
+		distance_green = rgb[1] - rgb[0];
+		distance_blue = rgb[2] - rgb[0];
+		
+		distance_blue = distance_blue * rgb[0]/255;
+		distance_green = distance_green * rgb[0]/255;*/
+		
+    usb_puts("R:");
+		usb_puti(rgb_avg[0]);
+		usb_puts("\tG:");
+		usb_puti(rgb_avg[1]);
+		usb_puts("\tB:");
+		usb_puti(rgb_avg[2]);
+		usb_puts("\t\tratio_gb:");
+    usb_puti(ratio_gb);
+    usb_puts("\r\n");
+    
+#else
+    // do smart run around until find object
+    run_around_FSM();
+    //move(170,0);
+#endif  
+    
+    /*usb_puts("R:");
+		usb_puti(distance_red);
+		usb_puts("\tG:");
+		usb_puti(distance_green);
+		usb_puts("\tB:");
+		usb_puti(distance_blue);
+		usb_puts("\r\n");*/
+    
+    if (object || button2_read()) { // if we find the object 
+      // send packet to call for swarm on object
+      wl_send_global_packet(SWARM_GROUP,SWARM_ACTION,
+        NULL,0,0); 
+      move(0,0); // stop
+      break; // break loop
+    } 
+  }
+  
+  // object manip goes here
+  orb_set_color(YELLOW);
+  while(1) {
+    wl_do();
+  }
+
+  return 0;
+}
+
+
+void swarm_receive (char type, int source, unsigned char* packet,
+                          int length)
+{
+  switch (type)
+  {
+    case SWARM_ACTION:
+      // do swarm action
+      bfs_init(source); // set robot_id to find
+      while(1) {
+        bfs_fsm(); // do bfs
+      }
+  }
+}
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/Makefile
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/Makefile	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com2
+#/dev/tty.usbserial*
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless #-I$(COLONYROOT)/code/projects/colonet/lib -I$(COLONYROOT)/code/projects/colonet/lib/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless #-lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/main.c.test
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/main.c.test	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/main.c.test	(revision 1346)
@@ -0,0 +1,114 @@
+#include <dragonfly_lib.h>
+
+
+//A6
+#define RED_LED PIN_ADC4
+//A8
+#define GREEN_LED PIN_ADC5
+//A7
+#define BLUE_LED PIN_ADC6
+
+int main(void) {
+	dragonfly_init(ALL_ON);
+	//range_init();
+
+	int rgb[3] = {0,0,0};
+	
+	long int distance_red;
+	long int distance_green;
+	long int distance_blue;
+	
+	int blue[3] = {255,245,249};
+	int red[3] = {190,122,126};
+	int green[3] = {118, 80, 86};
+	
+	
+	//Turn each pin on in sequential order
+	
+	analog_init(ADC_START);
+
+	while(1)
+	{		
+		digital_output(BLUE_LED, 1);
+		
+		delay_ms(1);
+		analog_stop_loop();
+		rgb[2] = analog8(AN9);
+		analog_start_loop();
+		
+		digital_output(BLUE_LED,0);
+		digital_output(RED_LED, 1);
+		delay_ms(1);
+		
+		analog_stop_loop();
+		rgb[0] = analog8(AN9);
+		analog_start_loop();
+		
+		digital_output(RED_LED, 0);
+		digital_output(GREEN_LED,1);
+		delay_ms(1);
+		
+		analog_stop_loop();
+		rgb[1] = analog8(AN9);
+		analog_start_loop();
+		
+		digital_output(GREEN_LED,0);
+		
+		distance_red = 1;
+		distance_green = rgb[1] - rgb[0];
+		distance_blue = rgb[2] - rgb[0];
+		
+		distance_blue = distance_blue * rgb[0]/255;
+		distance_green = distance_green * rgb[0]/255;
+		
+		usb_puti(distance_red);
+		usb_puts("\t");
+		usb_puti(distance_green;
+		usb_puts("\t");
+		usb_puti(distance_blue);
+		usb_puts("\n");
+		
+		/*
+		distance_red = 0;
+		distance_green = 0;
+		distance_blue = 0;
+		{
+					
+			for(int i = 0; i < 3; i++)
+			{
+				distance_red += (red[i]-rgb[i])*(red[i]-rgb[i]);
+				distance_green += (green[i]-rgb[i])*(green[i]-rgb[i]);
+				distance_blue += (blue[i]-rgb[i])*(blue[i]-rgb[i]);
+			}
+			if(distance_red < distance_blue)
+			{
+				if(distance_red < distance_green)
+				{	
+					usb_puti(distance_red);
+					usb_puts(" BROWN\n");
+				}	
+				else
+				{
+					usb_puti(distance_green);
+					usb_puts(" GREEN\n");
+				}
+			}
+			else
+			{
+				if(distance_blue < distance_green)
+				{
+					usb_puti(distance_blue);
+						usb_puts(" ORANGE\n");
+				}
+				else
+				{
+					usb_puti(distance_green);
+					usb_puts(" GREEN\n");
+				}
+			}
+		}	
+		*/
+				
+		delay_ms(50);
+	}
+}
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/main.c.txt
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/main.c.txt	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/main.c.txt	(revision 1346)
@@ -0,0 +1,83 @@
+#include <inttypes.h>
+#include <avr/interrupt.h>
+#include "serial.h"
+#include "timer.h"
+#include "analog.h"
+#include <stdlib.h>
+#include "delay.h"
+#include "servo.h"
+#include "motor.h"
+
+#define __STDIO_FDEVOPEN_COMPAT_12
+#include <stdio.h>
+
+extern int16_t error_global;
+extern uint16_t mot_global;
+
+
+/** @brief Main function - initializes and then runs a simple button controlled
+ *	test.
+ */
+int main(void)
+{
+
+	uint16_t angle;
+	uint16_t pyro_reading;
+	
+	analog_init();
+
+	servo_init();
+	angle = 8000;
+
+	motor_init();
+
+	timer_init();
+
+	serial_init(BAUD9600);
+
+	// Make the LED an output
+	DDRG |= _BV(PG2);
+
+	DDRE |= _BV(PE6);
+
+	fdevopen(&serial_putchar, &serial_getchar, 0);
+
+	// Enable interrupts
+	sei();
+
+	delay_ms(2000);
+
+	motor_set(1,255,1);
+
+	delay_ms(2000);
+
+	motor_set(1,0,1);
+	while (1)
+	{
+		pyro_reading = analog8(1);
+		printf("Pyro =   %3u\r\n", pyro_reading);
+		if (pyro_reading > 133)
+		{
+			angle = angle - 500;
+			if (angle < 1000)
+				angle = 1000;
+			servo_set_angle(angle);
+		}
+		else if (pyro_reading < 100)
+		{
+			angle = angle + 500;
+			if (angle > 15000)
+				angle = 15000;
+			servo_set_angle(angle);
+		}		
+		//printf("Knob =   %3u\t", analog8(6));
+		//printf("Accel0 = %3u\t", analog8(1));
+		//printf("Accel1 = %3u\t", analog8(2));
+		//printf("Gyro =   %3u\r\n", analog8(0));
+
+		delay_ms(200);
+
+
+	}
+}
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/bfs_fsm.c
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/bfs_fsm.c	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/bfs_fsm.c	(revision 1346)
@@ -0,0 +1,323 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "queue.h"
+#include <string.h>
+#include "bfs_fsm.h"
+#include "smart_run_around_fsm.h"
+#include "orbit_fsm.h"
+
+/* Used to find a robot (or other object)
+
+  Uses bom and token ring and rangefinders
+  
+  Assumes:
+    robots are already in a token ring
+*/
+
+
+/* private function prototypes */
+void bfs_evaluate_state(void);
+int bfs_follow(void);
+
+
+/* init */
+void bfs_init(int robot) {
+  range_init();
+  analog_init(1);
+  motors_init();
+  orb_init();
+  orb_enable();
+  usb_init();
+  run_around_init();
+ 
+  /*Start in the start state, BFS_SEEK */ 
+  bfs_state = BFS_SEEK;
+  
+  bfs_otherRobot = robot; // set which robot to seek
+  bfs_my_id = wl_get_xbee_id();
+  bfs_follow_id = -1;
+  
+  bfs_pControl=0;
+  bfs_bom = 0;
+  bfs_bom_count = 0;
+
+  
+  /*Initialize distances to zero.*/ 
+  bfs_d1=1000; bfs_d2=1000; bfs_d3=1000; bfs_d4=1000; bfs_d5=1000;
+  
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void bfs_fsm(void) {
+
+  /* reset some values */
+  bfs_speed = BFS_STRAIGHT_SPEED;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;  
+    
+  wl_do(); // update wireless
+  usb_puts("\n\rwl_do");
+  usb_puts("|state=");
+  usb_puti(bfs_state);
+  usb_puts("|bfs_follow=");
+  usb_puti(bfs_follow_id);
+  usb_puts("|");
+  
+    
+  if (bfs_state == BFS_SEEK) {
+    bfs_follow_id = bfs_follow();
+    wl_do(); // update wireless
+    usb_puti(bfs_follow_id);
+    if (bfs_follow_id != BFS_NO_VAL && bfs_follow_id < BFS_MAX_ROBOTS) {
+      bfs_state = BFS_FOLLOW; // move to follow state
+      bfs_d2=1000;
+      bfs_check_id=0;
+    }
+  }
+  if (bfs_state == BFS_FOLLOW) {
+    /* check robot to follow */
+    if (++bfs_check_id > BFS_CHECK_ID_TIME) {
+      bfs_check_id=0;
+      temp = bfs_follow();
+      wl_do();
+      if (temp == BFS_NO_VAL) {
+        bfs_state = BFS_SEEK;
+        return;
+      } else if (temp != bfs_follow_id)
+        bfs_follow_id = temp;
+    }
+    // get bom reading
+    temp = wl_token_get_my_sensor_reading(bfs_follow_id);
+    if (temp == -1 || temp > 16) {
+      bfs_bom_count++;
+      if (bfs_bom_count > BFS_MAX_BOM_COUNT) {
+        bfs_state = BFS_SEEK;
+        bfs_bom = 255;
+        bfs_bom_count = 0;
+      }
+    }
+    else {
+      bfs_bom = temp;
+          
+      // modify bom reading so right is negative, left is positive
+      if (bfs_bom <= 12)
+        bfs_bom -= 4;
+      else
+        bfs_bom -= 20;
+      
+      bfs_pControl = bfs_bom*4;
+      usb_puti(bfs_bom);
+      
+      
+      // get range reading for front
+      temp=range_read_distance(IR2);
+      bfs_d2=(temp == -1) ? bfs_d2 : temp;
+      usb_puti(bfs_d2);
+      
+      if (bfs_d2 < BFS_SLOW_DISTANCE)
+        bfs_speed = BFS_SLOW_SPEED;
+      
+      if (bfs_d2 < BFS_ORBIT_DISTANCE) {
+        if (bfs_follow_id != bfs_otherRobot) {
+          // check if we can now see a robot that's closer to our goal
+          temp = bfs_follow();
+          wl_do();
+          if (temp == BFS_NO_VAL || temp == bfs_follow_id)
+            bfs_state = BFS_SEEK;
+          else if (temp != bfs_follow_id)
+            bfs_follow_id = temp;
+          return; // redo this function in light of the state changes
+        } else {
+          // orbit the robot
+          bfs_state = BFS_ORBIT; // move to orbit state
+          orbit_init(bfs_follow_id);
+          bfs_d2=1000;
+        }
+      }
+    }  
+  }
+  if (bfs_state == BFS_ORBIT) {   
+    usb_puts("orbiting\n");
+    orbit_state = ORBIT_INSERTION;
+    while(orbit_state != ORBIT_STOP)
+    { orbit_fsm(); }
+    bfs_state = BFS_STOP; // move to stop state  
+  }
+  if (bfs_state == BFS_STOP && bfs_follow_id != bfs_otherRobot) {
+    bfs_state = BFS_SEEK; // seek the otherRobot
+    return;
+  }
+  
+  // evaluate state
+  bfs_evaluate_state();
+}
+
+
+//Acts on state change.
+void bfs_evaluate_state(){
+    switch(bfs_state){
+    case(BFS_SEEK): orb_set_color(RED);
+      // move around
+      run_around_FSM(); // note: better to just incorporate into this file later one
+      break;
+    
+    case(BFS_FOLLOW): orb_set_color(GREEN);
+      // follow another robot
+      move(bfs_speed,bfs_pControl);
+      break;
+      
+    case(BFS_ORBIT): //orb_set_color(BLUE);
+      // orbit a robot
+      //orbit_fsm();
+      //move(0,0);
+      break;
+      
+    case(BFS_STOP): orb_set_color(YELLOW);
+      // stop
+      move(0,0);
+      break;
+      
+    default: orb_set_color(MAGENTA);
+      /*Should never get here, so stop.*/
+      move(0,0);
+      break;
+  }
+}
+
+/* find a robot to follow using BFS 
+  ported from colonybfs by Felix
+*/
+int bfs_follow()
+{
+  
+/* pseudocode for BFS
+
+procedure bfs(v)
+    q := make_queue()
+    enqueue(q,v)
+    mark v as visited
+    while q is not empty
+        v = dequeue(q)
+        process v
+        for all unvisited vertices v' adjacent to v
+            mark v' as visited
+            enqueue(q,v')
+*/
+
+  Queue* q = queue_create();
+
+  //int num_current_robots = wl_token_get_robots_in_ring();
+
+  // keep track of which nodes you have visited.  Indexed by robot #
+  // 1 if visited, 0 if not
+  unsigned char visited_nodes[BFS_MAX_ROBOTS];
+  // keep track of the distance from the start robot to other robots
+  // also indexed by robot#
+  unsigned char node_distances[BFS_MAX_ROBOTS];
+  // this is the path you take
+  unsigned char path[BFS_MAX_ROBOTS];
+    
+  //variables you will need
+  unsigned char current_node;                 //current node
+  unsigned char current_neighbour_node;       //neighbor to the current node
+  unsigned char current_neighbour_val;        //value of that neighbour's sensors
+  unsigned char current_distance;              //keep track of current distance to the start
+    
+  unsigned char large_number = 255;
+  
+  unsigned char* add_value;
+  
+  
+
+  //set visited nodes to all 0
+  memset(visited_nodes, 0, BFS_MAX_ROBOTS);
+  
+  //set all the distances to a very large number
+  //this isn't technically necessary, but it's probably a good thing -- just in case
+  memset(node_distances, large_number, BFS_MAX_ROBOTS);
+  
+  //set the path to all LARGE_NUMBER as well
+  memset(path, BFS_NO_VAL, BFS_MAX_ROBOTS);
+
+  //queue_remove_all(q);
+
+  //add the start node
+  add_value = (unsigned char*)malloc(sizeof(char));
+  (*add_value) = bfs_my_id;
+  queue_add(q, add_value);
+  visited_nodes[bfs_my_id] = 1;
+  node_distances[bfs_my_id] = 0;
+  
+  while(!queue_is_empty(q)){
+    add_value = queue_remove(q);
+    current_node = (*add_value);
+    
+    //get the current distance from you to the start
+    current_distance = node_distances[current_node];
+    
+    //this node is on your 'path'
+    path[current_distance] = current_node;
+    //note: it's OK if this path leads nowhere -- the path will be
+    //overwritten by a node that does lead to the goal
+    //(if there is no path, we set path to null anyways)
+    
+    //from now on, all further nodes will be one further away -- increment
+    current_distance++;
+    
+    
+    //process node -- basically check if it's the goal
+    if(current_node == bfs_otherRobot) {
+      //you reach the goal
+      //return the first robot in the path, which is the one
+      //to follow
+      /*
+      lcd_putchar('.');
+      lcd_putchar('.');
+      for(i = 0; i < MAX_ROBOTS; i++)
+          lcd_putchar(path[i] +48);           //print out the path for fun -- remove this later
+      lcd_putchar('.');
+      lcd_putchar('.');
+      */
+      return path[1];         //path[0] is you.  path[1] is who you want to follow
+    }
+    
+    // go through all nodes adjacent to current
+    // in effect, this means going through the current node's row in the matrix
+    
+    wl_token_iterator_begin();
+    while(wl_token_iterator_has_next()) {
+      //the robot # is actually just the index
+      current_neighbour_node = wl_token_iterator_next();
+      //the value is what is stored in the matrix (this is important)
+      current_neighbour_val = wl_token_get_sensor_reading(current_node,current_neighbour_node);
+      
+      //check for connected-ness and that it was not visited
+      //            unconnected                           visited
+      if( (current_neighbour_val == BFS_NO_VAL) || (visited_nodes[current_neighbour_node]) ) {
+        //if it is either unconnected or previously visited, exit
+        continue;   //go to the next node
+      }
+      
+      //update the distance from the start node to this node
+      node_distances[current_neighbour_node] = current_distance;
+      //also mark it as visited
+      visited_nodes[current_neighbour_node] = 1;
+      
+      //also enqueue each neighbour
+      add_value = (unsigned char*)malloc(sizeof(char));
+      (*add_value) = current_neighbour_node;
+      queue_add(q, add_value);
+    
+    }
+  }
+  
+  //if we get to here, there is no path
+  memset(path, 0, BFS_MAX_ROBOTS);
+  return BFS_NO_VAL;
+
+}
+
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/bfs_fsm.h
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/bfs_fsm.h	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/bfs_fsm.h	(revision 1346)
@@ -0,0 +1,60 @@
+// BFS FSM header file
+
+
+#ifndef _BFS_FSM_H_
+#define _BFS_FSM_H_
+
+//The States: 
+#define BFS_SEEK      12           //do run around
+#define BFS_FOLLOW    13           //follow other robots to location
+#define BFS_ORBIT     15           //Orbit robot
+#define BFS_STOP      16           //Stop.  The default and ending state
+
+
+#define BFS_STRAIGHT_SPEED 170
+
+#define BFS_SLOW_DISTANCE 250
+#define BFS_SLOW_SPEED    160
+
+#define BFS_ORBIT_DISTANCE 175 /* distance to start orbit around robot */
+
+#define BFS_STOP_DISTANCE 120 /* distance to stop for object */
+
+#define BFS_MAX_ROBOTS 20 /* max id of robot in project */
+
+#define BFS_NO_VAL 255
+
+#define BFS_CHECK_ID_TIME 100
+
+
+
+int bfs_state;    /*State machine variable.*/
+int bfs_speed;
+
+int bfs_otherRobot; /* the robot we are seeking */
+int bfs_my_id; /* my wireless id */
+int bfs_follow_id; /* robot to follow */
+int bfs_check_id; /* timer to check robot id to follow */
+
+
+int bfs_pControl;		/*Proportional control variable, determines turn direction.*/
+int bfs_d1,bfs_d2,bfs_d3,bfs_d4,bfs_d5;	/*The five distances taken in by IR.*/
+int bfs_bom; /* bom data */
+int bfs_bom_count;
+
+#define BFS_MAX_BOM_COUNT 5 /* number of missing bom packets before reverting to seek state */
+
+/* bfs_init
+   argument: robot_id that you want to find
+   notes: must call before bfs_fsm
+*/
+void bfs_init(int robot);
+
+
+/* bfs_fsm
+   argument: none
+   notes: call in a while loop to perform FSM action
+*/
+void bfs_fsm(void);
+
+#endif
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/orbit_fsm.c
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/orbit_fsm.c	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/orbit_fsm.c	(revision 1346)
@@ -0,0 +1,156 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "orbit_fsm.h"
+#include "bfs_fsm.h"
+
+/* Used to orbit a robot
+
+  Must be within BOM range of robot before activating
+  
+  orbit_theta_stop requires encoders, and is incomplete
+  
+  Assumes:
+    both robots are already in a token ring
+*/
+
+
+/* private function prototype */
+void orbit_evaluate_state(void);
+
+
+/* primary init */
+void orbit_init(int robot) {
+  //range_init();
+  //analog_init(1);
+  //motors_init();
+  //orb_init();
+  //orb_enable();
+  //usb_init();
+ 
+  /*Start in the start state, ORBIT_SEEK */ 
+  orbit_state = ORBIT_INSERTION;
+  
+  orbit_otherRobot = robot; // set which robot to seek and orbit
+  
+  orbit_pControl=0;
+  orbit_bom = bfs_bom;
+  orbit_theta = 0;
+  orbit_theta_stop = 1000;
+  
+  /*Initialize distances to zero.*/ 
+  orbit_d1=1000; orbit_d2=1000; orbit_d3=1000; orbit_d4=1000; orbit_d5=1000;
+  
+}
+/* secondary init */
+void orbit_init_theta(int robot,int theta) {
+  //range_init();
+  //analog_init(1);
+  //motors_init();
+  //orb_init();
+  //orb_enable();
+  //usb_init();
+ 
+  /*Start in the start state, ORBIT_INSERTION */ 
+  orbit_state = ORBIT_INSERTION;
+  
+  orbit_otherRobot = robot; // set which robot to seek and orbit
+  
+  orbit_pControl=0;
+  orbit_bom = bfs_bom;
+  orbit_theta = 0;
+  orbit_theta_stop = (theta>0)?theta:-1; // check theta_stop
+  
+  /*Initialize distances to zero.*/ 
+  orbit_d1=1000; orbit_d2=1000; orbit_d3=1000; orbit_d4=1000; orbit_d5=1000;
+  
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void orbit_fsm(void) {
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;  
+    
+  //temp=range_read_distance(IR1);
+  //orbit_d1=(temp == -1) ? orbit_d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  orbit_d2=(temp == -1) ? orbit_d2 : temp;
+  
+  //temp=range_read_distance(IR3);
+  //orbit_d3=(temp == -1) ? orbit_d3 : temp;
+  
+  //temp=range_read_distance(IR4);
+  //orbit_d4=(temp == -1) ? orbit_d4 : temp;
+  
+  //temp=range_read_distance(IR5);
+  //orbit_d5=(temp == -1) ? orbit_d5 : temp;
+  
+  wl_do(); // update wireless
+  
+  // get bom reading
+  temp = wl_token_get_my_sensor_reading(orbit_otherRobot);
+  orbit_bom = (temp == -1) ? orbit_bom : temp;
+  
+  // modify bom reading so right is negative, left is positive
+  if (orbit_bom <= 12)
+    orbit_bom -= 4;
+  else
+    orbit_bom -= 20;
+  
+    
+  if (orbit_state == ORBIT_SEEK && orbit_d2 < ORBIT_DISTANCE)
+    orbit_state = ORBIT_INSERTION; // begin to orbit
+  if (orbit_state == ORBIT_INSERTION &&
+    (orbit_bom == ORBIT_DIRECTION || (orbit_bom + 1) == ORBIT_DIRECTION || (orbit_bom - 1) == ORBIT_DIRECTION))
+    orbit_state = ORBIT_ORBITING; // orbit achieved
+  if (orbit_state == ORBIT_ORBITING && ((orbit_d2 < ORBIT_STOP_DISTANCE) 
+    || (orbit_theta >= orbit_theta_stop)))
+    orbit_state = ORBIT_STOP; // orbit obstructed
+  
+  // evaluate state
+  orbit_evaluate_state();
+}
+
+
+//Acts on state change.
+void orbit_evaluate_state(){
+    switch(orbit_state){
+    case(ORBIT_SEEK): orb_set_color(RED);
+      // move towards robot
+      orbit_pControl = orbit_bom*10;      
+      move(ORBIT_STRAIGHT_SPEED,orbit_pControl);
+      break;
+    
+    case(ORBIT_INSERTION): orb_set_color(GREEN);
+      // rotate into orbit, perpendicular to other robot
+      orbit_pControl = -ORBIT_DIRECTION*10;
+      move(ORBIT_STRAIGHT_SPEED/2,orbit_pControl);
+      break;
+      
+    case(ORBIT_ORBITING): orb_set_color(BLUE);
+      // go straight with slight rotation
+      if (orbit_bom == ORBIT_DIRECTION)
+        orbit_pControl = ORBIT_DIRECTION;
+      else if (orbit_bom < ORBIT_DIRECTION)
+        orbit_pControl = ORBIT_DIRECTION-ORBIT_CORRECTION;
+      else
+        orbit_pControl = ORBIT_DIRECTION+ORBIT_CORRECTION;
+      
+      move(ORBIT_STRAIGHT_SPEED,orbit_pControl);
+      break;
+      
+    case(ORBIT_STOP): orb_set_color(YELLOW);
+      move(0,0);
+      break;
+      
+    default: orb_set_color(YELLOW);
+      /*Should never get here, so stop.*/
+      move(0,0);
+      break;
+  }
+}
+
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/queue.c
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/queue.c	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/queue.c	(revision 1346)
@@ -0,0 +1,270 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file queue.c
+ * @brief Queue Implementation
+ *
+ * An implementation of a queue for the colony robots.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include "queue.h"
+#include <wl_defs.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#ifndef ROBOT
+#include <pthread.h>
+#endif
+
+/**
+ * @struct node_def
+ * A node in the queue.
+ **/
+typedef struct node_def
+{
+	/** The item at this point in the queue. **/
+	void* val;
+	/** The next node in the queue. **/
+	struct node_def* next;
+} Node;
+
+/**
+ * Create a queue.
+ *
+ * @return the newly created queue.
+ **/
+Queue* queue_create()
+{
+	Queue* q = (Queue*)malloc(sizeof(Queue));
+	
+	if (q == NULL)
+	{
+		WL_DEBUG_PRINT("Out of memory.\r\n");
+		return NULL;
+	}
+	
+	q->head = NULL;
+	q->size = 0;
+
+	#ifndef ROBOT
+	pthread_mutex_init(&(q->lock), NULL);
+	#endif
+
+	return q;
+}
+
+/**
+ * Destroys a queue, freeing memory.
+ *
+ * @param q the queue to destroy
+ **/
+void queue_destroy(Queue* q)
+{
+	Node* t = q->head;
+	while (t != NULL)
+	{
+		Node* t2 = t->next;
+		free(t);
+		t = t2;
+	}
+
+	#ifndef ROBOT
+	pthread_mutex_destroy(&(q->lock));
+	#endif
+
+	free(q);
+}
+
+/**
+ * Add an element to a queue.
+ *
+ * @param q the queue to add an element to
+ * @param item the item to add to the queue
+ **/
+int queue_add(Queue* q, void* item)
+{
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	Node* n = (Node*)malloc(sizeof(Node));
+	if (n == NULL)
+	{
+		#ifndef ROBOT
+		pthread_mutex_unlock(&(q->lock));
+		#endif
+		return -1;
+	}
+
+	n->val = item;
+	n->next = NULL;
+	
+	if (q->head == NULL)
+	{
+		q->head = n;
+		q->tail = n;
+	}
+	else
+	{
+
+		q->tail->next = n;
+		q->tail = n;
+	}
+	
+	q->size++;
+
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return 0;
+}
+
+/**
+ * Remove an element from the front of a queue.
+ *
+ * @param q the queue to remove the element from
+ *
+ * @return the element which was removed
+ **/
+void* queue_remove(Queue* q)
+{
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+	
+	Node* first = q->head;
+	if (first == NULL)
+	{
+		WL_DEBUG_PRINT("Attempting to remove item \
+			from empty queue.\r\n");
+		WL_DEBUG_PRINT_INT(queue_size(q));
+		#ifndef ROBOT
+		pthread_mutex_unlock(&(q->lock));
+		#endif
+		return NULL;
+	}
+	void* ret = first->val;
+	q->head = first->next;
+	if (q->tail == first)
+		q->tail = NULL;
+	free(first);
+	q->size--;
+
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return ret;
+}
+
+/**
+ * Remove all instances of a given element from a queue.
+ *
+ * @param q the queue to remove the elements from
+ * @param item the element to remove all instances of
+ **/
+void queue_remove_all(Queue* q, void* item)
+{
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	Node* curr = q->head;
+	Node* prev = NULL;
+	
+	while (curr != NULL)
+	{
+		Node* next = curr->next;
+		if (curr->val == item)
+		{
+			if (q->head == curr)
+				q->head = next;
+			if (q->tail == curr)
+				q->tail = prev;
+			if (prev != NULL)
+				prev->next = next;
+			free(curr);
+			q->size--;
+		}
+		else
+			prev = curr;
+		curr = next;
+	}
+	
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+}
+
+/**
+ * Get the number of elements in the queue.
+ *
+ * @param q the queue to get the size of
+ * @return the size of the queue
+ **/
+int queue_size(Queue* q)
+{
+	int size;
+
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	size = q->size;
+ 
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return size;
+}
+
+/**
+ * Check if the queue is empty.
+ * 
+ * @param q the queue to check
+ * @return nonzero if the queue is empty, 0 otherwise
+ **/
+int queue_is_empty(Queue* q)
+{
+	int result;
+
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	result = q->size == 0;
+
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return result;
+}
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/smart_run_around_fsm.c
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,144 @@
+#include <dragonfly_lib.h>
+#include "smart_run_around_fsm.h"
+
+/*A simple behavior for navigating in an environment, i.e. avoiding walls and getting stuck.
+Could be better at not getting stuck.
+
+Latest revision only has two accessible states: move and reverse.
+*/
+
+/* private function */
+void run_around_evaluate_state(void);
+
+void run_around_init(void)
+{
+  //range_init();
+  //analog_init(1);
+  //motors_init();
+  //orb_init();
+  //orb_enable();
+  usb_init();
+ 
+  /*Start in the default state, MOVING*/ 
+  avoid_state=MOVING;
+  /*Set timers to their maximum values.*/
+  crazy_count=CRAZY_MAX;
+  backup_count=0; 
+  pControl=0;
+  
+  /*Initialize distances to zero.*/ 
+  d1=0; d2=0; d3=0; d4=0; d5=0;
+  
+  //orb_set_color(GREEN);
+
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void run_around_FSM(void) {
+  /*Default to moving.*/ 
+  avoid_state=MOVING;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1=(temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /*If the crazy count is in it's >>3 range, it acts crazy.*/
+  if(crazy_count<=(CRAZY_MAX>>3))
+  {
+    avoid_state=CRAZY;
+    crazy_count--;
+    
+    if(crazy_count<0) crazy_count=CRAZY_MAX;
+    
+    run_around_evaluate_state();
+    return;
+  }
+  
+  //Checks the forward distance to see if it should back up, if so...state backwards.
+  if((d2!=-1)&&(d2 < 150)){
+      backup_count=BACKUP_MAX;
+      avoid_state=BACKWARDS;
+      run_around_evaluate_state();
+      return;
+  }
+  /*
+  if(d1 < 120 || d3 < 120) {
+		avoid_state = BACKWARDS;
+		backup_count = BACKUP_MAX;
+		run_around_evaluate_state();
+		return;
+  }
+  */
+  if(backup_count<BACKUP_MAX){
+    avoid_state=BACKWARDS; 
+    if(backup_count<0)
+      backup_count=BACKUP_MAX;
+    run_around_evaluate_state();
+    return;
+  }
+  
+  /*Should evaluate an expression from -255 to 255 to pass to move.*/
+  pControl= ((d3-d1) + (d4-d5)) >> TURN_CONSTANT;
+  
+  if(pControl>PCONTROL_CRAZY_LIMIT || pControl<-PCONTROL_CRAZY_LIMIT) crazy_count--;
+  /*i.e. if you really want to turn for an extended period of time...you're probably stuck.*/
+
+  /*Debug stuff:*/
+  /*usb_puts("pControl evaluating: ");
+  usb_puti(pControl);
+  usb_puts("\n\r");
+  usb_puts("IR1: ");
+  usb_puti(d1);
+  usb_puts(" IR2: ");
+  usb_puti(d2);
+  usb_puts(" IR3: ");
+  usb_puti(d3);
+  usb_puts(" IR4: ");
+  usb_puti(d4);
+  usb_puts(" IR5: ");
+  usb_puti(d5);
+  usb_puts("\n\r");*/
+  
+  run_around_evaluate_state();
+}
+
+
+//Acts on state change.
+void run_around_evaluate_state(){
+    switch(avoid_state){
+    case(MOVING): //orb_set_color(GREEN);
+      move(STRAIT_SPEED,-pControl);
+      break;
+    
+    case(BACKWARDS): //orb_set_color(ORANGE);
+      move(-STRAIT_SPEED,0);
+      break;
+      
+    case(CRAZY): //orb_set_color(RED);
+      /*TODO: Implement a crazy state.*/
+      move(STRAIT_SPEED,-pControl);
+      break;
+      
+    default:
+      /*Should never get here, go strait.*/
+      move(100,0); //orb_set_color(BLUE);
+      break;
+  }
+}
+
+
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/orbit_fsm.h
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/orbit_fsm.h	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/orbit_fsm.h	(revision 1346)
@@ -0,0 +1,54 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _ORBIT_FSM_H_
+#define _ORBIT_FSM_H_
+
+//The States: 
+#define ORBIT_SEEK      12           //Move straight towards robot
+#define ORBIT_INSERTION 13           //Rotate into orbit
+#define ORBIT_ORBITING  15           //Orbit robot
+#define ORBIT_STOP      16           //Stop.  The default and ending state
+
+
+#define ORBIT_STRAIGHT_SPEED 160
+#define ORBIT_CORRECTION 9
+
+
+#define ORBIT_DIRECTION 4     // if 4, then orbit to the right; if -4, then orbit to the left
+
+#define ORBIT_DISTANCE 175 // orbit distance as measured by rangefinders
+#define ORBIT_STOP_DISTANCE 120
+
+
+int orbit_state;    /*State machine variable.*/
+
+int orbit_otherRobot; /* must be set prior to running FSM */
+
+
+int orbit_pControl;		/*Proportional control variable, determines turn direction.*/
+int orbit_d1,orbit_d2,orbit_d3,orbit_d4,orbit_d5;	/*The five distances taken in by IR.*/
+int orbit_bom; /* bom data */
+int orbit_theta; /* number of degrees traveled in orbit */
+int orbit_theta_stop; /* stop condition in number of degrees traveled */
+
+/* orbit_init
+   argument: robot_id that you want to orbit
+   notes: must call before orbit_fsm
+*/
+void orbit_init(int robot);
+
+/* orbit_init_theta
+   argument: robot_id that you want to orbit
+             theta that you want to stop orbiting at
+   notes: must call before orbit_fsm
+*/
+void orbit_init_theta(int robot,int theta);
+
+/* orbit_fsm
+   argument: none
+   notes: call in a while loop to perform FSM action
+*/
+void orbit_fsm(void);
+
+#endif
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/queue.h
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/queue.h	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/queue.h	(revision 1346)
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file queue.h
+ * @brief A queue implementation
+ * 
+ * Implements a queue, a first in, first out data structure.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WIRELESS_QUEUE_H
+#define WIRELESS_QUEUE_H
+
+#ifndef ROBOT
+#include <pthread.h>
+#endif
+
+struct node_def;
+
+/**
+ * @defgroup queue Queue
+ * @brief A queue implementation
+ * 
+ * A queue implementation.
+ *
+ * @{
+ **/
+
+/**
+ * @struct Queue
+ * Represents a queue, a first in, first out data structure.
+ **/
+typedef struct
+{
+	/**
+	 * The head of the queue, the next item to be removed.
+	 **/
+	struct node_def* head;
+	/**
+	 * The tail of the queue, the last item added.
+	 **/
+	struct node_def* tail;
+	/**
+	 * The number of elements in the queue.
+	 **/
+	int size;
+	
+#ifndef ROBOT
+	pthread_mutex_t lock;
+#endif
+} Queue;
+
+/** @brief Create a new queue **/
+Queue* queue_create(void);
+/** @brief Destroy a queue **/
+void queue_destroy(Queue* q);
+/** @brief Add an element to a queue **/
+int queue_add(Queue* q, void* item);
+/** @brief Remove an element from a queue **/
+void* queue_remove(Queue* q);
+/** @brief Remove all instances of a given element from a queue **/
+void queue_remove_all(Queue* q, void* item);
+/** @brief Get the size of a queue **/
+int queue_size(Queue* q);
+/** @brief Check if the queue is empty **/
+int queue_is_empty(Queue* q);
+
+/** @} **/
+
+
+#endif
Index: branches/scout/projects/object_manipulation/obj_detect_swarm/smart_run_around_fsm.h
===================================================================
--- branches/scout/projects/object_manipulation/obj_detect_swarm/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/projects/object_manipulation/obj_detect_swarm/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,32 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+//The States: 
+#define MOVING 12           //Move strait.
+#define BACKWARDS 15        //Move backwards. (Front close to wall.)
+#define STOP 16             //Stop.  The default state, (Something broke).
+#define CRAZY 40            //Erratic behavior that occurs more often when the robot is frequently trying to turn. (i.e. may be stuck.)
+
+#define LEFT 37             //Left
+#define RIGHT 39            //Right
+
+#define BACKUP_MAX 20
+#define CRAZY_MAX 200       //The number of counts between "crazy moments"
+#define STRAIT_SPEED 160    //The speed when going strait or backing up.
+#define TURN_CONSTANT 2
+#define PCONTROL_CRAZY_LIMIT 80
+
+int avoid_state;    /*State machine variable.*/
+int crazy_count;    /*Counter for a 'get unstuck' behavior.*/
+
+int backup_count;	/*Counter for backup duration.*/
+int pControl;		/*Proportional control variable, determines turn direction.*/
+int d1,d2,d3,d4,d5;	/*The five distances taken in by IR.*/
+
+void run_around_init(void);
+void run_around_FSM(void);
+
+#endif
Index: branches/scout/projects/i2c_charge_station/i2c_auto.c
===================================================================
--- branches/scout/projects/i2c_charge_station/i2c_auto.c	(nonexistent)
+++ branches/scout/projects/i2c_charge_station/i2c_auto.c	(revision 1346)
@@ -0,0 +1,120 @@
+/**
+ * This is the API for i2c_autodetect used on the 
+ * charging station. This block explains the high
+ * level implementation. The functions below explain
+ * the low level.
+ * 
+ ***** High Level *****
+ * Since the charge stations are hooked up
+ * via i2c lines, we must determine one master. We
+ * decide that the one with the XBee is the master.
+ * There should only be one Xbee in an i2c chain, though
+ * in the case that there are two, the second one to detect
+ * that they have an XBee must yeild the the older one.
+ * All others are slaves. At startup, we check if we have an
+ * XBee. If so, we poll for master, if there is none we declare
+ * ourselves master. If you do not have an XBee, poll the line
+ * asking for a master. If there is none, wait for a while and
+ * then try again until the master assigns you an ID.
+ * Once you have an ID, wait until the Master sends you commands.
+ * Periodically check if you have an XBee, just in case.
+ * The master must hand out IDs to the slaves. These IDs are
+ * kept in a table that indicates the status of the station.
+ * Occassionally poll the slaves to make sure they are not there and
+ * update the table as needed. If a packet comes in over XBee,
+ * forward to the correct charging station.
+ * In the event that the master loses the XBee, broadcast a message
+ * indicating that. Then poll for a new master. When one comes on,
+ * pass it the table.
+ **/
+ 
+ /**
+  * Sets up the needed states for i2c_autodetect
+  */
+ void i2c_startup (void) {
+ 
+ }
+ 
+ /**
+  * Checks if an XBee is present.
+  *
+  * @return 0 if false, 1 if true
+  */
+ char i2c_has_xbee(void) {
+ 
+ }
+ 
+ /**
+  * Acting as a temporary master, poll the master for an ID. If there
+  * is a master, he should respond with an ID in which case you should
+  * add that as your ID. Otherwise leave your ID blank.
+  *
+  * @return your ID, otherwise 0x00
+  */
+char i2c_request_id(void) {
+    
+}
+
+/**
+ * This should be called on the reception of an ID request. Since this
+ * will be called during an interrupt, make it as fast as possible.
+ * Check for the next available ID in the allocation table ans assign it.
+ * Send the ID back on the bus.
+ **/
+void i2c_allocate_id(void) {
+    
+}
+
+/**
+ * This is your handler function to be called by the i2c interrupt. You
+ * should get only 1 byte at a time and it will not be buffered. Handle it
+ * fast. You should analyze if the packet is a ID request, a poll, a transfer
+ * ID table, or data and then call the correct function. Basically this is a
+ * giant switch.
+ *
+ * @param data Data byte received from master
+ */
+void i2c_receive_data(char data) {
+
+}
+
+/**
+ * Called if a poll request has been received. Since this is in an interrupt make it
+ * fast. Queues up a poll response message to the master.
+ */
+void i2c_poll_respond(void) {
+
+}
+
+/**
+ * This should be done periodically. The allocation table should have a time since
+ * last poll field which counts down along with a poll send bit. 
+ * If time reaches 0 after a  poll remove it. This function, when
+ * called with a NULL should run through the table and send out request to all 
+ * those who are not currently being polled and check if those who have polls
+ * have reached 0 and remove them. If called with an ID, set the poll status
+ * bit for that ID to 0.
+ * 
+ * @param ID ID of the slave who has responded. If NULL poll all those not being polled
+ */
+void i2c_poll_slaves_send(char ID) {
+
+}
+
+/**
+ * Call this if you have lost the XBee and a new master has arrived. You should 
+ * transfer the entire table over to the new master.
+ */
+void i2c_transfer_table(void) {
+
+}
+
+/**
+ * Call this if you receive a transfer table request. You should accept it and 
+ * merge it into your table.
+ */
+ void i2c_receive_table(void) {
+ 
+ }
+
+
Index: branches/scout/projects/autonomous_recharging/charging_station/new station driver code/orb.c
===================================================================
--- branches/scout/projects/autonomous_recharging/charging_station/new station driver code/orb.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/charging_station/new station driver code/orb.c	(revision 1346)
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2008 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file orb.c
+ * @brief Orbs
+ *
+ * Implemenation for the orbs (tri-colored LEDs)
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/ 
+
+#include <avr/io.h>
+#include "orb.h"
+
+
+int main (void){
+orb_init();
+set_orb(0, 0, 200);
+while(1);
+return 0;
+}
+
+/**
+ * @defgroup orbs Orbs
+ * @brief Functions for controlling the color of the orbs.
+ * 
+ * Functions for controlling the color and lighting of the orbs.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the PWM for Orb control. This must be called before 
+ * the orbs are used for them to function.
+ **/
+int orb_init (void)
+{
+	/*data direction registers, blue, green (bit 6) and red (bit 4)*/
+	//DDRB = _BV(DDB4);
+	DDRB = 0b00010000;
+	
+	//DDRD = _BV(DDD4)|_BV(DDD6);
+	DDRD = 0b01010000;
+
+	
+	/*blue is here. it goes on timer 0*/
+	/*timer counter control registers for timer 0*/
+	//TCCR0A = _BV(COM0B1)|_BV(COM0B0)|_BV(WGM01)|_BV(WGM00);
+	TCCR0A = 0b00110011;
+	
+	//TCCR0B = _BV(CS00);
+	TCCR0B = 0b00000001;
+	OCR0B = 0;
+   
+	/*green is here. it goes on timer 2*/
+	//TCCR2A = _BV(COM2B1)|_BV(COM2B0)|_BV(WGM21)|_BV(WGM20);
+	TCCR2A = 0b00110011;
+	
+	//TCCR2B = _BV(CS20);
+	TCCR2B = 0b00000001;
+	OCR2B = 0;
+	
+	
+	/*red is here. it goes on timer 1 which counts to the value in ICR1 instead of 8 bits*/
+	//TCCR1A = _BV(COM1B1)|_BV(COM1B0)|_BV(WGM11);
+	TCCR1A = 0b00110001;
+	
+	//TCCR1B = _BV(WGM13)|_BV(WGM12)|_BV(CS10);
+	TCCR1B = 0b00011001;
+	ICR1 = 0x9C40;
+	OCR1B = 0;
+   
+	return 0;
+}
+
+/**
+ * Set both orbs to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red the red component of the color
+ * @param green the green component of the color
+ * @param blue the blue component of the color
+ *
+ * @see orb_init
+ **/
+ 
+int set_orb(int red, int green, int blue){
+	/*blue is here. it goes on timer 0*/
+	blue = blue%256;
+	OCR0B = blue;
+   
+	/*green is here. it goes on timer 2*/
+	green = green%256;
+	OCR2B = green;
+	
+	
+	/*red is here. it goes on timer 1*/
+	red = red%256;
+	red *= 0x9C40;
+	red = (int)(red/256); 
+	OCR1B = red;
+   
+	return 0;
+}
+
+/** @} **/ //end group
Index: branches/scout/projects/autonomous_recharging/charging_station/new station driver code/orb.h
===================================================================
--- branches/scout/projects/autonomous_recharging/charging_station/new station driver code/orb.h	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/charging_station/new station driver code/orb.h	(revision 1346)
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2008 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+ 
+/**
+ * @file orb.h
+ * @brief Contains declarations for managing the orbs.
+ *
+ * Contains declarations for using the orbs and PWM.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+ 
+ #ifndef _ORB_H_
+ #define _ORB_H_
+ 
+ /**
+ * @addtogroup orbs
+ * @{
+ **/
+ 
+ /** @brief Enables the orbs **/
+ int orb_init(void);
+ /** @brief Set both orbs to a specified color **/
+ int set_orb (int red, int green, int blue);
+ /** @brief Set orb1 to a specified color **/
+ 
+ /** @} **/ //end addtogroup
+ 
+ #endif
\ No newline at end of file
Index: branches/scout/projects/autonomous_recharging/archs/USI_TWI_Master.c
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/USI_TWI_Master.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/USI_TWI_Master.c	(revision 1346)
@@ -0,0 +1,253 @@
+/*****************************************************************************
+*
+* Atmel Corporation
+*
+* File              : USI_TWI_Master.c
+* Compiler          : IAR EWAAVR 2.28a/3.10a
+* Revision          : $Revision: 1.11 $
+* Date              : $Date: Tuesday, September 13, 2005 09:09:36 UTC $
+* Updated by        : $Author: jtyssoe $
+*
+* Support mail      : avr@atmel.com
+*
+* Supported devices : All device with USI module can be used.
+*                     The example is written for the ATmega169, ATtiny26 and ATtiny2313
+*
+* AppNote           : AVR310 - Using the USI module as a TWI Master
+*
+* Description       : This is an implementation of an TWI master using
+*                     the USI module as basis. The implementation assumes the AVR to
+*                     be the only TWI master in the system and can therefore not be
+*                     used in a multi-master system.
+* Usage             : Initialize the USI module by calling the USI_TWI_Master_Initialise() 
+*                     function. Hence messages/data are transceived on the bus using
+*                     the USI_TWI_Transceive() function. The transceive function 
+*                     returns a status byte, which can be used to evaluate the 
+*                     success of the transmission.
+*
+****************************************************************************/
+#ifndef _USI_TWI_MASTER_H
+#define _USI_TWI_MASTER_H
+
+#include <util/delay.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include "USI_TWI_Master.h"
+
+unsigned char USI_TWI_Master_Transfer( unsigned char );
+unsigned char USI_TWI_Master_Stop( void );
+
+union  USI_TWI_state
+{
+  unsigned char errorState;         // Can reuse the TWI_state for error states due to that it will not be need if there exists an error.
+  struct
+  {
+    unsigned char addressMode         : 1;
+    unsigned char masterWriteDataMode : 1;
+    unsigned char unused              : 6;
+  }; 
+}   USI_TWI_state;
+
+/*---------------------------------------------------------------
+ USI TWI single master initialization function
+---------------------------------------------------------------*/
+void USI_TWI_Master_Initialise( void )
+{
+  PORT_USI |= (1<<PIN_USI_SDA);           // Enable pullup on SDA, to set high as released state.
+  PORT_USI |= (1<<PIN_USI_SCL);           // Enable pullup on SCL, to set high as released state.
+  
+  DDR_USI  |= (1<<PIN_USI_SCL);           // Enable SCL as output.
+  DDR_USI  |= (1<<PIN_USI_SDA);           // Enable SDA as output.
+  
+  USIDR    =  0xFF;                       // Preload dataregister with "released level" data.
+  USICR    =  (0<<USISIE)|(0<<USIOIE)|                            // Disable Interrupts.
+              (1<<USIWM1)|(0<<USIWM0)|                            // Set USI in Two-wire mode.
+              (1<<USICS1)|(0<<USICS0)|(1<<USICLK)|                // Software stobe as counter clock source
+              (0<<USITC);
+  USISR   =   (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      // Clear flags,
+              (0x0<<USICNT0);                                     // and reset counter.
+}
+
+/*---------------------------------------------------------------
+Use this function to get hold of the error message from the last transmission
+---------------------------------------------------------------*/
+unsigned char USI_TWI_Get_State_Info( void )
+{
+  return ( USI_TWI_state.errorState );                            // Return error state.
+}
+
+/*---------------------------------------------------------------
+ USI Transmit and receive function. LSB of first byte in data 
+ indicates if a read or write cycles is performed. If set a read
+ operation is performed.
+
+ Function generates (Repeated) Start Condition, sends address and
+ R/W, Reads/Writes Data, and verifies/sends ACK.
+ 
+ Success or error code is returned. Error codes are defined in 
+ USI_TWI_Master.h
+---------------------------------------------------------------*/
+unsigned char USI_TWI_Start_Transceiver_With_Data( unsigned char *msg, unsigned char msgSize)
+{
+  unsigned char tempUSISR_8bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      // Prepare register value to: Clear flags, and
+                                 (0x0<<USICNT0);                                     // set USI to shift 8 bits i.e. count 16 clock edges.
+  unsigned char tempUSISR_1bit = (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      // Prepare register value to: Clear flags, and
+                                 (0xE<<USICNT0);                                     // set USI to shift 1 bit i.e. count 2 clock edges.
+
+  USI_TWI_state.errorState = 0;
+  USI_TWI_state.addressMode = TRUE;
+
+
+
+  if ( !(*msg & (1<<TWI_READ_BIT)) )                // The LSB in the address byte determines if is a masterRead or masterWrite operation.
+  {
+    USI_TWI_state.masterWriteDataMode = TRUE;
+  }
+
+/* Release SCL to ensure that (repeated) Start can be performed */
+  PORT_USI |= (1<<PIN_USI_SCL);                     // Release SCL.
+  while( !(PORT_USI & (1<<PIN_USI_SCL)) );          // Verify that SCL becomes high.
+
+  _delay_loop_1(T2_TWI);
+  //_delay_us(T4_TWI);
+  //__delay_cycles( T2_TWI );                         // Delay for T2TWI if TWI_STANDARD_MODE
+
+
+/* Generate Start Condition */
+  PORT_USI &= ~(1<<PIN_USI_SDA);                    // Force SDA LOW.
+  _delay_loop_1(T4_TWI);
+  //_delay_us(T4_TWI);
+  //__delay_cycles( T4_TWI );                         
+  PORT_USI &= ~(1<<PIN_USI_SCL);                    // Pull SCL LOW.
+  PORT_USI |= (1<<PIN_USI_SDA);                     // Release SDA.
+
+//Start
+PORTA |= _BV(PA3);
+
+
+/*Write address and Read/Write data */
+  do
+  {
+    /* If masterWrite cycle (or inital address tranmission)*/
+    if (USI_TWI_state.addressMode || USI_TWI_state.masterWriteDataMode)
+    {
+       PORTA |= _BV(PA4);
+      /* Write a byte */
+      PORT_USI &= ~(1<<PIN_USI_SCL);                // Pull SCL LOW.
+      USIDR     = *(msg++);                        // Setup data.
+      USI_TWI_Master_Transfer( tempUSISR_8bit );    // Send 8 bits on bus.
+      
+      /* Clock and verify (N)ACK from slave */
+      DDR_USI  &= ~(1<<PIN_USI_SDA);                // Enable SDA as input.
+      
+      PORTA |= _BV(PA5);
+      
+      if( USI_TWI_Master_Transfer( tempUSISR_1bit ) & (1<<TWI_NACK_BIT) ) 
+      {
+        //Shit
+        PORTA |= _BV(PA3) | _BV(PA4) | _BV(PA5) | _BV(PA6) | _BV(PA7);
+        
+        if ( USI_TWI_state.addressMode )
+          USI_TWI_state.errorState = USI_TWI_NO_ACK_ON_ADDRESS;
+        else
+          USI_TWI_state.errorState = USI_TWI_NO_ACK_ON_DATA;
+        return (FALSE);
+      }
+      USI_TWI_state.addressMode = FALSE;            // Only perform address transmission once.
+      
+      
+      PORTA &= (~_BV(PA4) | ~_BV(PA5));
+    }
+    /* Else masterRead cycle*/
+    else
+    {
+      /* Read a data byte */
+      DDR_USI   &= ~(1<<PIN_USI_SDA);               // Enable SDA as input.
+      *(msg++)  = USI_TWI_Master_Transfer( tempUSISR_8bit );
+
+      /* Prepare to generate ACK (or NACK in case of End Of Transmission) */
+      if( msgSize == 1)                            // If transmission of last byte was performed.
+      {
+        USIDR = 0xFF;                              // Load NACK to confirm End Of Transmission.
+      }
+      else
+      {
+        USIDR = 0x00;                              // Load ACK. Set data register bit 7 (output for SDA) low.
+      }
+      USI_TWI_Master_Transfer( tempUSISR_1bit );   // Generate ACK/NACK.
+    }
+  }while( --msgSize) ;                             // Until all data sent/received.
+  
+  
+  PORTA |= _BV(PA6);
+  
+  USI_TWI_Master_Stop();                           // Send a STOP condition on the TWI bus.
+
+/* Transmission successfully completed*/
+  return (TRUE);
+}
+
+/*---------------------------------------------------------------
+ Core function for shifting data in and out from the USI.
+ Data to be sent has to be placed into the USIDR prior to calling
+ this function. Data read, will be return'ed from the function.
+---------------------------------------------------------------*/
+unsigned char USI_TWI_Master_Transfer( unsigned char temp )
+{
+  USISR = temp;                                     // Set USISR according to temp.
+                                                    // Prepare clocking.
+  temp  =  (0<<USISIE)|(0<<USIOIE)|                 // Interrupts disabled
+           (1<<USIWM1)|(0<<USIWM0)|                 // Set USI in Two-wire mode.
+           (1<<USICS1)|(0<<USICS0)|(1<<USICLK)|     // Software clock strobe as source.
+           (1<<USITC);                              // Toggle Clock Port.
+  do
+  {
+    //__delay_cycles( T2_TWI );              
+    _delay_loop_1(T2_TWI);
+    //_delay_us(T2_TWI);
+    USICR = temp;                          // Generate positve SCL edge.
+    while( !(PIN_USI & (1<<PIN_USI_SCL)) );// Wait for SCL to go high.
+    _delay_loop_1(T4_TWI);
+    //__delay_cycles( T4_TWI );              
+   // _delay_us(T4_TWI);
+    USICR = temp;                          // Generate negative SCL edge.
+  }while( !(USISR & (1<<USIOIF)) );        // Check for transfer complete.
+  _delay_loop_1(T2_TWI);
+  //_delay_us(T2_TWI);
+  //__delay_cycles( T2_TWI );                
+  temp  = USIDR;                           // Read out data.
+  USIDR = 0xFF;                            // Release SDA.
+  DDR_USI |= (1<<PIN_USI_SDA);             // Enable SDA as output.
+
+  return temp;                             // Return the data from the USIDR
+}
+
+/*---------------------------------------------------------------
+ Function for generating a TWI Stop Condition. Used to release 
+ the TWI bus.
+---------------------------------------------------------------*/
+unsigned char USI_TWI_Master_Stop( void )
+{
+  PORT_USI &= ~(1<<PIN_USI_SDA);           // Pull SDA low.
+  PORT_USI |= (1<<PIN_USI_SCL);            // Release SCL.
+  while( !(PIN_USI & (1<<PIN_USI_SCL)) );  // Wait for SCL to go high.
+  _delay_loop_1(T4_TWI);
+  //_delay_us(T4_TWI);
+  //__delay_cycles( T4_TWI );               
+  PORT_USI |= (1<<PIN_USI_SDA);            // Release SDA.
+  _delay_loop_1(T2_TWI);
+  //_delay_us(T2_TWI);
+  //__delay_cycles( T2_TWI );                
+  
+#ifdef SIGNAL_VERIFY
+  if( !(USISR & (1<<USIPF)) )
+  {
+    USI_TWI_state.errorState = USI_TWI_MISSING_STOP_CON;    
+    return (FALSE);
+  }
+#endif
+
+  return (TRUE);
+}
+
+#endif
Index: branches/scout/projects/autonomous_recharging/archs/Charging.c
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/Charging.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/Charging.c	(revision 1346)
@@ -0,0 +1,798 @@
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <avr/sleep.h>
+#include "i2c.h"
+
+#define TRICKLE
+
+
+//These are in ADC steps; if any values change in the charging
+//circuitry these will have to be recalculated
+#ifndef TRICKLE
+	#define FAST_I 450//660 //660 fries the 5A fuse!!
+#else
+	#define FAST_I 20 //Works => 1.3A
+#endif
+
+#define TEST_CURR 550
+
+#define MAX_V 1020//990 //7.75V
+
+
+#define MAX_T 300
+#define MIN_T 730
+//range is 0 to 45 C
+//cal tests:
+//room temp - 25
+//value ~500, varies from battery to battery, but is consistent on one battery
+//freezer 737
+//heat gun at a distance 461
+
+//change in one minute
+#define MAX_DT 30
+#define MAX_DV 30
+
+
+//The following times are in seconds
+#define MAX_FAST_TIME 5400
+#define MAX_TRICKLE_TIME 600
+
+//debug pins
+#define debug_time PA3
+#define debug_curr PA4
+#define debug_volt PA5
+#define debug_temp PA6
+#define debug_12in PA7
+
+//be sure admux also sets the MUX5 bit which is in ADCSRB
+#define ADMUX_I
+#define ADMUX_V
+#define ADMUX_T
+
+#define ROBOT_TX PB1
+#define ROBOT_RX PB2
+#define PWM PB3
+#define DETECT_12V PB6
+
+#define LED1 PB4 //Green
+#define LED2 PB5 //Red
+
+
+//LED States:
+//Red - Fast Charging
+//Green - Trickle Charging
+//Both steady - done charging
+//Both Blinking - Error
+
+#define INT_COUNT 2 //interrupts per second
+#define AVG_COUNT 64 //number of times to count current
+
+//To enable the PWM write : 	TCCR1B = (_Bv(CS10));//enable PWM
+
+uint8_t interrupt_count = INT_COUNT;
+
+volatile uint32_t abs_time=1; // start at one second so it doesnt do the minute checks right away
+volatile uint8_t new_second=0; //only used as a boolean
+
+volatile uint8_t error=0;
+volatile uint8_t status;
+
+volatile uint8_t steady_current = 0;
+
+//DT must be triggered twice in a row
+volatile uint8_t last_DT = 0;
+//same for DV
+volatile uint8_t last_DV = 0;
+
+#define FAST_CHARGE 1
+#define TRICKLE_CHARGE 2
+
+
+
+void wait(int ops)
+{
+	int i = 0;
+	while(i<ops)
+		i++;
+}
+
+
+
+int avg_ADC(void)
+{
+	int av;
+	char i;
+
+	//Calculate a average out of the next 8 A/D conversions
+    for(av=0,i=8;i;--i)
+    {
+        ADCSRA |= _BV(ADSC);                      // start new A/D conversion
+        while (!(ADCSRA & (_BV(ADIF))))        // wait until ADC is ready
+            ;      
+        av = av+ADC;
+    }
+    av = av/8;
+	
+	//ADCSRA &= ~_BV(ADEN);
+
+	return av;
+	
+}
+
+int get_voltage(void)
+{
+	ADMUX = _BV(MUX0);
+	
+	ADCSRB &= ~_BV(MUX5);
+	
+	return avg_ADC();
+}
+
+int get_current(void)
+{
+	ADMUX = _BV(MUX1);
+	
+	ADCSRB |= _BV(MUX5);
+	
+	return avg_ADC();
+}
+
+int get_temperature(void)
+{
+	ADMUX = _BV(MUX1);
+	
+	ADCSRB &= ~_BV(MUX5);
+	
+	return avg_ADC();
+}
+
+int get_avg_voltage(void)
+{
+	int count=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_voltage();
+		count++;
+	}
+
+	return sum/AVG_COUNT;
+}
+
+int get_avg_current(void)
+{
+	int count=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_current();
+		count++;
+	}
+
+	return sum/AVG_COUNT;
+}
+
+int get_avg_temperature(void)
+{
+	int count=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_temperature();
+		count++;
+	}
+
+	return sum/AVG_COUNT;
+}
+
+
+uint8_t supply_voltage(void)
+{
+	return PINB & _BV(DETECT_12V);
+}
+
+void clear_err(void)
+{
+	error=0;
+	PORTB &= ~(_BV(LED1)|_BV(LED2));
+	
+	if(status==FAST_CHARGE)
+		PORTB |= _BV(LED2);
+		
+	if(status==TRICKLE_CHARGE)
+		PORTB |= _BV(LED1);
+}
+	
+void wait_8th(void)
+{
+	uint8_t start = abs_time % 8;
+	
+	while(abs_time % 8 == start)
+	{
+		/*if(supply_voltage())
+			PORTB |= _BV(LED1);
+		else
+			PORTB &= ~_BV(LED1);
+		if(get_voltage()>100)
+			PORTB |= _BV(LED2);
+		else
+			PORTB &= ~_BV(LED2);*/
+	}
+}
+
+void send_err(void)
+{
+	OCR1B=0;//turn off the PWM to be safe
+
+	PORTB &= ~(_BV(LED1)|_BV(LED2));
+	if(status!=0)//leave last error if there was one
+		PORTA &= ~(_BV(debug_time)|_BV(debug_curr)|_BV(debug_volt)|_BV(debug_temp)|_BV(debug_12in)); 
+	error=1;
+	status=0;
+}
+
+void send_done(void)
+{
+	char tempData;
+	//Finished, leave
+	tempData = 'F';
+	i2c_putpacket(0x01, &tempData, 1);
+	
+	PORTA &= ~(_BV(debug_time)|_BV(debug_curr)|_BV(debug_volt)|_BV(debug_temp)|_BV(debug_12in)); 
+	
+}
+
+void setup(void)
+{
+	DDRA = (_BV(debug_time)|_BV(debug_curr)|_BV(debug_volt)|_BV(debug_temp)|_BV(debug_12in));
+	PORTA = 0x00;
+	DDRB = (_BV(ROBOT_TX)|_BV(PWM)|_BV(LED1)|_BV(LED2)); //confiure output pins
+	PORTB = 0x00;
+	
+	ADCSRA = (_BV(ADEN)|_BV(ADPS2)|_BV(ADPS1)); //start ADC with a division factor of 64
+	
+	TCCR0B = (_BV(CS01)); //set timer 0 for realtime mode
+	TCCR0A = (_BV(TCW0));
+	TIMSK = (_BV(TOIE0)); //enable overflow interrupts
+	
+	TCCR1A = (_BV(COM1B1)|_BV(PWM1B)|_BV(COM1A1)|_BV(PWM1A)); //clear timer 1 on compare, set at 0x00. Fast PWM mode
+	TCCR1B |= _BV(CS12)|_BV(CS10); //leave timer on and set compare to 0 to make output off	
+	OCR1B = 0;
+	OCR1A = 0;
+	
+	sei();
+}
+
+int regulate_current(int i)
+{
+	if(status==0)
+	{
+		OCR1B = 0;
+		return 0;
+	}
+		
+	PORTA ^= _BV(debug_curr);
+	
+	int curr=0;
+	int count=0;
+	int diff=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_current();
+		count++;
+	}
+
+	curr = sum/AVG_COUNT;
+	//OCR1A = curr >> 2;
+	
+	
+	 //old linear regulation
+	 /*
+	if(OCR1B <255 && curr < i)
+			OCR1B++;
+	else if(OCR1B >0 && curr > i)
+			OCR1B--;
+	
+	return curr;
+	*/
+	
+	
+	//cool control law stuff
+	diff=curr-i;
+	
+	OCR1B = diff/4 + curr/4; //K*Ierr + Kguess
+	
+	
+	
+	//1024/255
+	/*if(OCR1B <255 && curr<i)
+		OCR1B += (i-curr)/4;
+	else if(OCR1B >0 && curr > i)
+		OCR1B -= (curr-i)/4;*/
+	//differential regulation (sort of)
+	/*diff = i-curr;
+	
+	if(diff<8)
+		steady_current=1;
+	else
+		steady_current=0;
+	
+	OCR1B += diff/4;*/
+	
+}
+
+void check_voltage(void)
+{
+	int volt = get_avg_voltage();
+	
+	
+	if(volt > MAX_V)
+	{
+		OCR1A = 128;
+		send_err();
+		PORTA |= _BV(debug_volt);
+		status = 0;
+	}
+}
+
+void check_temperature(void)
+{
+	int temp = get_avg_temperature();
+	
+	//temp readings are reversed
+	if(temp < MAX_T || temp > MIN_T)
+	{
+		OCR1A = 192;
+		send_err();
+		PORTA |= _BV(debug_temp);
+		status=0;
+	}
+}
+
+
+//takes a 7-bit ionteger and displays it on the 7 LEDs with the Green being the MSB
+void LED_out(int i)
+{
+	if(i & 64)
+		PORTB |= _BV(LED1);
+	else
+		PORTB &= ~_BV(LED1);
+		
+	if(i & 32)
+		PORTB |= _BV(LED2);
+	else
+		PORTB &= ~_BV(LED2);
+		
+	if(i & 16)
+		PORTA |= _BV(PA3);
+	else
+		PORTA &= ~_BV(PA3);
+	
+	if(i & 8)
+		PORTA |= _BV(PA4);
+	else
+		PORTA &= ~_BV(PA4);
+		
+	if(i & 4)
+		PORTA |= _BV(PA5);
+	else
+		PORTA &= ~_BV(PA5);
+	
+	if(i & 2)
+		PORTA |= _BV(PA6);
+	else
+		PORTA &= ~_BV(PA6);
+		
+	if(i & 1)
+		PORTA |= _BV(PA7);
+	else
+		PORTA &= ~_BV(PA7);
+}
+	
+
+void test_board(void)
+{
+	setup();
+	abs_time = 0;
+	status = 1;
+	char tempData[5];
+	i2c_init();
+	int volt;
+	int temp;
+	int curr;
+	int meas_count;
+	int mod=0;
+	sei();
+	OCR1B = 0;
+	while(1)
+	{
+		mod=abs_time%4;
+		while(abs_time%4==mod);
+		
+		/*if((abs_time>>3)%3==0)
+			OCR1B=21;
+		else if((abs_time>>3)%3==1)
+			OCR1B=57;
+		else
+			OCR1B=85;*/
+		
+		tempData[0] = 'C';
+		tempData[1] = abs_time>>8;
+		tempData[2] = abs_time&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+		
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			if(supply_voltage())
+			{
+				//curr = regulate_current(500);
+				curr = get_avg_current();
+				OCR1B = 100;
+			}
+			else
+			{
+				curr = 0;
+				OCR1B = 0;
+			}
+		}
+		
+
+		tempData[0] = 'P';
+		tempData[1] = 0;
+		tempData[2] = OCR1B;
+		i2c_putpacket(0x01, tempData, 3);
+		tempData[0] = 'I';
+		tempData[1] = curr>>8;
+		tempData[2] = curr&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+		curr=6666;
+		
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			volt = get_avg_voltage();
+		}
+
+		tempData[0] = 'V';
+		tempData[1] = volt>>8;
+		tempData[2] = volt&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+
+		volt=6666;
+		
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			temp = get_avg_temperature();
+			
+		}
+		
+		tempData[0] = 'T';
+		tempData[1] = temp>>8;
+		tempData[2] = temp&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+
+		temp=6666;
+	}
+	int c=0,oc;
+	oc=get_avg_temperature();
+	//this will read the temperature and output it to the LEDS.
+	//to read the value, enter the LEDs as binary, with the bottom green as the MSB.
+	//after two second the LEDS will toggle to the next 7 bits
+	/*while(1)
+	{
+		c=oc-get_avg_temperature();
+		oc+=c;
+		
+		if(c<0)
+			c=-c;
+		
+		if(c<5)
+			break;
+	}*/
+/*
+	while(1)
+	{
+		LED_out(oc>>7);
+		for(c=0;c<16;c++)
+			wait_8th();
+		LED_out(oc);
+		for(c=0;c<16;c++)
+			wait_8th();
+	}*/
+	
+	
+	/*PORTB |= (_BV(LED1)|_BV(LED2));
+	
+	while(1)
+	{
+		PORTA ^= _BV(debug_time);
+		wait_8th();
+		c=get_current()-FAST_I;
+		if(c<0)
+			c=-c;
+		if(c<4)
+			PORTA |= _BV(debug_curr);
+		else
+			PORTA &= ~_BV(debug_curr);
+		wait_8th();
+		if(get_avg_voltage() > 50)
+			PORTA |= _BV(debug_volt);
+		else
+			PORTA &= ~_BV(debug_volt);
+		wait_8th();
+		if(get_avg_temperature() > MAX_T)
+			PORTA |= _BV(debug_temp);
+		else
+			PORTA &= ~_BV(debug_temp);
+		wait_8th();
+		if(supply_voltage())
+			PORTA |= _BV(debug_12in);
+		else
+			PORTA &= ~_BV(debug_12in);
+		wait_8th();
+	}*/
+	
+}
+
+
+int main(void)
+{
+	test_board();
+	new_second=0;
+	char tempData[5];	//For i2c communication
+	//test_board();
+	char noVoltagePrintFlag = 0;
+  
+	setup();
+	i2c_init();
+	
+	/*GIMSK = (_BV(PCIE0)); //enable PCINT interrupts
+	PCMSK1 = (_BV(PCINT10)); //enable pin change interrupt on ROBOT_RX
+	MCUCR = (_BV(SE)|_BV(SM1));// (power-down mode)
+	*/
+	
+	OCR1B=0;
+	
+	sei();
+	
+	tempData[0] = 'S';
+	tempData[1] = 'S';
+	tempData[2] = 'S';
+	tempData[3] = 'S';
+	tempData[4] = 'S';
+	i2c_putpacket(0x01, tempData, 5);	
+	
+	int temp=0;
+	int last_temp = get_avg_temperature();
+	
+	int volt=0;
+	int last_volt = get_avg_voltage();
+	
+	
+	while(1)
+	{
+		/*GIMSK = (_BV(PCIE0)); //enable PCINT interrupts
+		sleep_cpu();*/
+		
+		PORTB=0;//clear outputs
+		
+		GIMSK = 0;
+		
+		error=0;
+		
+		OCR1B = 0;
+		
+		//wait for 12v source
+		
+		while(!supply_voltage()) {
+			if (!noVoltagePrintFlag) {
+				tempData[0] = 'N';
+				tempData[1] = 'N';
+				tempData[2] = 'N';
+				tempData[3] = 'N';
+				tempData[4] = 'N';
+				i2c_putpacket(0x01, tempData, 5);
+				noVoltagePrintFlag = 1;
+			}
+		}
+		
+		noVoltagePrintFlag = 0;
+		
+		//Contact 
+		tempData[0] = 'C';
+		tempData[1] = 'C';
+		tempData[2] = 'C';
+		tempData[3] = 'C';
+		tempData[4] = 'C';
+		i2c_putpacket(0x01, tempData, 5);
+		
+		PORTA |= _BV(debug_12in);
+		
+		abs_time=1;
+
+		//--------------FAST CHARGE-----------------------
+		//split seconds into eights as following:
+		//1: abs_volt
+		//2: reg
+		//3: abs_temp
+		//4: reg
+		//5: abs_volt
+		//6: reg
+		//7: abs_temp
+		//between seconds: abs time and minute checks, which takes an extra 8th
+		status = FAST_CHARGE;
+		
+		PORTB |= _BV(LED2);
+		
+		while(status == FAST_CHARGE)
+		{
+			
+			if(!supply_voltage())
+			{
+				
+				
+				send_err();
+				//Lost Contact
+				tempData[0] = 'N';
+				tempData[1] = 'N';
+				tempData[2] = 'N';
+				tempData[3] = 'N';
+				tempData[4] = 'N';
+				i2c_putpacket(0x01, tempData, 5);
+				
+				PORTA &= ~_BV(debug_12in);
+				while(!supply_voltage());
+				
+				//Contact again
+				tempData[0] = 'C';
+				tempData[1] = 'C';
+				tempData[2] = 'C';
+				tempData[3] = 'C';
+				tempData[4] = 'C';
+				i2c_putpacket(0x01, tempData, 5);
+				
+				PORTA |= _BV(debug_12in);
+				clear_err();
+			}
+			
+			check_voltage();
+			wait_8th();
+			regulate_current(FAST_I);
+			wait_8th();
+			check_temperature();
+			wait_8th();
+			regulate_current(FAST_I);
+			wait_8th();
+			check_voltage();
+			wait_8th();
+			regulate_current(FAST_I);
+			wait_8th();
+			check_temperature();
+			wait_8th();
+			
+#ifdef TRICKLE
+			
+			if(abs_time > 9600) //90 minute time limit
+			{
+				OCR1A = 32;
+				send_done();
+				PORTA |= _BV(debug_time);
+				break;
+			}
+
+#else
+
+			if(abs_time > 43200) //90 minute time limit
+			{
+				OCR1A = 32;
+				send_err();
+				PORTA |= _BV(debug_time);
+				break;
+			}
+			
+			//minute checks
+			if( (abs_time >> 3)%55 == 0/* && steady_current*/)
+			{
+				PORTA ^= _BV(debug_time);
+				
+				temp = get_avg_temperature();
+				wait_8th(); //to avoid interference
+				volt = get_avg_voltage(); 
+				
+				OCR1A = volt >> 2;
+				
+				//seems to be some random drops when connected to a power supply
+				//may need a fudge factor but maybe not becuase voltage should be climbing during charge
+				if(volt < last_volt - MAX_DV)
+				{
+          PORTA |= _BV(debug_volt);
+          if(last_DV)
+          {
+            OCR1A = 64;
+            
+            send_done();
+            PORTA |= _BV(debug_volt);
+            status = TRICKLE_CHARGE;
+          }
+          else
+            last_DV=1;
+          
+				}
+        else
+        {
+          last_DV=0;
+          PORTA &= ~_BV(debug_volt);
+         }
+				
+				
+				if(temp < last_temp - MAX_DT)
+				{
+          PORTA |= _BV(debug_temp);
+          if(last_DT)
+          {       
+            OCR1A = 128;
+            
+            send_done();
+            PORTA |= _BV(debug_temp);
+            status = TRICKLE_CHARGE;
+          }
+          else
+            last_DT=1;
+				}
+        else
+        {
+          last_DT=0;
+          PORTA &= ~_BV(debug_temp);
+        }
+				
+				last_volt = volt;
+				last_temp = temp;
+			}
+#endif
+
+		}
+		if (error) {
+			//We have an error...let's bail out of this ship captain!
+			tempData[0] = 'F';
+			tempData[1] = 'F';
+			tempData[2] = 'F';
+			tempData[3] = 'F';
+			tempData[4] = 'F';
+			i2c_putpacket(0x01, tempData, 5);
+		}
+		
+		//PORTB ^= _BV(LED2);
+		
+	}
+
+	
+	return 1;
+}
+
+ISR(TIMER0_OVF_vect)
+{
+	if(error)
+		PORTB ^= (_BV(LED1)|_BV(LED2));
+
+	interrupt_count--;
+	if(interrupt_count==0)
+	{
+		abs_time++;
+		new_second=1;
+			
+		interrupt_count=INT_COUNT;
+	}
+}
+
+ISR(PCINT_vect){;} //so the interrupt doesnt go to the reset vector
Index: branches/scout/projects/autonomous_recharging/archs/USI_TWI_Slave.h
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/USI_TWI_Slave.h	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/USI_TWI_Slave.h	(revision 1346)
@@ -0,0 +1,120 @@
+// This file has been prepared for Doxygen automatic documentation generation.
+/*! \file ********************************************************************
+*
+* Atmel Corporation
+*
+* File              : USI_TWI_Slave.h
+* Compiler          : IAR EWAAVR 4.11A
+* Revision          : $Revision: 1.14 $
+* Date              : $Date: Friday, December 09, 2005 17:25:38 UTC $
+* Updated by        : $Author: jtyssoe $
+*
+* Support mail      : avr@atmel.com
+*
+* Supported devices : All device with USI module can be used.
+*                     The example is written for the ATmega169, ATtiny26 & ATtiny2313
+*
+* AppNote           : AVR312 - Using the USI module as a TWI slave
+*
+* Description       : Header file for USI_TWI driver
+*
+*
+*
+****************************************************************************/
+
+
+
+//! Prototypes
+void          USI_TWI_Slave_Initialise( unsigned char );
+void          USI_TWI_Transmit_Byte( unsigned char );
+unsigned char USI_TWI_Receive_Byte( void );
+unsigned char USI_TWI_Data_In_Receive_Buffer( void );
+void          Timer_Init(void);
+
+#define TRUE                1
+#define FALSE               0
+
+typedef     unsigned char       uint8_t;
+
+//////////////////////////////////////////////////////////////////
+///////////////// Driver Buffer Definitions //////////////////////
+//////////////////////////////////////////////////////////////////
+// 1,2,4,8,16,32,64,128 or 256 bytes are allowed buffer sizes
+
+#define TWI_RX_BUFFER_SIZE  (16)
+#define TWI_RX_BUFFER_MASK ( TWI_RX_BUFFER_SIZE - 1 )
+
+#if ( TWI_RX_BUFFER_SIZE & TWI_RX_BUFFER_MASK )
+        #error TWI RX buffer size is not a power of 2
+#endif
+
+// 1,2,4,8,16,32,64,128 or 256 bytes are allowed buffer sizes
+
+#define TWI_TX_BUFFER_SIZE  (16)
+#define TWI_TX_BUFFER_MASK ( TWI_TX_BUFFER_SIZE - 1 )
+
+#if ( TWI_TX_BUFFER_SIZE & TWI_TX_BUFFER_MASK )
+        #error TWI TX buffer size is not a power of 2
+#endif
+
+
+
+#define USI_SLAVE_CHECK_ADDRESS                (0x00)
+#define USI_SLAVE_SEND_DATA                    (0x01)
+#define USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA (0x02)
+#define USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA   (0x03)
+#define USI_SLAVE_REQUEST_DATA                 (0x04)
+#define USI_SLAVE_GET_DATA_AND_SEND_ACK        (0x05)
+
+#define DDR_USI             DDRB
+#define PORT_USI            PORTB
+#define PIN_USI             PINB
+#define PORT_USI_SDA        PORTB0
+#define PORT_USI_SCL        PORTB2
+#define PIN_USI_SDA         PINB0
+#define PIN_USI_SCL         PINB2
+#define USI_START_COND_INT  USISIF
+#define USI_START_VECTOR    USI_START_vect
+#define USI_OVERFLOW_VECTOR USI_OVF_vect
+
+
+//! Functions implemented as macros
+#define SET_USI_TO_SEND_ACK()                                                                                 \
+{                                                                                                             \
+        USIDR    =  0;                                              /* Prepare ACK                         */ \
+        DDR_USI |=  (1<<PORT_USI_SDA);                              /* Set SDA as output                   */ \
+        USISR    =  (0<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|  /* Clear all flags, except Start Cond  */ \
+                    (0x0E<<USICNT0);                                /* set USI counter to shift 1 bit. */ \
+}
+
+#define SET_USI_TO_READ_ACK()                                                                                 \
+{                                                                                                             \
+        DDR_USI &=  ~(1<<PORT_USI_SDA);                             /* Set SDA as intput */                   \
+        USIDR    =  0;                                              /* Prepare ACK        */                  \
+        USISR    =  (0<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|  /* Clear all flags, except Start Cond  */ \
+                    (0x0E<<USICNT0);                                /* set USI counter to shift 1 bit. */ \
+}
+
+#define SET_USI_TO_TWI_START_CONDITION_MODE()                                                                                     \
+{                                                                                                                                 \
+  USICR    =  (1<<USISIE)|(0<<USIOIE)|                        /* Enable Start Condition Interrupt. Disable Overflow Interrupt.*/  \
+              (1<<USIWM1)|(0<<USIWM0)|                        /* Set USI in Two-wire mode. No USI Counter overflow hold.      */  \
+              (1<<USICS1)|(0<<USICS0)|(0<<USICLK)|            /* Shift Register Clock Source = External, positive edge        */  \
+              (0<<USITC);                                                                                                         \
+  USISR    =  (0<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|  /* Clear all flags, except Start Cond                            */ \
+              (0x0<<USICNT0);                                                                                                     \
+}
+
+#define SET_USI_TO_SEND_DATA()                                                                               \
+{                                                                                                            \
+    DDR_USI |=  (1<<PORT_USI_SDA);                                  /* Set SDA as output                  */ \
+    USISR    =  (0<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      /* Clear all flags, except Start Cond */ \
+                (0x0<<USICNT0);                                     /* set USI to shift out 8 bits        */ \
+}
+
+#define SET_USI_TO_READ_DATA()                                                                               \
+{                                                                                                            \
+    DDR_USI &= ~(1<<PORT_USI_SDA);                                  /* Set SDA as input                   */ \
+    USISR    =  (0<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      /* Clear all flags, except Start Cond */ \
+                (0x0<<USICNT0);                                     /* set USI to shift out 8 bits        */ \
+}
Index: branches/scout/projects/autonomous_recharging/archs/i2c.h
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/i2c.h	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/i2c.h	(revision 1346)
@@ -0,0 +1,22 @@
+/* i2c.h
+    
+        constants and stuff
+*/
+#ifndef _I2C_H_
+#define _I2C_H_
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+
+#include "USI_TWI_Master.c"
+#include "USI_TWI_Slave.c" 
+#include "i2c.c"
+
+void i2c_init(void);
+void i2c_putpacket(char addr, char *data, char data_size);
+int i2c_getpacket(char *c);
+void i2c_test(void);
+void delay_ms(int ms);
+
+#endif
Index: branches/scout/projects/autonomous_recharging/archs/USI_TWI_Master.h
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/USI_TWI_Master.h	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/USI_TWI_Master.h	(revision 1346)
@@ -0,0 +1,95 @@
+
+
+
+/*****************************************************************************
+*
+* Atmel Corporation
+*
+* File              : USI_TWI_Master.h
+* Compiler          : IAR EWAAVR 2.28a/3.10a
+* Revision          : $Revision: 1.11 $
+* Date              : $Date: Tuesday, September 13, 2005 09:09:36 UTC $
+* Updated by        : $Author: jtyssoe $
+*
+* Support mail      : avr@atmel.com
+*
+* Supported devices : All device with USI module can be used.
+*                     The example is written for the ATmega169, ATtiny26 and ATtiny2313
+*
+* AppNote           : AVR310 - Using the USI module as a TWI Master
+*
+* Description       : This is an implementation of an TWI master using
+*                     the USI module as basis. The implementation assumes the AVR to
+*                     be the only TWI master in the system and can therefore not be
+*                     used in a multi-master system.
+* Usage             : Initialize the USI module by calling the USI_TWI_Master_Initialise() 
+*                     function. Hence messages/data are transceived on the bus using
+*                     the USI_TWI_Start_Transceiver_With_Data() function. If the transceiver
+*                     returns with a fail, then use USI_TWI_Get_Status_Info to evaluate the 
+*                     couse of the failure.
+*
+****************************************************************************/
+    
+//********** Defines **********//
+
+// Defines controlling timing limits
+//#define TWI_FAST_MODE
+
+//#define SYS_CLK   4000.0  // [kHz]
+
+//Note, this is only a variable that determines how long to delay between
+// individual bits of I2C send. This has been tested down to 1MHz and it works.
+// It is possible that even slower speeds can be obtained.
+#define SYS_CLK     1.0 // [mHz]
+
+// TWI FAST mode timing limits. SCL = 100-400kHz
+//#define T2_TWI    ((SYS_CLK *1300) /1000000) +1 // >1,3us
+//#define T4_TWI    ((SYS_CLK * 600) /1000000) +1 // >0,6us
+ 
+ 
+//This may or may not make it faster. Uncomfirmed. But it works. 
+#define T2_TWI 0.000001
+#define T4_TWI 0.000001
+ 
+// TWI STANDARD mode timing limits. SCL <= 100kHz
+//#define T2_TWI    ((SYS_CLK *4700) /1000000) +1 // >4,7us
+//#define T4_TWI    ((SYS_CLK *4000) /1000000) +1 // >4,0us
+
+//USI_TWI messages and flags and bit masks
+//#define SUCCESS   7
+//#define MSG       0
+/****************************************************************************
+  Bit and byte definitions
+****************************************************************************/
+#define TWI_READ_BIT  0       // Bit position for R/W bit in "address byte".
+#define TWI_ADR_BITS  1       // Bit position for LSB of the slave address bits in the init byte.
+#define TWI_NACK_BIT  0       // Bit position for (N)ACK bit.
+
+#define USI_TWI_NO_DATA             0x00  // Transmission buffer is empty
+#define USI_TWI_DATA_OUT_OF_BOUND   0x01  // Transmission buffer is outside SRAM space
+#define USI_TWI_UE_START_CON        0x02  // Unexpected Start Condition
+#define USI_TWI_UE_STOP_CON         0x03  // Unexpected Stop Condition
+#define USI_TWI_UE_DATA_COL         0x04  // Unexpected Data Collision (arbitration)
+#define USI_TWI_NO_ACK_ON_DATA      0x05  // The slave did not acknowledge  all data
+#define USI_TWI_NO_ACK_ON_ADDRESS   0x06  // The slave did not acknowledge  the address
+#define USI_TWI_MISSING_START_CON   0x07  // Generated Start Condition not detected on bus
+#define USI_TWI_MISSING_STOP_CON    0x08  // Generated Stop Condition not detected on bus
+
+// Device dependant defines
+#define DDR_USI             DDRB
+#define PORT_USI            PORTB
+#define PIN_USI             PINB
+#define PORT_USI_SDA        PORTB0
+#define PORT_USI_SCL        PORTB2
+#define PIN_USI_SDA         PINB0
+#define PIN_USI_SCL         PINB2
+
+// General defines
+#define TRUE  1
+#define FALSE 0
+
+//********** Prototypes **********//
+
+void USI_TWI_Master_Initialise( void );
+unsigned char USI_TWI_Start_Transceiver_With_Data( unsigned char * , unsigned char );
+unsigned char USI_TWI_Get_State_Info( void );
Index: branches/scout/projects/autonomous_recharging/archs/homing stop/stop.c
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/homing stop/stop.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/homing stop/stop.c	(revision 1346)
@@ -0,0 +1,61 @@
+#include<avr/io.h>
+#include "i2c.h"
+
+#define LED1 PB4 //Green
+#define LED2 PB5 //Red
+
+int main( void )
+{
+	DDRB = _BV(PB0) | _BV(PB5) | _BV(PB4);
+  i2c_init();
+  
+  /*tempData[0] = 'C';
+		tempData[1] = abs_time>>8;
+		tempData[2] = abs_time&0xFF;
+		i2c_putpacket(0x01, tempData, 3);*/
+  
+  char data[2];
+  data[0]=I2C_MSG_DATA;
+
+  while(1)
+  {
+    PORTB=_BV(LED2);
+    while(1)
+    {
+      if(PINB & _BV(PB6))
+      {
+        PORTB = _BV(LED1);
+        //This is a junk byte. For some reason the first packet is always ignored????
+        data[1] = 'a';
+        i2c_putpacket(0x01, data, 2);
+        data[1]=I2C_MSG_BATTERY_CHARGING;
+        i2c_putpacket(0x01, data, 2);
+        break;
+      }
+      else
+      {
+        data[1]=I2C_MSG_NO_CONTACT;
+        i2c_putpacket(0x01, data, 2);
+      }
+    }
+    
+    for(int i=0;i<5000;i++)
+    {
+      delay_ms(1);
+      if(! PINB & _BV(PB6))
+      {
+          PORTB = _BV(LED2);
+          data[1]=I2C_MSG_CONTACT_ERROR;
+          i2c_putpacket(0x01, data, 2);
+          
+          while(! PINB & _BV(PB6));
+            break;
+      }
+      
+    }
+    
+    data[1]=I2C_MSG_BATTERY_FULL;
+    i2c_putpacket(0x01, data, 2);
+  }
+    
+}
\ No newline at end of file
Index: branches/scout/projects/autonomous_recharging/archs/homing stop/Makefile
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/homing stop/Makefile	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/homing stop/Makefile	(revision 1346)
@@ -0,0 +1,508 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+
+# MCU name
+MCU = attiny861
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = stop
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(TARGET).c
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+#EXTRAINCDIRS = C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 4800 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVE) .dep/*
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/autonomous_recharging/archs/ConstantCharging.c
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/ConstantCharging.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/ConstantCharging.c	(revision 1346)
@@ -0,0 +1,707 @@
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <avr/sleep.h>
+#include "i2c.h"
+#include "ring_buffer.h"
+
+
+// for i2c_byte coming from charge board
+//I2C Message Codes
+#define I2C_MSG_ACKNOWLEDGE       'A'
+#define I2C_MSG_BATTERY_CHARGING  'C'
+#define I2C_MSG_DATA              'D'
+#define I2C_MSG_CONTACT_ERROR     'E'
+#define I2C_MSG_BATTERY_FULL      'F'
+#define I2C_MSG_NO_CONTACT        'N'
+#define I2C_MSG_REQUEST_DATA      'R'
+#define I2C_MSG_GO_TO_SLEEP       'Y'
+#define I2C_MSG_ENTERING_SLEEP    'Z'
+#define I2C_MSG_HOMING            'H'
+
+
+#define SW0 PA6
+#define HOMING_PIN PA7
+
+#define DEBUG 0
+
+#define MAX_T 300
+#define MIN_T 730
+//range is 0 to 45 C
+//cal tests:
+//room temp - 25
+//value ~500, varies from battery to battery, but is consistent on one battery
+//freezer 737
+//heat gun at a distance 461
+
+#define MAX_DT -4 //this is the LOWEST ACCEPTABLE ADC value
+#define MAX_DT_ABS 400
+#define VOLT_PLATEAU 50
+
+
+//The following times are in seconds
+#define MAX_FAST_TIME 5400
+#define MAX_TRICKLE_TIME 600
+
+//debug pins
+#define debug_time PA3
+#define debug_curr PA4
+#define debug_volt PA5
+#define debug_temp PA6
+#define debug_12in PA7
+
+//be sure admux also sets the MUX5 bit which is in ADCSRB
+#define ADMUX_I
+#define ADMUX_V
+#define ADMUX_T
+
+#define ROBOT_TX PB1
+#define ROBOT_RX PB2
+#define PWM PB3
+#define DETECT_12V PB6
+
+#define LED1 PB4 //Green
+#define LED2 PB5 //Red
+
+
+//LED States:
+//Red - Fast Charging
+//Green - Trickle Charging
+//Both steady - done charging
+//Both Blinking - Error
+
+#define INT_COUNT 2 //interrupts per second
+#define AVG_COUNT 64 //number of times to count current
+
+//To enable the PWM write : 	TCCR1B = (_Bv(CS10));//enable PWM
+
+uint8_t interrupt_count = INT_COUNT;
+
+volatile uint32_t abs_time=1; // start at one second so it doesnt do the minute checks right away
+volatile uint8_t new_second=0; //only used as a boolean
+
+volatile uint8_t error=0;
+volatile uint8_t status;
+
+volatile uint8_t steady_current = 0;
+
+//DT must be triggered twice in a row
+volatile uint8_t last_DT = 0;
+//same for DV
+volatile uint8_t last_DV = 0;
+
+#define FAST_CHARGE 1
+#define TRICKLE_CHARGE 2
+
+RING_BUFFER_NEW(ring_buffer, 12, int, buffer);
+
+void wait(int ops)
+{
+	int i = 0;
+	while(i<ops)
+		i++;
+}
+
+
+
+int avg_ADC(void)
+{
+	int av;
+	char i;
+
+	//Calculate a average out of the next 8 A/D conversions
+    for(av=0,i=8;i;--i)
+    {
+        ADCSRA |= _BV(ADSC);                      // start new A/D conversion
+        while (!(ADCSRA & (_BV(ADIF))))        // wait until ADC is ready
+            ;      
+        av = av+ADC;
+    }
+    av = av/8;
+	
+	//ADCSRA &= ~_BV(ADEN);
+
+	return av;
+	
+}
+
+int get_voltage(void)
+{
+	ADMUX = _BV(MUX0);
+	
+	ADCSRB &= ~_BV(MUX5);
+	
+	return avg_ADC();
+}
+
+int get_current(void)
+{
+	ADMUX = _BV(MUX1);
+	
+	ADCSRB |= _BV(MUX5);
+	
+	return avg_ADC();
+}
+
+int get_temperature(void)
+{
+	ADMUX = _BV(MUX1);
+	
+	ADCSRB &= ~_BV(MUX5);
+	
+	return avg_ADC();
+}
+
+int get_avg_voltage(void)
+{
+	int count=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_voltage();
+		count++;
+	}
+
+	return sum/AVG_COUNT;
+}
+
+int get_avg_current(void)
+{
+	int count=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_current();
+		count++;
+	}
+
+	return sum/AVG_COUNT;
+}
+
+int get_avg_temperature(void)
+{
+	int count=0;
+	uint32_t sum=0;
+		
+		//OCR1B =120;
+	while(count < AVG_COUNT)
+	{
+		sum += get_temperature();
+		count++;
+	}
+
+	return sum/AVG_COUNT;
+}
+
+
+uint8_t supply_voltage(void)
+{
+	return PINB & _BV(DETECT_12V);
+}
+
+void clear_err(void)
+{
+	error=0;
+	PORTB &= ~(_BV(LED1)|_BV(LED2));
+	
+	if(status==FAST_CHARGE)
+		PORTB |= _BV(LED2);
+		
+	if(status==TRICKLE_CHARGE)
+		PORTB |= _BV(LED1);
+}
+	
+void wait_8th(void)
+{
+	uint8_t start = abs_time % 8;
+	
+	while(abs_time % 8 == start)
+	{
+		/*if(supply_voltage())
+			PORTB |= _BV(LED1);
+		else
+			PORTB &= ~_BV(LED1);
+		if(get_voltage()>100)
+			PORTB |= _BV(LED2);
+		else
+			PORTB &= ~_BV(LED2);*/
+	}
+}
+
+void send_err(void)
+{
+	OCR1B=0;//turn off the PWM to be safe
+
+	PORTB &= ~(_BV(LED1)|_BV(LED2));
+	if(status!=0)//leave last error if there was one
+		PORTA &= ~(_BV(debug_time)|_BV(debug_curr)|_BV(debug_volt)|_BV(debug_temp)|_BV(debug_12in)); 
+	error=1;
+	status=0;
+}
+
+void send_done(void)
+{
+	char tempData;
+	//Finished, leave
+	tempData = 'F';
+	i2c_putpacket(0x01, &tempData, 1);
+	
+	PORTA &= ~(_BV(debug_time)|_BV(debug_curr)|_BV(debug_volt)|_BV(debug_temp)|_BV(debug_12in)); 
+	
+}
+
+void setup(void)
+{
+      DDRA = _BV(PA3);
+#ifdef debug
+	//DDRA = (_BV(debug_time)|_BV(debug_curr)|_BV(debug_volt)|_BV(debug_temp)|_BV(debug_12in));
+#endif
+	PORTA = 0x00;
+	DDRB = (_BV(ROBOT_TX)|_BV(PWM)|_BV(LED1)|_BV(LED2)); //confiure output pins
+	PORTB = 0x00;
+	
+	ADCSRA = (_BV(ADEN)|_BV(ADPS2)|_BV(ADPS1)); //start ADC with a division factor of 64
+	
+	TCCR0B = (_BV(CS01)); //set timer 0 for realtime mode
+	TCCR0A = (_BV(TCW0));
+	TIMSK = (_BV(TOIE0)); //enable overflow interrupts
+	
+	TCCR1A = (_BV(COM1B1)|_BV(PWM1B)|_BV(COM1A1)|_BV(PWM1A)); //clear timer 1 on compare, set at 0x00. Fast PWM mode
+	TCCR1B |= _BV(CS12)|_BV(CS10); //leave timer on and set compare to 0 to make output off	
+	OCR1B = 0;
+	OCR1A = 0;
+	
+	
+	RING_BUFFER_CLEAR(buffer);
+	RING_BUFFER_INIT(buffer, 12);
+	for(int i=0;i<10;i++)
+		RING_BUFFER_ADD(buffer, 0);
+	
+	sei();
+}
+
+
+
+
+//takes a 7-bit ionteger and displays it on the 7 LEDs with the Green being the MSB
+void LED_out(int i)
+{
+	if(i & 64)
+		PORTB |= _BV(LED1);
+	else
+		PORTB &= ~_BV(LED1);
+		
+	if(i & 32)
+		PORTB |= _BV(LED2);
+	else
+		PORTB &= ~_BV(LED2);
+		
+	if(i & 16)
+		PORTA |= _BV(PA3);
+	else
+		PORTA &= ~_BV(PA3);
+	
+	if(i & 8)
+		PORTA |= _BV(PA4);
+	else
+		PORTA &= ~_BV(PA4);
+		
+	if(i & 4)
+		PORTA |= _BV(PA5);
+	else
+		PORTA &= ~_BV(PA5);
+	
+	if(i & 2)
+		PORTA |= _BV(PA6);
+	else
+		PORTA &= ~_BV(PA6);
+		
+	if(i & 1)
+		PORTA |= _BV(PA7);
+	else
+		PORTA &= ~_BV(debug_12in);
+}
+
+//get the difference of the current value minues the value 10 entires ago
+int ring_buffer_d10(int y)
+{	
+	int x;
+	RING_BUFFER_REMOVE(buffer, x);
+		
+	RING_BUFFER_ADD(buffer, y);
+	return y-x;
+}
+
+
+uint8_t read_homing()
+{
+    uint8_t ret = PINA & _BV(HOMING_PIN);
+    if(ret)
+        PORTA |= _BV(PA3);
+    else
+        PORTA &= ~_BV(PA3);
+    return ret;
+}
+
+//copied from scheduler/seeking.c
+uint8_t get_delay(void)
+{
+    uint8_t count = 0;
+    
+	PORTB|=_BV(LED2);
+    while(read_homing())
+    {
+        delay_ms(1);
+        count++;
+        if (count >= 100)
+            return 1;
+    } //wait a beacon cycle to make sure we aren't starting the count in the middle of one
+	PORTB&=~_BV(LED2);
+    count = 0;
+    PORTB|=_BV(LED1);
+    while(!read_homing())
+    {
+        delay_ms(1);
+        count++;
+        if(count==255)
+          return 2;
+    }
+    PORTB&=~_BV(LED1);
+	
+  /*RECH_PUTS("\n\rCount: ");
+	RECH_PUTI(count);
+	RECH_PUTC('.');*/
+	
+    return count;
+}
+
+void trickle_charge(void)
+{
+
+	abs_time = 0;
+	status = 0;
+	char tempData[5];
+	char data[2];
+	data[0]='D';
+	int volt = 0;
+	int temp = 0;
+	int curr = 0;
+	int meas_count = 0;
+	int mod=0;
+	sei();
+	OCR1B = 0;
+	
+	while(status!=2)
+	{
+		mod=abs_time%4;
+		
+		if(supply_voltage())
+		  while(abs_time%4==mod);
+		
+    /* TIME TERMINATION */
+		if(abs_time>500) //12000=25 minutes
+		{
+			//SEND_DONE
+			OCR1B=0;
+			break;
+		}
+		
+#if DEBUG		
+		tempData[0] = 'C';
+		tempData[1] = abs_time>>8;
+		tempData[2] = abs_time&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+#endif
+		
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+      /* CONTACT */
+			if(supply_voltage())
+			{
+				//curr = regulate_current(500);
+				curr = get_avg_current();
+				
+				if(status==0)
+				{
+					status=1;
+					data[1]='a';
+					i2c_putpacket(0x01, data, 2);
+					data[1]=I2C_MSG_BATTERY_CHARGING;
+					i2c_putpacket(0x01, data, 2);
+				}
+				
+        /* Trickle Charge */
+				if(status==1)
+					OCR1B = 50;
+			}
+      /* NO CONTACT */
+			else
+			{
+				if(status==1)
+				{
+					status=0;
+					data[1]=I2C_MSG_CONTACT_ERROR;
+					i2c_putpacket(0x01, data, 2);
+				}
+				else
+				{
+          get_delay(); //reject the first reading
+					data[0]=I2C_MSG_HOMING;
+					data[1]=get_delay();
+          i2c_putpacket(0x01, data, 2);
+          
+          data[0]='D';
+				}
+				curr = 0;
+				OCR1B = 0;
+			}
+		}
+		
+#if DEBUG
+		tempData[0] = 'P';
+		tempData[1] = 0;
+		tempData[2] = OCR1B;
+		i2c_putpacket(0x01, tempData, 3);
+		tempData[0] = 'I';
+		tempData[1] = curr>>8;
+		tempData[2] = curr&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+#endif
+		curr=6666;
+		
+    /* Absolute Voltage Termination */
+		if(supply_voltage())
+		  {
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			volt = get_avg_voltage();
+		}
+		
+		if(volt>1010)
+		{
+			//SEND ERROR
+			status=0;
+		}
+    
+#if DEBUG
+		tempData[0] = 'V';
+		tempData[1] = volt>>8;
+		tempData[2] = volt&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+#endif
+		volt=6666;
+		
+    /* Absolute Temperature Termination */
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			temp = get_avg_temperature();
+		}
+		
+		if(temp<250)
+		{
+			//SEND ERROR
+			status=0;
+		}
+
+#if DEBUG
+		tempData[0] = 'T';
+		tempData[1] = temp>>8;
+		tempData[2] = temp&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+#endif
+		  }
+
+		temp=6666;
+	}
+	
+	data[1]=I2C_MSG_BATTERY_FULL;
+	i2c_putpacket(0x01, data, 2);
+
+}
+
+int main(void)
+{
+	new_second=0;
+	char tempData[5];	//For i2c communication
+	//test_board();
+  
+	setup();
+	i2c_init();
+	
+	
+	/*GIMSK = (_BV(PCIE0)); //enable PCINT interrupts
+	PCMSK1 = (_BV(PCINT10)); //enable pin change interrupt on ROBOT_RX
+	MCUCR = (_BV(SE)|_BV(SM1));// (power-down mode)
+	*/
+	
+	OCR1B=0;
+	
+	sei();
+  
+  //test delay_ms
+  PORTB|=_BV(LED2);
+  PORTB|=_BV(LED1);
+  delay_ms(1000);
+  PORTB&=~_BV(LED2);
+  PORTB&=~_BV(LED1);
+	
+	//*******************************
+	while(1)
+		trickle_charge();
+	
+	/*GIMSK = (_BV(PCIE0)); //enable PCINT interrupts
+	sleep_cpu();*/
+	
+	PORTB=0;//clear outputs
+	
+	GIMSK = 0;
+	
+	error=0;
+		
+	i2c_init();
+	int volt=0, last_volt=0, same_volt=0;
+	int temp=0, dt;
+	int curr=0;
+	int meas_count;
+	int mod=0;
+	
+	status=FAST_CHARGE;
+	
+	while(1)
+	{
+		mod=abs_time%4;
+		while(abs_time%4==mod);
+		
+		/*if((abs_time>>3)%3==0)
+			OCR1B=21;
+		else if((abs_time>>3)%3==1)
+			OCR1B=57;
+		else
+			OCR1B=85;*/
+		
+		tempData[0] = 'C';
+		tempData[1] = abs_time>>8;
+		tempData[2] = abs_time&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+		
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+      /* CONTACT */
+			if(supply_voltage())
+			{
+				//curr = regulate_current(500);
+				curr = get_avg_current();
+				
+				if(status==FAST_CHARGE)
+					OCR1B=50;
+			}
+      /* NO CONTACT */
+			else
+			{
+				curr = 0;
+				OCR1B = 0;
+			}
+		}
+		
+
+		tempData[0] = 'P';
+		tempData[1] = 0;
+		tempData[2] = OCR1B;
+		i2c_putpacket(0x01, tempData, 3);
+		tempData[0] = 'I';
+		tempData[1] = curr>>8;
+		tempData[2] = curr&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+		curr=6666;
+		
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			volt = get_avg_voltage();
+		}
+		
+    //Same volt - Last volt upkeep
+		if(volt==last_volt && supply_voltage())
+				same_volt++;
+    else
+    {
+      last_volt = volt;
+      same_volt=0;
+    }
+
+			
+		tempData[0] = 'v';
+		tempData[1] = same_volt>>8;
+		tempData[2] = same_volt&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+		
+    /* Voltage Dip Termination */
+		if(volt<last_volt && same_volt>=VOLT_PLATEAU)
+		{
+			OCR1B=0;
+			status=0;
+		}
+
+		tempData[0] = 'V';
+		tempData[1] = volt>>8;
+		tempData[2] = volt&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+
+		volt=6666;
+		
+    //Temp ring buffer upkeep
+		mod=abs_time%4;
+		while(abs_time%4==mod)
+		{
+			temp = get_avg_temperature();			
+		}
+		
+		dt=ring_buffer_d10(temp);
+		
+		tempData[0] = 't';
+		tempData[1] = dt>>8;
+		tempData[2] = dt&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+		
+    /* Temperature Rise Termination */
+		if(dt < MAX_DT && temp < MAX_DT_ABS)
+		{
+			status=0;
+			OCR1B=0;
+		}
+		
+		tempData[0] = 'T';
+		tempData[1] = temp>>8;
+		tempData[2] = temp&0xFF;
+		i2c_putpacket(0x01, tempData, 3);
+
+		temp=6666;
+	}
+
+	
+	return 1;
+}
+
+ISR(TIMER0_OVF_vect)
+{
+	if(error)
+		PORTB ^= (_BV(LED1)|_BV(LED2));
+
+	interrupt_count--;
+	if(interrupt_count==0)
+	{
+		abs_time++;
+		new_second=1;
+			
+		interrupt_count=INT_COUNT;
+	}
+}
+
+ISR(PCINT_vect){;} //so the interrupt doesnt go to the reset vector
Index: branches/scout/projects/autonomous_recharging/archs/Makefile
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/Makefile	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/Makefile	(revision 1346)
@@ -0,0 +1,508 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+
+# MCU name
+MCU = attiny861
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = ConstantCharging
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(TARGET).c
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+#EXTRAINCDIRS = C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 4800 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVE) .dep/*
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/projects/autonomous_recharging/archs/USI_TWI_Slave.c
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/USI_TWI_Slave.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/USI_TWI_Slave.c	(revision 1346)
@@ -0,0 +1,218 @@
+// This file has been prepared for Doxygen automatic documentation generation.
+/*! \file ********************************************************************
+*
+* Atmel Corporation
+*
+* File              : USI_TWI_Slave.c
+* Compiler          : IAR EWAAVR 4.11A
+* Revision          : $Revision: 1.14 $
+* Date              : $Date: Friday, December 09, 2005 17:25:38 UTC $
+* Updated by        : $Author: jtyssoe $
+*
+* Support mail      : avr@atmel.com
+*
+* Supported devices : All device with USI module can be used.
+*
+* AppNote           : AVR312 - Using the USI module as a I2C slave
+*
+* Description       : Functions for USI_TWI_receiver and USI_TWI_transmitter.
+*
+*
+****************************************************************************/
+
+#ifndef _USI_TWI_SLAVE_H
+#define _USI_TWI_SLAVE_H
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include "USI_TWI_Slave.h"
+
+/*! Static Variables */
+
+static unsigned char TWI_slaveAddress;
+static volatile unsigned char USI_TWI_Overflow_State;
+
+/*! Local variables */
+static uint8_t TWI_RxBuf[TWI_RX_BUFFER_SIZE];
+static volatile uint8_t TWI_RxHead;
+static volatile uint8_t TWI_RxTail;
+
+static uint8_t TWI_TxBuf[TWI_TX_BUFFER_SIZE];
+static volatile uint8_t TWI_TxHead;
+static volatile uint8_t TWI_TxTail;
+
+/*! \brief Flushes the TWI buffers
+ */
+void Flush_TWI_Buffers(void)
+{
+    TWI_RxTail = 0;
+    TWI_RxHead = 0;
+    TWI_TxTail = 0;
+    TWI_TxHead = 0;
+}
+
+//********** USI_TWI functions **********//
+
+/*! \brief
+ * Initialise USI for TWI Slave mode.
+ */
+void USI_TWI_Slave_Initialise( unsigned char TWI_ownAddress )
+{
+  Flush_TWI_Buffers();
+
+  TWI_slaveAddress = TWI_ownAddress;
+
+  PORT_USI |=  (1<<PORT_USI_SCL);                                 // Set SCL high
+  PORT_USI |=  (1<<PORT_USI_SDA);                                 // Set SDA high
+  DDR_USI  |=  (1<<PORT_USI_SCL);                                 // Set SCL as output
+  DDR_USI  &= ~(1<<PORT_USI_SDA);                                 // Set SDA as input
+  USICR    =  (1<<USISIE)|(0<<USIOIE)|                            // Enable Start Condition Interrupt. Disable Overflow Interrupt.
+              (1<<USIWM1)|(0<<USIWM0)|                            // Set USI in Two-wire mode. No USI Counter overflow prior
+                                                                  // to first Start Condition (potentail failure)
+              (1<<USICS1)|(0<<USICS0)|(0<<USICLK)|                // Shift Register Clock Source = External, positive edge
+              (0<<USITC);
+  USISR    = 0xF0;                                                // Clear all flags and reset overflow counter
+}
+
+
+/*! \brief Puts data in the transmission buffer, Waits if buffer is full.
+*/
+void USI_TWI_Transmit_Byte( unsigned char data )
+{
+    unsigned char tmphead;
+
+    tmphead = ( TWI_TxHead + 1 ) & TWI_TX_BUFFER_MASK;         // Calculate buffer index.
+    while ( tmphead == TWI_TxTail );                           // Wait for free space in buffer.
+    TWI_TxBuf[tmphead] = data;                                 // Store data in buffer.
+    TWI_TxHead = tmphead;                                      // Store new index.
+}
+
+/*! \brief Returns a byte from the receive buffer. Waits if buffer is empty.
+ */
+unsigned char USI_TWI_Receive_Byte( void )
+{
+    unsigned char tmptail;
+    unsigned char tmpRxTail;                                  // Temporary variable to store volatile
+    tmpRxTail = TWI_RxTail;                                   // Not necessary, but prevents warnings
+    while ( TWI_RxHead == tmpRxTail );
+    tmptail = ( TWI_RxTail + 1 ) & TWI_RX_BUFFER_MASK;        // Calculate buffer index
+    TWI_RxTail = tmptail;                                     // Store new index
+    return TWI_RxBuf[tmptail];                                // Return data from the buffer.
+}
+
+/*! \brief Check if there is data in the receive buffer.
+ */
+unsigned char USI_TWI_Data_In_Receive_Buffer( void )
+{
+    unsigned char tmpRxTail;                            // Temporary variable to store volatile
+    tmpRxTail = TWI_RxTail;                             // Not necessary, but prevents warnings
+    return ( TWI_RxHead != tmpRxTail );                 // Return 0 (FALSE) if the receive buffer is empty.
+}
+
+/*! \brief Usi start condition ISR
+ * Detects the USI_TWI Start Condition and intialises the USI
+ * for reception of the "TWI Address" packet.
+ */
+ISR(USI_START_vect) {
+
+    unsigned char tmpUSISR;                                         // Temporary variable to store volatile
+    tmpUSISR = USISR;                                               // Not necessary, but prevents warnings
+// Set default starting conditions for new TWI package
+    USI_TWI_Overflow_State = USI_SLAVE_CHECK_ADDRESS;
+    DDR_USI  &= ~(1<<PORT_USI_SDA);                                 // Set SDA as input
+    while ( (PIN_USI & (1<<PORT_USI_SCL)) & !(tmpUSISR & (1<<USIPF)) );   // Wait for SCL to go low to ensure the "Start Condition" has completed.
+                                                                       // If a Stop condition arises then leave the interrupt to prevent waiting forever.
+    USICR   =   (1<<USISIE)|(1<<USIOIE)|                            // Enable Overflow and Start Condition Interrupt. (Keep StartCondInt to detect RESTART)
+                (1<<USIWM1)|(1<<USIWM0)|                            // Set USI in Two-wire mode.
+                (1<<USICS1)|(0<<USICS0)|(0<<USICLK)|                // Shift Register Clock Source = External, positive edge
+                (0<<USITC);
+    USISR  =    (1<<USI_START_COND_INT)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      // Clear flags
+                (0x0<<USICNT0);                                     // Set USI to sample 8 bits i.e. count 16 external pin toggles.
+}
+
+
+/*! \brief USI counter overflow ISR
+ * Handels all the comunication. Is disabled only when waiting
+ * for new Start Condition.
+ */
+ISR(USI_OVF_vect) {
+
+  unsigned char tmpTxTail;     // Temporary variables to store volatiles
+  unsigned char tmpUSIDR;
+
+
+  switch (USI_TWI_Overflow_State)
+  {
+    // ---------- Address mode ----------
+    // Check address and send ACK (and next USI_SLAVE_SEND_DATA) if OK, else reset USI.
+    case USI_SLAVE_CHECK_ADDRESS:
+      if ((USIDR == 0) || (( USIDR>>1 ) == TWI_slaveAddress))
+      {
+        if ( USIDR & 0x01 )
+          USI_TWI_Overflow_State = USI_SLAVE_SEND_DATA;
+        else
+          USI_TWI_Overflow_State = USI_SLAVE_REQUEST_DATA;
+          SET_USI_TO_SEND_ACK();
+      }
+      else
+      {
+        SET_USI_TO_TWI_START_CONDITION_MODE();
+      }
+      break;
+
+    // ----- Master write data mode ------
+    // Check reply and goto USI_SLAVE_SEND_DATA if OK, else reset USI.
+    case USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA:
+      if ( USIDR ) // If NACK, the master does not want more data.
+      {
+        SET_USI_TO_TWI_START_CONDITION_MODE();
+        return;
+      }
+      // From here we just drop straight into USI_SLAVE_SEND_DATA if the master sent an ACK
+
+    // Copy data from buffer to USIDR and set USI to shift byte. Next USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA
+    case USI_SLAVE_SEND_DATA:
+
+      // Get data from Buffer
+      tmpTxTail = TWI_TxTail;           // Not necessary, but prevents warnings
+      if ( TWI_TxHead != tmpTxTail )
+      {
+        TWI_TxTail = ( TWI_TxTail + 1 ) & TWI_TX_BUFFER_MASK;
+        USIDR = TWI_TxBuf[TWI_TxTail];
+      }
+      else // If the buffer is empty then:
+      {
+          SET_USI_TO_TWI_START_CONDITION_MODE();
+          return;
+      }
+      USI_TWI_Overflow_State = USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA;
+      SET_USI_TO_SEND_DATA();
+      break;
+
+    // Set USI to sample reply from master. Next USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA
+    case USI_SLAVE_REQUEST_REPLY_FROM_SEND_DATA:
+      USI_TWI_Overflow_State = USI_SLAVE_CHECK_REPLY_FROM_SEND_DATA;
+      SET_USI_TO_READ_ACK();
+      break;
+
+    // ----- Master read data mode ------
+    // Set USI to sample data from master. Next USI_SLAVE_GET_DATA_AND_SEND_ACK.
+    case USI_SLAVE_REQUEST_DATA:
+      USI_TWI_Overflow_State = USI_SLAVE_GET_DATA_AND_SEND_ACK;
+      SET_USI_TO_READ_DATA();
+      break;
+
+    // Copy data from USIDR and send ACK. Next USI_SLAVE_REQUEST_DATA
+    case USI_SLAVE_GET_DATA_AND_SEND_ACK:
+      // Put data into Buffer
+      tmpUSIDR = USIDR;             // Not necessary, but prevents warnings
+      TWI_RxHead = ( TWI_RxHead + 1 ) & TWI_RX_BUFFER_MASK;
+      TWI_RxBuf[TWI_RxHead] = tmpUSIDR;
+
+      USI_TWI_Overflow_State = USI_SLAVE_REQUEST_DATA;
+      SET_USI_TO_SEND_ACK();
+      break;
+  }
+}
+
+#endif
Index: branches/scout/projects/autonomous_recharging/archs/i2c.c
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/i2c.c	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/i2c.c	(revision 1346)
@@ -0,0 +1,115 @@
+/* I2C.c
+
+    I2C Communication
+    
+    Problem switching into slave mode. So never run as a slave otherwise you will never be able
+        to speak again (unless a master tells you to).
+    
+*/
+
+#include "i2c.h"
+/*
+int main(void) {
+	i2c_test();
+}
+*/
+//Call this to start I2C up
+void i2c_init(void) {
+  //Start off in slave mode so you can catch any data that comes your way
+  //USI_TWI_Slave_Initialise(0x02);
+  
+  //Can't ever be a slave otherwise you will die. Stay as master and never give it up.
+    USI_TWI_Master_Initialise();
+ 
+}
+
+
+//Call this to send a packet. *data is a char array of data_size. Make sure you put in data_size or we won't send
+//everything.
+//Note, mainboard is addr = 0x01.
+void i2c_putpacket(char addr, char *data, char data_size) {
+  //The packet that we will transmit over I2C
+  unsigned char packet[data_size + 1];
+  
+  //First byte is the destination address + R/W (R = 1, W = 0)
+  packet[0] = addr << 1;    //Shift the address over 1 bit, LSB is 0 which means write
+  
+  //Put data into packet
+  for (int i = 0; i < data_size; i++) {
+    packet[i+1] = data[i];
+  }
+  
+  //Send packet. Will open line, transmit, and close line.
+  USI_TWI_Start_Transceiver_With_Data(packet, (data_size + 1));
+
+}
+
+int i2c_getpacket(char *c) {
+  if (USI_TWI_Data_In_Receive_Buffer()) {
+    *c =  USI_TWI_Receive_Byte();
+    return 0;
+  } else{
+      return -1;
+  
+  }
+}
+
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+
+// Note this will fail. You need to fix the switch from slave -> master before it will succeed.
+void i2c_test(void) {
+    char datatx[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
+   char datarx;
+  
+  DDRA = _BV(PA3) | _BV(PA4) | _BV(PA5) | _BV(PA6) | _BV(PA7);
+  PORTA = 0;
+  PORTA |= _BV(PA3);
+  
+  //delay_ms(1000);
+  
+  sei();
+  i2c_init();
+   
+    while(1) {
+	delay_ms(1000);
+    i2c_putpacket(0x01, datatx, 26);
+	}
+  
+  /*
+    while(1) {
+      i2c_getpacket(&datarx);
+      
+      switch (datarx) {
+        case 'a':
+            PORTA |= _BV(PA4);
+            break;
+        case 'b':
+            PORTA |= _BV(PA5);
+            break;
+        case 'c':
+            PORTA |= _BV(PA6);
+            break;
+        case 'd':
+            PORTA |= _BV(PA7);
+            break;
+      }
+      
+      if (datarx == 'd')
+        break;
+  }
+  
+   PORTA = 0;
+ 
+
+  //PORTA |= _BV(PA5);
+  delay_ms(1000);
+  i2c_putpacket(0x01, datatx, 26);
+  */
+}
+
Index: branches/scout/projects/autonomous_recharging/archs/ring_buffer.h
===================================================================
--- branches/scout/projects/autonomous_recharging/archs/ring_buffer.h	(nonexistent)
+++ branches/scout/projects/autonomous_recharging/archs/ring_buffer.h	(revision 1346)
@@ -0,0 +1,149 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs None known.
+ */
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+		uint8_t buffer_size;			\
+	} __VA_ARGS__
+
+
+#define RING_BUFFER_BIT_NEW(struct_name, size, ...)	\
+	struct struct_name {	\
+		int8_t queue[(size / 8) + 1];	\
+		uint16_t start;	\
+		uint16_t end;	\
+	} __VA_ARGS__
+
+/** @brief Initializes the ring buffer, setting its size to the correct value
+ *
+ *	@param buf The ring buffer to initialize.
+ *
+ *  @param size The size of the ring buffer (in array elements)
+ */
+#define RING_BUFFER_INIT(buf, size) 			\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+
+#define RING_BUFFER_BIT_INIT(buf, size) 		\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+	
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+#define RING_BUFFER_BIT_CLEAR(buf) RING_BUFFER_CLEAR(buf)
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+
+#define RING_BUFFER_BIT_EMPTY(buf) RING_BUFFER_EMPTY(buf)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % (buf).buffer_size == (buf).start)
+
+#define RING_BUFFER_BIT_FULL(buf) RING_BUFFER_FULL(buf)
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % (buf).buffer_size;	\
+	} while (0)
+
+#define RING_BUFFER_BIT_ADD(buf, val)	\
+	do {								\
+		if (val) {						\
+			(buf).queue[((buf).end >> 3) & 0xff] |= _BV((buf).end & 0x7);	\
+		}								\
+		else {							\
+			(buf).queue[((buf).end >> 3) & 0xff] &= ~_BV((buf).end & 0x7);	\
+		}								\
+		(buf).end = ((buf).end + 1) % ((buf).buffer_size) << 3);			\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % (buf).buffer_size;	\
+	} while (0)
+
+#define RING_BUFFER_BIT_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = ((buf).queue[((buf).start >> 3) & 0xff] & _BV((buf).start & 0x7)) ? 1 : 0;	\
+		(buf).start = ((buf).start + 1) % ((buf).buffer_size << 3);	\
+	} while (0)
+
+/** @brief Checks the value at the head of the ring buffer without removing it
+ *  and puts it into val_ret. Note that val_ret must be the same type used in
+ *  creating the ring buffer to prevent the compiler from spewing confusing
+ *  errors. Also, this assumes that the ring buffer is not empty.
+ *
+ *  @param buf The ring buffer to check from
+ *  @param val_ret where to put the value checked from the head of the ring
+ */
+ #define RING_BUFFER_PEEK(buf, val_ret)  \
+  do { \
+    (val_ret) = (buf).queue[(buf).start]; \
+  } while(0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/scout/lib/include/libdragonfly/serial.h
===================================================================
--- branches/scout/lib/include/libdragonfly/serial.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/serial.h	(revision 1346)
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file serial.h
+ * @brief Contains declarations for serial input and output
+ *
+ * Contains definitions for serial input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ *
+ **/
+
+/*
+  serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+  usb_*() -> UART0
+  xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+  #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+  #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+  #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+#include <inttypes.h>
+#include <avr/pgmspace.h>
+
+/**
+ * @defgroup usb USB Input / Output
+ * @brief Functions for USB input / output
+ *
+ * Low level functions for USB input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+/** @brief the USB baud rate **/
+#define USB_BAUD 115200
+#endif
+
+/** @brief Initialize the USB **/
+void usb_init(void);
+/** @brief Print a character to USB **/
+int usb_putc(char c);
+/** @brief Read a character from USB **/
+int usb_getc(void);
+/** @brief Read a character from USB without blocking **/
+int usb_getc_nb(char *c);
+/** @brief Print a string to USB **/
+int usb_puts(char *s);
+/** @brief Print a string from program space to USB **/
+void usb_puts_P (PGM_P s);
+/** @brief Print an integer to USB **/
+int usb_puti(int value);
+/** @brief Determine a hexadecimal digit **/
+uint8_t hex_digit (uint8_t value);
+/** @brief Print a fixed width hexadecimal representation to USB **/
+void usb_puth16 (uint16_t value);
+/** @brief Print a fixed width hexadecimal representation to USB **/
+void usb_puth8(uint8_t value);
+/** @brief Alias for usb_puth16 **/
+static inline void usb_puth (uint16_t value) { usb_puth16 (value); };
+
+
+/** @} **/ //end addtogroup
+
+/**
+ * @defgroup xbee XBee Input / Output
+ * @brief Functions for XBee input / output
+ *
+ * Low level functions for XBee input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+/** @brief the XBee baud rate **/
+#define XBEE_BAUD 9600
+#endif
+
+/** @brief Initialize the XBee **/
+void xbee_init(void);
+/** @brief Print a character to the XBee **/
+int xbee_putc(char c);
+/** @brief Read a character from the XBee **/
+int xbee_getc(void);
+/** @brief Read a character from the XBee without blocking **/
+int xbee_getc_nb(char *c);
+
+
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/atomic.h
===================================================================
--- branches/scout/lib/include/libdragonfly/atomic.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/atomic.h	(revision 1346)
@@ -0,0 +1,309 @@
+/* This file is in the dragonfly library directory because it seems to be
+   missing from the AVR libc distribution */
+   
+/* Copyright (c) 2007 Dean Camera
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* $Id: atomic.h,v 1.3 2007/12/20 14:17:56 joerg_wunsch Exp $ */
+
+#ifndef _UTIL_ATOMIC_H_
+#define _UTIL_ATOMIC_H_ 1
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+#if !defined(__DOXYGEN__)
+/* Internal helper functions. */
+static __inline__ uint8_t __iSeiRetVal(void)
+{
+    sei();
+    return 1;
+}
+
+static __inline__ uint8_t __iCliRetVal(void)
+{
+    cli();
+    return 1;
+}
+
+static __inline__ void __iSeiParam(const uint8_t *__s)
+{
+    sei();
+    __asm__ volatile ("" ::: "memory");
+    (void)__s;
+}
+
+static __inline__ void __iCliParam(const uint8_t *__s)
+{
+    cli();
+    __asm__ volatile ("" ::: "memory");
+    (void)__s;
+}
+
+static __inline__ void __iRestore(const  uint8_t *__s)
+{
+    SREG = *__s;
+    __asm__ volatile ("" ::: "memory");
+}
+#endif	/* !__DOXYGEN__ */
+
+/** \file */
+/** \defgroup util_atomic <util/atomic.h> Atomically and Non-Atomically Executed Code Blocks
+
+    \code
+    #include <util/atomic.h>
+    \endcode
+
+    \note The macros in this header file require the ISO/IEC 9899:1999
+    ("ISO C99") feature of for loop variables that are declared inside
+    the for loop itself.  For that reason, this header file can only
+    be used if the standard level of the compiler (option --std=) is
+    set to either \c c99 or \c gnu99.
+
+    The macros in this header file deal with code blocks that are
+    guaranteed to be excuted Atomically or Non-Atmomically.  The term
+    "Atomic" in this context refers to the unability of the respective
+    code to be interrupted.
+
+    These macros operate via automatic manipulation of the Global
+    Interrupt Status (I) bit of the SREG register. Exit paths from
+    both block types are all managed automatically without the need
+    for special considerations, i. e. the interrupt status will be
+    restored to the same value it has been when entering the
+    respective block.
+
+    A typical example that requires atomic access is a 16 (or more)
+    bit variable that is shared between the main execution path and an
+    ISR.  While declaring such a variable as volatile ensures that the
+    compiler will not optimize accesses to it away, it does not
+    guarantee atomic access to it.  Assuming the following example:
+
+    \code
+#include <inttypes.h>
+#include <avr/interrupt.h>
+#include <avr/io.h>
+
+volatile uint16_t ctr;
+
+ISR(TIMER1_OVF_vect)
+{
+  ctr--;
+}
+
+...
+int
+main(void)
+{
+   ...
+   ctr = 0x200;
+   start_timer();
+   while (ctr != 0)
+     // wait
+       ;
+   ...
+}
+    \endcode
+
+    There is a chance where the main context will exit its wait loop
+    when the variable \c ctr just reached the value 0xFF.  This happens
+    because the compiler cannot natively access a 16-bit variable
+    atomically in an 8-bit CPU.  So the variable is for example at
+    0x100, the compiler then tests the low byte for 0, which succeeds.
+    It then proceeds to test the high byte, but that moment the ISR
+    triggers, and the main context is interrupted.  The ISR will
+    decrement the variable from 0x100 to 0xFF, and the main context
+    proceeds.  It now tests the high byte of the variable which is
+    (now) also 0, so it concludes the variable has reached 0, and
+    terminates the loop.
+
+    Using the macros from this header file, the above code can be
+    rewritten like:
+
+    \code
+#include <inttypes.h>
+#include <avr/interrupt.h>
+#include <avr/io.h>
+#include <util/atomic.h>
+
+volatile uint16_t ctr;
+
+ISR(TIMER1_OVF_vect)
+{
+  ctr--;
+}
+
+...
+int
+main(void)
+{
+   ...
+   ctr = 0x200;
+   start_timer();
+   sei();
+   uint16_t ctr_copy;
+   do
+   {
+     ATOMIC_BLOCK(ATOMIC_FORCEON)
+     {
+       ctr_copy = ctr;
+     }
+   }
+   while (ctr_copy != 0);
+   ...
+}
+    \endcode
+
+    This will install the appropriate interrupt protection before
+    accessing variable \c ctr, so it is guaranteed to be consistently
+    tested.  If the global interrupt state were uncertain before
+    entering the ATOMIC_BLOCK, it should be executed with the
+    parameter ATOMIC_RESTORESTATE rather than ATOMIC_FORCEON.
+
+*/
+
+/** \def ATOMIC_BLOCK(type)
+    \ingroup util_atomic
+
+    Creates a block of code that is guaranteed to be executed
+    atomically. Upon entering the block the Global Interrupt Status
+    flag in SREG is disabled, and re-enabled upon exiting the block
+    from any exit path.
+
+    Two possible macro parameters are permitted, ATOMIC_RESTORESTATE
+    and ATOMIC_FORCEON.
+*/
+#if defined(__DOXYGEN__)
+#define ATOMIC_BLOCK(type)
+#else
+#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
+	                       __ToDo ; __ToDo = 0 )
+#endif	/* __DOXYGEN__ */
+
+/** \def NONATOMIC_BLOCK(type)
+    \ingroup util_atomic
+
+    Creates a block of code that is executed non-atomically. Upon
+    entering the block the Global Interrupt Status flag in SREG is
+    enabled, and disabled upon exiting the block from any exit
+    path. This is useful when nested inside ATOMIC_BLOCK sections,
+    allowing for non-atomic execution of small blocks of code while
+    maintaining the atomic access of the other sections of the parent
+    ATOMIC_BLOCK.
+
+    Two possible macro parameters are permitted,
+    NONATOMIC_RESTORESTATE and NONATOMIC_FORCEOFF.
+*/
+#if defined(__DOXYGEN__)
+#define NONATOMIC_BLOCK(type)
+#else
+#define NONATOMIC_BLOCK(type) for ( type, __ToDo = __iSeiRetVal(); \
+	                          __ToDo ;  __ToDo = 0 )
+#endif	/* __DOXYGEN__ */
+
+/** \def ATOMIC_RESTORESTATE
+    \ingroup util_atomic
+
+    This is a possible parameter for ATOMIC_BLOCK. When used, it will
+    cause the ATOMIC_BLOCK to restore the previous state of the SREG
+    register, saved before the Global Interrupt Status flag bit was
+    disabled. The net effect of this is to make the ATOMIC_BLOCK's
+    contents guaranteed atomic, without changing the state of the
+    Global Interrupt Status flag when execution of the block
+    completes.
+*/
+#if defined(__DOXYGEN__)
+#define ATOMIC_RESTORESTATE
+#else
+#define ATOMIC_RESTORESTATE uint8_t sreg_save \
+	__attribute__((__cleanup__(__iRestore))) = SREG
+#endif	/* __DOXYGEN__ */
+
+/** \def ATOMIC_FORCEON
+    \ingroup util_atomic
+
+    This is a possible parameter for ATOMIC_BLOCK. When used, it will
+    cause the ATOMIC_BLOCK to force the state of the SREG register on
+    exit, enabling the Global Interrupt Status flag bit. This saves on
+    flash space as the previous value of the SREG register does not
+    need to be saved at the start of the block.
+
+    Care should be taken that ATOMIC_FORCEON is only used when it is
+    known that interrupts are enabled before the block's execution or
+    when the side effects of enabling global interrupts at the block's
+    completion are known and understood.
+*/
+#if defined(__DOXYGEN__)
+#define ATOMIC_FORCEON
+#else
+#define ATOMIC_FORCEON uint8_t sreg_save \
+	__attribute__((__cleanup__(__iSeiParam))) = 0
+#endif	/* __DOXYGEN__ */
+
+/** \def NONATOMIC_RESTORESTATE
+    \ingroup util_atomic
+
+    This is a possible parameter for NONATOMIC_BLOCK. When used, it
+    will cause the NONATOMIC_BLOCK to restore the previous state of
+    the SREG register, saved before the Global Interrupt Status flag
+    bit was enabled. The net effect of this is to make the
+    NONATOMIC_BLOCK's contents guaranteed non-atomic, without changing
+    the state of the Global Interrupt Status flag when execution of
+    the block completes.
+*/
+#if defined(__DOXYGEN__)
+#define NONATOMIC_RESTORESTATE
+#else
+#define NONATOMIC_RESTORESTATE uint8_t sreg_save \
+	__attribute__((__cleanup__(__iRestore))) = SREG
+#endif	/* __DOXYGEN__ */
+
+/** \def NONATOMIC_FORCEOFF
+    \ingroup util_atomic
+
+    This is a possible parameter for NONATOMIC_BLOCK. When used, it
+    will cause the NONATOMIC_BLOCK to force the state of the SREG
+    register on exit, disabling the Global Interrupt Status flag
+    bit. This saves on flash space as the previous value of the SREG
+    register does not need to be saved at the start of the block.
+
+    Care should be taken that NONATOMIC_FORCEOFF is only used when it
+    is known that interrupts are disabled before the block's execution
+    or when the side effects of disabling global interrupts at the
+    block's completion are known and understood.
+*/
+#if defined(__DOXYGEN__)
+#define NONATOMIC_FORCEOFF
+#else
+#define NONATOMIC_FORCEOFF uint8_t sreg_save \
+	__attribute__((__cleanup__(__iCliParam))) = 0
+#endif	/* __DOXYGEN__ */
+
+#endif
Index: branches/scout/lib/include/libdragonfly/lights.h
===================================================================
--- branches/scout/lib/include/libdragonfly/lights.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/lights.h	(revision 1346)
@@ -0,0 +1,222 @@
+// FIXME remove
+typedef unsigned char uint8_t;
+
+
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file lights.h
+ * @brief Contains declarations for managing the orbs.
+ *
+ * Contains declarations for using the orbs and PWM.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Firefly Library, by Tom Lauwers and Steven Shamlian
+ **/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+/**
+ * @addtogroup orbs
+ * @{
+ **/
+
+/**
+ * Quick start: call orb_init_pwm or orb_init_binary, depending on which mode you want to use. Call orb*set or
+ * orb*set_color to set the orbs.
+ * 
+ * The orbs have two modes of operation: PWM mode and binary mode. In PWM mode, a pwm signal is generated by a hardware
+ * timer and the orbs can be set to a value of 0 through 255. In binary mode, the orbs can only be turned on or off and
+ * a value of 0 means "off" and any other value means "on". The mode can be chosen on initialization and can be changed
+ * at runtime using the orb_set_mode function.
+ *
+ * Operation (PWM mode): On timer overflow, all LEDs with a value>0 are turned on and the output compare value for the
+ * first LED is loaded. On compare match, the corresponding LED is turned off and the next output compare value is
+ * loaded. All masks are precomputed and sorted by time when setting the values.
+ *
+ * The data structure (pwm_t) containing the PWM times and masks is triple buffered. This is because the buffer the ISR
+ * is reading from may only be modified on timer overflow before the next PWM sequence is started, because otherwise the
+ * next OCR value might be sed to a value smaller than the current timer value, resulting in the remaining channels not
+ * being turned off in that PWM period (flash to on). When using two buffers, the page flip can only occur on a timer
+ * overflow for the same reason. So after writing a buffer and marking it for page flip, neither of the buffers could be
+ * modified because the front buffer is read by the ISR and the back buffer could be switched at any time. So the
+ * calling thread would have to be delayed by up to one full PWM period (8ms in the current implementation, but
+ * 20ms-50ms would be a reasonable value to expect here). To avoid this, triple buffering is used.
+ *
+ * The code for applying the orbs is fairly optimized. See the apply_orbs function for some time measurements and
+ * further nodes.
+ *
+ * The PWM frequency is 120Hz (8ms period time). The next lower frequency (determined by the prescaler) is 30 Hz which
+ * is too slow (orbs flicker).
+ *
+ * The orbs code is thread safe, which means that the functions may be called from another interrupt handler. If there
+ * are multiple concurrent calls to the orb*set* functions, one of them is ignored and the orbs are never left in an
+ * inconsistent state. For example, if the orbs are set to green by the main thread and to red by an interrupt handler,
+ * the resulting color will be either red or green, but never yellow.
+ * Thread safety is achieved by grabbing a lock at the beginning of all functions that modify the orb code and releasing
+ * the lock at the end. If the lock is already taken, the function just returns doing nothing.
+ *
+ * Some performance measurements:
+ *   - Time for setting new orb values (PWM mode):       35us-72us (depending on the degree to which the array is
+ *                                                                  already in the correct order)
+ *   - Time for setting new orb values (binary mode):        5.5us
+ *
+ *   - Interrupt time (PWM mode only):                         8us (overflow)
+ *                                                            10us (output compare)
+ *                                                             6us (last output compare)
+ *                                                            30us (output compare, all value equal)
+ *
+ *   - Maximum total interrupt time per period:               64us
+ *   - Maximum CPU usage for interrupts (PWM mode only):     <0.8%
+ *
+ *   - Maximum contiguous synchronized block:                 30us (output compare interrupt, all values equal)
+ *
+ * There are some potential optimizations left. See the source code for more information.
+ *
+ * A note on robustness: if the output compare interrupt is disabled for too long, either due to a long ISR or a long
+ * synchronized code block, the orbs will flicker to brighter values for being turned off too late. With software PWM,
+ * there's nothing at all to be done about that. The problem can be alleviated by using a lower PWM frequency, but then
+ * the orbs will start flickering all the time due to the low update frequency.
+ * Some measurements: with 100us synchronized blocks, the flickering is accepptably low. Longer synchronized blocks
+ * mean more flickering. At 1ms synchronized blocks, the flickering is quite bad, especially for low orb values. Note
+ * that orb value 0 never flickers at all because the corresponding channels are not turned on at all.
+ * Test code (note the _delay_us restrictions!)
+ *   orb_set (1,1,1); while (1) { SYNC { for (uint8_t m=0; m<10; ++m) { _delay_us(10); } } }
+ **/
+
+/** @} **/ //end addtogroup
+
+/**
+ * @addtogroup orbs
+ * @{
+ **/
+
+// ***** Predefined colors *****
+/** @brief Red **/
+#define RED       0xE0
+/** @brief Orange **/
+#define ORANGE    0xE4
+/** @brief Yellow **/
+#define YELLOW    0xE8
+/** @brief Lime **/
+#define LIME      0x68
+/** @brief Green **/
+#define GREEN     0x1C
+/** @brief Cyan **/
+#define CYAN      0x1F
+/** @brief Blue **/
+#define BLUE      0x03
+/** @brief Pink **/
+#define PINK      0xA6 
+/** @brief Purple **/
+#define PURPLE    0x41
+/** @brief Magenta **/
+#define MAGENTA   0xE3
+/** @brief White **/
+#define WHITE     0xFE
+/** @brief Turn the orb off **/
+#define ORB_OFF   0x00
+
+
+
+// ***** Initialization *****
+
+/** @brief Enables the orbs in default mode **/
+void orb_init(void);
+
+/** @brief Enables the orbs in binary mode **/
+void orb_init_binary (void);
+
+/** @brief Enables the orbs in PWM mode **/
+void orb_init_pwm (void);
+
+
+
+// ***** Mode setting *****
+
+/** Specification of the orb mode **/
+typedef uint8_t orb_mode_t;
+
+/** @brief PWM mode **/
+#define orb_mode_pwm 0
+
+/** @brief Binary mode **/
+#define orb_mode_binary 1
+
+
+/** @brief Switches the orbs to the specified mode **/
+void orb_set_mode (orb_mode_t mode);
+
+/** @brief Disables the orb timer, but does not change the mode **/
+void orb_disable_timer (void);
+
+/** @brief Enables the orb timer, but does not change the mode **/
+void orb_enable_timer (void);
+
+
+
+// ***** Setting RGB colors *****
+
+/** @brief set the specified orb to a specified color **/
+void orb_n_set (uint8_t num, uint8_t red, uint8_t green, uint8_t blue);
+
+/** @brief Set both orbs to a specified color **/
+void orb_set(uint8_t red, uint8_t green, uint8_t blue);
+
+/** @brief Set orb1 to a specified color **/
+void orb1_set(uint8_t red_led, uint8_t green_led, uint8_t blue_led); 
+
+/** @brief Set orb2 to a specified color **/
+void orb2_set(uint8_t red_led, uint8_t green_led, uint8_t blue_led);
+
+void orbs_set (uint8_t red1, uint8_t green1, uint8_t blue1, uint8_t red2, uint8_t green2, uint8_t blue2);
+
+
+
+// ***** Settings predefined colors *****
+
+/** @brief set the specified orb to the specified color **/
+void orb_n_set_color(uint8_t num, uint8_t col);
+
+/** @brief Set orb1 to a specified color **/
+void orb1_set_color(uint8_t col);
+
+/** @brief Set orb2 to a specified color **/
+void orb2_set_color(uint8_t col);
+
+/** @brief set the orbs to specified colors **/
+void orbs_set_color(uint8_t col1, uint8_t col2);
+
+/** @brief Set both orbs to a specified color **/
+void orb_set_color(uint8_t col);
+
+
+
+/** @} **/ //end addtogroup
+
+#endif
Index: branches/scout/lib/include/libdragonfly/dragonfly_lib.h
===================================================================
--- branches/scout/lib/include/libdragonfly/dragonfly_lib.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/dragonfly_lib.h	(revision 1346)
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file dragonfly_lib.h
+ * @brief Contains other include files
+ * 
+ * Include this file for all the functionality of libdragonfly.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+/**
+ * @addtogroup dragonfly
+ * @{
+ **/
+
+// Configuration definitions
+/** @brief Initialize analog **/
+#define ANALOG 0x01
+/** @brief Initialize serial communications **/
+#define SERIAL 0x02
+/** @brief Initialize USB communications **/
+#define USB    0x02
+/** @brief Initialize communications **/
+#define COMM   0x02
+/** @brief Initialize the orb **/
+#define ORB    0x04
+/** @brief Initialize the motors **/
+#define MOTORS 0x08
+/** @brief Initialize I2C **/
+#define I2C    0x20
+/** @brief Initialize the buzzer **/
+#define BUZZER 0x40
+/** @brief Initialize the LCD screen **/
+#define LCD    0x80
+/** @brief Initialize the rangefinders **/
+#define RANGE  0x0100
+/** @brief Initialize the BOM **/
+#define BOM  0x0200
+/** @brief Initialize everything  **/
+#define ALL_ON 0x03FF
+
+/** @brief Initialize the board **/
+void dragonfly_init(int config);
+
+/** @} **/ //end addtogroup
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+// This file is included from the libdragonfly directory because it seems to be
+// missing from the AVR libc distribution.
+#include "atomic.h"
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+#include <reset.h>
+#include <math.h>
+#include <eeprom.h>
+#include <stdbool.h>
+
+/** @brief shortcut for ATOMIC_BLOCK(ATOMIC_RESTORESTATE) **/
+#define SYNC ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+
+/** @brief atomically grab a lock if it is free, return otherwise **/
+#define REQUIRE_LOCK_OR_RETURN(LOCK) do { SYNC { if (LOCK) return; LOCK=1; } } while (0)
+
+/** @brief atomically release a lock **/
+#define RELEASE_LOCK(LOCK) do { LOCK=0; } while (0)
+
+
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/eeprom.h
===================================================================
--- branches/scout/lib/include/libdragonfly/eeprom.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/eeprom.h	(revision 1346)
@@ -0,0 +1,49 @@
+/**
+ * @file eeprom.h
+ * @brief handles eeprom storage for persistent data
+ *
+ * Contains functions and definitions for reading and writing to eeprom
+ *
+ * @author Colony Project, Brad Neuman
+ */
+ 
+ #ifndef _EEPROM_H_
+ #define _EEPROM_H_
+ 
+ #include <bom.h>
+ 
+ #define EEPROM_ROBOT_ID_ADDR 0x10
+ #define EEPROM_BOM_TYPE_ADDR 0x14
+ 
+ /** @brief store a byte to eeproem
+  *  @return 0 if success, nonzero on failure
+  */
+ int eeprom_put_byte(unsigned int addr, unsigned char byte);
+ 
+ /** @brief reads a byte from eeprom
+  *
+  *  Pass it thge address and a pointer to a byte where the byte at the
+  *  address will be stored
+  *
+  *  @return 0 if successful (byte is set to the eeprom value at addr), 
+  *  nonzero if there was a problem
+   */
+ int eeprom_get_byte(unsigned int addr, unsigned char *byte);
+ 
+ /** @brief get stored robot ID
+  *
+  *  checks that EEPROM has been programed with an ID and returns it
+  *
+  *  @return the robot id, if it is stored. If it returns 0xFF it is probably invalid
+  */
+ unsigned char get_robotid(void);
+  
+   /** @brief get stored robot ID
+  *
+  * checks that EEPROM has been programed with an BOM type and returns it
+  *
+  *  @return the robot bom type as defined in bom.h, if it is stored. If it returns 0xFF it is probably invalid
+  */
+ unsigned char get_bom_type(void);
+ 
+ #endif
Index: branches/scout/lib/include/libdragonfly/odometry.h
===================================================================
--- branches/scout/lib/include/libdragonfly/odometry.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/odometry.h	(revision 1346)
@@ -0,0 +1,56 @@
+
+/**
+ * @file odometry.h
+ * @brief Code for estimating the robots pose.
+ * 
+ * Offers simple position and orientation information.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef __ODOMETRY_C__
+#define __ODOMETRY_C__
+
+/**
+ * @addtogroup odometry 
+ * @{
+ **/
+
+//Odometry resolution, *64 microseconds.
+#define ODOMETRY_CLK 255u 
+#define TIME_SCALE 64
+
+//Wheel = 2.613 in.  
+//Circumference = 208.508133 mm
+//Distance per encoder click (circumference / 1024)  = 203.621224 um.
+//Robot width = 5.3745 in. = 136.5123 mm
+
+#define ROBOT_WIDTH_UM 137000  //um
+#define CLICK_DISTANCE_UM 204 //um
+
+#define DISTANCE_SCALE 2.10526316 //Magic constant.
+#define ANGLE_SCALE 1.12823207 //Magic constant.
+
+/** @brief Retrieve the robots estimated x position*/
+long odometry_dx(void);
+
+/** @brief Retrieve the robots estimated y position*/
+long odometry_dy(void);
+
+/** @brief Retrieve the robots estimated orientation*/
+double odometry_angle(void);
+
+/** @brief Initialize odometry. MUST be called before 
+ * the other functions work.**/
+void odometry_init(void);
+
+/** @brief Reset position and orientation to the origin facing
+ * the x axis.*/
+void odometry_reset(void);
+
+/** @brief Report estimated velocity [mm/s].*/
+long odometry_velocity(void);
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/lib/include/libdragonfly/bom.h
===================================================================
--- branches/scout/lib/include/libdragonfly/bom.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/bom.h	(revision 1346)
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file bom.h
+ * @brief Definitions for using the BOM
+ * 
+ * This file contains definitions for using the Bearing and 
+ * Orientation Module (BOM).
+ *
+ * @author Colony Project, CMU Robotics Club
+ *
+ **/
+
+#ifndef _BOM_H
+#define _BOM_H
+
+/**
+ * @addtogroup bom
+ * @{
+ **/
+ 
+/** @brief Include all elements in the 16-bit bitfield **/
+#define BOM_ALL 0xFFFF
+
+/** @brief Original BOM - No Range, No Individual LED control **/
+#define BOM10     0
+
+/** @brief BOM 1.5 - No Range, Individual LED control **/
+#define BOM15   1
+
+/** @brief RBOM - Range, Individual LED control **/
+#define RBOM    2
+
+
+/** @brief Initialize the bom according to bom type **/
+void bom_init(char type);
+
+/** @brief Refresh bom_val[] with new values from analog8.  analog_init and bom_init must be called for this to work. **/
+void bom_refresh(int bit_field);
+
+/** @brief Gets the bom reading from bom_val[which].  Call bom_refresh beforehand to read new bom values. **/
+int bom_get(int which);
+
+/** @brief Compares all the values in bom_val[] and returns the index to the highest value element. **/
+int bom_get_max(void);
+
+/** @brief Enables the selected bom leds on a BOM1.5 **/
+void bom_set_leds(int bit_field);
+
+/** @brief (DEPRECATED) Gets and compares all bom values.  Returns the index to the highest value element. **/
+int get_max_bom(void);
+
+/** @brief Turns on all BOM leds, or turns on enabled leds on a BOM1.5. **/
+void bom_on(void);
+
+/** @brief Turns off all bom leds. **/
+void bom_off(void);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/spi.h
===================================================================
--- branches/scout/lib/include/libdragonfly/spi.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/spi.h	(revision 1346)
@@ -0,0 +1,46 @@
+/**
+ * @file spi.h
+ * @brief Definitions for SPI
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @addtogroup spi
+ * @{
+ **/
+
+#ifndef __SPI_H__
+#define __SPI_H__
+
+#define DOUBLE_SCK 1
+#define SPR0_BIT 1
+
+#define MASTER 1
+#define SLAVE 0
+
+#define MOSI _BV(PB2)
+#define MISO _BV(PB3)
+#define SS   _BV(PB0)
+#define SCLK _BV(PB1)
+
+typedef void (*spi_fun_recv_t)(char);
+typedef void (*spi_fun_recv_complete_t)(void);
+
+/** 
+* @brief Initialize SPI
+* 
+* @param spi_fun_recv_t The function that handles SPI data, byte for byte.
+* @param spi_fun_recv_complete_t  Called on a completed transmission - typically for cleaning up.
+*/
+void spi_init (spi_fun_recv_t, spi_fun_recv_complete_t);
+
+/** 
+* @brief Initialize SPI transfer.
+* 
+* @param char The number of bytes to transfer.
+*/
+void spi_transfer (char);
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/lib/include/libdragonfly/encoders.h
===================================================================
--- branches/scout/lib/include/libdragonfly/encoders.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/encoders.h	(revision 1346)
@@ -0,0 +1,73 @@
+/**
+ * 
+ * @file encoders.h
+ * @brief Contains functions for reading encoder values.
+ *
+ * Contains high and low level functions for reading encoders
+ * including reading out total distance covered, and 
+ * eventually velocity.
+ *	
+ * @author Colony Project, CMU Robotics Club
+*/
+
+/**
+ * @addtogroup encoders
+ * @{
+ **/
+
+#ifndef __ENCODERS_H__
+#define __ENCODERS_H__
+
+
+#ifndef LEFT
+	#define LEFT 0
+#endif
+#ifndef RIGHT
+	#define RIGHT 1
+#endif
+
+/** @brief Magnet misaligned - likely distance from encoder problem. **/
+#define ENCODER_MAGNET_FAILURE 1025
+/** @brief Encoder misaligned - likely on XY plane. **/
+#define ENCODER_MISALIGNED 1027
+/** @brief Not enough time has passed - encoders not initialized in hardware. **/
+#define ENCODER_DATA_NOT_READY 1026
+
+//delay_ms argument after a full read is complete
+#define ENCODER_DELAY 20
+
+#define MIN_V (-100)
+#define MAX_V 100
+
+//Data invalid flags (hardware failure):
+#define OCF _BV(4)
+#define COF _BV(3)
+
+//Data invalid alarm (May be invalid):
+#define LIN _BV(2)
+
+#define MagINCn _BV(1)
+#define MagDECn _BV(0)
+
+#define BUFFER_SIZE 23
+
+/** @brief Initialize encoders. **/
+void encoders_init(void);
+/** @brief Read instantaneous encoder value. **/
+int encoder_read(char encoder);
+
+/** @brief Get total distance traveled. **/
+int encoder_get_dx(char encoder);
+/** @brief Reset distance counter. **/
+void encoder_rst_dx(char encoder);
+/** @brief Get time count: The number of encoder reads that have occurred. **/
+int encoder_get_tc(void);
+/** @brief Reset the time count. **/
+void encoder_rst_tc(void);
+
+/** @brief Waits for the next n encoder reading, then returns. **/
+void encoder_wait( int nReadings );
+
+/**@}**/ //end group
+
+#endif
Index: branches/scout/lib/include/libdragonfly/analog.h
===================================================================
--- branches/scout/lib/include/libdragonfly/analog.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/analog.h	(revision 1346)
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * 
+ * @file analog.h
+ * @brief Contains functions and definitions for using the ADC
+ * 
+ * Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7.
+ * AN6 and AN7 are used for the wheel and battery.
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog.
+	
+ * @author Colony Project, CMU Robotics Club, based on firefly
+ * code by Tom Lauwers
+ */
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#include <inttypes.h>
+
+/**
+ * @addtogroup analog
+ * @{
+ **/
+
+/** @brief Analog port 0 **/
+#define AN0 0x00
+/** @brief Analog port 1 **/
+#define AN1 0x01
+/** @brief Analog port 2 **/
+#define AN2 0x02
+/** @brief Analog port 3 **/
+#define AN3 0x03
+/** @brief Analog port 4 **/
+#define AN4 0x04
+/** @brief Analog port 5 **/
+#define AN5 0x05
+/** @brief Analog port 6 **/
+#define AN6 0x06
+/** @brief Analog port 7 **/
+#define AN7 0x07
+/** @brief Analog port 8 **/
+#define AN8 0x08
+/** @brief Analog port 9 **/
+#define AN9 0x09
+/** @brief Analog port 10 **/
+#define AN10 0x0A
+/** @brief Analog port 11 **/
+#define AN11 0x0B
+/** @brief Analog port 12 **/
+#define AN12 0x0C
+/** @brief Analog port 13 **/
+#define AN13 0x0D
+/** @brief Analog port 14 **/
+#define AN14 0x0E
+/** @brief Analog port 15 **/
+#define AN15 0x0F
+
+/** @brief BOM_PORT analog port for BOM **/
+#define BOM_PORT AN0
+/** @brief EXT_MUX analog port **/
+#define EXT_MUX AN7
+/** @brief Analog port for the wheel **/
+#define WHEEL_PORT AN10
+/** @brief Analog port for the battery voltage detector **/
+#define BATT_PORT  AN11
+
+#define ADC_START 1
+#define ADC_STOP 0
+
+#define ADMUX_OPT 0x60
+
+/** @brief Struct to hold the value of a particular analog port **/
+typedef struct {
+  uint8_t adc8;
+  uint16_t adc10;
+} adc_t;
+
+
+/** @brief Initialize analog ports. Will start running a loop
+    if start_conversion is ADC_START.**/
+void analog_init(int start_conversion);
+/** @brief starts the analog loop. Doesn't do anything if the loop is already running. **/
+void analog_start_loop(void);
+/** @brief Stops the analog loop. Doesn't do anything if the loop is already stopped. **/
+void analog_stop_loop(void);
+/** @brief Returns an 8-bit analog value from the look up table. Use this instead of analog_get8. **/
+unsigned int analog8(int which);
+/** @brief Returns an 10-bit analog value from the look up table. Use this instead of analog_get10. **/
+unsigned int analog10(int which);
+/** @brief Read the position of the wheel. **/
+int wheel(void);
+/** @brief Read an 8-bit number from an analog port. Loop must be stopped for this to work. **/
+unsigned int analog_get8(int which);
+/** @brief Read a 10-bit number from an analog port. Loop must be stopped for this to work. **/
+unsigned int analog_get10(int which);
+
+
+/**@}**/ //end group
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/dio.h
===================================================================
--- branches/scout/lib/include/libdragonfly/dio.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/dio.h	(revision 1346)
@@ -0,0 +1,348 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file dio.h
+ * @brief Definitions for digital input / output
+ *
+ * This file contains definitions and functions for dealing
+ * with digital input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+  these are ALL the pins
+  don't use unless you know what you're doing
+*/
+
+/*
+  DIO pins on new dragonfly boards are shown below:
+  -----------------------------------------------
+  | _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+  -----------------------------------------------
+  | _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+  -----------------------------------------------
+*/
+
+/** @brief Port A **/
+#define _PORT_A 1
+/** @brief Port B **/
+#define _PORT_B 2
+/** @brief Port C **/
+#define _PORT_C 3
+/** @brief Port D **/
+#define _PORT_D 4
+/** @brief Port E **/
+#define _PORT_E 5
+/** @brief Port F **/
+#define _PORT_F 6
+/** @brief Port G **/
+#define _PORT_G 7
+
+/** @brief Pin A0 **/
+#define _PIN_A0 8
+/** @brief Pin A1 **/
+#define _PIN_A1 9
+/** @brief Pin A2 **/
+#define _PIN_A2 10
+/** @brief Pin A3 **/
+#define _PIN_A3 11
+/** @brief Pin A4 **/
+#define _PIN_A4 12
+/** @brief Pin A5 **/
+#define _PIN_A5 13
+/** @brief Pin A6 **/
+#define _PIN_A6 14 
+/** @brief Pin A7 **/
+#define _PIN_A7 15
+
+/** @brief Pin B0 **/
+#define _PIN_B0 16
+/** @brief Pin B1 **/
+#define _PIN_B1 17
+/** @brief Pin B2 **/
+#define _PIN_B2 18
+/** @brief Pin B3 **/
+#define _PIN_B3 19
+/** @brief Pin B4 **/
+#define _PIN_B4 20
+/** @brief Pin B5 **/
+#define _PIN_B5 21
+/** @brief Pin B6 **/
+#define _PIN_B6 22
+/** @brief Pin B7 **/
+#define _PIN_B7 23
+
+/** @brief Pin C0 **/
+#define _PIN_C0 24
+/** @brief Pin C1 **/
+#define _PIN_C1 25
+/** @brief Pin C2 **/
+#define _PIN_C2 26
+/** @brief Pin C3 **/
+#define _PIN_C3 27
+/** @brief Pin C4 **/
+#define _PIN_C4 28
+/** @brief Pin C5 **/
+#define _PIN_C5 29
+/** @brief Pin C6 **/
+#define _PIN_C6 30
+/** @brief Pin C7 **/
+#define _PIN_C7 31
+
+/** @brief Pin D0 **/
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+/** @brief Pin D1 **/
+#define _PIN_D1 33  // pin DIO7
+/** @brief Pin D2 **/
+#define _PIN_D2 34
+/** @brief Pin D3 **/
+#define _PIN_D3 35
+/** @brief Pin D4 **/
+#define _PIN_D4 36
+/** @brief Pin D5 **/
+#define _PIN_D5 37
+/** @brief Pin D6 **/
+#define _PIN_D6 38
+/** @brief Pin D7 **/
+#define _PIN_D7 39
+
+/** @brief Pin E0 **/
+#define _PIN_E0 40
+/** @brief Pin E1 **/
+#define _PIN_E1 41
+/** @brief Pin E2 **/
+#define _PIN_E2 42  // pin DIO0
+/** @brief Pin E3 **/
+#define _PIN_E3 43  // pin DIO1
+/** @brief Pin E4 **/
+#define _PIN_E4 44  // pin DIO2
+/** @brief Pin E5 **/
+#define _PIN_E5 45  // pin DIO3
+/** @brief Pin E6 **/
+#define _PIN_E6 46  // pin DIO4
+/** @brief Pin E7 **/
+#define _PIN_E7 47  // pin DIO5
+
+/** @brief Pin F0 **/
+#define _PIN_F0 48
+/** @brief Pin F1 **/
+#define _PIN_F1 49
+/** @brief Pin F2 **/
+#define _PIN_F2 50
+/** @brief Pin F3 **/
+#define _PIN_F3 51
+/** @brief Pin F4 **/
+#define _PIN_F4 52
+/** @brief Pin F5 **/
+#define _PIN_F5 53
+/** @brief Pin F6 **/
+#define _PIN_F6 54
+/** @brief Pin F7 **/
+#define _PIN_F7 55
+
+/** @brief Pin G0 **/
+#define _PIN_G0 56
+/** @brief Pin WR **/
+#define _PIN_WR 56
+/** @brief Pin G1 **/
+#define _PIN_G1 57
+/** @brief Pin RD **/
+#define _PIN_RD 57
+/** @brief Pin G2 **/
+#define _PIN_G2 58
+/** @brief Pin ALE **/
+#define _PIN_ALE 58
+/** @brief Pin G3 **/
+#define _PIN_G3 59
+/** @brief Pin TOSC2 **/
+#define _PIN_TOSC2 59
+/** @brief Pin G4 **/
+#define _PIN_G4 60
+/** @brief Pin TOSC1 **/
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+  These are the header pins (the ones you can connect things to)
+  Feel free to use these
+*/
+
+/**
+ * @addtogroup dio
+ * @{
+ **/
+/** @brief Pin A0 **/
+#define PIN_A0 8
+/** @brief Pin A1 **/
+#define PIN_A1 9
+/** @brief Pin A2 **/
+#define PIN_A2 10
+/** @brief Pin A3 **/
+#define PIN_A3 11
+/** @brief Pin A4 **/
+#define PIN_A4 12
+/** @brief Pin A5 **/
+#define PIN_A5 13
+/** @brief Pin A6 **/
+#define PIN_A6 14 
+/** @brief Pin A7 **/
+#define PIN_A7 15
+
+/** @brief Pin SS **/
+#define PIN_SS 16
+/** @brief Pin SCK **/
+#define PIN_SCK 17
+/** @brief Pin MOSI **/
+#define PIN_MOSI 18
+/** @brief Pin MISO **/
+#define PIN_MISO 19
+/** @brief LCD Command Pin **/
+#define PIN_LCD_COMMAND 20
+
+/** @brief Pin C0 **/
+#define PIN_C0 24
+/** @brief Pin C1 **/
+#define PIN_C1 25
+/** @brief Pin C2 **/
+#define PIN_C2 26
+/** @brief Pin C3 **/
+#define PIN_C3 27
+/** @brief Pin C4 **/
+#define PIN_C4 28
+/** @brief Pin C5 **/
+#define PIN_C5 29
+/** @brief Pin C6 **/
+#define PIN_C6 30
+/** @brief Pin C7 **/
+#define PIN_C7 31
+
+/** @brief Pin SCL **/
+#define PIN_SCL 32
+/** @brief Pin SDA **/
+#define PIN_SDA 33
+
+/** @brief Pin RX0 **/
+#define PIN_RX0 40
+/** @brief Pin TX0 **/
+#define PIN_TX0 41
+/** @brief LCD Reset Pin **/
+#define PIN_LCD_RESET 42
+/** @brief Pin E6 **/
+#define PIN_E6 46
+/** @brief Pin EXT_DIO1 **/
+#define PIN_EXT_DIO1 46
+/** @brief Pin E7 **/
+#define PIN_E7 47
+/** @brief Pin EXT_DIO2 **/
+#define PIN_EXT_DIO2 48
+
+/** @brief Pin AN0 **/
+#define PIN_AN0 48
+/** @brief Pin ADC0 **/
+#define PIN_ADC0 48
+/** @brief Pin AN1 **/
+#define PIN_AN1 49
+/** @brief Pin ADC1 **/
+#define PIN_ADC1 49
+/** @brief Pin AN2 **/
+#define PIN_AN2 50
+/** @brief Pin ADC2 **/
+#define PIN_ADC2 50
+/** @brief Pin AN3 **/
+#define PIN_AN3 51
+/** @brief Pin ADC3 **/
+#define PIN_ADC3 51
+/** @brief Pin AN4 **/
+#define PIN_AN4 52
+/** @brief Pin ADC4 **/
+#define PIN_ADC4 52
+/** @brief Pin AN5 **/
+#define PIN_AN5 53
+/** @brief Pin ADC5 **/
+#define PIN_ADC5 53
+/** @brief Pin AN6 **/
+#define PIN_AN6 54
+/** @brief Pin ADC6 **/
+#define PIN_ADC6 54
+/** @brief Pin AN7 **/
+#define PIN_AN7 55
+/** @brief Pin ADC7 **/
+#define PIN_ADC7 55
+
+/** @brief Wheel Pin **/
+#define PIN_WHEEL 54
+/** @brief Battery Voltage Monitor Pin **/
+#define PIN_BATT 55
+
+/** @brief button1 Pin **/
+#define PIN_BTN1 56
+/** @brief button2 Pin **/
+#define PIN_BTN2 57
+
+/** @brief LED1 Pin **/
+#define PIN_LED1 58
+
+/* Buttons */
+/** @brief Button Pin **/
+#define PIN_BTN PING
+/** @brief button2 Pin **/
+#define BTN2 PING1
+/** @brief button1 Pin **/
+#define BTN1 PING0
+
+/** @brief Read a portpin. **/
+int digital_input(int);
+/** @brief Output to a portpin. **/
+void digital_output(int bit, int val);
+/** @brief Pullup a portpin. **/
+void digital_pull_up(int);
+
+/** @brief Check if button1 is pressed. **/
+int button1_read( void );
+/** @brief Check if button1 is clicked. **/
+int button1_click( void );
+/** @brief Wait until button1 is pressed. **/
+void button1_wait( void );
+
+/** @brief Check if button2 is pressed. **/
+int button2_read( void );
+/** @brief Check if button2 is clicked. **/
+int button2_click( void );
+/** @brief Wait until button2 is pressed. **/
+void button2_wait( void );
+
+/** @} **/ // end addtogroup
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/reset.h
===================================================================
--- branches/scout/lib/include/libdragonfly/reset.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/reset.h	(revision 1346)
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * 
+ * @file reset.h
+ * @brief Contains function(s) for resetting the robots
+ * 
+ * @author Colony Project, CMU Robotics Club, James Kong
+ */
+
+#ifndef _RESET_H_
+#define _RESET_H_
+
+/**
+ * @addtogroup reset
+ * @{
+ **/
+ 
+/** @brief Reset the robot **/
+void reset(void);
+
+/**@}**/ //end group
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/i2c.h
===================================================================
--- branches/scout/lib/include/libdragonfly/i2c.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/i2c.h	(revision 1346)
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/** @file i2c.h
+ *  @brief Header file for I2C
+ *
+ *  Contains functions for I2C.
+ *
+ *  @author Kevin Woo and Suresh Nidhiry, Colony Project, CMU Robotics Club
+ **/
+
+
+#ifndef _I2C_H_
+#define _I2C_H_
+
+#include <stddef.h>
+
+/** @brief Address of slave receive handler function **/
+typedef void (*fun_srecv_t)(char);
+
+/** @brief Address of master receive handler function**/
+typedef int (*fun_mrecv_t)(char);
+
+/** @brief Address of slave send handler function**/
+typedef char (*fun_send_t)(void);
+
+int i2c_init(char addr, fun_mrecv_t master_recv, fun_srecv_t slave_recv, fun_send_t slave_send);
+int i2c_send(char dest, char* data, size_t bytes);
+int i2c_request(char dest);
+
+void i2c_packet_rec (char i2c_byte);
+void i2c_packet_sniff(char data);
+#endif
+
Index: branches/scout/lib/include/libdragonfly/move.h
===================================================================
--- branches/scout/lib/include/libdragonfly/move.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/move.h	(revision 1346)
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file move.h
+ * @brief Contains definitions for controlling robot motion
+ * 
+ * This file offers higher-level functions for robot motion.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+/**
+ * @addtogroup move
+ * @{
+ **/
+
+/** @brief Move forwards **/
+#define FWD 0
+/** @brief Move backwards **/
+#define BCK 1
+
+/** @brief A slow speed **/
+#define SLOW_SPD 96
+/** @brief Half of the full speed **/
+#define HALF_SPD 128
+/** @brief A normal speed **/
+#define NRML_SPD 160
+/** @brief A fast speed **/
+#define FAST_SPD 192
+/** @brief The maximum speed **/
+#define FULL_SPD 255
+
+/** @brief A slow turning speed **/
+#define SLOW_TURN 64
+/** @brief A medium turning speed **/
+#define NRML_TURN 96
+/** @brief A high turning speed **/
+#define FAST_TURN 128
+
+/** @brief Move the robot at the specified velocity **/
+void move(int velocity, int omega);
+/** @brief Move the robot while avoiding obstacles **/
+void move_avoid(int velocity, int omega, int strength);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/time.h
===================================================================
--- branches/scout/lib/include/libdragonfly/time.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/time.h	(revision 1346)
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file time.h
+ * @brief Contains time-related functions and definitions
+ *
+ * Contains functions and definitions for dealing with time,
+ * namely delay_ms and the realtime clock.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+/**
+ * @addtogroup time
+ * @{
+ **/
+/** @brief A sixteenth of a second **/
+#define SIXTEENTH_SECOND 1
+/** @brief An eighth of a second **/
+#define EIGTH_SECOND 2
+/** @brief A quarter of a second **/
+#define QUARTER_SECOND 4
+/** @brief Half of a second **/
+#define HALF_SECOND	8
+/** @brief One second **/
+#define SECOND 16
+/** @brief Two seconds **/
+#define TWO_SECOND 32
+/** @brief Four seconds **/
+#define FOUR_SECOND 64
+
+/** @brief Delay execution for the specified time **/
+void delay_ms(int ms) ;
+/** @brief Enable the realtime clock **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/** @brief Reset the counter of the realtime clock **/
+void rtc_reset(void);
+/** @brief Get the value of the realtime clock. **/
+int rtc_get(void);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/motor.h
===================================================================
--- branches/scout/lib/include/libdragonfly/motor.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/motor.h	(revision 1346)
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file motor.h
+ * @brief Contains definitions for controlling the motors
+ *
+ * Contains definitions and functions for controlling
+ * the motors.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+/**
+ * @addtogroup motors
+ * @{
+ **/
+
+/** @brief make the motors go forwards **/
+#define FORWARD 1
+/** @brief make the motors go backwards **/
+#define BACKWARD 0
+
+/** @brief Initialize the motors **/
+void motors_init(void);
+/** @brief Set speed and direction of motor1 **/
+void motor1_set(int direction, int speed);
+/** @brief Set speed and direction of motor2 **/
+void motor2_set(int direction, int speed);
+/** @brief Turn the motors off **/
+void motors_off(void);
+
+/**@}**/ // end addtogroup
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/lcd.h
===================================================================
--- branches/scout/lib/include/libdragonfly/lcd.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/lcd.h	(revision 1346)
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file lcd.h
+ * @brief Contains definitions for dealing with the LCD screen.
+ * 
+ * Contains definitions and functions for dealing with the 
+ * LCD screen.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _LCD_H_
+#define _LCD_H_
+
+/**
+ * @addtogroup lcd
+ * @{
+ **/
+
+/** @brief Initialize the LCD screen **/
+void lcd_init(void);
+/** @brief Clear the LCD screen **/
+void lcd_clear_screen( void );
+/** @brief Print a char to the LCD screen **/
+void lcd_putc(char c);
+/** @brief Print a string to the LCD screen **/
+void lcd_puts(char *s);
+/** @brief Print an int to the LCD screen **/
+void lcd_puti(int value);
+/** @brief Set the current cursor position **/
+void lcd_gotoxy(int x, int y);
+
+/** @} **/
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/battery.h
===================================================================
--- branches/scout/lib/include/libdragonfly/battery.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/battery.h	(revision 1346)
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file battery.h
+ * @brief Definitions for checking battery voltage.
+ * 
+ * Contains definitions for checking the voltage of the 
+ * battery.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BATTERY_H_
+#define _BATTERY_H_
+
+/**
+ * @addtogroup battery
+ * @{
+ **/
+
+/** @brief Normal battery voltage. (6 V) **/
+#define BATTERY_NORMALV 154
+/** @brief Charging battery voltage. (7 V) **/
+#define BATTERY_CHARINGV 179
+/** @brief Low battery voltage. ( < 6 V) **/
+#define BATTERY_LOWV 152
+
+/** @brief Read the battery voltage. **/
+int battery8(void);
+/** @brief Read the battery voltage in deciVolts. **/
+int battery(void);
+/** @brief Check if the battery is low. **/
+char battery_low(void);
+/** @brief Get an average battery voltage reading. **/
+int battery8_avg(int n_samples);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/buzzer.h
===================================================================
--- branches/scout/lib/include/libdragonfly/buzzer.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/buzzer.h	(revision 1346)
@@ -0,0 +1,88 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file buzzer.h
+ * @brief Contains definitions for using the buzzer.
+ *
+ * Contains definitions for using the buzzer built into
+ * the colony robots.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+/**
+ * @addtogroup buzzer
+ * @{
+ **/
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+/** @brief Middle C **/
+#define	C4	260 //Middle C
+/** @brief C# **/
+#define	C4s	277 //C sharp
+/** @brief D **/
+#define	D4	294
+/** @brief D# **/
+#define	D4s	311
+/** @brief E **/
+#define	E4	330
+/** @brief F **/
+#define	F4	349
+/** @brief F# **/
+#define	F4s	370
+/** @brief G **/
+#define	G4	392
+/** @brief G# **/
+#define	G4s	415
+/** @brief A **/
+#define	A4	440
+/** @brief A# **/
+#define	A4s	466
+/** @brief B **/
+#define	B4	494
+/** @brief C **/
+#define	C5	523
+
+/** @brief Initialize the buzzer. **/
+void buzzer_init(void);
+/** @brief Set the value the buzzer plays. **/
+void buzzer_set_val(unsigned int buzz_value);
+/** @brief Set the frequency the buzzer plays. **/
+void buzzer_set_freq(unsigned int buzz_freq);
+/** @brief Play a frequency for a specified time. **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+/** @brief Turn the buzzer off. **/
+void buzzer_off(void); 
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/rangefinder.h
===================================================================
--- branches/scout/lib/include/libdragonfly/rangefinder.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/rangefinder.h	(revision 1346)
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/**
+ * @file rangefinder.h
+ * @brief Contains rangefinder declarations and functions
+ * 
+ * Contains functions and definitions for the use of
+ * IR rangefinders.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+/**
+ * @addtogroup rangefinder
+ * @{
+ **/
+
+/** @brief IR Rangefinder 1 **/
+#define IR1 6
+/** @brief IR Rangefinder 2 **/
+#define IR2 5
+/** @brief IR Rangefinder 3 **/
+#define IR3 4
+/** @brief IR Rangefinder 4 **/
+#define IR4 3
+/** @brief IR Rangefinder 5 **/
+#define IR5 2
+
+/** @brief Initialize the rangefinders **/
+void range_init(void);
+/** @brief Read the distance from a rangefinder **/
+int range_read_distance(int range_id);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/scout/lib/include/libdragonfly/ring_buffer.h
===================================================================
--- branches/scout/lib/include/libdragonfly/ring_buffer.h	(nonexistent)
+++ branches/scout/lib/include/libdragonfly/ring_buffer.h	(revision 1346)
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+
+/** @file ring_buffer.h
+ * @brief Ring Buffer
+ *
+ * Include macros to create a ring buffer. Originally written for 15-410.
+ * Modified for use in ATMega128 serial driver
+ *
+ * @author Cornell Wright (cgwright)
+ * @author Jason P. Winters (jpwinter)
+ *
+ **/
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+		uint8_t buffer_size;			\
+	} __VA_ARGS__
+
+
+/** @brief Initializes the ring buffer, setting its size to the correct value
+ *
+ *	@param buf The ring buffer to initialize.
+ *
+ *  @param size The size of the ring buffer (in array elements)
+ */
+#define RING_BUFFER_INIT(buf, size) 			\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % (buf).buffer_size == (buf).start)
+
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % (buf).buffer_size;	\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % (buf).buffer_size;	\
+	} while (0)
+
+/** @brief Checks the value at the head of the ring buffer without removing it
+ *  and puts it into val_ret. Note that val_ret must be the same type used in
+ *  creating the ring buffer to prevent the compiler from spewing confusing
+ *  errors. Also, this assumes that the ring buffer is not empty.
+ *
+ *  @param buf The ring buffer to check from
+ *  @param val_ret where to put the value checked from the head of the ring
+ */
+ #define RING_BUFFER_PEEK(buf, val_ret)  \
+  do { \
+    (val_ret) = (buf).queue[(buf).start]; \
+  } while(0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/scout/lib/include/libwireless/sensor_matrix.h
===================================================================
--- branches/scout/lib/include/libwireless/sensor_matrix.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/sensor_matrix.h	(revision 1346)
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file sensor_matrix.h
+ * @brief Definitions for sensor matrices
+ *
+ * Contains functions and declarations for using sensor matrices.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef SENSOR_MATRIX_H
+#define SENSOR_MATRIX_H
+
+
+/**
+ * @defgroup sensormatrix Sensor Matrix
+ * @brief the robot sensor matrix
+ *
+ * These functions and structures are used for localization
+ * to determine the relative directions of robots.
+ *
+ * @{
+ **/
+
+#define MAXIMUM_XBEE_ID		0x10
+#define READING_UNKNOWN		0xFF
+
+/**
+ * @struct SensorMatrix
+ *
+ * A sensor matrix.
+ **/
+//TODO: the order of member variables in this struct should be changed in case the compile packs the struct
+// In order to achieve the best packing, the variables should be listed in order of decreasing memory size.
+// Thus, pointers should be first, followed by int, followed by char.
+typedef struct
+{
+	/**
+	 * The number of robots in the token ring.
+	 **/
+	int numJoined;
+	/**
+	 * The matrix. Each row represents the readings of one
+	 * robot.
+	 **/
+	unsigned char matrix[MAXIMUM_XBEE_ID][MAXIMUM_XBEE_ID];
+	/**
+	 * The element representing a robot is true if that robot
+	 * is in the token ring and false otherwise.
+	 **/
+	unsigned char joined[MAXIMUM_XBEE_ID];
+} SensorMatrix;
+
+/**@brief Create a sensor matrix **/
+void sensor_matrix_create(void);
+/**@brief Set a reading in a sensor matrix **/
+void sensor_matrix_set_reading(int observer, int robot, int reading);
+/**@brief Get a reading in a sensor matrix **/
+int sensor_matrix_get_reading(int observer, int robot);
+/**@brief Set whether the robot is in the token ring **/
+void sensor_matrix_set_in_ring(int robot, int in);
+/**@brief Get whether the robot is in the sensor ring **/
+int sensor_matrix_get_in_ring(int robot);
+/**@brief Get the number of robots which have joined the token ring **/
+int sensor_matrix_get_joined(void);
+/**@brief Get the maximum size of the sensor matrix **/
+int sensor_matrix_get_size(void);
+
+/** @} **/ //end defgroup
+
+
+#endif
+
Index: branches/scout/lib/include/libwireless/wireless.h
===================================================================
--- branches/scout/lib/include/libwireless/wireless.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/wireless.h	(revision 1346)
@@ -0,0 +1,164 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wireless.h
+ * @brief Contains definitions for the wireless library.
+ *
+ * Contains functions for the wireless library.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+//Note: If this is raised above 16, we will need to do
+//something about frame numbers for TX Status packets.
+/**
+ * The maximum number of packet groups.
+ **/
+//TODO: a PacketGroupHandler is at least 10 bytes (I don't know if function pointers are 2 bytes
+// or 4 bytes).  That means that in the c file, your array of packet groups is at least 160 bytes.
+// Normally that might be fine (the robot's avr chips have 4k SRAM), but austin's chip only has
+// 1k SRAM, so if this number can be reduced or if the size of the struct could be reduced, that would be a plus.
+#define WL_MAX_PACKET_GROUPS 16
+
+/**
+ * @defgroup wireless Wireless
+ * @brief Wireless definitions.
+ *
+ * Contains functions and definitions for dealing with wireless functionality.<br><br>
+ *
+ * The wireless library provides a modular method for dealing with
+ * wireless packets, by allowing packet groups to be registered.
+ * A packet group is a collection of packets which share a packet
+ * group code. Each packet in the group also has a type. A packet
+ * group code and type are sent with each packet. When a packet
+ * with a group code registered in the wireless library is
+ * received, the corresponding event handler is called. The
+ * event handler uses the packet type and other information
+ * stored in the packet to respond.<br><br>
+ *
+ * This architecture allows different wireless functionality to be
+ * defined and handled separately, making it simpler and more
+ * efficient to take advantage of the XBee's wireless functionality.
+ *
+ * @{
+ **/
+
+/**
+ * @struct PacketGroupHandler
+ * A PacketGroupHandler represents a packet group, and is used to
+ * register a packet group with the wireless library. It contains
+ * handlers for various events which can occur related to a packet
+ * group.
+ **/
+//TODO: the order of member variables in this struct should be changed in case the compile packs the struct
+// In order to achieve the best packing, the variables should be listed in order of decreasing memory size.
+// Thus, pointers should be first, followed by int, followed by char.
+typedef struct
+{
+	/**
+	 * The group code for this packet group. This number
+	 * must be unique. The maximum number of packet groups
+	 * is defined by WL_MAX_PACKET_GROUPS.
+	 **/
+  //TODO: if this number must be less than or equal to WL_MAX_PACKET_GROUPS, don't you only need
+  // one byte for it and it can be made an unsigned char?
+	unsigned int groupCode;
+
+	/**
+	 * Called every half second (not in interrupt,
+	 * but in wl_do).
+	 **/
+	void (*timeout_handler) (void);
+
+	/**
+	 * Called when a transmit status packet is received
+	 * from the XBee where the first four bits of the frame
+	 * are  the group code.
+	 *
+	 * @param frame the last four bits of the frame
+	 * @param received is true if we received an ack, 0 if
+	 * we did not.
+	 **/
+	void (*handle_response) (int frame, int received);
+
+	/**
+	 * Called when we receive a packet from this group.
+	 *
+	 * @param type the packet type
+	 * @param source the 16-bit address of the XBee this
+	 * packet was sent from
+	 * @param packet the packet received
+	 * @param length the length of the packet
+	 **/
+	void (*handle_receive) (char type, int source, unsigned char* packet, int length);
+
+	/**
+	 * Called for any cleanup when the network is turned off.
+	 **/
+	void (*unregister) (void);
+
+} PacketGroupHandler;
+
+/**@brief Initialize the wireless library **/
+int wl_init(void);
+/**@brief Uninitialize the wireless library **/
+void wl_terminate(void);
+/**@brief Perform wireless library functionality **/
+void wl_do(void);
+/**@brief Register a packet group with the wireless library **/
+void wl_register_packet_group(PacketGroupHandler* h);
+/**@brief Unregister a packet group with the wireless library **/
+void wl_unregister_packet_group(PacketGroupHandler* h);
+
+/**@brief Send a packet to a specific robot in any PAN **/
+int wl_send_robot_to_robot_global_packet(char group, char type, char* data, int len, int dest, char frame);
+/**@brief Send a packet to a specific robot in our PAN **/
+int wl_send_robot_to_robot_packet(char group, char type, char* data, int len, int dest, char frame);
+/**@brief Send a packet to all robots **/
+int wl_send_global_packet(char group, char type, char* data, int len, char frame);
+/**@brief Send a packet to all robots in our PAN **/
+void wl_send_pan_packet(char group, char type, char* data, int len, char frame);
+
+/**@brief Set the PAN we are using **/
+int wl_set_pan(int pan);
+/**@brief Get the PAN we are using **/
+int wl_get_pan(void);
+/**@brief Set the channel we are using **/
+int wl_set_channel(int channel);
+/**@brief Get the channel we are using **/
+int wl_get_channel(void);
+/**@brief Get the 16-bit address of the XBee module **/
+int wl_get_xbee_id(void);
+/**@brief Set the com port on a computer, undefined on the robot.**/
+void wl_set_com_port(char* port);
+
+/** @} **/ // end defgroup
+
+#endif
+
Index: branches/scout/lib/include/libwireless/wl_token_ring.h
===================================================================
--- branches/scout/lib/include/libwireless/wl_token_ring.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/wl_token_ring.h	(revision 1346)
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_token_ring.h
+ * @brief Declarations for the token ring packet group
+ * 
+ * Contains declarations for the token ring packet group.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_TOKEN_RING_H
+#define WL_TOKEN_RING_H
+
+/**
+ * @defgroup tokenring Token Ring
+ * @brief Wireless library token ring implementation
+ *
+ * This packet group is used to form a token ring, which
+ * keeps track of the relative directions of the robots
+ * from one another.
+ *
+ * @{
+ **/
+
+/**@brief Register the token ring group with the wireless library.**/
+int wl_token_ring_register(void);
+/**@brief Unregister the token ring group with the wirelss library.**/
+void wl_token_ring_unregister(void);
+/**@brief Set the functions called to turn the bom on and off.**/
+void wl_token_ring_set_bom_functions(void (*on_function) (void), void (*off_function) (void),
+  int (*max_bom_function) (void));
+
+/**@brief Join the token ring **/
+int wl_token_ring_join(void);
+/**@brief Leave the token ring **/
+void wl_token_ring_leave(void);
+
+/**@brief Return the number of robots in the token ring **/
+int wl_token_get_robots_in_ring(void);
+/**@brief Return whether a given robot is in the token ring **/
+int wl_token_is_robot_in_ring(int robot);
+
+/**@brief Begin iterating through robots in the token ring **/
+void wl_token_iterator_begin(void);
+/**@brief Returns whether there are more robots to iterate through **/
+int wl_token_iterator_has_next(void);
+/**@brief Returns the ID of the next robot in the token ring **/
+int wl_token_iterator_next(void);
+
+/**@brief Return the latest BOM reading between two robots **/
+int wl_token_get_sensor_reading(int source, int dest);
+/**@brief Return the latest BOM reading between us and another robot **/
+int wl_token_get_my_sensor_reading(int dest);
+/**@brief Return the number of robots in the sensor matrix.*/
+int wl_token_get_num_robots(void);
+/**@brief Return the number of non-null elements in the sensor matrix*/
+int wl_token_get_matrix_size(void);
+
+/** @} **/ //end token ring group
+
+#endif
Index: branches/scout/lib/include/libwireless/wl_defs.h
===================================================================
--- branches/scout/lib/include/libwireless/wl_defs.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/wl_defs.h	(revision 1346)
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_defs.h
+ * @brief Definitions for Wireless
+ *
+ * Contains definitions for wireless packet groups, packet types,
+ * debugging information, etc.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_DEFS_H
+#define WL_DEFS_H
+
+//comment out this line if using a computer hooked up to an xbee
+//#define ROBOT
+
+//uncomment this line for debug information
+//#define WL_DEBUG
+
+// Packet Groups and Types
+
+// Error group
+#define WL_ERROR_GROUP 1
+
+#define WL_ERROR_STRING_TYPE 1
+
+// Token Ring group
+#define WL_TOKEN_RING_GROUP 2
+
+#define WL_TOKEN_PASS 1
+#define WL_TOKEN_SENSOR_MATRIX 2
+#define WL_TOKEN_BOM_ON 3
+#define WL_TOKEN_JOIN 4
+#define WL_TOKEN_JOIN_ACCEPT 5
+
+// timing constants
+#ifndef FIREFLY
+#define BOM_DELAY 100
+#else
+#define BOM_DELAY 200
+#endif
+
+#define DEATH_DELAY 4
+#define JOIN_DELAY 8
+
+#ifdef WL_DEBUG
+
+#ifdef ROBOT
+#include <serial.h>
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT( s ) usb_puts( s )
+#else
+#define WL_DEBUG_PRINT( s ) printf( s )
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT_INT( i ) usb_puti(i)
+#else
+#define WL_DEBUG_PRINT_INT( i ) printf("%i", i)
+#endif
+
+#else
+
+#define WL_DEBUG_PRINT( s )
+#define WL_DEBUG_PRINT_INT( i )
+
+#endif
+
+#endif
+
Index: branches/scout/lib/include/libwireless/xbee.h
===================================================================
--- branches/scout/lib/include/libwireless/xbee.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/xbee.h	(revision 1346)
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file xbee.h
+ * @brief Contains definitions for using the XBee
+ *
+ * Contains definitions for interfacing with the 
+ * XBee module, from either a robot or a computer.
+ * To use a robot, define ROBOT in wl_defs.h, and
+ * to use a computer, don't define ROBOT.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef XBEE_H
+#define XBEE_H
+
+/**
+ * The port to use the XBee from on the computer.
+ * Also, a backup port if the other is used.
+ **/
+#ifndef ROBOT
+#define XBEE_PORT_DEFAULT "/dev/ttyUSB1"
+#endif
+
+/**
+ * @defgroup xbee XBee
+ * @brief Interface with the XBee module
+ *
+ * Interface with the XBee module.
+ *
+ * @{
+ **/
+
+/*Definitions*/
+/**@brief Unset PAN, uses XBee default **/
+#define XBEE_PAN_DEFAULT 0xFFFF
+/**@brief Unset channel, uses XBee default **/
+#define XBEE_CHANNEL_DEFAULT 0
+/**@brief Broadcast to all robots in the PAN **/
+#define XBEE_BROADCAST 0xFFFF
+/**@brief No special options **/
+#define XBEE_OPTIONS_NONE 0x00
+/**@brief Do not receive a TX_STATUS message from this packet **/
+#define XBEE_OPTIONS_DISABLE_RESPONSE 0x01
+/**@brief Send the packet to all PANS **/
+#define XBEE_OPTIONS_BROADCAST_ALL_PANS 0x04
+/**@brief A transmit status packet **/
+#define XBEE_TX_STATUS 0x89
+/**@brief A packet received from another XBee **/
+#define XBEE_RX 0x81
+
+/**@brief Initialize the XBee library **/
+int xbee_lib_init(void);
+/**@brief Uninitialize the XBee library **/
+void xbee_terminate(void);
+/**@brief Get a packet from the XBee **/
+int xbee_get_packet(unsigned char* packet);
+/**@brief Send a packet to the XBee **/
+int xbee_send_packet(char* packet, int len, int dest, char options, char frame);
+/**@brief Set the PAN ID for the XBee **/
+int xbee_set_pan_id(int id);
+/**@brief Get the XBee's PAN ID **/
+unsigned int xbee_get_pan_id(void);
+/**@brief Set the channel the XBee is currently using **/
+int xbee_set_channel(int channel);
+/**@brief Get the channel the XBee is currently using **/
+int xbee_get_channel(void);
+/**@brief Get the XBee's 16-bit address **/
+unsigned int xbee_get_address(void);
+/**@brief Set the com port on a computer, undefined on the robot**/
+void xbee_set_com_port(char* port);
+
+/**@}**/ //end defgroup
+
+#endif
Index: branches/scout/lib/include/libwireless/wl_error_group.h
===================================================================
--- branches/scout/lib/include/libwireless/wl_error_group.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/wl_error_group.h	(revision 1346)
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file wl_error_group.h
+ * @brief Error Packets
+ *
+ * A packet group for sending error packets.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WL_ERROR_GROUP_H
+#define WL_ERROR_GROUP_H
+
+/**
+ * @file wl_error_group.h
+ * @brief A packet group for error messages.
+ *
+ * A packet group for sending and receiving error
+ * messages.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup wlerror Error Packets
+ * @brief Functions for sending and receiving error packets
+ * 
+ * Functions for sending and receiving error packets.
+ * 
+ * @{
+ **/
+
+/**@brief Register this packet group with the wireless library **/
+void wl_error_register(void);
+/**@brief Unregister this packet group with the wireless library **/
+void wl_error_unregister(void);
+/**@brief Send a string in an error packet **/
+void wl_error_send_string(char* str);
+
+/** @} **/ // end defgroup
+
+#endif
Index: branches/scout/lib/include/libwireless/queue.h
===================================================================
--- branches/scout/lib/include/libwireless/queue.h	(nonexistent)
+++ branches/scout/lib/include/libwireless/queue.h	(revision 1346)
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file queue.h
+ * @brief A queue implementation
+ * 
+ * Implements a queue, a first in, first out data structure.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WIRELESS_QUEUE_H
+#define WIRELESS_QUEUE_H
+
+#ifndef ROBOT
+#include <pthread.h>
+#endif
+
+struct node_def;
+
+/**
+ * @defgroup queue Queue
+ * @brief A queue implementation
+ * 
+ * A queue implementation.
+ *
+ * @{
+ **/
+
+/**
+ * @struct Queue
+ * Represents a queue, a first in, first out data structure.
+ **/
+typedef struct
+{
+	/**
+	 * The head of the queue, the next item to be removed.
+	 **/
+	struct node_def* head;
+	/**
+	 * The tail of the queue, the last item added.
+	 **/
+	struct node_def* tail;
+	/**
+	 * The number of elements in the queue.
+	 **/
+	int size;
+	
+#ifndef ROBOT
+	pthread_mutex_t lock;
+#endif
+} Queue;
+
+/** @brief Create a new queue **/
+Queue* queue_create(void);
+/** @brief Destroy a queue **/
+void queue_destroy(Queue* q);
+/** @brief Add an element to a queue **/
+int queue_add(Queue* q, void* item);
+/** @brief Remove an element from a queue **/
+void* queue_remove(Queue* q);
+/** @brief Remove all instances of a given element from a queue **/
+void queue_remove_all(Queue* q, void* item);
+/** @brief Get the size of a queue **/
+int queue_size(Queue* q);
+/** @brief Check if the queue is empty **/
+int queue_is_empty(Queue* q);
+
+/** @} **/
+
+
+#endif
Index: branches/scout/lib/bin/libdragonfly.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/lib/bin/libdragonfly.a
===================================================================
--- branches/scout/lib/bin/libdragonfly.a	(nonexistent)
+++ branches/scout/lib/bin/libdragonfly.a	(revision 1346)

Property changes on: branches/scout/lib/bin/libdragonfly.a
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/lib/bin/libwireless.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/scout/lib/bin/libwireless.a
===================================================================
--- branches/scout/lib/bin/libwireless.a	(nonexistent)
+++ branches/scout/lib/bin/libwireless.a	(revision 1346)

Property changes on: branches/scout/lib/bin/libwireless.a
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/scout/behaviors/wireless_test/main.c
===================================================================
--- branches/scout/behaviors/wireless_test/main.c	(nonexistent)
+++ branches/scout/behaviors/wireless_test/main.c	(revision 1346)
@@ -0,0 +1,102 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <xbee.h>
+
+// GROUP must be between 0 and 15
+#define GROUP 1
+#define TYPE_RED 'r'
+#define TYPE_GREEN 'g'
+
+void receive_handler(char type, int source, unsigned char* packet, int length)
+{
+
+	orb_set (0,0,0);
+	
+	switch (type)
+	{
+		case TYPE_RED:   orb2_set (255, 0, 0); break;
+		case TYPE_GREEN: orb2_set (0, 255, 0); break;
+	}
+}
+
+
+int main(void) {
+    //dragonfly_init(ALL_ON);
+    dragonfly_init(0);
+
+	xbee_init ();
+
+    usb_init ();
+    usb_puts ("Startup\r\n");
+
+    orb_init_pwm ();
+
+
+
+	if (button2_read ())
+	{
+		// Transmitter
+		usb_puts ("Transmitter\r\n");
+
+		orb1_set (255, 0, 0);
+		wl_init();
+		orb2_set (255, 0, 0);
+
+		while (1)
+		{
+			wl_send_global_packet (GROUP, TYPE_RED, "Test\r", 5, 0);
+			wl_do();
+			delay_ms (100);
+		
+			wl_send_global_packet (GROUP, TYPE_GREEN, "Test\r", 5, 0);
+			wl_do();
+			delay_ms (100);
+		}
+	}
+	else
+	{
+		// Receiver
+		usb_puts ("Receiver\r\n");
+		
+		orb1_set (0, 255, 0);
+		wl_init();
+		orb2_set (0, 255, 0);
+		
+		usb_puts ("PAN ID: ");  usb_puti (xbee_get_pan_id ());  usb_puts ("\r\n");	// -1
+		usb_puts ("Channel: "); usb_puti (xbee_get_channel ()); usb_puts ("\r\n");	// 0
+		usb_puts ("Address: "); usb_puti (xbee_get_address ()); usb_puts ("\r\n");	// 4/8
+
+		PacketGroupHandler handler = {GROUP, NULL, NULL, &receive_handler, NULL};
+		wl_register_packet_group(&handler);
+		
+		while (1)
+		{
+			delay_ms (10);
+			wl_do();
+		}
+	}
+
+	// +++ => ok
+	// ATVR: Version
+	// ATMY: ID
+	// ATCH: Channel (default C)
+	// ATWR: Write
+	// ATID: PAN ID
+	// ATCN: continue (?)
+	
+	// Channel PAN ID // GROUP MESSAGETYPE
+	
+	//Send a packet to a specific robot in any PAN. 
+	//void wl_send_robot_to_robot_global_packet (char group, char type, char *data, int len, int dest, char frame)
+
+	//Send a packet to a specific robot in our PAN. 
+	//void wl_send_robot_to_robot_packet (char group, char type, char *data, int len, int dest, char frame)
+
+	//Send a packet to all robots. 
+	//void wl_send_global_packet (char group, char type, char *data, int len, char frame)
+
+	//Send a packet to all robots in our PAN. 
+	//void wl_send_pan_packet (char group, char type, char *data, int len, char frame)
+
+}
+
Index: branches/scout/behaviors/wireless_test/Makefile
===================================================================
--- branches/scout/behaviors/wireless_test/Makefile	(nonexistent)
+++ branches/scout/behaviors/wireless_test/Makefile	(revision 1346)
@@ -0,0 +1,523 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+#AVRDUDE_PORT = com4
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	#-taskkill /IM ttermpro.exe
+	#sleep 1
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/library_test/Makefile
===================================================================
--- branches/scout/behaviors/library_test/Makefile	(nonexistent)
+++ branches/scout/behaviors/library_test/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+# USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+#AVRDUDE_PORT = com4
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/library_test/main.c
===================================================================
--- branches/scout/behaviors/library_test/main.c	(nonexistent)
+++ branches/scout/behaviors/library_test/main.c	(revision 1346)
@@ -0,0 +1,199 @@
+#include <dragonfly_lib.h>
+//#include "smart_run_around_fsm.h"
+
+// Martin "deffi" Herrmann Test
+
+static void oset(uint8_t r,uint8_t g,uint8_t b)
+{
+    orbs_set(r,g,b,255-r,255-g,255-b);
+}
+
+static void color_circle (void)
+{
+    while(1)
+    {
+        for (uint8_t part=0; part<6; ++part)
+        {
+            for (uint8_t up=0; up<255; ++up)
+            {
+                uint8_t dn=255-up;
+                uint8_t on=255;
+                uint8_t of=0;
+
+                if (1)
+                {
+                    // Maximum brightness mode
+                    switch (part)
+                    {
+                        case 0: oset (on, up, of); break;
+                        case 1: oset (dn, on, of); break;
+                        case 2: oset (of, on, up); break;
+                        case 3: oset (of, dn, on); break;
+                        case 4: oset (up, of, on); break;
+                        case 5: oset (on, of, dn); break;
+                    }
+                }
+                else
+                {
+                    // Constant brightness mode (not very constant though)
+                    switch (part%3)
+                    {
+                        case 0: oset (dn, up, of); break;
+                        case 1: oset (of, dn, up); break;
+                        case 2: oset (up, of, dn); break;
+                    }
+                }
+
+                delay_ms (2);
+            }
+        }
+    }
+}
+
+static void acl(void)
+{
+#define redval 255
+#define greenval 150
+#define interval 1300
+#define flash 20
+#define pause 200
+
+#define def do { orb1_set(redval,0,0); orb2_set(0,greenval,0); } while (0)
+#define wht do { orb_set(255,255,255); } while (0)
+
+    while (1)
+    {
+        wht; delay_ms (flash);
+        def; delay_ms (pause-flash);
+        wht; delay_ms (flash);
+        def; delay_ms (pause-flash);
+        def; delay_ms (interval-2*pause-2*flash);
+    }
+}
+
+int main(void) {
+    //  dragonfly_init(ALL_ON);
+    dragonfly_init(0);
+
+    usb_init ();
+    usb_puts ("Startup\r\n");
+
+
+    //encoders_init ();
+
+    //analog_init(ADC_START);
+    //analog_init(0);
+
+    //range_init();
+
+    //DDRF=2;
+
+    //motors_init ();
+    //motor2_set (FORWARD, 64);
+
+    //orb_init_binary ();
+    orb_init_pwm ();
+
+    if (false)
+    {
+        orbs_set (255, 0, 0, 0, 0, 0); delay_ms (500);
+        orbs_set (0, 255, 0, 0, 0, 0); delay_ms (500);
+        orbs_set (0, 0, 255, 0, 0, 0); delay_ms (500);
+        orbs_set (0, 0, 0, 255, 0, 0); delay_ms (500);
+        orbs_set (0, 0, 0, 0, 255, 0); delay_ms (500);
+        orbs_set (0, 0, 0, 0, 0, 255); delay_ms (500);
+    }
+
+    if (false)
+    {
+        orb_set (1,1,1);
+        while (1)
+        {
+            SYNC
+            {
+                for (uint8_t m=0; m<100; ++m)
+                {
+                    _delay_us(10);
+                }
+            }
+        }
+    }
+
+    if (false)
+    {
+        while (1)
+        {
+            for (uint8_t x=0; x<255; ++x)
+            {
+                orbs_set (x, 1, 2, 3, 4, 5);
+
+                for (uint8_t n=0; n<80; ++n)
+                {
+                    SYNC
+                    { for (uint8_t m=0; m<1; ++m) _delay_us(50); }
+                }
+            }
+
+            for (uint8_t x=255; x>0; --x)
+            {
+                orbs_set (x, 1, 1, 1, 1, 1);
+                delay_ms (4);
+            }
+        }
+    }
+
+    if (false)
+    {
+        //orbs_set (2,4,6,8,10,12);
+        //orbs_set (32, 64, 96, 128, 160, 192);
+        orbs_set (128,128,128,128,128,128);
+        while (1);
+    }
+
+    if (false)
+    {
+        if (!button2_read ())
+        {
+            orb_set_mode (orb_mode_pwm);
+            orb_disable_timer ();
+
+            while (1)
+            {
+                // Continuously call the sorting routine for timing test
+                for (uint8_t i=0; i<200; ++i)
+                {
+                    orbs_set (10,20,30,40,50,60);
+                    delay_ms (10);
+                }
+
+                for (uint8_t i=0; i<200; ++i)
+                {
+                    orbs_set (60,50,40,30,20,10);
+                    delay_ms (10);
+                }
+            }
+        }
+        else
+        {
+            while (button2_read ());
+            if (button1_read ())
+            {
+                color_circle ();
+            }
+            else
+            {
+                acl ();
+            }
+        }
+    }
+
+
+
+    // Do some lighting
+    if (!button2_read ())
+        color_circle ();
+    else
+        acl ();
+
+}
+
Index: branches/scout/behaviors/smart_run_around_fsm/main.c
===================================================================
--- branches/scout/behaviors/smart_run_around_fsm/main.c	(nonexistent)
+++ branches/scout/behaviors/smart_run_around_fsm/main.c	(revision 1346)
@@ -0,0 +1,14 @@
+#include <dragonfly_lib.h>
+#include "smart_run_around_fsm.h"
+
+int main(void) {
+	dragonfly_init(ALL_ON);
+    range_init();
+	//orb_enable();
+	usb_puts("Turned on!\n");
+    run_around_init();
+    while(1) {
+        run_around_FSM();
+    }
+	return 0;
+}
Index: branches/scout/behaviors/smart_run_around_fsm/Makefile
===================================================================
--- branches/scout/behaviors/smart_run_around_fsm/Makefile	(nonexistent)
+++ branches/scout/behaviors/smart_run_around_fsm/Makefile	(revision 1346)
@@ -0,0 +1,525 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+# USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = $(shell if uname -s |grep -i w32 >/dev/null; then echo 'COM4:'; else echo '/dev/ttyUSB0'; fi)
+
+
+
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	-taskkill /IM ttermpro.exe
+	sleep 1
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/smart_run_around_fsm/smart_run_around_fsm.c
===================================================================
--- branches/scout/behaviors/smart_run_around_fsm/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/behaviors/smart_run_around_fsm/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,137 @@
+#include "dragonfly_lib.h"
+#include "smart_run_around_fsm.h"
+
+/*A simple behavior for navigating in an environment, i.e. avoiding walls and getting stuck.
+Could be better at not getting stuck.
+
+Latest revision only has two accessible states: move and reverse.
+*/
+
+
+void run_around_init(void)
+{
+  range_init();
+ 
+  /*Start in the default state, MOVING*/ 
+  avoid_state=MOVING;
+  /*Set timers to their maximum values.*/
+  crazy_count=CRAZY_MAX;
+  backup_count=BACKUP_MAX; 
+  pControl=0;
+  
+  /*Initialize distances to zero.*/ 
+  d1=0; d2=0; d3=0; d4=0; d5=0;
+  
+  orb_set_color(GREEN);
+
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void run_around_FSM(void) {
+  /*Default to moving.*/ 
+  avoid_state=MOVING;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1=(temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /*If the crazy count is in it's >>3 range, it acts crazy.*/
+  if(crazy_count<=(CRAZY_MAX>>3))
+  {
+    avoid_state=CRAZY;
+    crazy_count--;
+    
+    if(crazy_count<0) crazy_count=CRAZY_MAX;
+    
+    evaluate_state();
+    return;
+  }
+  
+  //Checks the forward distance to see if it should back up, if so...state backwards.
+  if((d2!=-1)&&(d2 < 150)){
+      backup_count=BACKUP_MAX;
+      avoid_state=BACKWARDS;
+      evaluate_state();
+      return;
+  }
+  /*
+  if(d1 < 120 || d3 < 120) {
+		avoid_state = BACKWARDS;
+		backup_count = BACKUP_MAX;
+		evaluate_state();
+		return;
+  }
+  */
+  if(backup_count<BACKUP_MAX){
+    avoid_state=BACKWARDS; 
+    if(backup_count<0)
+      backup_count=BACKUP_MAX;
+    evaluate_state();
+    return;
+  }
+  
+  /*Should evaluate an expression from -255 to 255 to pass to move.*/
+  pControl= ((d3-d1) + (d4-d5)) >> TURN_CONSTANT;
+  
+  if(pControl>PCONTROL_CRAZY_LIMIT || pControl<-PCONTROL_CRAZY_LIMIT) crazy_count--;
+  /*i.e. if you really want to turn for an extended period of time...you're probably stuck.*/
+
+  /*Debug stuff:*/
+  /*usb_puts("pControl evaluating: ");
+  usb_puti(pControl);
+  usb_puts("\n\r");
+  usb_puts("IR1: ");
+  usb_puti(d1);
+  usb_puts(" IR2: ");
+  usb_puti(d2);
+  usb_puts(" IR3: ");
+  usb_puti(d3);
+  usb_puts(" IR4: ");
+  usb_puti(d4);
+  usb_puts(" IR5: ");
+  usb_puti(d5);
+  usb_puts("\n\r");*/
+  
+  evaluate_state();
+}
+
+
+//Acts on state change.
+void evaluate_state(){
+    switch(avoid_state){
+    case(MOVING): orb_set_color(GREEN);
+      move(STRAIT_SPEED,-pControl);
+      break;
+    
+    case(BACKWARDS): orb_set_color(MAGENTA);
+      move(-STRAIT_SPEED-50,0);
+      break;
+      
+    case(CRAZY): orb_set_color(RED);
+      /*TODO: Implement a crazy state.*/
+      move(STRAIT_SPEED,-pControl);
+      break;
+      
+    default:
+      /*Should never get here, go strait.*/
+      move(100,0); orb_set_color(BLUE);
+      break;
+  }
+}
+
+
Index: branches/scout/behaviors/smart_run_around_fsm/smart_run_around_fsm.h
===================================================================
--- branches/scout/behaviors/smart_run_around_fsm/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/behaviors/smart_run_around_fsm/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,34 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+//The States: 
+#define MOVING 12           //Move strait.
+#define BACKWARDS 15        //Move backwards. (Front close to wall.)
+#define STOP 16             //Stop.  The default state, (Something broke).
+#define CRAZY 40            //Erratic behavior that occurs more often when the robot is frequently trying to turn. (i.e. may be stuck.)
+
+#define LEFT 37             //Left
+#define RIGHT 39            //Right
+
+#define BACKUP_MAX 60
+#define CRAZY_MAX 200       //The number of counts between "crazy moments"
+#define STRAIT_SPEED 185    //The speed when going strait or backing up.
+#define TURN_CONSTANT 2
+#define PCONTROL_CRAZY_LIMIT 80
+
+int avoid_state;
+int prev_state;    /*State machine variable.*/
+int crazy_count;    /*Counter for a 'get unstuck' behavior.*/
+
+int backup_count;	/*Counter for backup duration.*/
+int pControl;		/*Proportional control variable, determines turn direction.*/
+int d1,d2,d3,d4,d5;	/*The five distances taken in by IR.*/
+
+void run_around_init(void);
+void run_around_FSM(void);
+void evaluate_state(void);
+
+#endif
Index: branches/scout/behaviors/bfs_fsm/test_decoy/decoy.c
===================================================================
--- branches/scout/behaviors/bfs_fsm/test_decoy/decoy.c	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/test_decoy/decoy.c	(revision 1346)
@@ -0,0 +1,34 @@
+/** driver for orbit code
+	sit and activate bom, let other robot orbit this
+*/
+
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  orb_init();
+  orb_set_color(PURPLE);  
+  wl_init();
+  wl_set_channel(0xF);
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+  usb_init();
+  usb_puts("start");
+  usb_puti(wl_get_xbee_id());
+  
+  
+  while(1) {
+    wl_do(); /* do wireless */
+  }
+  
+  orb_set_color(RED);
+  usb_puts("end");
+
+  return 0;
+}
Index: branches/scout/behaviors/bfs_fsm/test_decoy/Makefile
===================================================================
--- branches/scout/behaviors/bfs_fsm/test_decoy/Makefile	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/test_decoy/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com7
+#/dev/tty.usbserial*
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless #-I$(COLONYROOT)/code/projects/colonet/lib -I$(COLONYROOT)/code/projects/colonet/lib/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless #-lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/bfs_fsm/bfs_fsm.h
===================================================================
--- branches/scout/behaviors/bfs_fsm/bfs_fsm.h	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/bfs_fsm.h	(revision 1346)
@@ -0,0 +1,60 @@
+// BFS FSM header file
+
+
+#ifndef _BFS_FSM_H_
+#define _BFS_FSM_H_
+
+//The States: 
+#define BFS_SEEK      12           //do run around
+#define BFS_FOLLOW    13           //follow other robots to location
+#define BFS_ORBIT     15           //Orbit robot
+#define BFS_STOP      16           //Stop.  The default and ending state
+
+
+#define BFS_STRAIGHT_SPEED 170
+
+#define BFS_SLOW_DISTANCE 250
+#define BFS_SLOW_SPEED    160
+
+#define BFS_ORBIT_DISTANCE 175 /* distance to start orbit around robot */
+
+#define BFS_STOP_DISTANCE 120 /* distance to stop for object */
+
+#define BFS_MAX_ROBOTS 20 /* max id of robot in project */
+
+#define BFS_NO_VAL 255
+
+#define BFS_CHECK_ID_TIME 100
+
+
+
+int bfs_state;    /*State machine variable.*/
+int bfs_speed;
+
+int bfs_otherRobot; /* the robot we are seeking */
+int bfs_my_id; /* my wireless id */
+int bfs_follow_id; /* robot to follow */
+int bfs_check_id; /* timer to check robot id to follow */
+
+
+int bfs_pControl;		/*Proportional control variable, determines turn direction.*/
+int bfs_d1,bfs_d2,bfs_d3,bfs_d4,bfs_d5;	/*The five distances taken in by IR.*/
+int bfs_bom; /* bom data */
+int bfs_bom_count;
+
+#define BFS_MAX_BOM_COUNT 5 /* number of missing bom packets before reverting to seek state */
+
+/* bfs_init
+   argument: robot_id that you want to find
+   notes: must call before bfs_fsm
+*/
+void bfs_init(int robot);
+
+
+/* bfs_fsm
+   argument: none
+   notes: call in a while loop to perform FSM action
+*/
+void bfs_fsm(void);
+
+#endif
Index: branches/scout/behaviors/bfs_fsm/orbit_fsm.c
===================================================================
--- branches/scout/behaviors/bfs_fsm/orbit_fsm.c	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/orbit_fsm.c	(revision 1346)
@@ -0,0 +1,156 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "orbit_fsm.h"
+#include "bfs_fsm.h"
+
+/* Used to orbit a robot
+
+  Must be within BOM range of robot before activating
+  
+  orbit_theta_stop requires encoders, and is incomplete
+  
+  Assumes:
+    both robots are already in a token ring
+*/
+
+
+/* private function prototype */
+void orbit_evaluate_state(void);
+
+
+/* primary init */
+void orbit_init(int robot) {
+  //range_init();
+  //analog_init(1);
+  //motors_init();
+  //orb_init();
+  //orb_enable();
+  //usb_init();
+ 
+  /*Start in the start state, ORBIT_SEEK */ 
+  orbit_state = ORBIT_INSERTION;
+  
+  orbit_otherRobot = robot; // set which robot to seek and orbit
+  
+  orbit_pControl=0;
+  orbit_bom = bfs_bom;
+  orbit_theta = 0;
+  orbit_theta_stop = 1000;
+  
+  /*Initialize distances to zero.*/ 
+  orbit_d1=1000; orbit_d2=1000; orbit_d3=1000; orbit_d4=1000; orbit_d5=1000;
+  
+}
+/* secondary init */
+void orbit_init_theta(int robot,int theta) {
+  //range_init();
+  //analog_init(1);
+  //motors_init();
+  //orb_init();
+  //orb_enable();
+  //usb_init();
+ 
+  /*Start in the start state, ORBIT_INSERTION */ 
+  orbit_state = ORBIT_INSERTION;
+  
+  orbit_otherRobot = robot; // set which robot to seek and orbit
+  
+  orbit_pControl=0;
+  orbit_bom = bfs_bom;
+  orbit_theta = 0;
+  orbit_theta_stop = (theta>0)?theta:-1; // check theta_stop
+  
+  /*Initialize distances to zero.*/ 
+  orbit_d1=1000; orbit_d2=1000; orbit_d3=1000; orbit_d4=1000; orbit_d5=1000;
+  
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void orbit_fsm(void) {
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;  
+    
+  //temp=range_read_distance(IR1);
+  //orbit_d1=(temp == -1) ? orbit_d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  orbit_d2=(temp == -1) ? orbit_d2 : temp;
+  
+  //temp=range_read_distance(IR3);
+  //orbit_d3=(temp == -1) ? orbit_d3 : temp;
+  
+  //temp=range_read_distance(IR4);
+  //orbit_d4=(temp == -1) ? orbit_d4 : temp;
+  
+  //temp=range_read_distance(IR5);
+  //orbit_d5=(temp == -1) ? orbit_d5 : temp;
+  
+  wl_do(); // update wireless
+  
+  // get bom reading
+  temp = wl_token_get_my_sensor_reading(orbit_otherRobot);
+  orbit_bom = (temp == -1) ? orbit_bom : temp;
+  
+  // modify bom reading so right is negative, left is positive
+  if (orbit_bom <= 12)
+    orbit_bom -= 4;
+  else
+    orbit_bom -= 20;
+  
+    
+  if (orbit_state == ORBIT_SEEK && orbit_d2 < ORBIT_DISTANCE)
+    orbit_state = ORBIT_INSERTION; // begin to orbit
+  if (orbit_state == ORBIT_INSERTION &&
+    (orbit_bom == ORBIT_DIRECTION || (orbit_bom + 1) == ORBIT_DIRECTION || (orbit_bom - 1) == ORBIT_DIRECTION))
+    orbit_state = ORBIT_ORBITING; // orbit achieved
+  if (orbit_state == ORBIT_ORBITING && ((orbit_d2 < ORBIT_STOP_DISTANCE) 
+    || (orbit_theta >= orbit_theta_stop)))
+    orbit_state = ORBIT_STOP; // orbit obstructed
+  
+  // evaluate state
+  orbit_evaluate_state();
+}
+
+
+//Acts on state change.
+void orbit_evaluate_state(){
+    switch(orbit_state){
+    case(ORBIT_SEEK): orb_set_color(RED);
+      // move towards robot
+      orbit_pControl = orbit_bom*10;      
+      move(ORBIT_STRAIGHT_SPEED,orbit_pControl);
+      break;
+    
+    case(ORBIT_INSERTION): orb_set_color(GREEN);
+      // rotate into orbit, perpendicular to other robot
+      orbit_pControl = -ORBIT_DIRECTION*10;
+      move(ORBIT_STRAIGHT_SPEED/2,orbit_pControl);
+      break;
+      
+    case(ORBIT_ORBITING): orb_set_color(BLUE);
+      // go straight with slight rotation
+      if (orbit_bom == ORBIT_DIRECTION)
+        orbit_pControl = ORBIT_DIRECTION;
+      else if (orbit_bom < ORBIT_DIRECTION)
+        orbit_pControl = ORBIT_DIRECTION-ORBIT_CORRECTION;
+      else
+        orbit_pControl = ORBIT_DIRECTION+ORBIT_CORRECTION;
+      
+      move(ORBIT_STRAIGHT_SPEED,orbit_pControl);
+      break;
+      
+    case(ORBIT_STOP): orb_set_color(YELLOW);
+      move(0,0);
+      break;
+      
+    default: orb_set_color(YELLOW);
+      /*Should never get here, so stop.*/
+      move(0,0);
+      break;
+  }
+}
+
+
Index: branches/scout/behaviors/bfs_fsm/orbit_fsm.h
===================================================================
--- branches/scout/behaviors/bfs_fsm/orbit_fsm.h	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/orbit_fsm.h	(revision 1346)
@@ -0,0 +1,54 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _ORBIT_FSM_H_
+#define _ORBIT_FSM_H_
+
+//The States: 
+#define ORBIT_SEEK      12           //Move straight towards robot
+#define ORBIT_INSERTION 13           //Rotate into orbit
+#define ORBIT_ORBITING  15           //Orbit robot
+#define ORBIT_STOP      16           //Stop.  The default and ending state
+
+
+#define ORBIT_STRAIGHT_SPEED 160
+#define ORBIT_CORRECTION 9
+
+
+#define ORBIT_DIRECTION 4     // if 4, then orbit to the right; if -4, then orbit to the left
+
+#define ORBIT_DISTANCE 175 // orbit distance as measured by rangefinders
+#define ORBIT_STOP_DISTANCE 120
+
+
+int orbit_state;    /*State machine variable.*/
+
+int orbit_otherRobot; /* must be set prior to running FSM */
+
+
+int orbit_pControl;		/*Proportional control variable, determines turn direction.*/
+int orbit_d1,orbit_d2,orbit_d3,orbit_d4,orbit_d5;	/*The five distances taken in by IR.*/
+int orbit_bom; /* bom data */
+int orbit_theta; /* number of degrees traveled in orbit */
+int orbit_theta_stop; /* stop condition in number of degrees traveled */
+
+/* orbit_init
+   argument: robot_id that you want to orbit
+   notes: must call before orbit_fsm
+*/
+void orbit_init(int robot);
+
+/* orbit_init_theta
+   argument: robot_id that you want to orbit
+             theta that you want to stop orbiting at
+   notes: must call before orbit_fsm
+*/
+void orbit_init_theta(int robot,int theta);
+
+/* orbit_fsm
+   argument: none
+   notes: call in a while loop to perform FSM action
+*/
+void orbit_fsm(void);
+
+#endif
Index: branches/scout/behaviors/bfs_fsm/driver.c
===================================================================
--- branches/scout/behaviors/bfs_fsm/driver.c	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/driver.c	(revision 1346)
@@ -0,0 +1,33 @@
+/** driver for bfs swarming
+	execute bfs behavior
+*/
+
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "bfs_fsm.h"
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  orb_init();
+  orb_set_color(PURPLE);
+  wl_init();
+  wl_set_channel(0xF);
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+  usb_init();
+  
+
+  bfs_init(6); // set robot_id to find
+
+  usb_puts("start 4\n\r");
+
+  while(1) {
+    bfs_fsm(); // do bfs
+  }
+
+  return 0;
+}
Index: branches/scout/behaviors/bfs_fsm/Makefile
===================================================================
--- branches/scout/behaviors/bfs_fsm/Makefile	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com9
+#/dev/tty.usbserial*
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless #-I$(COLONYROOT)/code/projects/colonet/lib -I$(COLONYROOT)/code/projects/colonet/lib/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless #-lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/bfs_fsm/bfs_fsm.c
===================================================================
--- branches/scout/behaviors/bfs_fsm/bfs_fsm.c	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/bfs_fsm.c	(revision 1346)
@@ -0,0 +1,323 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "queue.h"
+#include <string.h>
+#include "bfs_fsm.h"
+#include "smart_run_around_fsm.h"
+#include "orbit_fsm.h"
+
+/* Used to find a robot (or other object)
+
+  Uses bom and token ring and rangefinders
+  
+  Assumes:
+    robots are already in a token ring
+*/
+
+
+/* private function prototypes */
+void bfs_evaluate_state(void);
+int bfs_follow(void);
+
+
+/* init */
+void bfs_init(int robot) {
+  range_init();
+  analog_init(1);
+  motors_init();
+  orb_init();
+  orb_enable();
+  usb_init();
+  run_around_init();
+ 
+  /*Start in the start state, BFS_SEEK */ 
+  bfs_state = BFS_SEEK;
+  
+  bfs_otherRobot = robot; // set which robot to seek
+  bfs_my_id = wl_get_xbee_id();
+  bfs_follow_id = -1;
+  
+  bfs_pControl=0;
+  bfs_bom = 0;
+  bfs_bom_count = 0;
+
+  
+  /*Initialize distances to zero.*/ 
+  bfs_d1=1000; bfs_d2=1000; bfs_d3=1000; bfs_d4=1000; bfs_d5=1000;
+  
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void bfs_fsm(void) {
+
+  /* reset some values */
+  bfs_speed = BFS_STRAIGHT_SPEED;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;  
+    
+  wl_do(); // update wireless
+  usb_puts("\n\rwl_do");
+  usb_puts("|state=");
+  usb_puti(bfs_state);
+  usb_puts("|bfs_follow=");
+  usb_puti(bfs_follow_id);
+  usb_puts("|");
+  
+    
+  if (bfs_state == BFS_SEEK) {
+    bfs_follow_id = bfs_follow();
+    wl_do(); // update wireless
+    usb_puti(bfs_follow_id);
+    if (bfs_follow_id != BFS_NO_VAL && bfs_follow_id < BFS_MAX_ROBOTS) {
+      bfs_state = BFS_FOLLOW; // move to follow state
+      bfs_d2=1000;
+      bfs_check_id=0;
+    }
+  }
+  if (bfs_state == BFS_FOLLOW) {
+    /* check robot to follow */
+    if (++bfs_check_id > BFS_CHECK_ID_TIME) {
+      bfs_check_id=0;
+      temp = bfs_follow();
+      wl_do();
+      if (temp == BFS_NO_VAL) {
+        bfs_state = BFS_SEEK;
+        return;
+      } else if (temp != bfs_follow_id)
+        bfs_follow_id = temp;
+    }
+    // get bom reading
+    temp = wl_token_get_my_sensor_reading(bfs_follow_id);
+    if (temp == -1 || temp > 16) {
+      bfs_bom_count++;
+      if (bfs_bom_count > BFS_MAX_BOM_COUNT) {
+        bfs_state = BFS_SEEK;
+        bfs_bom = 255;
+        bfs_bom_count = 0;
+      }
+    }
+    else {
+      bfs_bom = temp;
+          
+      // modify bom reading so right is negative, left is positive
+      if (bfs_bom <= 12)
+        bfs_bom -= 4;
+      else
+        bfs_bom -= 20;
+      
+      bfs_pControl = bfs_bom*4;
+      usb_puti(bfs_bom);
+      
+      
+      // get range reading for front
+      temp=range_read_distance(IR2);
+      bfs_d2=(temp == -1) ? bfs_d2 : temp;
+      usb_puti(bfs_d2);
+      
+      if (bfs_d2 < BFS_SLOW_DISTANCE)
+        bfs_speed = BFS_SLOW_SPEED;
+      
+      if (bfs_d2 < BFS_ORBIT_DISTANCE) {
+        if (bfs_follow_id != bfs_otherRobot) {
+          // check if we can now see a robot that's closer to our goal
+          temp = bfs_follow();
+          wl_do();
+          if (temp == BFS_NO_VAL || temp == bfs_follow_id)
+            bfs_state = BFS_SEEK;
+          else if (temp != bfs_follow_id)
+            bfs_follow_id = temp;
+          return; // redo this function in light of the state changes
+        } else {
+          // orbit the robot
+          bfs_state = BFS_ORBIT; // move to orbit state
+          orbit_init(bfs_follow_id);
+          bfs_d2=1000;
+        }
+      }
+    }  
+  }
+  if (bfs_state == BFS_ORBIT) {   
+    usb_puts("orbiting\n");
+    orbit_state = ORBIT_INSERTION;
+    while(orbit_state != ORBIT_STOP)
+    { orbit_fsm(); }
+    bfs_state = BFS_STOP; // move to stop state  
+  }
+  if (bfs_state == BFS_STOP && bfs_follow_id != bfs_otherRobot) {
+    bfs_state = BFS_SEEK; // seek the otherRobot
+    return;
+  }
+  
+  // evaluate state
+  bfs_evaluate_state();
+}
+
+
+//Acts on state change.
+void bfs_evaluate_state(){
+    switch(bfs_state){
+    case(BFS_SEEK): orb_set_color(RED);
+      // move around
+      run_around_FSM(); // note: better to just incorporate into this file later one
+      break;
+    
+    case(BFS_FOLLOW): orb_set_color(GREEN);
+      // follow another robot
+      move(bfs_speed,bfs_pControl);
+      break;
+      
+    case(BFS_ORBIT): //orb_set_color(BLUE);
+      // orbit a robot
+      //orbit_fsm();
+      //move(0,0);
+      break;
+      
+    case(BFS_STOP): orb_set_color(YELLOW);
+      // stop
+      move(0,0);
+      break;
+      
+    default: orb_set_color(MAGENTA);
+      /*Should never get here, so stop.*/
+      move(0,0);
+      break;
+  }
+}
+
+/* find a robot to follow using BFS 
+  ported from colonybfs by Felix
+*/
+int bfs_follow()
+{
+  
+/* pseudocode for BFS
+
+procedure bfs(v)
+    q := make_queue()
+    enqueue(q,v)
+    mark v as visited
+    while q is not empty
+        v = dequeue(q)
+        process v
+        for all unvisited vertices v' adjacent to v
+            mark v' as visited
+            enqueue(q,v')
+*/
+
+  Queue* q = queue_create();
+
+  //int num_current_robots = wl_token_get_robots_in_ring();
+
+  // keep track of which nodes you have visited.  Indexed by robot #
+  // 1 if visited, 0 if not
+  unsigned char visited_nodes[BFS_MAX_ROBOTS];
+  // keep track of the distance from the start robot to other robots
+  // also indexed by robot#
+  unsigned char node_distances[BFS_MAX_ROBOTS];
+  // this is the path you take
+  unsigned char path[BFS_MAX_ROBOTS];
+    
+  //variables you will need
+  unsigned char current_node;                 //current node
+  unsigned char current_neighbour_node;       //neighbor to the current node
+  unsigned char current_neighbour_val;        //value of that neighbour's sensors
+  unsigned char current_distance;              //keep track of current distance to the start
+    
+  unsigned char large_number = 255;
+  
+  unsigned char* add_value;
+  
+  
+
+  //set visited nodes to all 0
+  memset(visited_nodes, 0, BFS_MAX_ROBOTS);
+  
+  //set all the distances to a very large number
+  //this isn't technically necessary, but it's probably a good thing -- just in case
+  memset(node_distances, large_number, BFS_MAX_ROBOTS);
+  
+  //set the path to all LARGE_NUMBER as well
+  memset(path, BFS_NO_VAL, BFS_MAX_ROBOTS);
+
+  //queue_remove_all(q);
+
+  //add the start node
+  add_value = (unsigned char*)malloc(sizeof(char));
+  (*add_value) = bfs_my_id;
+  queue_add(q, add_value);
+  visited_nodes[bfs_my_id] = 1;
+  node_distances[bfs_my_id] = 0;
+  
+  while(!queue_is_empty(q)){
+    add_value = queue_remove(q);
+    current_node = (*add_value);
+    
+    //get the current distance from you to the start
+    current_distance = node_distances[current_node];
+    
+    //this node is on your 'path'
+    path[current_distance] = current_node;
+    //note: it's OK if this path leads nowhere -- the path will be
+    //overwritten by a node that does lead to the goal
+    //(if there is no path, we set path to null anyways)
+    
+    //from now on, all further nodes will be one further away -- increment
+    current_distance++;
+    
+    
+    //process node -- basically check if it's the goal
+    if(current_node == bfs_otherRobot) {
+      //you reach the goal
+      //return the first robot in the path, which is the one
+      //to follow
+      /*
+      lcd_putchar('.');
+      lcd_putchar('.');
+      for(i = 0; i < MAX_ROBOTS; i++)
+          lcd_putchar(path[i] +48);           //print out the path for fun -- remove this later
+      lcd_putchar('.');
+      lcd_putchar('.');
+      */
+      return path[1];         //path[0] is you.  path[1] is who you want to follow
+    }
+    
+    // go through all nodes adjacent to current
+    // in effect, this means going through the current node's row in the matrix
+    
+    wl_token_iterator_begin();
+    while(wl_token_iterator_has_next()) {
+      //the robot # is actually just the index
+      current_neighbour_node = wl_token_iterator_next();
+      //the value is what is stored in the matrix (this is important)
+      current_neighbour_val = wl_token_get_sensor_reading(current_node,current_neighbour_node);
+      
+      //check for connected-ness and that it was not visited
+      //            unconnected                           visited
+      if( (current_neighbour_val == BFS_NO_VAL) || (visited_nodes[current_neighbour_node]) ) {
+        //if it is either unconnected or previously visited, exit
+        continue;   //go to the next node
+      }
+      
+      //update the distance from the start node to this node
+      node_distances[current_neighbour_node] = current_distance;
+      //also mark it as visited
+      visited_nodes[current_neighbour_node] = 1;
+      
+      //also enqueue each neighbour
+      add_value = (unsigned char*)malloc(sizeof(char));
+      (*add_value) = current_neighbour_node;
+      queue_add(q, add_value);
+    
+    }
+  }
+  
+  //if we get to here, there is no path
+  memset(path, 0, BFS_MAX_ROBOTS);
+  return BFS_NO_VAL;
+
+}
+
+
Index: branches/scout/behaviors/bfs_fsm/queue.c
===================================================================
--- branches/scout/behaviors/bfs_fsm/queue.c	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/queue.c	(revision 1346)
@@ -0,0 +1,270 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file queue.c
+ * @brief Queue Implementation
+ *
+ * An implementation of a queue for the colony robots.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#include "queue.h"
+#include <wl_defs.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#ifndef ROBOT
+#include <pthread.h>
+#endif
+
+/**
+ * @struct node_def
+ * A node in the queue.
+ **/
+typedef struct node_def
+{
+	/** The item at this point in the queue. **/
+	void* val;
+	/** The next node in the queue. **/
+	struct node_def* next;
+} Node;
+
+/**
+ * Create a queue.
+ *
+ * @return the newly created queue.
+ **/
+Queue* queue_create()
+{
+	Queue* q = (Queue*)malloc(sizeof(Queue));
+	
+	if (q == NULL)
+	{
+		WL_DEBUG_PRINT("Out of memory.\r\n");
+		return NULL;
+	}
+	
+	q->head = NULL;
+	q->size = 0;
+
+	#ifndef ROBOT
+	pthread_mutex_init(&(q->lock), NULL);
+	#endif
+
+	return q;
+}
+
+/**
+ * Destroys a queue, freeing memory.
+ *
+ * @param q the queue to destroy
+ **/
+void queue_destroy(Queue* q)
+{
+	Node* t = q->head;
+	while (t != NULL)
+	{
+		Node* t2 = t->next;
+		free(t);
+		t = t2;
+	}
+
+	#ifndef ROBOT
+	pthread_mutex_destroy(&(q->lock));
+	#endif
+
+	free(q);
+}
+
+/**
+ * Add an element to a queue.
+ *
+ * @param q the queue to add an element to
+ * @param item the item to add to the queue
+ **/
+int queue_add(Queue* q, void* item)
+{
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	Node* n = (Node*)malloc(sizeof(Node));
+	if (n == NULL)
+	{
+		#ifndef ROBOT
+		pthread_mutex_unlock(&(q->lock));
+		#endif
+		return -1;
+	}
+
+	n->val = item;
+	n->next = NULL;
+	
+	if (q->head == NULL)
+	{
+		q->head = n;
+		q->tail = n;
+	}
+	else
+	{
+
+		q->tail->next = n;
+		q->tail = n;
+	}
+	
+	q->size++;
+
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return 0;
+}
+
+/**
+ * Remove an element from the front of a queue.
+ *
+ * @param q the queue to remove the element from
+ *
+ * @return the element which was removed
+ **/
+void* queue_remove(Queue* q)
+{
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+	
+	Node* first = q->head;
+	if (first == NULL)
+	{
+		WL_DEBUG_PRINT("Attempting to remove item \
+			from empty queue.\r\n");
+		WL_DEBUG_PRINT_INT(queue_size(q));
+		#ifndef ROBOT
+		pthread_mutex_unlock(&(q->lock));
+		#endif
+		return NULL;
+	}
+	void* ret = first->val;
+	q->head = first->next;
+	if (q->tail == first)
+		q->tail = NULL;
+	free(first);
+	q->size--;
+
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return ret;
+}
+
+/**
+ * Remove all instances of a given element from a queue.
+ *
+ * @param q the queue to remove the elements from
+ * @param item the element to remove all instances of
+ **/
+void queue_remove_all(Queue* q, void* item)
+{
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	Node* curr = q->head;
+	Node* prev = NULL;
+	
+	while (curr != NULL)
+	{
+		Node* next = curr->next;
+		if (curr->val == item)
+		{
+			if (q->head == curr)
+				q->head = next;
+			if (q->tail == curr)
+				q->tail = prev;
+			if (prev != NULL)
+				prev->next = next;
+			free(curr);
+			q->size--;
+		}
+		else
+			prev = curr;
+		curr = next;
+	}
+	
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+}
+
+/**
+ * Get the number of elements in the queue.
+ *
+ * @param q the queue to get the size of
+ * @return the size of the queue
+ **/
+int queue_size(Queue* q)
+{
+	int size;
+
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	size = q->size;
+ 
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return size;
+}
+
+/**
+ * Check if the queue is empty.
+ * 
+ * @param q the queue to check
+ * @return nonzero if the queue is empty, 0 otherwise
+ **/
+int queue_is_empty(Queue* q)
+{
+	int result;
+
+	#ifndef ROBOT
+	pthread_mutex_lock(&(q->lock));
+	#endif
+
+	result = q->size == 0;
+
+	#ifndef ROBOT
+	pthread_mutex_unlock(&(q->lock));
+	#endif
+
+	return result;
+}
+
Index: branches/scout/behaviors/bfs_fsm/smart_run_around_fsm.c
===================================================================
--- branches/scout/behaviors/bfs_fsm/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,144 @@
+#include <dragonfly_lib.h>
+#include "smart_run_around_fsm.h"
+
+/*A simple behavior for navigating in an environment, i.e. avoiding walls and getting stuck.
+Could be better at not getting stuck.
+
+Latest revision only has two accessible states: move and reverse.
+*/
+
+/* private function */
+void run_around_evaluate_state(void);
+
+void run_around_init(void)
+{
+  //range_init();
+  //analog_init(1);
+  //motors_init();
+  //orb_init();
+  //orb_enable();
+  usb_init();
+ 
+  /*Start in the default state, MOVING*/ 
+  avoid_state=MOVING;
+  /*Set timers to their maximum values.*/
+  crazy_count=CRAZY_MAX;
+  backup_count=0; 
+  pControl=0;
+  
+  /*Initialize distances to zero.*/ 
+  d1=0; d2=0; d3=0; d4=0; d5=0;
+  
+  //orb_set_color(GREEN);
+
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void run_around_FSM(void) {
+  /*Default to moving.*/ 
+  avoid_state=MOVING;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1=(temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /*If the crazy count is in it's >>3 range, it acts crazy.*/
+  if(crazy_count<=(CRAZY_MAX>>3))
+  {
+    avoid_state=CRAZY;
+    crazy_count--;
+    
+    if(crazy_count<0) crazy_count=CRAZY_MAX;
+    
+    run_around_evaluate_state();
+    return;
+  }
+  
+  //Checks the forward distance to see if it should back up, if so...state backwards.
+  if((d2!=-1)&&(d2 < 150)){
+      backup_count=BACKUP_MAX;
+      avoid_state=BACKWARDS;
+      run_around_evaluate_state();
+      return;
+  }
+  /*
+  if(d1 < 120 || d3 < 120) {
+		avoid_state = BACKWARDS;
+		backup_count = BACKUP_MAX;
+		run_around_evaluate_state();
+		return;
+  }
+  */
+  if(backup_count<BACKUP_MAX){
+    avoid_state=BACKWARDS; 
+    if(backup_count<0)
+      backup_count=BACKUP_MAX;
+    run_around_evaluate_state();
+    return;
+  }
+  
+  /*Should evaluate an expression from -255 to 255 to pass to move.*/
+  pControl= ((d3-d1) + (d4-d5)) >> TURN_CONSTANT;
+  
+  if(pControl>PCONTROL_CRAZY_LIMIT || pControl<-PCONTROL_CRAZY_LIMIT) crazy_count--;
+  /*i.e. if you really want to turn for an extended period of time...you're probably stuck.*/
+
+  /*Debug stuff:*/
+  /*usb_puts("pControl evaluating: ");
+  usb_puti(pControl);
+  usb_puts("\n\r");
+  usb_puts("IR1: ");
+  usb_puti(d1);
+  usb_puts(" IR2: ");
+  usb_puti(d2);
+  usb_puts(" IR3: ");
+  usb_puti(d3);
+  usb_puts(" IR4: ");
+  usb_puti(d4);
+  usb_puts(" IR5: ");
+  usb_puti(d5);
+  usb_puts("\n\r");*/
+  
+  run_around_evaluate_state();
+}
+
+
+//Acts on state change.
+void run_around_evaluate_state(){
+    switch(avoid_state){
+    case(MOVING): //orb_set_color(GREEN);
+      move(STRAIT_SPEED,-pControl);
+      break;
+    
+    case(BACKWARDS): //orb_set_color(ORANGE);
+      move(-STRAIT_SPEED,0);
+      break;
+      
+    case(CRAZY): //orb_set_color(RED);
+      /*TODO: Implement a crazy state.*/
+      move(STRAIT_SPEED,-pControl);
+      break;
+      
+    default:
+      /*Should never get here, go strait.*/
+      move(100,0); //orb_set_color(BLUE);
+      break;
+  }
+}
+
+
Index: branches/scout/behaviors/bfs_fsm/queue.h
===================================================================
--- branches/scout/behaviors/bfs_fsm/queue.h	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/queue.h	(revision 1346)
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2007 Colony Project
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ **/
+
+/**
+ * @file queue.h
+ * @brief A queue implementation
+ * 
+ * Implements a queue, a first in, first out data structure.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+#ifndef WIRELESS_QUEUE_H
+#define WIRELESS_QUEUE_H
+
+#ifndef ROBOT
+#include <pthread.h>
+#endif
+
+struct node_def;
+
+/**
+ * @defgroup queue Queue
+ * @brief A queue implementation
+ * 
+ * A queue implementation.
+ *
+ * @{
+ **/
+
+/**
+ * @struct Queue
+ * Represents a queue, a first in, first out data structure.
+ **/
+typedef struct
+{
+	/**
+	 * The head of the queue, the next item to be removed.
+	 **/
+	struct node_def* head;
+	/**
+	 * The tail of the queue, the last item added.
+	 **/
+	struct node_def* tail;
+	/**
+	 * The number of elements in the queue.
+	 **/
+	int size;
+	
+#ifndef ROBOT
+	pthread_mutex_t lock;
+#endif
+} Queue;
+
+/** @brief Create a new queue **/
+Queue* queue_create(void);
+/** @brief Destroy a queue **/
+void queue_destroy(Queue* q);
+/** @brief Add an element to a queue **/
+int queue_add(Queue* q, void* item);
+/** @brief Remove an element from a queue **/
+void* queue_remove(Queue* q);
+/** @brief Remove all instances of a given element from a queue **/
+void queue_remove_all(Queue* q, void* item);
+/** @brief Get the size of a queue **/
+int queue_size(Queue* q);
+/** @brief Check if the queue is empty **/
+int queue_is_empty(Queue* q);
+
+/** @} **/
+
+
+#endif
Index: branches/scout/behaviors/bfs_fsm/smart_run_around_fsm.h
===================================================================
--- branches/scout/behaviors/bfs_fsm/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/behaviors/bfs_fsm/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,32 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+//The States: 
+#define MOVING 12           //Move strait.
+#define BACKWARDS 15        //Move backwards. (Front close to wall.)
+#define STOP 16             //Stop.  The default state, (Something broke).
+#define CRAZY 40            //Erratic behavior that occurs more often when the robot is frequently trying to turn. (i.e. may be stuck.)
+
+#define LEFT 37             //Left
+#define RIGHT 39            //Right
+
+#define BACKUP_MAX 20
+#define CRAZY_MAX 200       //The number of counts between "crazy moments"
+#define STRAIT_SPEED 160    //The speed when going strait or backing up.
+#define TURN_CONSTANT 2
+#define PCONTROL_CRAZY_LIMIT 80
+
+int avoid_state;    /*State machine variable.*/
+int crazy_count;    /*Counter for a 'get unstuck' behavior.*/
+
+int backup_count;	/*Counter for backup duration.*/
+int pControl;		/*Proportional control variable, determines turn direction.*/
+int d1,d2,d3,d4,d5;	/*The five distances taken in by IR.*/
+
+void run_around_init(void);
+void run_around_FSM(void);
+
+#endif
Index: branches/scout/behaviors/lemmings/lemmings.h
===================================================================
--- branches/scout/behaviors/lemmings/lemmings.h	(nonexistent)
+++ branches/scout/behaviors/lemmings/lemmings.h	(revision 1346)
@@ -0,0 +1,10 @@
+/**
+ */
+
+#ifndef _LEMMINGS_H_
+#define _LEMMINGS_H_
+
+void lemmings_init(void);
+void lemmings_FSM(void);
+
+#endif
Index: branches/scout/behaviors/lemmings/smart_run_around_fsm.c
===================================================================
--- branches/scout/behaviors/lemmings/smart_run_around_fsm.c	(nonexistent)
+++ branches/scout/behaviors/lemmings/smart_run_around_fsm.c	(revision 1346)
@@ -0,0 +1,170 @@
+/**
+ */
+
+#include <string.h>
+#include "dragonfly_lib.h"
+#include "smart_run_around_fsm.h"
+
+/*A simple behavior for navigating in an environment, i.e. avoiding walls and getting stuck.
+Could be better at not getting stuck.
+
+Latest revision only has two accessible states: move and reverse.
+*/
+
+// FSM states
+#define MOVING 12           //Move strait.
+#define BACKWARDS 15        //Move backwards. (Front close to wall.)
+#define STOP 16             //Stop.  The default state, (Something broke).
+#define CRAZY 40            //Erratic behavior that occurs more often when the robot is frequently trying to turn. (i.e. may be stuck.)
+
+#define LEFT 37             //Left
+#define RIGHT 39            //Right
+
+#define BACKUP_MAX 20
+#define CRAZY_MAX 200       //The number of counts between "crazy moments"
+#define STRAIT_SPEED 185    //The speed when going strait or backing up.
+#define TURN_CONSTANT 2
+#define PCONTROL_CRAZY_LIMIT 80
+
+// Globals
+int avoid_state;    /*State machine variable.*/
+int crazy_count;    /*Counter for a 'get unstuck' behavior.*/
+
+int backup_count;	/*Counter for backup duration.*/
+int pControl;		/*Proportional control variable, determines turn direction.*/
+
+#define NUM_IR_SENSORS 5
+int dist[NUM_IR_SENSORS];
+
+static void evaluate_state(void);
+
+void run_around_init(void) {
+/*   range_init(); */
+/*   analog_init(); */
+/*   motors_init(); */
+/*   orb_init(); */
+/*   orb_enable(); */
+/*   usb_init(); */
+
+  avoid_state = MOVING;
+
+  /*Set timers to their maximum values.*/
+  crazy_count = CRAZY_MAX;
+  backup_count = 0;
+  pControl = 0;
+
+  /*Initialize distances to zero.*/
+  memset(dist, 0, NUM_IR_SENSORS * sizeof(int));
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void run_around_FSM(void) {
+  /*Default to moving.*/
+  avoid_state=MOVING;
+
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/
+  int temp;
+
+  temp = range_read_distance(IR1);
+  dist[0] = (temp == -1) ? dist[0] : temp;
+
+  temp=range_read_distance(IR2);
+  dist[1] = (temp == -1) ? dist[1] : temp;
+
+  temp=range_read_distance(IR3);
+  dist[2] = (temp == -1) ? dist[2] : temp;
+
+  temp=range_read_distance(IR4);
+  dist[3] = (temp == -1) ? dist[3] : temp;
+
+  temp=range_read_distance(IR5);
+  dist[4] = (temp == -1) ? dist[4] : temp;
+
+  /*If the crazy count is in it's >>3 range, it acts crazy.*/
+  if (crazy_count <= (CRAZY_MAX>>3)) {
+    avoid_state=CRAZY;
+    crazy_count--;
+
+    if (crazy_count < 0) {
+      crazy_count=CRAZY_MAX;
+    }
+
+    evaluate_state();
+    return;
+  }
+
+  //Checks the forward distance to see if it should back up, if so...state backwards.
+  if ((dist[1] != -1) && (dist[1] < 150)){
+    backup_count=BACKUP_MAX;
+    avoid_state=BACKWARDS;
+    evaluate_state();
+    return;
+  }
+
+  /*
+  if(dist[0] < 120 || dist[2] < 120) {
+		avoid_state = BACKWARDS;
+		backup_count = BACKUP_MAX;
+		evaluate_state();
+		return;
+  }
+  */
+
+  if(backup_count<BACKUP_MAX){
+    avoid_state=BACKWARDS;
+    if (backup_count<0) {
+      backup_count = BACKUP_MAX;
+    }
+
+    evaluate_state();
+    return;
+  }
+
+  /*Should evaluate an expression from -255 to 255 to pass to move.*/
+  pControl= ((dist[2]-dist[0]) + (dist[3]-dist[4])) >> TURN_CONSTANT;
+
+  if(pControl>PCONTROL_CRAZY_LIMIT || pControl<-PCONTROL_CRAZY_LIMIT) crazy_count--;
+  /*i.e. if you really want to turn for an extended period of time...you're probably stuck.*/
+
+  /*Debug stuff:*/
+  /*usb_puts("pControl evaluating: ");
+  usb_puti(pControl);
+  usb_puts("\n\r");
+  usb_puts("IR1: ");
+  usb_puti(dist[0]);
+  usb_puts(" IR2: ");
+  usb_puti(dist[1]);
+  usb_puts(" IR3: ");
+  usb_puti(dist[2]);
+  usb_puts(" IR4: ");
+  usb_puti(dist[3]);
+  usb_puts(" IR5: ");
+  usb_puti(dist[4]);
+  usb_puts("\n\r");*/
+
+  evaluate_state();
+}
+
+//Acts on state change.
+static void evaluate_state(){
+  switch(avoid_state){
+  case(MOVING): orb_set_color(GREEN);
+    move(STRAIT_SPEED,-pControl);
+    break;
+
+  case(BACKWARDS): orb_set_color(ORANGE);
+    move(-STRAIT_SPEED,0);
+    break;
+
+  case(CRAZY): orb_set_color(RED);
+    /*TODO: Implement a crazy state.*/
+    move(STRAIT_SPEED,-pControl);
+    break;
+
+  default:
+    /*Should never get here, go strait.*/
+    move(100,0); orb_set_color(BLUE);
+    break;
+  }
+}
Index: branches/scout/behaviors/lemmings/leaderDriver.c
===================================================================
--- branches/scout/behaviors/lemmings/leaderDriver.c	(nonexistent)
+++ branches/scout/behaviors/lemmings/leaderDriver.c	(revision 1346)
@@ -0,0 +1,31 @@
+/** driver code for colonet lemmings leader
+	continually execute lemmings behavior and listens for packets
+*/
+
+#include <dragonfly_lib.h>
+#include <colonet_dragonfly.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <serial.h>
+#include <stdio.h>
+#include "lemmings.h"
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  wl_init();
+  colonet_init();
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+
+  lemmings_init();
+
+  while(1) {
+    wl_do();
+    lemmings_FSM(); // do lemmings
+  }
+
+  return 0;
+}
Index: branches/scout/behaviors/lemmings/wl_defs.h
===================================================================
--- branches/scout/behaviors/lemmings/wl_defs.h	(nonexistent)
+++ branches/scout/behaviors/lemmings/wl_defs.h	(revision 1346)
@@ -0,0 +1,73 @@
+#ifndef WL_DEFS_H
+#define WL_DEFS_H
+
+//comment out this line if using a computer hooked up to an xbee
+//#define ROBOT
+
+//uncomment this line for debug information
+//#define WL_DEBUG
+
+// Packet Groups and Types
+
+// Error group
+#define WL_ERROR_GROUP 1
+
+#define WL_ERROR_STRING_TYPE 1
+
+// Token Ring group
+#define WL_TOKEN_RING_GROUP 9
+
+#define WL_TOKEN_PASS 1
+#define WL_TOKEN_BOM_ON 2
+#define WL_TOKEN_JOIN 3
+#define WL_TOKEN_JOIN_ACCEPT 4
+
+// timing constants
+#ifndef FIREFLY
+#define BOM_DELAY 50
+#else
+#define BOM_DELAY 100
+#endif
+
+#define DEATH_DELAY 4
+#define JOIN_DELAY 8
+
+// Recharging group
+#define WL_RECHARGE_GROUP 3
+
+#define WL_RECHARGE_POLL_STATIONS 1
+#define WL_RECHARGE_STATION_AVAILABLE 2
+#define WL_RECHARGE_REQUEST 3
+#define WL_RECHARGE_REQUEST_ACCEPT 4
+#define WL_RECHARGE_VERIFY 5
+#define WL_RECHARGE_CANCEL 6
+#define WL_RECHARGE_SEEKING 7
+#define WL_RECHARGE_DOCKED 8
+
+#ifdef WL_DEBUG
+
+#ifdef ROBOT
+#include <serial.h>
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT( s ) usb_puts( s )
+#else
+#define WL_DEBUG_PRINT( s ) printf( s )
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT_INT( i ) usb_puti(i)
+#else
+#define WL_DEBUG_PRINT_INT( i ) printf("%i", i)
+#endif
+
+#else
+
+#define WL_DEBUG_PRINT( s )
+#define WL_DEBUG_PRINT_INT( i )
+
+#endif
+
+#endif
+
Index: branches/scout/behaviors/lemmings/driver.c
===================================================================
--- branches/scout/behaviors/lemmings/driver.c	(nonexistent)
+++ branches/scout/behaviors/lemmings/driver.c	(revision 1346)
@@ -0,0 +1,29 @@
+/** driver for lemmings code
+	continually execute lemmings behavior
+*/
+
+#include "wl_defs.h"
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "lemmings.h"
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  orb_init();
+  wl_init();
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+
+  lemmings_init();
+
+  while(1) {
+    wl_do();
+    lemmings_FSM(); // do lemmings
+  }
+
+  return 0;
+}
Index: branches/scout/behaviors/lemmings/lemmings.c
===================================================================
--- branches/scout/behaviors/lemmings/lemmings.c	(nonexistent)
+++ branches/scout/behaviors/lemmings/lemmings.c	(revision 1346)
@@ -0,0 +1,320 @@
+#include <dragonfly_lib.h>
+#include <wl_defs.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+//#include <colonet_dragonfly.h>
+//#include "smart_run_around_fsm.h"
+#include "lemmings.h"
+
+/*A simple behavior for following the leader
+  SINGLE_FILE pattern not implemented yet
+*/
+
+// FSM states
+#define LEAD 0    // be a leader
+#define FOLLOW 1	// follow another robot
+
+#define FOLLOW_MULTI_DEFAULT 1 // set default multi-following pattern
+#define SPEED 200 // set default speed
+
+#define LEMMINGS_PAN 7 // set the lemmings PAN
+
+/* Globals */
+static int cur_state; 		// current state
+static int local_leader;  // follow this bot (-1 if leader)
+static int global_leader; // this is the global leader
+static int follow_lock;  // this locks in the bot to follow
+static int follow_multi;	// set to 0 for single-file following, 1 for tree following
+static int local_id;      // this is the local robot id
+static int speed;         // robot's forward speed
+static int turn_speed;    // robot's turning speed
+static int pan;           // set the lemmings PAN
+
+/* Internal prototypes */
+static int get_local_leader(void);
+static int get_edge_weight(int robot1, int robot2);
+static void get_bom_velocity(int bom_id);
+
+void lemmings_init() {
+  // usb_puts("lemmings_init\n");
+
+  //  colonet_init();
+  //run_around_init(); // prepare for moving
+  //range_init();
+  //analog_init();
+  /* range finder code interferes with token ring */
+  orb_init();
+  orb_enable();
+
+  // set to defaults
+  cur_state = FOLLOW;
+  local_leader = -1;
+  global_leader = -1;
+  follow_lock = 0;
+  local_id = wl_get_xbee_id();
+  speed = SPEED;
+  turn_speed = 0;
+  pan = LEMMINGS_PAN;
+
+  follow_multi = FOLLOW_MULTI_DEFAULT;
+}
+
+/* The main function, call this to update states as frequently as possible. */
+void lemmings_FSM(void) {
+  int leader_bom = 0;
+  static int leader_check_count = 0;
+
+
+  if (wl_token_get_num_robots() <= 1) {
+    /* if there is only one robot in the token ring, there is nothing to
+       follow, so don't do anything */
+    motors_off();
+    speed = 0;
+    orb_set_color(GREEN);
+    return;
+  }
+
+  //usb_puts("state: ");
+  //usb_puti(cur_state);
+  //usb_puts("\n");
+
+  // only check for new global leader once every 5 iterations
+  leader_check_count++;
+  if (leader_check_count % 3 == 0) {
+
+    if (leader_check_count % 12 == 0) {
+      // find robot with max id and assign as leader
+      int max = -1;
+      wl_token_iterator_begin();
+      while (wl_token_iterator_has_next()) {
+        int n = wl_token_iterator_next();
+        if (n > max) {
+          max = n;
+        }
+  /*       usb_puti(n); */
+  /*       usb_puts("\n"); */
+      }
+
+      if (max == local_id) {
+        // become the global leader
+        orb_set_color(BLUE);
+        cur_state = LEAD;
+        local_leader = -1;
+        follow_lock = 0;
+        speed = SPEED;
+        turn_speed = 0;
+  //      usb_puts(" becoming leader \n");
+      } 
+      else {
+        // become a follower
+        orb_set_color(RED);
+        cur_state = FOLLOW;
+//      usb_puts(" becoming follower\n");
+      }
+
+      global_leader = max; // set the global leader
+    }
+    
+    if (cur_state == FOLLOW) {
+      // Make sure we can see our local leader
+      leader_bom = (local_leader>=0)?wl_token_get_sensor_reading(local_id, local_leader):-1;
+
+      if (leader_bom < 0) {
+        if (follow_lock) {
+          // unlock bot to follow
+          follow_lock = 0;
+          // actually change to follow other bot on next loop
+        }
+        else {
+          //usb_puts("no connection to leader\n");
+
+          // Can't see our old leader -- get new bot to follow.
+          local_leader = get_local_leader();
+          
+          if (local_leader == -1) {
+            /* if there is only one robot in the token ring, there is nothing to
+              follow, so don't do anything */
+            /*motors_off();
+            speed = 0;
+            return;*/
+            // nothing to follow, so become a local_leader and start leading
+            //usb_puts("can't see anyone - becoming a leader\n");
+            cur_state = LEAD;
+            local_leader = -1;
+            orb_set_color(BLUE);
+            speed = SPEED;
+            turn_speed = 0;
+          } else {
+            //usb_puts("new leader is");
+            //usb_puti(local_leader);
+            //usb_puts("\n");
+            // get data in order to follow leader
+            leader_bom = wl_token_get_sensor_reading(local_id, local_leader);
+            get_bom_velocity(leader_bom);
+          } 
+        }
+      } else {
+        // Leader is still in sight, so follow it
+        get_bom_velocity(leader_bom);
+        follow_lock = 1; // lock in bot to follow
+      }
+    }
+  }
+  else {
+    // prevent spinning in circles
+    turn_speed /= 5;
+  }
+  
+  // check if running into something
+  /*int range = range_read_distance(IR2);
+  if (range > 0 && range < 150) {
+    if (cur_state == LEAD) {
+      turn_speed = 100; // turn to avoid
+    }
+    else {
+      speed = 0; // stop to avoid
+    }
+  }*/
+  
+  // do movement
+  move(speed, turn_speed);
+}
+
+// translate bom reading into direction and speed
+static void get_bom_velocity(int bom_id) {
+  int error = 0;
+
+  if (bom_id < 0 || bom_id > 15) {
+    //   usb_puts("ERROR - invalid bom_id\n");
+    turn_speed = 0;
+    speed = 0;
+    return;
+  }
+
+  // set so right is negative, left is positive
+  if (bom_id <= 12) {
+    error = bom_id - 4;
+  } else {
+    error = bom_id - 20;
+  }
+
+  // set turn speed and main speed
+  // if error is small, turn slowly and travel at normal speed
+  // if error is large, turn faster and travel at reduced speed
+  switch(error)
+  {
+  case 0:
+    turn_speed = 0;
+    speed = SPEED;
+    return;
+  case 1:
+  case -1:
+    turn_speed = error * 5;
+    speed = SPEED;
+    return;
+  case 2:
+  case -2:
+    turn_speed = error * 8;
+    speed = SPEED;
+    return;
+  case 3:
+  case -3:
+    turn_speed = error * 12;
+    speed = SPEED;
+    return;
+  case 4:
+  case -4:
+    turn_speed = error * 16;
+    speed = SPEED - SPEED * error * error / 36;
+    return;
+  }
+  // if not in a case
+  turn_speed = error * 20;
+  speed = SPEED - SPEED * error * error / 36;
+}
+
+// create connected components and pick a leader for each chain
+// CURRENTLY JUST LOOKS FOR CLOSEST ROBOT TO FOLLOW
+static int get_local_leader(void) {
+  int nodeB;
+  int cur_weight;
+  int best_weight = 1000; // set to infinity initially
+  int best_node = -1;
+  
+  // check for global leader first
+  int test = wl_token_get_sensor_reading(local_id, global_leader);
+  if (test != -1)
+    return global_leader;
+
+  wl_token_iterator_begin();
+
+  // iterator through robots in token ring
+  while (wl_token_iterator_has_next()) {
+    nodeB = wl_token_iterator_next();
+    if (nodeB == local_id) {
+      continue; // can't follow self
+    }
+
+    // get an edge weight based on the robot position
+    cur_weight = get_edge_weight(local_id, nodeB);
+
+    if (nodeB == global_leader && cur_weight != -1) {
+      // always follow the global leader if you have the option to
+      best_node = nodeB;
+      break;
+    }
+
+    if (cur_weight >= 0 && cur_weight < best_weight) {
+      // this is new best node, so save values.
+      best_weight = cur_weight;
+      best_node = nodeB;
+    }
+  }
+
+  return best_node;
+}
+
+// get edge weight of sensor matrix
+// add in BOM range data when BOM 1.5 comes out
+static int get_edge_weight(int robot1, int robot2) {
+  int bom = wl_token_get_sensor_reading(robot1,robot2);
+
+  // Robots closer to directly in front of us have lower weight.
+  switch(bom) {
+  case 12:
+    return 10;
+
+  case 13:
+  case 11:
+    return 9;
+
+  case 14:
+  case 10:
+    return 8;
+
+  case 15:
+  case 9:
+    return 7;
+
+  case 0:
+  case 8:
+    return 6;
+
+  case 1:
+  case 7:
+    return 5;
+
+  case 2:
+  case 6:
+    return 4;
+
+  case 3:
+  case 5:
+    return 3;
+
+  case 4:
+    return 2;
+  }
+
+  return -1;
+}
Index: branches/scout/behaviors/lemmings/Makefile
===================================================================
--- branches/scout/behaviors/lemmings/Makefile	(nonexistent)
+++ branches/scout/behaviors/lemmings/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com9
+#/dev/tty.usbserial*
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless #-I$(COLONYROOT)/code/projects/colonet/lib -I$(COLONYROOT)/code/projects/colonet/lib/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless #-lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/lemmings/smart_run_around_fsm.h
===================================================================
--- branches/scout/behaviors/lemmings/smart_run_around_fsm.h	(nonexistent)
+++ branches/scout/behaviors/lemmings/smart_run_around_fsm.h	(revision 1346)
@@ -0,0 +1,10 @@
+/**
+ */
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+void run_around_init(void);
+void run_around_FSM(void);
+
+#endif
Index: branches/scout/behaviors/orbit_fsm/decoy/decoy.c
===================================================================
--- branches/scout/behaviors/orbit_fsm/decoy/decoy.c	(nonexistent)
+++ branches/scout/behaviors/orbit_fsm/decoy/decoy.c	(revision 1346)
@@ -0,0 +1,34 @@
+/** driver for orbit code
+	sit and activate bom, let other robot orbit this
+*/
+
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  orb_init();
+  orb_set_color(PURPLE);
+  wl_init();
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+  usb_init();
+  usb_puts("start");
+  usb_puti(wl_get_xbee_id());
+  usb_puts("end");
+ 
+  
+  
+  while(1) {
+    wl_do();
+  }
+  
+  orb_set_color(RED);
+
+  return 0;
+}
Index: branches/scout/behaviors/orbit_fsm/decoy/Makefile
===================================================================
--- branches/scout/behaviors/orbit_fsm/decoy/Makefile	(nonexistent)
+++ branches/scout/behaviors/orbit_fsm/decoy/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com7
+#/dev/tty.usbserial*
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless #-I$(COLONYROOT)/code/projects/colonet/lib -I$(COLONYROOT)/code/projects/colonet/lib/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless #-lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/orbit_fsm/orbit_fsm.c
===================================================================
--- branches/scout/behaviors/orbit_fsm/orbit_fsm.c	(nonexistent)
+++ branches/scout/behaviors/orbit_fsm/orbit_fsm.c	(revision 1346)
@@ -0,0 +1,154 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "orbit_fsm.h"
+
+/* Used to orbit a robot
+
+  Must be within BOM range of robot before activating
+  
+  orbit_theta_stop requires encoders, and is incomplete
+  
+  Assumes:
+    both robots are already in a token ring
+*/
+
+
+/* private function prototype */
+void evaluate_state(void);
+
+
+/* primary init */
+void orbit_init(int robot) {
+  range_init();
+  analog_init(1);
+  motors_init();
+  orb_init();
+  orb_enable();
+  //usb_init();
+ 
+  /*Start in the start state, ORBIT_SEEK */ 
+  orbit_state = ORBIT_SEEK;
+  
+  orbit_otherRobot = robot; // set which robot to seek and orbit
+  
+  orbit_pControl=0;
+  orbit_bom = 0;
+  orbit_theta = 0;
+  orbit_theta_stop = 1000;
+  
+  /*Initialize distances to zero.*/ 
+  orbit_d1=1000; orbit_d2=1000; orbit_d3=1000; orbit_d4=1000; orbit_d5=1000;
+  
+}
+/* secondary init */
+void orbit_init_theta(int robot,int theta) {
+  range_init();
+  analog_init(1);
+  motors_init();
+  orb_init();
+  orb_enable();
+  //usb_init();
+ 
+  /*Start in the start state, ORBIT_SEEK */ 
+  orbit_state = ORBIT_SEEK;
+  
+  orbit_otherRobot = robot; // set which robot to seek and orbit
+  
+  orbit_pControl=0;
+  orbit_bom = 0;
+  orbit_theta = 0;
+  orbit_theta_stop = (theta>0)?theta:-1; // check theta_stop
+  
+  /*Initialize distances to zero.*/ 
+  orbit_d1=1000; orbit_d2=1000; orbit_d3=1000; orbit_d4=1000; orbit_d5=1000;
+  
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void orbit_fsm(void) {
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;  
+    
+  temp=range_read_distance(IR1);
+  orbit_d1=(temp == -1) ? orbit_d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  orbit_d2=(temp == -1) ? orbit_d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  orbit_d3=(temp == -1) ? orbit_d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  orbit_d4=(temp == -1) ? orbit_d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  orbit_d5=(temp == -1) ? orbit_d5 : temp;
+  
+  wl_do(); // update wireless
+  
+  // get bom reading
+  temp = wl_token_get_my_sensor_reading(orbit_otherRobot);
+  orbit_bom = (temp == -1) ? orbit_bom : temp;
+  
+  // modify bom reading so right is negative, left is positive
+  if (orbit_bom <= 12)
+    orbit_bom -= 4;
+  else
+    orbit_bom -= 20;
+  
+    
+  if (orbit_state == ORBIT_SEEK && orbit_d2 < ORBIT_DISTANCE)
+    orbit_state = ORBIT_INSERTION; // begin to orbit
+  if (orbit_state == ORBIT_INSERTION && orbit_bom == ORBIT_DIRECTION)
+    orbit_state = ORBIT_ORBITING; // orbit achieved
+  if (orbit_state == ORBIT_ORBITING && ((orbit_d2 < ORBIT_DISTANCE) 
+    || (orbit_theta >= orbit_theta_stop)))
+    orbit_state = ORBIT_STOP; // orbit obstructed
+  
+  // evaluate state
+  evaluate_state();
+}
+
+
+//Acts on state change.
+void evaluate_state(){
+    switch(orbit_state){
+    case(ORBIT_SEEK): orb_set_color(RED);
+      // move towards robot
+      orbit_pControl = orbit_bom*10;      
+      move(ORBIT_STRAIGHT_SPEED,orbit_pControl);
+      break;
+    
+    case(ORBIT_INSERTION): orb_set_color(GREEN);
+      // rotate into orbit, perpendicular to other robot
+      orbit_pControl = -ORBIT_DIRECTION*10;
+      move(ORBIT_STRAIGHT_SPEED/3,orbit_pControl);
+      break;
+      
+    case(ORBIT_ORBITING): orb_set_color(BLUE);
+      // go straight with slight rotation
+      if (orbit_bom == ORBIT_DIRECTION)
+        orbit_pControl = ORBIT_DIRECTION;
+      else if (orbit_bom < ORBIT_DIRECTION)
+        orbit_pControl = ORBIT_DIRECTION-ORBIT_CORRECTION;
+      else
+        orbit_pControl = ORBIT_DIRECTION+ORBIT_CORRECTION;
+      
+      move(ORBIT_STRAIGHT_SPEED,orbit_pControl);
+      break;
+      
+    case(ORBIT_STOP): orb_set_color(YELLOW);
+      move(0,0);
+      break;
+      
+    default: orb_set_color(YELLOW);
+      /*Should never get here, so stop.*/
+      move(0,0);
+      break;
+  }
+}
+
+
Index: branches/scout/behaviors/orbit_fsm/orbit_fsm.h
===================================================================
--- branches/scout/behaviors/orbit_fsm/orbit_fsm.h	(nonexistent)
+++ branches/scout/behaviors/orbit_fsm/orbit_fsm.h	(revision 1346)
@@ -0,0 +1,53 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _ORBIT_FSM_H_
+#define _ORBIT_FSM_H_
+
+//The States: 
+#define ORBIT_SEEK      12           //Move straight towards robot
+#define ORBIT_INSERTION 13           //Rotate into orbit
+#define ORBIT_ORBITING  15           //Orbit robot
+#define ORBIT_STOP      16           //Stop.  The default and ending state
+
+
+#define ORBIT_STRAIGHT_SPEED 160
+#define ORBIT_CORRECTION 9
+
+
+#define ORBIT_DIRECTION 4     // if 4, then orbit to the right; if -4, then orbit to the left
+
+#define ORBIT_DISTANCE 250 // orbit distance as measured by rangefinders
+
+
+int orbit_state;    /*State machine variable.*/
+
+int orbit_otherRobot; /* must be set prior to running FSM */
+
+
+int orbit_pControl;		/*Proportional control variable, determines turn direction.*/
+int orbit_d1,orbit_d2,orbit_d3,orbit_d4,orbit_d5;	/*The five distances taken in by IR.*/
+int orbit_bom; /* bom data */
+int orbit_theta; /* number of degrees traveled in orbit */
+int orbit_theta_stop; /* stop condition in number of degrees traveled */
+
+/* orbit_init
+   argument: robot_id that you want to orbit
+   notes: must call before orbit_fsm
+*/
+void orbit_init(int robot);
+
+/* orbit_init_theta
+   argument: robot_id that you want to orbit
+             theta that you want to stop orbiting at
+   notes: must call before orbit_fsm
+*/
+void orbit_init_theta(int robot,int theta);
+
+/* orbit_fsm
+   argument: none
+   notes: call in a while loop to perform FSM action
+*/
+void orbit_fsm(void);
+
+#endif
Index: branches/scout/behaviors/orbit_fsm/driver.c
===================================================================
--- branches/scout/behaviors/orbit_fsm/driver.c	(nonexistent)
+++ branches/scout/behaviors/orbit_fsm/driver.c	(revision 1346)
@@ -0,0 +1,39 @@
+/** driver for orbit code
+	execute orbit behavior
+*/
+
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include "orbit_fsm.h"
+
+
+int main(void) {
+  // enable everything
+  dragonfly_init(ALL_ON);
+  orb_enable();
+  orb_init();
+  orb_set_color(PURPLE);
+  wl_init();
+  wl_set_channel("O");
+  wl_token_ring_register();
+  wl_token_ring_join(); // join token ring
+  
+  /*int robot = -1;
+  wl_token_iterator_begin();
+  while(wl_token_iterator_has_next() && robot == -1) {
+    robot = wl_token_iterator_next();
+    if (robot == wl_get_xbee_id())
+      robot = -1; // can't orbit ourself
+    else
+      break;
+  }*/
+
+  orbit_init(1);//robot);
+
+  while(1) {
+    orbit_fsm(); // do orbit
+  }
+
+  return 0;
+}
Index: branches/scout/behaviors/orbit_fsm/Makefile
===================================================================
--- branches/scout/behaviors/orbit_fsm/Makefile	(nonexistent)
+++ branches/scout/behaviors/orbit_fsm/Makefile	(revision 1346)
@@ -0,0 +1,521 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com7
+#/dev/tty.usbserial*
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless #-I$(COLONYROOT)/code/projects/colonet/lib -I$(COLONYROOT)/code/projects/colonet/lib/colonet_dragonfly
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless #-lcolonet_dragonfly
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/scout/behaviors/template/template.c
===================================================================
Index: branches/scout/tools/eeprom/program_eeprom.c
===================================================================
--- branches/scout/tools/eeprom/program_eeprom.c	(nonexistent)
+++ branches/scout/tools/eeprom/program_eeprom.c	(revision 1346)
@@ -0,0 +1,76 @@
+#include <dragonfly_lib.h>
+#include <eeprom.h>
+
+int main()
+{
+  char str[5];
+  int i=0,id;
+  char c;
+
+  dragonfly_init(ALL_ON);
+
+  usb_puts("Here is the current setup:\r\n  ID: ");
+  itoa(get_robotid(), str, 10);
+  usb_puts(str);
+  usb_puts("\r\n  BOM type: ");
+  itoa(get_bom_type(), str, 10);
+  usb_puts(str);
+  usb_puts("\r\n\r\nEnter new ID:");
+
+  while((c = usb_getc()) != '\n' && c != '\r')
+    {
+      usb_putc(c);
+      if(i>=4)
+	{
+	  usb_puts("ERROR: filled buffer\n");
+	  while(1);
+	}
+      str[i++] = c;
+    }
+  while(i<5)
+    str[i++] = 0;
+
+  id = atoi(str);
+
+  usb_puts("\r\nsetting new id to: ");
+  usb_puti(id);
+
+
+  eeprom_put_byte(EEPROM_ROBOT_ID_ADDR, 'I');
+  eeprom_put_byte(EEPROM_ROBOT_ID_ADDR+1, 'D');
+  eeprom_put_byte(EEPROM_ROBOT_ID_ADDR+2, id);
+
+
+  usb_puts("\r\nEnter BOM type:\r\b"
+	   "1 for BOM 1.0\r\n"
+	   "5 for BOM 1.5\r\n"
+	   "r for RBOM\r\n>");
+
+  c = usb_getc();
+  usb_putc(c);
+
+  switch(c)
+    {
+    case '1': id = BOM10; break;
+    case '5': id = BOM15; break;
+    case 'r': id = RBOM; break;
+    default:
+      usb_puts("ERROR: invalid input");
+      while(1);
+    }
+
+  eeprom_put_byte(EEPROM_BOM_TYPE_ADDR, 'B');
+  eeprom_put_byte(EEPROM_BOM_TYPE_ADDR+1, 'O');
+  eeprom_put_byte(EEPROM_BOM_TYPE_ADDR+2, 'M');
+  eeprom_put_byte(EEPROM_BOM_TYPE_ADDR+3, id);
+
+
+
+  usb_puts("\r\ndone! have a nice day\r\n");
+
+
+  while(1);
+
+  return 0;
+}
+  
Index: branches/scout/tools/eeprom/Makefile
===================================================================
--- branches/scout/tools/eeprom/Makefile	(nonexistent)
+++ branches/scout/tools/eeprom/Makefile	(revision 1346)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = program_eeprom
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS =
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+#PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
