Browse Source

Initial commit

Nagaev Aleksandr 2 years ago
commit
4bd9364a5f
45 changed files with 21561 additions and 0 deletions
  1. 20 0
      heater3.atsln
  2. BIN
      heater3.atsuo
  3. 175 0
      heater3/Debug/Makefile
  4. 136 0
      heater3/Debug/Makefile (Конфликтующая копия с компьютера L362Com 2019-06-26)
  5. 75 0
      heater3/Debug/heater3.d
  6. 1 0
      heater3/Debug/heater3.eep
  7. BIN
      heater3/Debug/heater3.elf
  8. 1006 0
      heater3/Debug/heater3.hex
  9. 10084 0
      heater3/Debug/heater3.lss
  10. 1119 0
      heater3/Debug/heater3.map
  11. BIN
      heater3/Debug/heater3.o
  12. 1007 0
      heater3/Debug/heater3.srec
  13. 1 0
      heater3/Debug/heater3_6_2.eep
  14. BIN
      heater3/Debug/heater3_6_2.elf
  15. 406 0
      heater3/Debug/heater3_6_2.hex
  16. 3594 0
      heater3/Debug/heater3_6_2.lss
  17. 784 0
      heater3/Debug/heater3_6_2.map
  18. 407 0
      heater3/Debug/heater3_6_2.srec
  19. 48 0
      heater3/Debug/lcd-twi.d
  20. BIN
      heater3/Debug/lcd-twi.o
  21. 14 0
      heater3/Debug/makedep.mk
  22. 60 0
      heater3/Debug/potentiometers.d
  23. BIN
      heater3/Debug/potentiometers.o
  24. 70 0
      heater3/Debug/saveload.d
  25. BIN
      heater3/Debug/saveload.o
  26. 9 0
      heater3/Debug/tools.d
  27. BIN
      heater3/Debug/tools.o
  28. 52 0
      heater3/fifo.h
  29. 319 0
      heater3/heater3 (Конфликтующая копия с компьютера L362Com 2019-06-26).c
  30. 1132 0
      heater3/heater3.c
  31. 86 0
      heater3/heater3.componentinfo.xml
  32. 164 0
      heater3/heater3.cproj
  33. 159 0
      heater3/heater3.h
  34. 120 0
      heater3/heater3_6_2.cproj
  35. 94 0
      heater3/lcd-twi.c
  36. 57 0
      heater3/lcd-twi.h
  37. 92 0
      heater3/potentiometers.c
  38. 34 0
      heater3/potentiometers.h
  39. 100 0
      heater3/saveload.c
  40. 9 0
      heater3/saveload.h
  41. 29 0
      heater3/tools.c
  42. 20 0
      heater3/tools.h
  43. 20 0
      heater3_6_2.atsln
  44. BIN
      heater3_6_2.atsuo
  45. 58 0
      protocol.txt

+ 20 - 0
heater3.atsln

@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Atmel Studio Solution File, Format Version 11.00
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "heater3", "heater3\heater3.cproj", "{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AVR = Debug|AVR
+		Release|AVR = Release|AVR
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Debug|AVR.ActiveCfg = Debug|AVR
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Debug|AVR.Build.0 = Debug|AVR
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Release|AVR.ActiveCfg = Release|AVR
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Release|AVR.Build.0 = Release|AVR
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

BIN
heater3.atsuo


+ 175 - 0
heater3/Debug/Makefile

@@ -0,0 +1,175 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+SHELL := cmd.exe
+RM := rm -rf
+
+USER_OBJS :=
+
+LIBS := 
+PROJ := 
+
+O_SRCS := 
+C_SRCS := 
+S_SRCS := 
+S_UPPER_SRCS := 
+OBJ_SRCS := 
+ASM_SRCS := 
+PREPROCESSING_SRCS := 
+OBJS := 
+OBJS_AS_ARGS := 
+C_DEPS := 
+C_DEPS_AS_ARGS := 
+EXECUTABLES := 
+OUTPUT_FILE_PATH :=
+OUTPUT_FILE_PATH_AS_ARGS :=
+AVR_APP_PATH :=$$$AVR_APP_PATH$$$
+QUOTE := "
+ADDITIONAL_DEPENDENCIES:=
+OUTPUT_FILE_DEP:=
+LIB_DEP:=
+LINKER_SCRIPT_DEP:=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := 
+
+
+# Add inputs and outputs from these tool invocations to the build variables 
+C_SRCS +=  \
+../heater3.c \
+../lcd-twi.c \
+../potentiometers.c \
+../saveload.c \
+../tools.c
+
+
+PREPROCESSING_SRCS += 
+
+
+ASM_SRCS += 
+
+
+OBJS +=  \
+heater3.o \
+lcd-twi.o \
+potentiometers.o \
+saveload.o \
+tools.o
+
+OBJS_AS_ARGS +=  \
+heater3.o \
+lcd-twi.o \
+potentiometers.o \
+saveload.o \
+tools.o
+
+C_DEPS +=  \
+heater3.d \
+lcd-twi.d \
+potentiometers.d \
+saveload.d \
+tools.d
+
+C_DEPS_AS_ARGS +=  \
+heater3.d \
+lcd-twi.d \
+potentiometers.d \
+saveload.d \
+tools.d
+
+OUTPUT_FILE_PATH +=heater3.elf
+
+OUTPUT_FILE_PATH_AS_ARGS +=heater3.elf
+
+ADDITIONAL_DEPENDENCIES:=
+
+OUTPUT_FILE_DEP:= ./makedep.mk
+
+LIB_DEP+= 
+
+LINKER_SCRIPT_DEP+= 
+
+
+# AVR32/GNU C Compiler
+./heater3.o: .././heater3.c
+	@echo Building file: $<
+	@echo Invoking: AVR/GNU C Compiler : 5.4.0
+	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE)  -x c -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=12000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include"  -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g2 -Wall -mmcu=atmega644pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
+	@echo Finished building: $<
+	
+
+./lcd-twi.o: .././lcd-twi.c
+	@echo Building file: $<
+	@echo Invoking: AVR/GNU C Compiler : 5.4.0
+	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE)  -x c -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=12000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include"  -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g2 -Wall -mmcu=atmega644pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
+	@echo Finished building: $<
+	
+
+./potentiometers.o: .././potentiometers.c
+	@echo Building file: $<
+	@echo Invoking: AVR/GNU C Compiler : 5.4.0
+	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE)  -x c -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=12000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include"  -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g2 -Wall -mmcu=atmega644pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
+	@echo Finished building: $<
+	
+
+./saveload.o: .././saveload.c
+	@echo Building file: $<
+	@echo Invoking: AVR/GNU C Compiler : 5.4.0
+	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE)  -x c -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=12000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include"  -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g2 -Wall -mmcu=atmega644pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
+	@echo Finished building: $<
+	
+
+./tools.o: .././tools.c
+	@echo Building file: $<
+	@echo Invoking: AVR/GNU C Compiler : 5.4.0
+	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE)  -x c -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=12000000UL  -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include"  -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -mrelax -g2 -Wall -mmcu=atmega644pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
+	@echo Finished building: $<
+	
+
+
+
+
+# AVR32/GNU Preprocessing Assembler
+
+
+
+# AVR32/GNU Assembler
+
+
+
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+# Add inputs and outputs from these tool invocations to the build variables 
+
+# All Target
+all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
+
+$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
+	@echo Building target: $@
+	@echo Invoking: AVR/GNU Linker : 5.4.0
+	$(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="heater3.map" -Wl,-u,vfprintf -Wl,--start-group -Wl,-lm  -Wl,--end-group -Wl,--gc-sections -mrelax -mmcu=atmega644pa -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa" -lprintf_flt  
+	@echo Finished building target: $@
+	"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures  "heater3.elf" "heater3.hex"
+	"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom  --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0  --no-change-warnings -O ihex "heater3.elf" "heater3.eep" || exit 0
+	"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "heater3.elf" > "heater3.lss"
+	"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "heater3.elf" "heater3.srec"
+	"C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-size.exe" "heater3.elf"
+	
+	
+
+
+
+
+
+# Other Targets
+clean:
+	-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)  
+	-$(RM) $(C_DEPS_AS_ARGS)   
+	rm -rf "heater3.elf" "heater3.a" "heater3.hex" "heater3.lss" "heater3.eep" "heater3.map" "heater3.srec" "heater3.usersignatures"
+	

+ 136 - 0
heater3/Debug/Makefile (Конфликтующая копия с компьютера L362Com 2019-06-26)

@@ -0,0 +1,136 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+SHELL := cmd.exe
+RM := rm -rf
+
+USER_OBJS :=
+
+LIBS := 
+PROJ := 
+
+O_SRCS := 
+C_SRCS := 
+S_SRCS := 
+S_UPPER_SRCS := 
+OBJ_SRCS := 
+ASM_SRCS := 
+PREPROCESSING_SRCS := 
+OBJS := 
+OBJS_AS_ARGS := 
+C_DEPS := 
+C_DEPS_AS_ARGS := 
+EXECUTABLES := 
+OUTPUT_FILE_PATH :=
+OUTPUT_FILE_PATH_AS_ARGS :=
+AVR_APP_PATH :=$$$AVR_APP_PATH$$$
+QUOTE := "
+ADDITIONAL_DEPENDENCIES:=
+OUTPUT_FILE_DEP:=
+LIB_DEP:=
+LINKER_SCRIPT_DEP:=
+
+# Every subdirectory with source files must be described here
+SUBDIRS := 
+
+
+# Add inputs and outputs from these tool invocations to the build variables 
+C_SRCS +=  \
+../heater3.c \
+../lcd-twi.c
+
+
+PREPROCESSING_SRCS += 
+
+
+ASM_SRCS += 
+
+
+OBJS +=  \
+heater3.o \
+lcd-twi.o
+
+OBJS_AS_ARGS +=  \
+heater3.o \
+lcd-twi.o
+
+C_DEPS +=  \
+heater3.d \
+lcd-twi.d
+
+C_DEPS_AS_ARGS +=  \
+heater3.d \
+lcd-twi.d
+
+OUTPUT_FILE_PATH +=heater3_6_2.elf
+
+OUTPUT_FILE_PATH_AS_ARGS +=heater3_6_2.elf
+
+ADDITIONAL_DEPENDENCIES:=
+
+OUTPUT_FILE_DEP:= ./makedep.mk
+
+LIB_DEP+= 
+
+LINKER_SCRIPT_DEP+= 
+
+
+# AVR32/GNU C Compiler
+
+
+
+
+
+./%.o: .././%.c
+	@echo Building file: $<
+	@echo Invoking: AVR/GNU C Compiler : 4.8.1
+	$(QUOTE)C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE)  -x c -funsigned-char -funsigned-bitfields -DDEBUG -DF_CPU=12000000UL  -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega644pa -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)"   -o "$@" "$<" 
+	@echo Finished building: $<
+	
+
+
+
+# AVR32/GNU Preprocessing Assembler
+
+
+
+# AVR32/GNU Assembler
+
+
+
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+# Add inputs and outputs from these tool invocations to the build variables 
+
+# All Target
+all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
+
+$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP) $(LIB_DEP) $(LINKER_SCRIPT_DEP)
+	@echo Building target: $@
+	@echo Invoking: AVR/GNU Linker : 4.8.1
+	$(QUOTE)C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="heater3_6_2.map" -Wl,-u,vfprintf -Wl,--start-group -Wl,-lm  -Wl,--end-group -Wl,--gc-sections -mmcu=atmega644pa  
+	@echo Finished building target: $@
+	"C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures  "heater3_6_2.elf" "heater3_6_2.hex"
+	"C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -j .eeprom  --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0  --no-change-warnings -O ihex "heater3_6_2.elf" "heater3_6_2.eep" || exit 0
+	"C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objdump.exe" -h -S "heater3_6_2.elf" > "heater3_6_2.lss"
+	"C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-objcopy.exe" -O srec -R .eeprom -R .fuse -R .lock -R .signature -R .user_signatures "heater3_6_2.elf" "heater3_6_2.srec"
+	"C:\Program Files\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-size.exe" "heater3_6_2.elf"
+	
+	
+
+
+
+
+
+# Other Targets
+clean:
+	-$(RM) $(OBJS_AS_ARGS) $(EXECUTABLES)  
+	-$(RM) $(C_DEPS_AS_ARGS)   
+	rm -rf "heater3_6_2.elf" "heater3_6_2.a" "heater3_6_2.hex" "heater3_6_2.lss" "heater3_6_2.eep" "heater3_6_2.map" "heater3_6_2.srec" "heater3_6_2.usersignatures"
+	

+ 75 - 0
heater3/Debug/heater3.d

@@ -0,0 +1,75 @@
+heater3.d heater3.o: .././heater3.c .././heater3.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \
+ C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \
+ .././lcd-twi.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
+ .././potentiometers.h .././saveload.h .././fifo.h .././tools.h
+
+.././heater3.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:
+
+C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h:
+
+.././lcd-twi.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
+
+.././potentiometers.h:
+
+.././saveload.h:
+
+.././fifo.h:
+
+.././tools.h:

+ 1 - 0
heater3/Debug/heater3.eep

@@ -0,0 +1 @@
+:00000001FF

BIN
heater3/Debug/heater3.elf


+ 1006 - 0
heater3/Debug/heater3.hex

@@ -0,0 +1,1006 @@
+:10000000C8C0000054C1000081C10000DFC0000072
+:10001000DDC00000DBC00000D9C000002DC1000021
+:10002000D5C00000D3C00000D1C00000CFC0000088
+:10003000CDC00000F9C10000C9C00000C7C0000069
+:10004000E4C10000C3C00000C1C00000BFC0000088
+:100050008CC10000A7C10000B9C00000B7C00000FB
+:10006000B5C00000B3C00000B1C00000AFC00000C8
+:10007000ADC00000ABC00000A9C00000670C680C58
+:100080006D0C200C810C970CBE0CCC0C2E0C400C73
+:100090006E616E00696E660000407A10F35A00A02F
+:1000A000724E18090010A5D4E80000E87648170041
+:1000B00000E40B54020000CA9A3B000000E1F50581
+:1000C000000080969800000040420F000000A086CB
+:1000D00001000000102700000000E80300000000FD
+:1000E0006400000000000A000000000001000000A1
+:1000F00000002C76D888DC674F0823DFC1DFAE59BB
+:10010000E1B1B796E5E3E453C63AE651997696E84D
+:10011000E6C28426EB898C9B62ED407C6FFCEFBCD1
+:100120009C9F40F2BAA56FA5F490055A2AF75C93FC
+:100130006B6CF9676DC11BFCE0E40D47FEF520E632
+:10014000B500D0ED902E0300943577050080841E15
+:10015000080000204E0A000000C80C333333330F70
+:10016000986E12831141EF8D2114893BE65516CF0D
+:10017000FEE6DB18D1844B381BF77C1D901DA4BB19
+:10018000E424203284725E228100C9F124ECA1E5CE
+:100190003D2711241FBECFEFD0E1DEBFCDBF12E05F
+:1001A000A0E0B1E0E8ECFCE302C005900D92A23FB4
+:1001B000B107D9F726E0A2EFB2E001C01D92A23B41
+:1001C000B207E1F70E944A0E0C94621E19CFF89410
+:1001D0002091E8053091E9054091E6055091E70549
+:1001E000B901641B750BAB014115524081F0F90157
+:1001F000F170EA51FC4F80832F5F3F4F3093E90548
+:100200002093E8058091C10080628093C1007894BA
+:1002100080E090E00895803C28F0E82FF0E0ED5574
+:10022000FE4F80810E94861280E090E0089568B1C0
+:10023000482F417050E0FA01369621E030E0D901B4
+:1002400002C0AA0FBB1FEA95E2F79A2F909596235A
+:1002500098B998B14E5F5F4F01C0220F4A95EAF7F7
+:10026000292B28B9B3E18B9FF0011124E05EFC4FEC
+:1002700080818460808308951F920F920FB60F9241
+:1002800011248F9381E08093F70289B182958F705A
+:10029000806F803F31F4F894809160008861809392
+:1002A00060008F910F900FBE0F901F9018951F92B6
+:1002B0000F920FB60F9211248F93AF93BF93EF93CA
+:1002C000FF93F89488B1806C88B988B1837F88B92E
+:1002D0004498A3E3B3E08C918B7F8C93E0E2F3E04E
+:1002E00080818B7F80838C918D7F8C9380818D7FAB
+:1002F0008083808188608083FF91EF91BF91AF916F
+:100300008F910F900FBE0F901F9018951F920F9214
+:100310000FB60F9211248F93AF93BF93EF93FF9378
+:10032000F89488B1806C88B988B1837F88B9449883
+:10033000E3E3F3E080818B7F8083A0E2B3E08C91E4
+:100340008B7F8C9380818D7F80838C918D7F8C932C
+:10035000808188608083FF91EF91BF91AF918F91F1
+:100360000F900FBE0F901F9018951F920F920FB60F
+:100370000F9211248F93EF93FF938091F6028F5F7A
+:100380008093F602E091F602F0E08091C600E95019
+:10039000FD4F8083FF91EF918F910F900FBE0F90D3
+:1003A0001F9018951F920F920FB60F9211242F9342
+:1003B0003F938F939F93EF93FF938091E6059091E6
+:1003C000E7052091E8053091E90582179307B9F018
+:1003D000FC01F170EA51FC4F20812093C600019688
+:1003E0009093E7058093E605FF91EF919F918F91A0
+:1003F0003F912F910F900FBE0F901F9018958091F5
+:10040000C1008F7D8093C100EFCF1F920F920FB676
+:100410000F9211248F9381E08093F5028F910F90BA
+:100420000FBE0F901F9018951F920F920FB60F924C
+:1004300011248F9381E08093F4028F910F900FBE6F
+:100440000F901F90189584B7877F84BFE0E6F0E097
+:100450008081886180831082E9E6F0E080818A6093
+:1004600080838DB383608DBB88B1806D88B987B17F
+:100470008C6D87B9599A519A1092C50086E2809383
+:10048000C40082E08093C00098E99093C10096E098
+:100490009093C20094B1976B94B995B1906B95B954
+:1004A00090E59CBD94E09093B8009093BC0084BD0F
+:1004B00090E897BD95E095BD80936E009DE0909388
+:1004C000810020E034E030938900209388008093FD
+:1004D0006F00ECE7F0E08081806C808383E880939C
+:1004E0007A008FEF80937E0088E08093680080EF31
+:1004F0008093730008950F931F93CF93DF9300D0E1
+:1005000000D0CDB7DEB785B1887F866085B92C98DD
+:10051000FE0135969E012F5F3F4F9FEF9EBD0DB4AC
+:1005200007FEFDCF8EB58293E217F307B9F72C9A39
+:100530000A8100933603009323031981612F62958A
+:100540006F7070E080E090E00E94571620E030E08D
+:1005500048EC50E40E940B1720E030E048E452E4FD
+:100560000E94071787FD03C00F5F00932303812FAD
+:10057000817011FB992790F9892BD9F5809134036B
+:10058000817F8093340380912103817F80932103B5
+:100590008B81482F42954F709C81592F5295507FE7
+:1005A000252F242B392F32953F7048E03427A9019D
+:1005B000585050933803409337035093250340938A
+:1005C000240386958695837049E1849FC001112498
+:1005D000C29734F02F5F37403093380320933703AE
+:1005E0000F900F900F900F90DF91CF911F910F916F
+:1005F00008951770110F80913403817F812B8093B0
+:10060000340380912103817F182B109321031092D2
+:100610003803109237031092250310922403E0CF81
+:100620002F923F924F925F926F927F928F929F9202
+:10063000AF92BF92CF92DF92EF92FF920F931F93F0
+:10064000CF93DF93262F30E040E5649FF001112423
+:10065000EA5BFC4F028913890817190780F1E25BF6
+:10066000FF4F4081518184179507A8F486E990E0F7
+:10067000DF91CF911F910F91FF90EF90DF90CF907E
+:10068000BF90AF909F908F907F906F905F904F90B2
+:100690003F902F90089540E5649FF0011124E45AA3
+:1006A000FC4FC0E003C00081118134968017910790
+:1006B00048F4CF5FC031B9F78FEF9FEFD9CF80E01B
+:1006C00090E0D6CF1C01D0E07E0181E0E81AF1086D
+:1006D00084E1829F6001839FD00C1124EC0CFD1CEF
+:1006E000F701EE0FFF1FEE0FFF1FEA5AFC4F60816C
+:1006F000718180E090E00E9455164B015C01F7018A
+:10070000EE0FFF1FEE0FFF1FEA5BFC4F628973893C
+:1007100080E090E00E9455162B013C01CC0DDD1DC0
+:10072000CC0FDD1FCC0FDD1FCA5ADC4F68817981E9
+:1007300080E090E00E945516A50194010E94531597
+:100740006B017C01B10180E090E00E945516A3018D
+:1007500092010E9453159B01AC01C701B6010E9492
+:100760000B176B017C01B80180E090E00E945516E8
+:10077000A30192010E9453159B01AC01C701B60170
+:100780000E94BC15A50194010E9454150E942416D4
+:10079000CB016ECFCF93DF93E82F80917C00982F11
+:1007A000987F8E2F8170892B80937C008BE291E063
+:1007B0000197F1F700C000003AE040E050E080917E
+:1007C0007A00806480937A0080917A0084FFFCCF65
+:1007D000809178002091790090E0922B480F591F6A
+:1007E000315069F79A01ADECBCEC0E94E51A969580
+:1007F0008795969587959695879523E1E29FE001E9
+:100800001124C05EDC4F998788876E2F09DF9F8394
+:100810008E83DF91CF910895CF93C82F80917C0074
+:100820009C2F91709E5F887F892B80937C008BE248
+:1008300091E00197F1F700C0000080917A00806498
+:1008400080937A0080917A0084FFFCCF60917800D9
+:100850008091790070E0782B80E090E00E9455163E
+:100860002AE939E949E150E40E940B170E94291650
+:1008700023E1C29FF0011124E05EFC4F7787668779
+:10088000CB01CF910895F8948091E8059091E90506
+:100890002091E6053091E705AC01421B530B9A010C
+:1008A0002115324081F0FC01F170EA51FC4F25E541
+:1008B000208301969093E9058093E8058091C1001B
+:1008C00080628093C1007894F8948091E8059091BB
+:1008D000E9052091E6053091E705BC01621B730B29
+:1008E0009B012115324081F0FC01F170EA51FC4F6F
+:1008F00025E4208301969093E9058093E805809193
+:10090000C10080628093C1007894F8948091E805DA
+:100910009091E9052091E6053091E705FC01E21B85
+:10092000F30B9F012115324081F0FC01F170EA5177
+:10093000FC4F25E8208301969093E9058093E80514
+:100940008091C10080628093C1007894ADE3B0E0F3
+:100950005FE19D012D50310932BD21BDF89A40B5AE
+:10096000F8948091E8059091E9056091E605709111
+:10097000E705FC01E61BF70BBF016115724079F03A
+:10098000FC01F170EA51FC4F408301969093E90518
+:100990008093E8058091C10080628093C1007894C3
+:1009A000540F2F5F3F4F2A173B07B1F6D901A05BC9
+:1009B000BF4FAD3048E0B40761F6F8948091E80588
+:1009C0009091E9052091E6053091E705BC01621B95
+:1009D000730B9B012115324079F0FC01F170EA5153
+:1009E000FC4F508301969093E9058093E805809130
+:1009F000C10080628093C10078941092F302089540
+:100A00000F931F93CF93DF9364EA70E081E090E04F
+:100A10000E943F1BEC0185E588838091F3028A8365
+:100A2000833009F47EC008F47AC0853009F46FC0C1
+:100A3000863051F480EA8983E6E4F3E0DE01139620
+:100A400001900D928A95E1F750E080E090E08E01F0
+:100A50000D551F4FFE01E80FF91F4081F89480915A
+:100A6000E8059091E9052091E6053091E705BC0184
+:100A7000621B730B9B012115324081F09C01317088
+:100A80002A513C4FD9014C9301969093E9058093EC
+:100A9000E8058091C10080628093C1007894D801FC
+:100AA0004C918081480F4C935F5F298130E02E5F2D
+:100AB0003F4F852F90E02817390764F6F89480910E
+:100AC000E8059091E9052091E6053091E705FC01E4
+:100AD000E21BF30B9F012115324079F0FC01F1700C
+:100AE000EA51FC4F408301969093E9058093E80515
+:100AF0008091C10080628093C10078941092F302CB
+:100B0000CE01DF91CF911F910F910C94F11BBBDEB1
+:100B1000CE01DF91CF911F910F910C94F11B19829F
+:100B200093CF86E28983E0E2F3E0DE011396019041
+:100B30000D928A95E1F788CFF894809160008861E2
+:100B400080936000FFCF611126C098B1482F41709B
+:100B500050E0BA016A5F7F4F21E030E0F90102C046
+:100B6000EE0FFF1F6A95E2F7BF01692B68B998B1D4
+:100B70004E5F5F4F01C0220F4A95EAF72095292367
+:100B800028B993E1899FF0011124E05EFC4F808138
+:100B90008B7F808308954BCBCF92DF92EF92FF92B1
+:100BA000CF93DF9390917C00987F282F2170922B18
+:100BB00090937C00EBE2F1E03197F1F700C0000088
+:100BC00090917A00906490937A0090917A0094FFCB
+:100BD000FCCF6091780090917900C82FD0E070E050
+:100BE000792B80E090E00E9455162AE037ED43E231
+:100BF0005BE30E940B176B017C012DE02C9FC00171
+:100C00002D9F900D1124EC01C257D94F2AE43CE0EE
+:100C100042E45FE369817A818B819C810E940B179A
+:100C20009B01AC01C701B6010E94BC152D813E811C
+:100C30004F8158850E945415DF91CF91FF90EF901E
+:100C4000DF90CF9008957F928F929F92AF92BF9244
+:100C5000CF92DF92EF92FF920F931F93CF93DF9388
+:100C6000C82FE82EF12C83E1C89FF0011124E05E2B
+:100C7000FC4F7088C188D28840E050E0BA018C2FC8
+:100C80000E94321300E010E020E430E440E050E045
+:100C9000BA018C2F0E9451138C2F7EDF4B015C0117
+:100CA00020E030E040E450E40E94071718160CF4EE
+:100CB0006FC02DEC3CEC4CE45DE3C501B4010E9437
+:100CC00007171816A4F1D4E014E0672D8C2F0E94AA
+:100CD000E3136C2D8C2F0E9412146D2D8C2F0E940B
+:100CE000401483E18E9DF0018F9DF00D1124E05E94
+:100CF000FC4F9D2F9295990F990F907C80818F7357
+:100D0000892B8083D695D69581818E7FD82BD183F0
+:100D1000812FDF91CF911F910F91FF90EF90DF9086
+:100D2000CF90BF90AF909F908F907F90089520E0DC
+:100D300030E040EC5FE3C501B4010E94B81518161D
+:100D400014F26FEF8C2F0E94401461E08C2F0E94F0
+:100D50005F1487EB9BE00197F1F700C000008C2F38
+:100D60001BDF4B015C016D2D8C2F0E94401460E055
+:100D70008C2F0E945F142DEC3CEC4CE45EE3C5012B
+:100D8000B4010E94B81587FF06C0D2E012E09DCFE3
+:100D9000D0E010E09ACFD3E013E097CF2F923F92AC
+:100DA0004F925F926F927F928F929F92AF92BF927B
+:100DB000CF92DF92EF92FF920F931F93CF93DF9327
+:100DC000CDB7DEB764970FB6F894DEBF0FBECDBFC8
+:100DD000382E91DB832D37DF232D30E03A872987AA
+:100DE00033E1339EF0011124E05EFC4F8081982FA7
+:100DF000929596959695937081818170880F880F52
+:100E0000892B823041F18081982F92959695969505
+:100E1000937081818170880F880F892B8330D9F07E
+:100E200080E090E064960FB6F894DEBF0FBECDBFB1
+:100E3000DF91CF911F910F91FF90EF90DF90CF90B6
+:100E4000BF90AF909F908F907F906F905F904F90EA
+:100E50003F902F90089583E169857A85869FA00150
+:100E6000879F500D11245A834983FA01EF5DFC4F8F
+:100E7000808186958770A1F681E00E94A11200E032
+:100E800010E020E430E440E050E0BA01832D0E94FD
+:100E9000511340E050E0BA01832D0E9432138FE6D7
+:100EA00097E10197F1F700C00000C984DA849FEF51
+:100EB000C91AD90AA981BA81A05EBC4FBE83AD838D
+:100EC0007D01B6E0EB0EF11CAD80BE80E2E0AE0E1F
+:100ED000B11C62E3862E61E0962E0D811E810C5FAF
+:100EE0001F4F78E4672E71E0772E05DB60E080E02D
+:100EF0000E94C612D70111968C9111978F938C91F5
+:100F00008F93F50180811F928F93DF92CF929F92F2
+:100F10008F9224E131E03F932F930E94871D61E07F
+:100F200080E00E94C612D80111968C9111978F9380
+:100F30008C918F937F926F92E4E1F1E0FF93EF93B6
+:100F40000E94871DD8014D905C908091220190E015
+:100F50000FB6F894DEBF0FBECDBF841595052CF2F9
+:100F6000832D1ADE2AE037ED43E25DE30E9454153B
+:100F70006D877E87888B9A8B69837B878B83292EED
+:100F8000AD81BE818C91982F929596959695937090
+:100F900011968C918170880F880F892B1F82823067
+:100FA00009F4F4C0832D43D98091230190E0019688
+:100FB00043E1E985FA854E9F90014F9F300D112442
+:100FC000A901405E5C4F5E834D83DA0114964D911A
+:100FD0005C911597841795070CF425C1E12CF12C31
+:100FE0004D815E815C8B4B8B4A015EE0850E911CCE
+:100FF000B9016F5D7C4F7E836D83CB88DC8874E0A4
+:10100000C70ED11C8DE0A985BA858A9F80018B9F70
+:10101000100D11240956194F4BE7A42E41E0B42EB0
+:1010200054E1652E51E0752E83C065DAAB89BC8929
+:101030008C91982F929596959695937011968C9188
+:101040008170880F880F892B09F4E7C0EB89FC8930
+:101050008081982F92959695969593708181817055
+:10106000880F880F892B843009F4D7C0AD81BE81E9
+:101070008C918695877009F0D0C0BFEFEB1AFB0A00
+:10108000EDE2EE16E1E0FE0668F0D6018D919C914E
+:101090009C0124193509253031050CF47CC32C0141
+:1010A000E12CF12C60E080E00E94C612F8018381FF
+:1010B0008F9382818F9381818F9380818F931F92F1
+:1010C0001F921F921F922F92FB81FF932B852F93CC
+:1010D00039813F93BF92AF927F926F920E94871D9A
+:1010E00061E080E00E94C612D60111968C911197A2
+:1010F0008F938C918F93F40181818F9380818F9353
+:1011000022E931E03F932F937F926F920E94871DD7
+:101110008091230190E001960FB6F894DEBF0FBED8
+:10112000CDBFD6012D913C91821793070CF47BC063
+:10113000832D72DB853C994008F072CEEB89FC89E7
+:101140008081982F92959695969593708181817064
+:10115000880F880F892B823009F067CFD4018D91D9
+:101160009C918D3DB5E09B0708F047C0883E9340B9
+:1011700008F05BCFEF81EF5FEF836E2F832D0E942E
+:10118000401461E0832D0E945F144FCF83E12985D5
+:101190003A85829FF001839FF00D1124E25DFC4FA0
+:1011A000FE83ED8310E001C0122F612F832D0E947A
+:1011B000401461E0832D0E945F14832D38D887EBA3
+:1011C0009BE00197F1F700C00000832D25DB60E074
+:1011D000832DB9DC60E0832D0E945F1421E0210F94
+:1011E000AD81BE818D919C91883E9340E8F21F8332
+:1011F00061E0832D0E945F14D5CEEF81E150EF8333
+:101200006E2F832D0E94401461E0832D0E945F1495
+:10121000D4018D919C91AACF3D84832D0E94BE1450
+:101220008FEF9FEFFFCD60E0832D8DDC60E0832D9D
+:101230000E945F14EFE6F7E13197F1F700C000007C
+:10124000832DAADC962E872E782E692E2AE037ED84
+:1012500043E25CE3D401F3016B2F7A2F8F2F9E2F93
+:101260000E940717181684F42AE037ED43E25CE386
+:10127000D401F3016B2F7A2F8F2F9E2F0E945315CD
+:10128000962E872E782E692E5D854E8598898A89BF
+:10129000052F142F292F382FF401C3014F2F582D5C
+:1012A000692F762D832D0E945113B0912301BD83A8
+:1012B000E0912201EF83BE1708F4A1C223E1E98582
+:1012C000FA852E9FC0012F9F900D11249C01205E56
+:1012D0003C4F38872F8389010C5F1F4F790138E01D
+:1012E000E30EF11CA4EACA2EA1E0DA2EB8EB4B2ED5
+:1012F000B1E05B2E24E12E9FA0012F9F500D112401
+:101300005F874E87BC016F5D7C4F798B688B3D8614
+:10131000372C722C262C6B847D81A72EB12CD80102
+:101320008D919C918A159B05E4F1E5D860E080E001
+:101330000E94C612D70111968C9111978F938C91B0
+:101340008F937F92BB81BF936F92E981EF93DF927E
+:10135000CF9224E131E03F932F930E94871D61E0FB
+:1013600080E00E94C612D80111968C9111978F933C
+:101370008C918F932F923F928F929F925F924F9278
+:10138000E4E1F1E0FF93EF930E94871D0FB6F8941C
+:10139000DEBF0FBECDBFD8018D919C918A159B05F4
+:1013A00024F68D85F7D98DECBD81B89F812D112450
+:1013B000869586958695EE85FF85E80FF11DCF0110
+:1013C000EE0FFF1FEE0FFF1FEA5AFC4FB182A08203
+:1013D000880F991F880F991FFC01EA5BFC4FD7010A
+:1013E0008D919C91938B828BEF81F8858081982FD2
+:1013F000929596959695937081818170880F880F4C
+:10140000892B09F409CF8081982F9295969596950E
+:10141000937081818170880F880F892B843009F443
+:10142000FBCEA889B9898C918695877009F0F4CE96
+:10143000BD81BA50BD8380912201B81708F06CCFEE
+:101440008F833D84209023018DEC289E212D112433
+:10145000269526952695EF81E89F812D1124869566
+:101460008695869510E00DEC94E149855A85949F08
+:101470007001959FF00C1124B701680F711DAB012D
+:10148000440F551F440F551FDA01A85ABC4FBA83A9
+:10149000A983FA01EA5AFC4FFC83EB83C701820F50
+:1014A000911D9C01220F331F220F331FA901485A9F
+:1014B0005C4F5E834D83B9016A5A7C4F7C876B8792
+:1014C0002D863E861701109F812D112486958695C5
+:1014D0008695D101A80FB11DB98BA88BFD01EE0F28
+:1014E000FF1FEE0FFF1FEA5AFC4F812F90E0918300
+:1014F0008083E981FA816081718180E090E00E94BF
+:1015000055166B017C01AB81BC816D917C9180E0B3
+:1015100090E00E9455164B015C01E889F989EE0FB5
+:10152000FF1FEE0FFF1FEA5BFC4FF98BE88BAD81CD
+:10153000BE816D917C9180E090E00E945516A701DC
+:1015400096010E9453152B013C01612F70E080E051
+:1015500090E00E945516A50194010E9453159B012D
+:10156000AC01C301B2010E940B172B013C01EB85BA
+:10157000FC856081718180E090E00E945516A50194
+:1015800094010E9453159B01AC01C301B2010E945A
+:10159000BC15A70196010E9454150E942916A8891E
+:1015A000B98953967C936E935297165FBF811B1730
+:1015B00008F489CF2D843E841AE0120D103A08F009
+:1015C000B4C08DEC289E912D1124969596959695F4
+:1015D000BF81B89F812D11248695869586950DEC47
+:1015E00024E1E985FA852E9F70012F9FF00C1124CC
+:1015F0009701280F311DA901440F551F440F551F96
+:10160000BA01685A7C4F7A836983DA01AA5ABC4FBF
+:10161000BC83AB83F701E90FF11D9F01220F331F3C
+:10162000220F331FA901485A5C4F5E834D83B901D5
+:101630006A5A7C4F7C876B873F821701109F812DF0
+:101640001124869586958695D101A80FB11DBF8777
+:10165000AE87FD01EE0FFF1FEE0FFF1FEA5AFC4F92
+:10166000812F90E091838083E981FA81608171818B
+:1016700080E090E00E9455166B017C01AB81BC813B
+:101680006D917C9180E090E00E9455164B015C01C9
+:10169000EE85FF85EE0FFF1FEE0FFF1FEA5BFC4F8D
+:1016A000FF87EE87AD81BE816D917C9180E090E0F7
+:1016B0000E945516A70196010E9453152B013C016B
+:1016C000612F70E080E090E00E945516A501940122
+:1016D0000E9453159B01AC01C301B2010E940B177C
+:1016E0002B013C01EB85FC856081718180E090E0FD
+:1016F0000E945516A50194010E9453159B01AC014F
+:10170000C301B2010E94BC15A70196010E945415A5
+:101710000E942916AE85BF8553967C936E9352978F
+:10172000165F103A08F48ACF3F8020E5E985FA85F4
+:101730002E9FC0012F9F900D1124895B9C4FDC01CF
+:101740002C91222309F454C080E529853A85829F93
+:10175000F001839FF00D1124EA5BFC4F83E1829F2F
+:10176000D001839FB00D1124A05EBC4F12968C91C6
+:101770001297808350968C915097858751968C91C3
+:101780005197868752968C918787832D0E940115E9
+:1017900081E0D7D645CB60E0832DD5D960E0832D9D
+:1017A0000E945F1460E080E0F1D624E131E040E186
+:1017B00050E061E070E089E591E00E94D21D61E0B7
+:1017C00080E0E4D624E131E040E150E061E070E007
+:1017D0008AE691E00E94D21D832D0E94BE141092D1
+:1017E000F7028091F7028823E1F38FEF9FEF1ACB86
+:1017F0004CE050E06CEC71E00E946D1DA5CFBF8104
+:101800002D80BB2309F4D8CE1FCECF93DF93C09198
+:10181000EC05CC1FCC27CC1F8091EC058F778093F3
+:10182000EC0581E08093F302E091EC058E2F90E0CF
+:101830008A30910580F4FC01E25CFF4F0C94DF1AC2
+:101840008091ED0593E1C99FE0011124C05EDC4F5A
+:1018500090E09B878A87DF91CF91089583E1C89FAD
+:10186000E0011124C05EDC4F888182958370823054
+:1018700091F79091ED05888190FB82F98883EBCFF9
+:101880008091ED05837093E1C99FF0011124E05E22
+:10189000FC4F982F9295907F80818F7C892B80833D
+:1018A0008091EE05809322018091EF0580932301C2
+:1018B000808182958370823009F47CC0808182951A
+:1018C0008370813041F68C2FDF91CF9167CA34D974
+:1018D0008091ED058093F302BECF9091ED0583E1F9
+:1018E000C89FF0011124E05EFC4F808190FB81F9DC
+:1018F000808360E08C2F27D960E08C2FDF91CF911F
+:10190000DEC78091ED0593E1C99FF0011124E05EEF
+:10191000FC4F808B8091EE05818B6091ED058C2FC3
+:1019200052D76091EE058C2FDF91CF917BC78C2F22
+:1019300090E02091ED0533E1389FF001399FF00DE3
+:101940001124E05EFC4F228B2DE0289FE001299FAF
+:10195000D00D1124C257D94F6091320370E080E05E
+:1019600090E00E9455162BE734E14EEC51E40E94C2
+:10197000BC1569877A878B879C876DCF8091ED0531
+:1019800093E1C99FF0011124E05EFC4F82838C2F0C
+:10199000F5D7DF91CF91CEC74091EB0550E06DEECA
+:1019A00075E086E493E00E945D1D8C2FDF91CF915E
+:1019B0000C9401158C2FDF91CF9172C0DF92EF92C2
+:1019C000FF920F931F93CF93DF930091F6020023B2
+:1019D00009F45EC0015010E00F5F1F4FC0E0D0E07F
+:1019E00082E0E82EDD24D39493E0F92E17C08130F5
+:1019F00008F43FC0823031F59093EC0580918D065C
+:101A0000980F90938D06F092F2028091F602815029
+:101A10008093F6022196C017D107D1F1FE01E8505C
+:101A2000FD4F90818091F202813009F7943668F57C
+:101A30009093EB0580918D06980F90938D06E09220
+:101A4000F202E3CF2091EB05482F50E030E02E5F0B
+:101A50003F4F24173507A4F0FA01E951FA4F938359
+:101A600020918D06920F90938D068F5F8093F202E6
+:101A7000CCCF953551F690938D06D092F202C5CF1A
+:101A800080918D06981301C0C0DE1092F202BDCF86
+:101A9000DF91CF911F910F91FF90EF90DF9008950C
+:101AA000EF92FF920F931F93CF93DF93C82F81E0A4
+:101AB00048D560E080E06AD524E131E040E150E0C3
+:101AC00061E070E084ED91E00E94D21DEC2EF12CDB
+:101AD00023E1C29F80011124F801E05EFC4F808168
+:101AE000982F929596959695937081818170880F25
+:101AF000880F892BD0E0823009F45EC083E18E9D8F
+:101B000080018F9D100D1124005E1C4FF801808113
+:101B1000829583708230A9F58091F602811146C0CA
+:101B20008091F30281113FC0F801808182FF33C0B0
+:101B30008081982F9295969596959370818181706A
+:101B4000880F880F892B823099F18C2F0E94170102
+:101B500087EB9BE00197F1F700C000008C2F0E94FB
+:101B60000C04813D974090F2D1506D2F8C2F88D678
+:101B700061E08C2FA4D6F801808182958370823039
+:101B800059F280818B7F8083DF91CF911F910F91DC
+:101B9000FF90EF90089560E08C2F0E94A30560E015
+:101BA0008C2F8DD6B3CF0E940005BECF07DFB8CFF4
+:101BB00061E08C2F84D6C9CF8F01025F1F4F01C017
+:101BC000D22F6D2F8C2F5CD661E08C2F78D68C2F86
+:101BD0000E94170187EB9BE00197F1F700C000001E
+:101BE0008C2F0E940C0460E08C2F0E94A30560E003
+:101BF0008C2F65D621E02D0FF80180819181883EE0
+:101C00009340F0F27BCFFF920F931F93CF93DF931C
+:101C10008FE59AEE0197F1F700C0000060E080E0E8
+:101C2000B5D48FEF73D461E08FE0B0D48FEF6ED472
+:101C300010E0C1E0DFEF0FE08FEDF82E89B1829563
+:101C40008F70806F8F3FE9F08FE59AEE0197F1F783
+:101C500000C0000060E08C2F99D48D2F57D461E034
+:101C6000802F8C1B93D48D2F51D4CF5FC03131F78F
+:101C7000DF251F5FC0E089B182958F70806F8F3F35
+:101C800019F7123008F381E0DF91CF911F910F9186
+:101C9000FF9057C4CF93DF9300D000D0CDB7DEB70D
+:101CA00061E070E083E090E00E943F1B4C0186E21F
+:101CB000E0E2F3E0DF011D928A95E9F78AE1EEE8C0
+:101CC000F6E0DF011D928A95E9F780EAE6E4F3E0A9
+:101CD000DF011D928A95E9F7809120038E7F809322
+:101CE00020038091330381608093330381E08093EC
+:101CF0009B0689E190E090933E0380933D0390938F
+:101D00002B0380932A0386E091E09093AF068093A3
+:101D1000AE060E9423026FD476DFE2D580E02ED695
+:101D200081E02CD680E00E94230681E00E942306F9
+:101D300078940E94000511E01B8277E0272E72E064
+:101D4000372EB981BC838091F60281119EC08091AB
+:101D5000F302811166C08091200383FD68C08091E9
+:101D6000330383FD64C08091F502811190C080919E
+:101D7000F402882341F01092F402113009F42DC1CD
+:101D8000133009F42AC28091F7028823E1F28FE52B
+:101D90009AEE0197F1F700C000001092F70289B1A6
+:101DA00082958F7080958F70942D9295907F982B4F
+:101DB000882309F4D7C09C8160FA90F950FA91F910
+:101DC00070FA92F997709983902F990F990F990F44
+:101DD000A981A92BAC83A2FDDFC0113009F0B3CFDC
+:101DE000823009F4D9C208F4C6C2833009F4ECC2C7
+:101DF000843009F0E4C2D4018C9190E0019663E054
+:101E000070E00E94CC1AF4018083882309F4EEC2AA
+:101E1000D40111961C9284E0482E512C66246394C0
+:101E200092CF0E9400058091200383FF98CF60E04D
+:101E300080E0ACD324E131E040E150E061E070E0CB
+:101E400085EE91E00E94D21D61E080E09FD324E105
+:101E500031E044E050E061E070E086EF91E00E9404
+:101E6000D21D80E053D324E131E04BE050E061E04B
+:101E700070E08BEF91E00E94D21D89B182958F7046
+:101E8000806F873FD1F70E949C0598DD60CF10924C
+:101E9000F5020E947B02E12CF12CDE2C8E2D0E949B
+:101EA0000C04853C994058F023E12E9DF0012F9DB4
+:101EB000F00D1124E05EFC4F80818D7F808360E017
+:101EC0008D2D0E94A30560E08D2DF9D487EB9BE05A
+:101ED0000197F1F700C000008D2D0E9423068D2D83
+:101EE0000E94CA0393E19E9DF0019F9DF00D112475
+:101EF000E05EFC4F8081982F929596959695937011
+:101F000081818170880F880F892B61F480818D7F9A
+:101F10008083AFEFEA1AFA0AB2E0EB16F10409F097
+:101F2000BCCF25CF8081982F9295969596959370EA
+:101F300081818170880F880F892B8430D1F1808155
+:101F400081FF08C086819781228533858217930798
+:101F500008F474C160E08D2DB2D460E08D2D0E9434
+:101F6000A305D7CFBC8160FAB0F950FAB1F970FA85
+:101F7000B2F9000F000F000FB770B02BBC83B2FD99
+:101F800026C0907F903809F474C100E0712C55246C
+:101F90005394612C11E0D7CE843009F45BC108F46E
+:101FA00037C1883009F0CFCE81E0CBD2412C10E090
+:101FB000CACE808181FFD1CF8481958122853385EE
+:101FC0008217930750F68D2D0E941701A2CF00E0D3
+:101FD000712C55245394612CB6CE60E080E0D6D2AB
+:101FE000EB81AE2EB12CF3E1FA9D6001FB9DD00C8C
+:101FF00011249601205E3C4F3A832983D901129621
+:102000008C911F928F93C50101969F938F933F925E
+:102010002F9254E1E52E51E0F52EFF92EF920E94AF
+:10202000871DF601EF5DFC4F8081869587700FB6A6
+:10203000F894DEBF0FBECDBF09F0F5C0A981BA810B
+:1020400015968C9115978F9314968C918F93EBE343
+:10205000F2E0FF93EF93FF92EF920E94871D0F90A3
+:102060000F900F900F900F900F9033E13A9DF00179
+:102070003B9DF00D1124E05EFC4F8081982F9295DE
+:1020800096959695937081818170880F880F892B22
+:10209000823009F451C108F0D5C0882309F4E6C0A4
+:1020A000813011F487E032D261E080E06FD2A3E1A9
+:1020B000AA9DC001AB9D900D1124FC01E05EFC4F78
+:1020C0007F0183858F9382858F932DE132E03F934B
+:1020D0002F9344E1C42E41E0D42EDF92CF920E9490
+:1020E000871DD7018C91982F929596959695937010
+:1020F00011968C9111978170880F880F892B0F9002
+:102100000F900F900F900F900F9009F4CBC08C910F
+:10211000982F929596959695937011968C918170C3
+:10212000880F880F892B813009F4BCC0F7018081AA
+:10213000982F929596959695937081818170880FCE
+:10214000880F892B843009F4FAC0F70187818F93B7
+:1021500086818F9328E332E03F932F93DF92CF92D3
+:102160000E94871D0F900F900F900F900F900F906F
+:1021700093E19A9DF0019B9DF00D1124E05EFC4FD0
+:10218000808181FF9DC0808182FF97C089EDBED193
+:10219000D4018C91813009F496C0823009F4B0C02A
+:1021A000FC8160FAF0F950FAF1F970FAF2F9F7707F
+:1021B000802F880F880F880FF82BFC838F2F857056
+:1021C000813009F0E0CD0F5F0F710C3009F0DBCDED
+:1021D0008093F70277247394D6CD60E080E0D6D167
+:1021E00024E131E040E150E061E070E081E492E020
+:1021F0000E94D21D61E080E0C9D124E131E040E1DC
+:1022000050E061E070E082E592E00E94D21DBBCD1B
+:102210008150823008F097CD81E08093F702015E13
+:102220000F71712C90CD24E131E044E050E061E089
+:1022300070E088E192E00E94D21D17CF61E08D2D01
+:102240003ED3C1CE833079F0843009F02DCF84E0C5
+:102250005DD12ACFD4011C928B810E94CE0600E072
+:10226000712C612C70CD83E051D11ECF86E04ED110
+:102270001BCFB3E12B81B29FF0011124E05EFC4F34
+:10228000808181FB992790F981E08927908180FBEB
+:1022900091F9908360E0822F12D360E08B810E94DD
+:1022A000A30573CE24E131E047E050E061E070E047
+:1022B00087E292E00E94D21D5BCF8AED27D168CFE2
+:1022C0008DE224D165CF11968C911197982F937040
+:1022D00091F4893208F081C061E083E057D124E1B4
+:1022E00031E043E050E061E070E086E691E00E947A
+:1022F000D21DF40181818F5FD40111968C9350CF50
+:10230000F4018181982F937099F4893208F06AC0A2
+:1023100060E084E03BD124E131E042E050E061E064
+:1023200070E087E691E00E94D21DD40111968C9155
+:102330008F5FF401818334CF85E0E8D0B5CE668528
+:10234000778580E090E0B1D420E030E04AE754E4C3
+:1023500013D49F938F937F936F932FE232E03F9339
+:102360002F93DF92CF920E94871D0FB6F894DEBFA5
+:102370000FBECDBFFDCE813011F5F40111838081F8
+:102380008130B1F1823009F464C044244394512C6B
+:10239000662463941B82D7CCD40111961C931197A9
+:1023A0008C91813009F43DC0823009F468C062E04C
+:1023B000462E512C66246394E1E0EB83C4CC482E76
+:1023C000512C66246394BFCC81E0BBD093E0492EAE
+:1023D000512C6624639413E0B6CC1C9211961C9287
+:1023E000A9D27ACF10821182A5D292CFA3D210CDDA
+:1023F00023E13B81239FF0011124E05EFC4F8285A5
+:10240000938521E030E0009711F420E030E0821B5A
+:10241000930B9387828744244394512C66246394BE
+:1024200092CCB3E12B81B29FF0011124E05EFC4F0E
+:102430008285938521E030E086399105A9F1820FEC
+:10244000931F9387828732E0432E512C6624639436
+:102450007ACC83E19B81899FF0011124E05EFC4FDF
+:10246000828191E0811101C090E0891B82838B8180
+:1024700085D244244394512C6624639464CC33E184
+:102480008B81389FF0011124E05EFC4F828191E046
+:10249000883169F0890F82838B8170D222E0422ECD
+:1024A000512C662463944FCC20E030E0C8CF90E0FC
+:1024B000F1CFF8949091BC00906A9093BC009091F9
+:1024C000BC0097FFFCCF9EE49093BB009091BC00B2
+:1024D0009F7D9093BC009091BC0090689093BC004D
+:1024E0009091BC0097FFFCCF8093BB008091BC0013
+:1024F00080688093BC008091BC0087FFFCCF8091F6
+:10250000BC0080698093BC0078940895CF93DF93DA
+:10251000C82FD82FD07F8D2F8560CBDF8D2F816086
+:10252000C8DF80E1C89FE00111248C2F8560C1DFE6
+:102530008C2F8160BEDF80E18A95F1F7DF91CF912A
+:102540000895CF93DF93C82FD82FD07F8D2F84602D
+:10255000B0DF8D2FAEDF20E1C29FC0011124846067
+:10256000A8DF8C2F8295807FA4DFC13031F098E204
+:102570009A95F1F7DF91CF9108958FE496E4019752
+:10258000F1F700C00000DF91CF91089561708F7066
+:1025900090E4699F800D11248068D3CFCF92DF92A1
+:1025A000FF920F931F93CF93DF9384EAC82E82E0AC
+:1025B000D82EF12CD0E08F2D8064C3DF8601C8E0D7
+:1025C00003C0F801D1918F018D2FA0DFC150C9F751
+:1025D000F8E0FF0E80E4F81631F0F601D781F8E05C
+:1025E000CF0ED11CE8CFDF91CF911F910F91FF90BB
+:1025F000DF90CF900895CF9380E05BDF2FEB84EDE9
+:1026000091E0215080409040E1F700C00000C5E01B
+:1026100084E04FDF80E04DDFC150D1F728EC2A95F0
+:10262000F1F784E246DF80E244DF8AE28ADF88E075
+:1026300088DF81E086DF86E084DF8CE082DFCF9177
+:10264000ADCF95B1987F6770692B65B92C9891E1F2
+:102650009EBD0DB407FEFDCF8EBD0DB407FEFDCFB0
+:102660002C9A0895CF92DF92EF92FF92CF93DF934F
+:102670006A017B01C82FC1702BE734E14EEC51E4B5
+:10268000C701B601C8D3E5D2D62F64E06C0F8D2FF9
+:10269000D8DF8D2FDF91CF91FF90EF90DF90CF901B
+:1026A00008958F929F92AF92BF92CF92DF92EF9256
+:1026B000FF920F931F93CF93DF93E82F4A015B01A3
+:1026C000C901B801CE2ED12C2E2F2170C22FCC0FD4
+:1026D000A5019401E8D19B01AC0163E373E383E5B9
+:1026E00090E44AD222E03BE247E051E494D322E76F
+:1026F0003AE84EE051E4D7D1ACD2D62F61E06C0F6E
+:102700008D2F9FDF83E18C9D80018D9D100D112405
+:10271000005E1C4FF801D08B2AE43CE042E45FE30A
+:10272000C501B40178D320E030E04FE753E473D320
+:1027300025E33EE542E050E41FD28BD2D62F6C2F2A
+:102740008D2F7FDFF801D18B2DE02C9DC0012D9DB9
+:10275000900D11249C012257394F7901608970E056
+:1027600080E090E0A2D222E73AE84EE051E49CD12A
+:1027700022E03BE247E051E4FFD1F701618372833D
+:10278000838394836D2F70E080E090E08ED225E308
+:102790003EE542E050E43FD320E030E04FE753E431
+:1027A000EBD1F7016583768387839087DF91CF91A3
+:1027B0001F910F91FF90EF90DF90CF90BF90AF905F
+:1027C0009F908F9008951F93CF93DF93C82F162F5C
+:1027D000682F6170660F6F5F812F33DF83E1C89FC1
+:1027E000F0011124E05EFC4F108B8DE0C89FE001EA
+:1027F0001124C257D94F612F70E080E090E055D28C
+:1028000022E73AE84EE051E44FD122E03BE247E0D4
+:1028100051E4B2D169837A838B839C83DF91CF911A
+:102820001F9108951F93CF93DF93C82F162F682F02
+:102830006170660F812F05DF83E1C89FF0011124CD
+:10284000E05EFC4F118B8DE0C89FE0011124C25760
+:10285000D94F612F70E080E090E027D225E33EE57C
+:1028600042E050E4D8D220E030E04FE753E484D196
+:102870006D837E838F839887DF91CF911F91089519
+:10288000CF93DF9393E1899FF0011124E05EFC4F29
+:10289000628B9DE0899FE0011124C257D94F70E0FF
+:1028A00080E090E002D22BE734E14EEC51E464D1B9
+:1028B00069877A878B879C87DF91CF910895962FC0
+:1028C000682F61706C5F23E1829FF0011124E05E4C
+:1028D000FC4F892F81709289899F802D1124B1CE60
+:1028E00021E080E090E092BD81BDF89A823081F0D5
+:1028F0008330C1F030B5813091F030932203243021
+:10290000C1F001962F5F92BD81BDF89A823081F7A8
+:1029100040B550E050932B0340932A03F2CF3093FD
+:102920003503EFCF80B590E090933E0380933D0355
+:1029300008950895F89480E090E092BD81BD8230C2
+:10294000C9F0833099F0813069F02091220320BDD5
+:10295000FA9AF99AF999FECF01968430910569F7B0
+:10296000789408952091350320BDF2CF20913D0346
+:1029700020BDEECF20912A0320BDEACF0F931F93F5
+:10298000CF93DF93C82F20E5829FF0011124EA5BEB
+:10299000FC4F80E090E04C2F50E063E1C69FD001F7
+:1029A0001124AE5DBC4F2C91BC01D0E52D9F600D74
+:1029B000711D11249B01205D3F4F32BD21BDF89A4E
+:1029C00020B5219301968035910569F780E5849FB4
+:1029D0008001859F100D11240A5B1C4FF80165854D
+:1029E0008C2FF1DEF80166858C2F1CDFF8016785DE
+:1029F0008C2F46DF60E08C2FDF91CF911F910F91DC
+:102A00005ECFCF92DF92EF92FF920F931F93CF93FF
+:102A1000DF93082FF89481E094DD60E080E0B6DD7C
+:102A200024E231E04DE050E061E070E083EE92E0BE
+:102A30000E94D21D61E080E0A9DD20E5029F8001B7
+:102A400011240A5B1C4FC0E0D0E0680185E0E82E4D
+:102A5000F12CF60180819E0140E5849F200D311DFF
+:102A60001124C901C09692BD81BDF80181918F01E9
+:102A7000219680BDFA9AF99AF999FECFCE01B70155
+:102A80008BD5892B69F0C035D10519F77894DF9182
+:102A9000CF911F910F91FF90EF90DF90CF9008950D
+:102AA0008FEF34DDF0CF5058BB27AA270ED075C169
+:102AB00066D130F06BD120F031F49F3F11F41EF459
+:102AC0005BC10EF4E095E7FB51C1E92F77D180F3AC
+:102AD000BA17620773078407950718F071F49EF51B
+:102AE0008FC10EF4E0950B2EBA2FA02D0B01B9016A
+:102AF00090010C01CA01A0011124FF27591B99F074
+:102B0000593F50F4503E68F11A16F040A22F232F7F
+:102B1000342F4427585FF3CF469537952795A795CF
+:102B2000F0405395C9F77EF41F16BA0B620B730B76
+:102B3000840BBAF09150A1F0FF0FBB1F661F771FE7
+:102B4000881FC2F70EC0BA0F621F731F841F48F49C
+:102B5000879577956795B795F7959E3F08F0B3CF22
+:102B60009395880F08F09927EE0F9795879508950C
+:102B7000D9D008F481E008950CD00FC107D140F0FE
+:102B8000FED030F021F45F3F19F0F0C0511139C18F
+:102B9000F3C014D198F39923C9F35523B1F3951BCE
+:102BA000550BBB27AA2762177307840738F09F5F6E
+:102BB0005F4F220F331F441FAA1FA9F333D00E2EDD
+:102BC0003AF0E0E830D091505040E695001CCAF74A
+:102BD00029D0FE2F27D0660F771F881FBB1F26170F
+:102BE00037074807AB07B0E809F0BB0B802DBF01E2
+:102BF000FF2793585F4F2AF09E3F510568F0B6C0FB
+:102C000000C15F3FECF3983EDCF3869577956795BE
+:102C1000B795F7959F5FC9F7880F911D9695879592
+:102C200097F90895E1E0660F771F881FBB1F6217B1
+:102C300073078407BA0720F0621B730B840BBA0B6F
+:102C4000EE1F88F7E095089504D06894B111D9C0BB
+:102C50000895BCD088F09F5790F0B92F9927B751AD
+:102C6000A0F0D1F0660F771F881F991F1AF0BA9550
+:102C7000C9F712C0B13081F0C3D0B1E00895C0C02F
+:102C8000672F782F8827B85F39F0B93FCCF3869546
+:102C900077956795B395D9F73EF4909580957095A3
+:102CA00061957F4F8F4F9F4F0895E89409C097FB20
+:102CB0003EF490958095709561957F4F8F4F9F4F13
+:102CC0009923A9F0F92F96E9BB279395F695879557
+:102CD00077956795B795F111F8CFFAF4BB0F11F41A
+:102CE00060FF1BC06F5F7F4F8F4F9F4F16C08823C1
+:102CF00011F096E911C0772321F09EE8872F762FF7
+:102D000005C0662371F096E8862F70E060E02AF037
+:102D10009A95660F771F881FDAF7880F9695879523
+:102D200097F90895990F0008550FAA0BE0E8FEEFF8
+:102D300016161706E807F907C0F012161306E4077F
+:102D4000F50798F0621B730B840B950B39F40A2678
+:102D500061F0232B242B252B21F408950A2609F456
+:102D6000A140A6958FEF811D811D089597F99F675A
+:102D700080E870E060E008959FEF80EC0895002403
+:102D80000A941616170618060906089500240A94D0
+:102D900012161306140605060895092E0394000C56
+:102DA00011F4882352F0BB0F40F4BF2B11F460FFE5
+:102DB00004C06F5F7F4F8F4F9F4F089557FD90580E
+:102DC000440F551F59F05F3F71F04795880F97FBEF
+:102DD000991F61F09F3F79F08795089512161306A9
+:102DE0001406551FF2CF4695F1DF08C016161706D8
+:102DF0001806991FF1CF869571056105089408950D
+:102E0000E894BB2766277727CB0197F908958ADFD7
+:102E100008F48FEF08950BD0C0CFB1DF28F0B6DFF4
+:102E200018F0952309F0A2CFA7CF1124EACFC6DF6F
+:102E3000A0F3959FD1F3950F50E0551F629FF001CD
+:102E4000729FBB27F00DB11D639FAA27F00DB11D26
+:102E5000AA1F649F6627B00DA11D661F829F2227AF
+:102E6000B00DA11D621F739FB00DA11D621F839F36
+:102E7000A00D611D221F749F3327A00D611D231F0C
+:102E8000849F600D211D822F762F6A2F11249F575A
+:102E900050408AF0E1F088234AF0EE0FFF1FBB1F7D
+:102EA000661F771F881F91505040A9F79E3F51051C
+:102EB00070F05CCFA6CF5F3FECF3983EDCF38695D5
+:102EC00077956795B795F795E7959F5FC1F7FE2BC7
+:102ED000880F911D9695879597F90895A0E1B0E028
+:102EE000E3E7F7E181C37C011B016A01FC01178262
+:102EF0001682838181FF2AC39E012F5F3F4F3901D4
+:102F0000F7019381F10193FD859193FF81911F0159
+:102F1000882309F417C3853239F493FD859193FF13
+:102F200081911F01853231F4B70190E0FFD5560140
+:102F30006501E6CF10E0512C912CFFE1F915D8F096
+:102F40008B3279F038F4803279F08332A1F4F92DA4
+:102F5000F0612EC08D3261F0803369F4292D21603B
+:102F60002DC0392D3260932E892D8460982E2AC071
+:102F7000E92DE86015C097FC2DC020ED280F2A3000
+:102F800088F496FE06C03AE0139F200D1124122FFC
+:102F900019C08AE0589E200D1124522EE92DE062BE
+:102FA0009E2E10C08E3231F496FCCCC2F92DF06406
+:102FB0009F2E08C08C3621F4292D2068922E02C045
+:102FC000883641F4F10193FD859193FF81911F01B2
+:102FD0008111B3CF9BEB980F933020F4992D906122
+:102FE000805E07C09BE9980F933008F059C1992D76
+:102FF0009F7E96FF16E09F73992E853619F4906494
+:10300000992E08C0863621F4392F3068932E02C0DD
+:103010001111115097FE07C01C3350F444244394FF
+:10302000410E27E00BC0183038F027E017E005C04C
+:1030300027E09CE3492E02C0212F412C560184E059
+:10304000A80EB11CF6016081718182819381042DEB
+:10305000A30150D46C01F981FC87F0FF02C0F3FF9B
+:1030600006C091FC06C092FE06C000E205C00DE25B
+:1030700003C00BE201C000E08C858C7019F00111D7
+:1030800043C280C297FE10C04C0CFC85F4FF04C004
+:103090008A81813309F44A94141474F528E02415C4
+:1030A00078F588E0482E2CC096FC2AC0812F90E04D
+:1030B0008C159D059CF03CEFC3163FEFD30674F0D2
+:1030C000892D8068982E0AC0E2E0F0E0EC0FFD1F29
+:1030D000E10FF11D8081803319F411501111F4CFEB
+:1030E00097FE0EC044244394410E812F90E0C816F1
+:1030F000D9062CF41C1904C04424439401C010E0E8
+:1031000097FE06C01C141D0434F4C601019605C0C8
+:1031100085E090E002C081E090E00111019611236A
+:1031200031F0212F30E02F5F3F4F820F931F252D6D
+:1031300030E08217930714F4581A01C0512C892DDE
+:10314000897041F4552031F0B70180E290E0EED46F
+:103150005A94F8CF002321F0B701802F90E0E6D4F5
+:1031600093FC08C0552031F0B70180E390E0DED435
+:103170005A94F8CF97FE4AC04601D7FE02C0812C70
+:10318000912CC60188199909F301E80FF91FFE87F0
+:10319000ED87960124193109388B2F87012F10E014
+:1031A0001195019511093FEF8316930621F4B7019C
+:1031B0008EE290E0BBD4C814D9044CF08F85988976
+:1031C0008815990524F4ED85FE85818101C080E391
+:1031D000F1E08F1A91082D853E852F5F3F4F3E8786
+:1031E0002D878016910624F0B70190E09FD4DBCFA5
+:1031F000C814D90441F49A81963320F4953319F414
+:103200003C8534FF81E3B70190E048C08A81813377
+:1032100019F09C859F7E9C87B70190E087D411119F
+:1032200005C094FC16C085E690E015C0B7018EE29B
+:1032300090E07CD41E5F82E001E0080FF301E80F0C
+:10324000F11D8081B70190E071D4802F0113F4CF7C
+:10325000E8CF85E490E0B70169D4D7FC06C0C1147B
+:10326000D10441F4EC85E4FF05C0D194C194D108A8
+:103270008DE201C08BE2B70190E058D480E32AE0F0
+:10328000C216D1042CF08F5FFAE0CF1AD108F7CF25
+:10329000B70190E04BD4B701C601C09647D449C1ED
+:1032A000833631F0833779F0833509F052C01FC07F
+:1032B000560132E0A30EB11CF6018081898301E042
+:1032C00010E0630111C05601F2E0AF0EB11CF6012F
+:1032D000C080D18096FE03C0612F70E002C06FEF06
+:1032E0007FEFC60109D48C01F92DFF7713C0560179
+:1032F00022E0A20EB11CF601C080D18096FE03C070
+:10330000612F70E002C06FEF7FEFC601CBD38C015D
+:10331000F92DF0689F2EF3FD18C0852D90E0081759
+:10332000190798F4B70180E290E000D45A94F5CFE1
+:10333000F60197FC859197FE81916F01B70190E0AE
+:10334000F5D351105A94015011090115110581F757
+:10335000F0C0843611F0893659F5560197FE09C040
+:1033600024E0A20EB11CF6016081718182819381FB
+:103370000AC0F2E0AF0EB11CF60160817181072E28
+:10338000000C880B990BF92DFF769F2E97FF09C033
+:1033900090958095709561957F4F8F4F9F4FF06806
+:1033A0009F2E2AE030E0A3012FD4C82EC6183EC0BD
+:1033B000092D853721F40F7E2AE030E01DC0097FFA
+:1033C0008F3691F018F4883559F0BCC0803719F069
+:1033D000883711F0B7C0006104FF09C0046007C05E
+:1033E00094FE08C0066006C028E030E005C020E179
+:1033F00030E002C020E132E0560107FF09C084E05E
+:10340000A80EB11CF601608171818281938108C090
+:10341000F2E0AF0EB11CF6016081718180E090E0B6
+:10342000A301F2D3C82EC6180F77902E96FE0BC0BC
+:10343000092D0E7FC11650F494FE0AC092FC08C0FC
+:10344000092D0E7E05C0DC2C092D03C0DC2C01C02B
+:10345000D12E04FF0DC0FE01EC0DF11D80818033E3
+:1034600011F4097E09C002FF06C0D394D39404C0AE
+:10347000802F867809F0D39403FD10C000FF06C0AA
+:103480001C2DD51478F4150D1D190CC0D51450F44D
+:10349000B70180E290E04AD3D394F8CFD51410F46A
+:1034A0005D1801C0512C04FF0FC0B70180E390E00C
+:1034B0003DD302FF16C001FD03C088E790E002C0C3
+:1034C00088E590E0B7010CC0802F867851F001FFAD
+:1034D00002C08BE201C080E207FD8DE2B70190E0FF
+:1034E00025D3C11630F4B70180E390E01FD311500B
+:1034F000F8CFCA94F301EC0DF11D8081B70190E083
+:1035000015D3C110F6CF15C0F4E0F51550F584E0E1
+:10351000581A93FE1EC0011125C02C8523FF27C019
+:1035200000E910E0392D3071932EF801849181115A
+:1035300021C0552009F4FCCCB70180E290E0F6D21E
+:103540005A94F7CFF7018681978123C08FEF9FEFC1
+:1035500020C0B70180E290E0E9D25A945110F9CF2F
+:10356000DACF512CB701802F90E0E0D2D6CF04E91A
+:1035700010E0D8CF91108052B70190E0D7D20F5F02
+:103580001F4FD3CF23E0251510F483E0C1CF512C7A
+:10359000C4CF6096E2E144C097FB072E16F4009476
+:1035A00006D077FD08D057D007FC05D03EF49095A3
+:1035B00081959F4F0895709561957F4F0895EE0F07
+:1035C000FF1F0590F491E02D0994A29FB001B39FD5
+:1035D000C001A39F700D811D1124911DB29F700D1C
+:1035E000811D1124911D08952F923F924F925F9259
+:1035F0006F927F928F929F92AF92BF92CF92DF9203
+:10360000EF92FF920F931F93CF93DF93CDB7DEB767
+:10361000CA1BDB0B0FB6F894DEBF0FBECDBF0994FB
+:103620002A88398848885F846E847D848C849B8452
+:10363000AA84B984C884DF80EE80FD800C811B8160
+:10364000AA81B981CE0FD11D0FB6F894DEBF0FBE8F
+:10365000CDBFED010895AA1BBB1B51E107C0AA1FF6
+:10366000BB1FA617B70710F0A61BB70B881F991F23
+:103670005A95A9F780959095BC01CD0108950F93B7
+:103680001F93CF93DF93869F8001879F100D969F96
+:10369000100D1124C8010DD0EC01009721F0A801F4
+:1036A00060E070E013D2CE01DF91CF911F910F91B6
+:1036B00008950F931F93CF93DF938230910510F4F9
+:1036C00082E090E0E091AA06F091AB0620E030E0C5
+:1036D000A0E0B0E0309719F140815181028113815F
+:1036E00048175907C8F08417950769F4109731F007
+:1036F00012960C93129713961C9327C00093AA0658
+:103700001093AB0622C02115310519F0421753075B
+:1037100018F49A01BD01EF01DF01F801DBCF21159B
+:103720003105F9F0281B390B2430310580F48A81EA
+:103730009B816115710521F0FB019383828304C095
+:103740009093AB068093AA06FE01329644C0FE0118
+:10375000E20FF31F8193919322503109398328831B
+:103760003AC02091A8063091A906232B41F420915C
+:103770000201309103013093A9062093A8062091FD
+:103780000001309101012115310541F42DB73EB7FB
+:103790004091040150910501241B350BE091A806CE
+:1037A000F091A906E217F307A0F42E1B3F0B281790
+:1037B000390778F0AC014E5F5F4F2417350748F0AA
+:1037C0004E0F5F1F5093A9064093A80681939193D3
+:1037D00002C0E0E0F0E0CF01DF91CF911F910F91A7
+:1037E0000895CF93DF93009709F481C0FC013297CD
+:1037F00013821282A091AA06B091AB06109781F4B1
+:1038000020813181820F931F2091A8063091A90653
+:103810002817390751F5F093A906E093A80667C069
+:10382000ED0120E030E0CE17DF0740F44A815B81F4
+:103830009E0141155105F1F0EA01F5CFD383C28312
+:1038400040815181840F951FC817D90759F4888189
+:103850009981840F951F0296918380838A819B8131
+:10386000938382832115310529F4F093AB06E0930D
+:10387000AA063DC0E901FB83EA8349915991C40F2F
+:10388000D51FEC17FD0761F480819181840F951F8E
+:103890000296E90199838883828193819B838A833D
+:1038A000E0E0F0E012968D919C911397009719F04B
+:1038B000FD01DC01F7CF8D919C9111979D012E5F49
+:1038C0003F4F820F931F2091A8063091A906281719
+:1038D000390769F4309729F41092AB061092AA06C2
+:1038E00002C013821282B093A906A093A806DF91AA
+:1038F000CF910895283008F027E03327DA01990F97
+:10390000311D87FD916000966105710539F43260C3
+:103910002E5F3D9330E32A95E1F708959F3F30F005
+:1039200080387105610509F03C5F3C5F3D93913043
+:1039300008F08068911DDF93CF931F930F93FF9240
+:10394000EF92192F987F9695E92F96959695E90F06
+:10395000FF27EE50FF4F99273327EE24FF24A701BE
+:10396000E70105900894079428F4360FE71EF81E27
+:10397000491F511D660F771F881F991F0694A1F7D5
+:103980000590079428F4E70EF81E491F561FC11D25
+:10399000770F881F991F661F0694A1F7059007945B
+:1039A00028F4F80E491F561FC71FD11D880F991FF5
+:1039B000661F771F0694A1F70590079420F4490F1E
+:1039C000561FC71FD81F990F661F771F881F0694A1
+:1039D000A9F784911095177041F0D695C795579522
+:1039E0004795F794E7941A95C1F7E8E9F0E06894F1
+:1039F0001590159135916591959105907FE273959C
+:103A0000E118F10A430B560BC90BD009C0F7E10CC2
+:103A1000F11E431F561FC91FD01D7EF4703311F4D1
+:103A20008A95E6CFE894015030F0080F0AF4002799
+:103A3000021708F4202F2395022F7A3328F079E318
+:103A40007D932A95E9F710C07D932A9589F606940F
+:103A500097956795379517951794E118F10A430BD9
+:103A6000560BC90BD00998F023957E9173957A3344
+:103A700008F070E37C932013B8F77E9170617D931A
+:103A800030F0839571E37D9370E32A95E1F711247B
+:103A9000EF90FF900F911F91CF91DF91992787FDB4
+:103AA00090950895FC010590615070400110D8F781
+:103AB000809590958E0F9F1F0895FB01DC0102C039
+:103AC00001900D9241505040D8F70895DC0101C09B
+:103AD0006D9341505040E0F70895FB01DC014150E7
+:103AE000504048F001900D920020C9F701C01D928E
+:103AF00041505040E0F70895FC0161507040019042
+:103B00000110D8F7809590958E0F9F1F0895A0E023
+:103B1000B0E0ECE8FDE178CDAE01475F5F4F6F812B
+:103B200078858D819E81DAD9E2E08ACD0F931F934B
+:103B3000CF93DF93FB01238121FD03C08FEF9FEF24
+:103B40002CC022FF16C0468157812481358142173F
+:103B5000530744F4A081B1819D012F5F3F4F318312
+:103B600020838C93268137812F5F3F4F37832683B5
+:103B700014C08B01EC01FB010084F185E02D099557
+:103B8000892BE1F6D80116968D919C911797019695
+:103B900017969C938E931697CE01DF91CF911F912C
+:103BA0000F910895A0E0B0E0E7EDFDE123CD5B01CA
+:103BB0004A017901D90113962C9121FF1DC0C0E063
+:103BC000D0E0C815D905D9F08C016C01CA0CDB1CFA
+:103BD000C8010C151D0571F00F5F1F4FD701189616
+:103BE000ED91FC911997B701DC018C910995892B16
+:103BF00079F305C02196E5CF80E090E001C0CE01C9
+:103C0000CDB7DEB7ECE012CDFA01AA27283051F18A
+:103C1000203181F1E8946F936E7F6E5F7F4F8F4FFD
+:103C20009F4FAF4FB1E03ED0B4E03CD0670F781F5C
+:103C3000891F9A1FA11D680F791F8A1F911DA11D41
+:103C40006A0F711D811D911DA11D20D009F468947A
+:103C50003F912AE0269F11243019305D3193DEF622
+:103C6000CF010895462F4770405D4193B3E00FD0D8
+:103C7000C9F7F6CF462F4F70405D4A3318F0495DC3
+:103C800031FD4052419302D0A9F7EACFB4E0A695A6
+:103C90009795879577956795BA95C9F700976105C8
+:103CA000710508959B01AC010A2E0694579547951E
+:103CB00037952795BA95C9F7620F731F841F951F13
+:083CC000A01D0895F894FFCF48
+:103CC8000000B20620000000000200000000E7002B
+:103CD8000000000000000002000000000B010000CE
+:103CE8000000288200000002000000000B01000014
+:103CF80000004B252E31752050252E327520546D2D
+:103D08003D252E3375202D0043414C49422E205429
+:103D1800633D252E3375202D00CDE5E4EEF1F2E06C
+:103D2800F2EEF7EDFBE920202000F2E5EFEBEEE202
+:103D3800EEE920EAEEEDF2E0EAF2002530342E3228
+:103D4800662D2530342E326620473D2530342E32FC
+:103D58006600493D252E34756D412054633D252E5E
+:103D68003375200056483D2530342E326620446D88
+:103D78003D252E3375202D00564C3D2530342E32EE
+:103D8800662054633D252E3375202D004445464159
+:103D9800554C5400D0D3D7CD2E20CAC0CBC8C1D0E3
+:103DA800CEC2CAC000C7C0D9C8D2C020CFCE20D288
+:103DB800CECAD3212100CDC0C62E0020C4CBDF201F
+:103DC800D1C1D0CED1C0004B252E31752023252E50
+:103DD8003275202054EF3D002D2D2D200054F33D49
+:103DE800252E3375012000CED2CACBDED72E00494E
+:103DF8003D25342E32664100D2ED3D252E33640137
+:103E080000D3CACD2D322030392E30392E32303100
+:103E18003900CDE0E3E0E5E220C0EBE5EAF1E0EDD2
+:103E2800E4F00041A042A1E045A3A4A5A64BA74DFC
+:103E3800484FA8504354A9AA58E1ABACE2ADAE62D2
+:103E4800AFB0B161B2B3B4E365B6B7B8B9BABBBC89
+:103E5800BD6FBE7063BF79E478E5C0C1E6C2C3C474
+:103E6800C5C6C7000E1F1F1F0E000008140800005B
+:103E780000000000040A111111111104041F040AA2
+:103E8800111F04040E0A0A0A0A0E04030A080B0A80
+:103E9800081B0208080402010808080808040402AC
+:103EA8000F0A08D1CED5D0C0CDC5CDC8C52E2E2E6F
+:023EB800000008
+:00000001FF

+ 10084 - 0
heater3/Debug/heater3.lss

@@ -0,0 +1,10084 @@
+
+heater3.elf:     file format elf32-avr
+
+Sections:
+Idx Name          Size      VMA       LMA       File off  Algn
+  0 .data         000001f2  00800100  00003cc8  00003d5c  2**0
+                  CONTENTS, ALLOC, LOAD, DATA
+  1 .text         00003cc8  00000000  00000000  00000094  2**1
+                  CONTENTS, ALLOC, LOAD, READONLY, CODE
+  2 .bss          000003c0  008002f2  008002f2  00003f4e  2**0
+                  ALLOC
+  3 .comment      0000005c  00000000  00000000  00003f4e  2**0
+                  CONTENTS, READONLY
+  4 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00003fac  2**2
+                  CONTENTS, READONLY
+  5 .debug_aranges 000001d8  00000000  00000000  00003fec  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  6 .debug_info   00003ef3  00000000  00000000  000041c4  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  7 .debug_abbrev 00001218  00000000  00000000  000080b7  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  8 .debug_line   00001e26  00000000  00000000  000092cf  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  9 .debug_frame  00000734  00000000  00000000  0000b0f8  2**2
+                  CONTENTS, READONLY, DEBUGGING
+ 10 .debug_str    00000b2d  00000000  00000000  0000b82c  2**0
+                  CONTENTS, READONLY, DEBUGGING
+ 11 .debug_loc    0000349c  00000000  00000000  0000c359  2**0
+                  CONTENTS, READONLY, DEBUGGING
+ 12 .debug_ranges 00000230  00000000  00000000  0000f7f5  2**0
+                  CONTENTS, READONLY, DEBUGGING
+
+Disassembly of section .text:
+
+00000000 <__vectors>:
+       0:	c8 c0       	rjmp	.+400    	; 0x192 <__ctors_end>
+       2:	00 00       	nop
+       4:	54 c1       	rjmp	.+680    	; 0x2ae <__vector_1>
+       6:	00 00       	nop
+       8:	81 c1       	rjmp	.+770    	; 0x30c <__vector_2>
+       a:	00 00       	nop
+       c:	df c0       	rjmp	.+446    	; 0x1cc <__bad_interrupt>
+       e:	00 00       	nop
+      10:	dd c0       	rjmp	.+442    	; 0x1cc <__bad_interrupt>
+      12:	00 00       	nop
+      14:	db c0       	rjmp	.+438    	; 0x1cc <__bad_interrupt>
+      16:	00 00       	nop
+      18:	d9 c0       	rjmp	.+434    	; 0x1cc <__bad_interrupt>
+      1a:	00 00       	nop
+      1c:	2d c1       	rjmp	.+602    	; 0x278 <__vector_7>
+      1e:	00 00       	nop
+      20:	d5 c0       	rjmp	.+426    	; 0x1cc <__bad_interrupt>
+      22:	00 00       	nop
+      24:	d3 c0       	rjmp	.+422    	; 0x1cc <__bad_interrupt>
+      26:	00 00       	nop
+      28:	d1 c0       	rjmp	.+418    	; 0x1cc <__bad_interrupt>
+      2a:	00 00       	nop
+      2c:	cf c0       	rjmp	.+414    	; 0x1cc <__bad_interrupt>
+      2e:	00 00       	nop
+      30:	cd c0       	rjmp	.+410    	; 0x1cc <__bad_interrupt>
+      32:	00 00       	nop
+      34:	f9 c1       	rjmp	.+1010   	; 0x428 <__vector_13>
+      36:	00 00       	nop
+      38:	c9 c0       	rjmp	.+402    	; 0x1cc <__bad_interrupt>
+      3a:	00 00       	nop
+      3c:	c7 c0       	rjmp	.+398    	; 0x1cc <__bad_interrupt>
+      3e:	00 00       	nop
+      40:	e4 c1       	rjmp	.+968    	; 0x40a <__vector_16>
+      42:	00 00       	nop
+      44:	c3 c0       	rjmp	.+390    	; 0x1cc <__bad_interrupt>
+      46:	00 00       	nop
+      48:	c1 c0       	rjmp	.+386    	; 0x1cc <__bad_interrupt>
+      4a:	00 00       	nop
+      4c:	bf c0       	rjmp	.+382    	; 0x1cc <__bad_interrupt>
+      4e:	00 00       	nop
+      50:	8c c1       	rjmp	.+792    	; 0x36a <__vector_20>
+      52:	00 00       	nop
+      54:	a7 c1       	rjmp	.+846    	; 0x3a4 <__vector_21>
+      56:	00 00       	nop
+      58:	b9 c0       	rjmp	.+370    	; 0x1cc <__bad_interrupt>
+      5a:	00 00       	nop
+      5c:	b7 c0       	rjmp	.+366    	; 0x1cc <__bad_interrupt>
+      5e:	00 00       	nop
+      60:	b5 c0       	rjmp	.+362    	; 0x1cc <__bad_interrupt>
+      62:	00 00       	nop
+      64:	b3 c0       	rjmp	.+358    	; 0x1cc <__bad_interrupt>
+      66:	00 00       	nop
+      68:	b1 c0       	rjmp	.+354    	; 0x1cc <__bad_interrupt>
+      6a:	00 00       	nop
+      6c:	af c0       	rjmp	.+350    	; 0x1cc <__bad_interrupt>
+      6e:	00 00       	nop
+      70:	ad c0       	rjmp	.+346    	; 0x1cc <__bad_interrupt>
+      72:	00 00       	nop
+      74:	ab c0       	rjmp	.+342    	; 0x1cc <__bad_interrupt>
+      76:	00 00       	nop
+      78:	a9 c0       	rjmp	.+338    	; 0x1cc <__bad_interrupt>
+      7a:	00 00       	nop
+      7c:	67 0c       	add	r6, r7
+      7e:	68 0c       	add	r6, r8
+      80:	6d 0c       	add	r6, r13
+      82:	20 0c       	add	r2, r0
+      84:	81 0c       	add	r8, r1
+      86:	97 0c       	add	r9, r7
+      88:	be 0c       	add	r11, r14
+      8a:	cc 0c       	add	r12, r12
+      8c:	2e 0c       	add	r2, r14
+      8e:	40 0c       	add	r4, r0
+
+00000090 <__trampolines_end>:
+      90:	6e 61       	ori	r22, 0x1E	; 30
+      92:	6e 00       	.word	0x006e	; ????
+
+00000094 <__c.2332>:
+      94:	69 6e 66 00 00 40 7a 10 f3 5a 00 a0 72 4e 18 09     inf..@z..Z..rN..
+      a4:	00 10 a5 d4 e8 00 00 e8 76 48 17 00 00 e4 0b 54     ........vH.....T
+      b4:	02 00 00 ca 9a 3b 00 00 00 e1 f5 05 00 00 80 96     .....;..........
+      c4:	98 00 00 00 40 42 0f 00 00 00 a0 86 01 00 00 00     ....@B..........
+      d4:	10 27 00 00 00 00 e8 03 00 00 00 00 64 00 00 00     .'..........d...
+      e4:	00 00 0a 00 00 00 00 00 01 00 00 00 00 00 2c 76     ..............,v
+      f4:	d8 88 dc 67 4f 08 23 df c1 df ae 59 e1 b1 b7 96     ...gO.#....Y....
+     104:	e5 e3 e4 53 c6 3a e6 51 99 76 96 e8 e6 c2 84 26     ...S.:.Q.v.....&
+     114:	eb 89 8c 9b 62 ed 40 7c 6f fc ef bc 9c 9f 40 f2     ....b.@|o.....@.
+     124:	ba a5 6f a5 f4 90 05 5a 2a f7 5c 93 6b 6c f9 67     ..o....Z*.\.kl.g
+     134:	6d c1 1b fc e0 e4 0d 47 fe f5 20 e6 b5 00 d0 ed     m......G.. .....
+     144:	90 2e 03 00 94 35 77 05 00 80 84 1e 08 00 00 20     .....5w........ 
+     154:	4e 0a 00 00 00 c8 0c 33 33 33 33 0f 98 6e 12 83     N......3333..n..
+     164:	11 41 ef 8d 21 14 89 3b e6 55 16 cf fe e6 db 18     .A..!..;.U......
+     174:	d1 84 4b 38 1b f7 7c 1d 90 1d a4 bb e4 24 20 32     ..K8..|......$ 2
+     184:	84 72 5e 22 81 00 c9 f1 24 ec a1 e5 3d 27           .r^"....$...='
+
+00000192 <__ctors_end>:
+     192:	11 24       	eor	r1, r1
+     194:	1f be       	out	0x3f, r1	; 63
+     196:	cf ef       	ldi	r28, 0xFF	; 255
+     198:	d0 e1       	ldi	r29, 0x10	; 16
+     19a:	de bf       	out	0x3e, r29	; 62
+     19c:	cd bf       	out	0x3d, r28	; 61
+
+0000019e <__do_copy_data>:
+     19e:	12 e0       	ldi	r17, 0x02	; 2
+     1a0:	a0 e0       	ldi	r26, 0x00	; 0
+     1a2:	b1 e0       	ldi	r27, 0x01	; 1
+     1a4:	e8 ec       	ldi	r30, 0xC8	; 200
+     1a6:	fc e3       	ldi	r31, 0x3C	; 60
+     1a8:	02 c0       	rjmp	.+4      	; 0x1ae <__do_copy_data+0x10>
+     1aa:	05 90       	lpm	r0, Z+
+     1ac:	0d 92       	st	X+, r0
+     1ae:	a2 3f       	cpi	r26, 0xF2	; 242
+     1b0:	b1 07       	cpc	r27, r17
+     1b2:	d9 f7       	brne	.-10     	; 0x1aa <__do_copy_data+0xc>
+
+000001b4 <__do_clear_bss>:
+     1b4:	26 e0       	ldi	r18, 0x06	; 6
+     1b6:	a2 ef       	ldi	r26, 0xF2	; 242
+     1b8:	b2 e0       	ldi	r27, 0x02	; 2
+     1ba:	01 c0       	rjmp	.+2      	; 0x1be <.do_clear_bss_start>
+
+000001bc <.do_clear_bss_loop>:
+     1bc:	1d 92       	st	X+, r1
+
+000001be <.do_clear_bss_start>:
+     1be:	a2 3b       	cpi	r26, 0xB2	; 178
+     1c0:	b2 07       	cpc	r27, r18
+     1c2:	e1 f7       	brne	.-8      	; 0x1bc <.do_clear_bss_loop>
+     1c4:	0e 94 4a 0e 	call	0x1c94	; 0x1c94 <main>
+     1c8:	0c 94 62 1e 	jmp	0x3cc4	; 0x3cc4 <_exit>
+
+000001cc <__bad_interrupt>:
+     1cc:	19 cf       	rjmp	.-462    	; 0x0 <__vectors>
+
+000001ce <uart_putchar>:
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     1ce:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     1d0:	20 91 e8 05 	lds	r18, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     1d4:	30 91 e9 05 	lds	r19, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     1d8:	40 91 e6 05 	lds	r20, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     1dc:	50 91 e7 05 	lds	r21, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     1e0:	b9 01       	movw	r22, r18
+     1e2:	64 1b       	sub	r22, r20
+     1e4:	75 0b       	sbc	r23, r21
+     1e6:	ab 01       	movw	r20, r22
+     1e8:	41 15       	cp	r20, r1
+     1ea:	52 40       	sbci	r21, 0x02	; 2
+     1ec:	81 f0       	breq	.+32     	; 0x20e <uart_putchar+0x40>
+	{
+		FIFO_PUSH(fifo0, c);
+     1ee:	f9 01       	movw	r30, r18
+     1f0:	f1 70       	andi	r31, 0x01	; 1
+     1f2:	ea 51       	subi	r30, 0x1A	; 26
+     1f4:	fc 4f       	sbci	r31, 0xFC	; 252
+     1f6:	80 83       	st	Z, r24
+     1f8:	2f 5f       	subi	r18, 0xFF	; 255
+     1fa:	3f 4f       	sbci	r19, 0xFF	; 255
+     1fc:	30 93 e9 05 	sts	0x05E9, r19	; 0x8005e9 <fifo0+0x203>
+     200:	20 93 e8 05 	sts	0x05E8, r18	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     204:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     208:	80 62       	ori	r24, 0x20	; 32
+     20a:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     20e:	78 94       	sei
+	return 0;
+}
+     210:	80 e0       	ldi	r24, 0x00	; 0
+     212:	90 e0       	ldi	r25, 0x00	; 0
+     214:	08 95       	ret
+
+00000216 <lcd_putchar>:
+	return (heater[ch].current);
+}
+
+int lcd_putchar(char c, FILE *stream)
+{
+	if(c >= 0xC0)
+     216:	80 3c       	cpi	r24, 0xC0	; 192
+     218:	28 f0       	brcs	.+10     	; 0x224 <lcd_putchar+0xe>
+		c = cyrillic[c - 0xC0];
+     21a:	e8 2f       	mov	r30, r24
+     21c:	f0 e0       	ldi	r31, 0x00	; 0
+     21e:	ed 55       	subi	r30, 0x5D	; 93
+     220:	fe 4f       	sbci	r31, 0xFE	; 254
+     222:	80 81       	ld	r24, Z
+	LCD_SendData(c);
+     224:	0e 94 86 12 	call	0x250c	; 0x250c <LCD_SendData>
+	return 0;
+}
+     228:	80 e0       	ldi	r24, 0x00	; 0
+     22a:	90 e0       	ldi	r25, 0x00	; 0
+     22c:	08 95       	ret
+
+0000022e <SwitchHeating.part.0>:
+
+void SwitchHeating(uint8_t ch, uint8_t onoff)
+{
+	if(onoff)
+	{
+		GATEPORT &= ~(1 << (GATE1 + (ch & 0x01)));
+     22e:	68 b1       	in	r22, 0x08	; 8
+     230:	48 2f       	mov	r20, r24
+     232:	41 70       	andi	r20, 0x01	; 1
+     234:	50 e0       	ldi	r21, 0x00	; 0
+     236:	fa 01       	movw	r30, r20
+     238:	36 96       	adiw	r30, 0x06	; 6
+     23a:	21 e0       	ldi	r18, 0x01	; 1
+     23c:	30 e0       	ldi	r19, 0x00	; 0
+     23e:	d9 01       	movw	r26, r18
+     240:	02 c0       	rjmp	.+4      	; 0x246 <SwitchHeating.part.0+0x18>
+     242:	aa 0f       	add	r26, r26
+     244:	bb 1f       	adc	r27, r27
+     246:	ea 95       	dec	r30
+     248:	e2 f7       	brpl	.-8      	; 0x242 <SwitchHeating.part.0+0x14>
+     24a:	9a 2f       	mov	r25, r26
+     24c:	90 95       	com	r25
+     24e:	96 23       	and	r25, r22
+     250:	98 b9       	out	0x08, r25	; 8
+		LEDPORT |= (1 << (LED1 + (ch & 0x01)));
+     252:	98 b1       	in	r25, 0x08	; 8
+     254:	4e 5f       	subi	r20, 0xFE	; 254
+     256:	5f 4f       	sbci	r21, 0xFF	; 255
+     258:	01 c0       	rjmp	.+2      	; 0x25c <SwitchHeating.part.0+0x2e>
+     25a:	22 0f       	add	r18, r18
+     25c:	4a 95       	dec	r20
+     25e:	ea f7       	brpl	.-6      	; 0x25a <SwitchHeating.part.0+0x2c>
+     260:	29 2b       	or	r18, r25
+     262:	28 b9       	out	0x08, r18	; 8
+		heater[ch].status.heating = 1;
+     264:	b3 e1       	ldi	r27, 0x13	; 19
+     266:	8b 9f       	mul	r24, r27
+     268:	f0 01       	movw	r30, r0
+     26a:	11 24       	eor	r1, r1
+     26c:	e0 5e       	subi	r30, 0xE0	; 224
+     26e:	fc 4f       	sbci	r31, 0xFC	; 252
+     270:	80 81       	ld	r24, Z
+     272:	84 60       	ori	r24, 0x04	; 4
+     274:	80 83       	st	Z, r24
+     276:	08 95       	ret
+
+00000278 <__vector_7>:
+static FILE uart_stdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
+
+FIFO(512) fifo0;
+
+ISR(PCINT3_vect)
+{
+     278:	1f 92       	push	r1
+     27a:	0f 92       	push	r0
+     27c:	0f b6       	in	r0, 0x3f	; 63
+     27e:	0f 92       	push	r0
+     280:	11 24       	eor	r1, r1
+     282:	8f 93       	push	r24
+	btn_act = 1;
+     284:	81 e0       	ldi	r24, 0x01	; 1
+     286:	80 93 f7 02 	sts	0x02F7, r24	; 0x8002f7 <btn_act>
+	if(((BTNPIN >> 4) | 0xF0) == 0xF0)
+     28a:	89 b1       	in	r24, 0x09	; 9
+     28c:	82 95       	swap	r24
+     28e:	8f 70       	andi	r24, 0x0F	; 15
+     290:	80 6f       	ori	r24, 0xF0	; 240
+     292:	80 3f       	cpi	r24, 0xF0	; 240
+     294:	31 f4       	brne	.+12     	; 0x2a2 <__vector_7+0x2a>
+	{
+		cli();
+     296:	f8 94       	cli
+		WDTCSR |= (1 << WDCE) | (1 << WDE);
+     298:	80 91 60 00 	lds	r24, 0x0060	; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
+     29c:	88 61       	ori	r24, 0x18	; 24
+     29e:	80 93 60 00 	sts	0x0060, r24	; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
+	}
+}
+     2a2:	8f 91       	pop	r24
+     2a4:	0f 90       	pop	r0
+     2a6:	0f be       	out	0x3f, r0	; 63
+     2a8:	0f 90       	pop	r0
+     2aa:	1f 90       	pop	r1
+     2ac:	18 95       	reti
+
+000002ae <__vector_1>:
+
+ISR(INT0_vect) /*OVERCURRENT PROTECTION 1*/
+{
+     2ae:	1f 92       	push	r1
+     2b0:	0f 92       	push	r0
+     2b2:	0f b6       	in	r0, 0x3f	; 63
+     2b4:	0f 92       	push	r0
+     2b6:	11 24       	eor	r1, r1
+     2b8:	8f 93       	push	r24
+     2ba:	af 93       	push	r26
+     2bc:	bf 93       	push	r27
+     2be:	ef 93       	push	r30
+     2c0:	ff 93       	push	r31
+	cli();
+     2c2:	f8 94       	cli
+	GATEPORT |= (1 << GATE1) | (1 << GATE2);
+     2c4:	88 b1       	in	r24, 0x08	; 8
+     2c6:	80 6c       	ori	r24, 0xC0	; 192
+     2c8:	88 b9       	out	0x08, r24	; 8
+	LEDPORT &= ~((1 << LED1) | (1 << LED2));
+     2ca:	88 b1       	in	r24, 0x08	; 8
+     2cc:	83 7f       	andi	r24, 0xF3	; 243
+     2ce:	88 b9       	out	0x08, r24	; 8
+	PORTC &= ~(1 << V12POWER);
+     2d0:	44 98       	cbi	0x08, 4	; 8
+	heater[0].status.heating = heater[1].status.heating = 0;
+     2d2:	a3 e3       	ldi	r26, 0x33	; 51
+     2d4:	b3 e0       	ldi	r27, 0x03	; 3
+     2d6:	8c 91       	ld	r24, X
+     2d8:	8b 7f       	andi	r24, 0xFB	; 251
+     2da:	8c 93       	st	X, r24
+     2dc:	e0 e2       	ldi	r30, 0x20	; 32
+     2de:	f3 e0       	ldi	r31, 0x03	; 3
+     2e0:	80 81       	ld	r24, Z
+     2e2:	8b 7f       	andi	r24, 0xFB	; 251
+     2e4:	80 83       	st	Z, r24
+	heater[0].status.onoff = heater[1].status.onoff = 0;
+     2e6:	8c 91       	ld	r24, X
+     2e8:	8d 7f       	andi	r24, 0xFD	; 253
+     2ea:	8c 93       	st	X, r24
+     2ec:	80 81       	ld	r24, Z
+     2ee:	8d 7f       	andi	r24, 0xFD	; 253
+     2f0:	80 83       	st	Z, r24
+	heater[0].status.ocp = 1;
+     2f2:	80 81       	ld	r24, Z
+     2f4:	88 60       	ori	r24, 0x08	; 8
+     2f6:	80 83       	st	Z, r24
+}
+     2f8:	ff 91       	pop	r31
+     2fa:	ef 91       	pop	r30
+     2fc:	bf 91       	pop	r27
+     2fe:	af 91       	pop	r26
+     300:	8f 91       	pop	r24
+     302:	0f 90       	pop	r0
+     304:	0f be       	out	0x3f, r0	; 63
+     306:	0f 90       	pop	r0
+     308:	1f 90       	pop	r1
+     30a:	18 95       	reti
+
+0000030c <__vector_2>:
+
+ISR(INT1_vect) /*OVERCURRENT PROTECTION 2*/
+{
+     30c:	1f 92       	push	r1
+     30e:	0f 92       	push	r0
+     310:	0f b6       	in	r0, 0x3f	; 63
+     312:	0f 92       	push	r0
+     314:	11 24       	eor	r1, r1
+     316:	8f 93       	push	r24
+     318:	af 93       	push	r26
+     31a:	bf 93       	push	r27
+     31c:	ef 93       	push	r30
+     31e:	ff 93       	push	r31
+	cli();
+     320:	f8 94       	cli
+	GATEPORT |= (1 << GATE1) | (1 << GATE2);
+     322:	88 b1       	in	r24, 0x08	; 8
+     324:	80 6c       	ori	r24, 0xC0	; 192
+     326:	88 b9       	out	0x08, r24	; 8
+	LEDPORT &= ~((1 << LED1) | (1 << LED2));
+     328:	88 b1       	in	r24, 0x08	; 8
+     32a:	83 7f       	andi	r24, 0xF3	; 243
+     32c:	88 b9       	out	0x08, r24	; 8
+	PORTC &= ~(1 << V12POWER);
+     32e:	44 98       	cbi	0x08, 4	; 8
+	heater[0].status.heating = heater[1].status.heating = 0;
+     330:	e3 e3       	ldi	r30, 0x33	; 51
+     332:	f3 e0       	ldi	r31, 0x03	; 3
+     334:	80 81       	ld	r24, Z
+     336:	8b 7f       	andi	r24, 0xFB	; 251
+     338:	80 83       	st	Z, r24
+     33a:	a0 e2       	ldi	r26, 0x20	; 32
+     33c:	b3 e0       	ldi	r27, 0x03	; 3
+     33e:	8c 91       	ld	r24, X
+     340:	8b 7f       	andi	r24, 0xFB	; 251
+     342:	8c 93       	st	X, r24
+	heater[0].status.onoff = heater[1].status.onoff = 0;
+     344:	80 81       	ld	r24, Z
+     346:	8d 7f       	andi	r24, 0xFD	; 253
+     348:	80 83       	st	Z, r24
+     34a:	8c 91       	ld	r24, X
+     34c:	8d 7f       	andi	r24, 0xFD	; 253
+     34e:	8c 93       	st	X, r24
+	heater[1].status.ocp = 1;
+     350:	80 81       	ld	r24, Z
+     352:	88 60       	ori	r24, 0x08	; 8
+     354:	80 83       	st	Z, r24
+}
+     356:	ff 91       	pop	r31
+     358:	ef 91       	pop	r30
+     35a:	bf 91       	pop	r27
+     35c:	af 91       	pop	r26
+     35e:	8f 91       	pop	r24
+     360:	0f 90       	pop	r0
+     362:	0f be       	out	0x3f, r0	; 63
+     364:	0f 90       	pop	r0
+     366:	1f 90       	pop	r1
+     368:	18 95       	reti
+
+0000036a <__vector_20>:
+
+ISR(USART0_RX_vect)
+{
+     36a:	1f 92       	push	r1
+     36c:	0f 92       	push	r0
+     36e:	0f b6       	in	r0, 0x3f	; 63
+     370:	0f 92       	push	r0
+     372:	11 24       	eor	r1, r1
+     374:	8f 93       	push	r24
+     376:	ef 93       	push	r30
+     378:	ff 93       	push	r31
+	count++;
+     37a:	80 91 f6 02 	lds	r24, 0x02F6	; 0x8002f6 <count>
+     37e:	8f 5f       	subi	r24, 0xFF	; 255
+     380:	80 93 f6 02 	sts	0x02F6, r24	; 0x8002f6 <count>
+	rxbuf[count - 1] = UDR0;
+     384:	e0 91 f6 02 	lds	r30, 0x02F6	; 0x8002f6 <count>
+     388:	f0 e0       	ldi	r31, 0x00	; 0
+     38a:	80 91 c6 00 	lds	r24, 0x00C6	; 0x8000c6 <__TEXT_REGION_LENGTH__+0x7e00c6>
+     38e:	e9 50       	subi	r30, 0x09	; 9
+     390:	fd 4f       	sbci	r31, 0xFD	; 253
+     392:	80 83       	st	Z, r24
+}
+     394:	ff 91       	pop	r31
+     396:	ef 91       	pop	r30
+     398:	8f 91       	pop	r24
+     39a:	0f 90       	pop	r0
+     39c:	0f be       	out	0x3f, r0	; 63
+     39e:	0f 90       	pop	r0
+     3a0:	1f 90       	pop	r1
+     3a2:	18 95       	reti
+
+000003a4 <__vector_21>:
+
+ISR(USART0_UDRE_vect)
+{
+     3a4:	1f 92       	push	r1
+     3a6:	0f 92       	push	r0
+     3a8:	0f b6       	in	r0, 0x3f	; 63
+     3aa:	0f 92       	push	r0
+     3ac:	11 24       	eor	r1, r1
+     3ae:	2f 93       	push	r18
+     3b0:	3f 93       	push	r19
+     3b2:	8f 93       	push	r24
+     3b4:	9f 93       	push	r25
+     3b6:	ef 93       	push	r30
+     3b8:	ff 93       	push	r31
+	if(FIFO_IS_EMPTY(fifo0))
+     3ba:	80 91 e6 05 	lds	r24, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     3be:	90 91 e7 05 	lds	r25, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     3c2:	20 91 e8 05 	lds	r18, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     3c6:	30 91 e9 05 	lds	r19, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     3ca:	82 17       	cp	r24, r18
+     3cc:	93 07       	cpc	r25, r19
+     3ce:	b9 f0       	breq	.+46     	; 0x3fe <__vector_21+0x5a>
+	{
+		UCSR0B &= ~(1 << UDRIE0);
+	}
+	else
+	{
+		UDR0 = FIFO_FRONT(fifo0);
+     3d0:	fc 01       	movw	r30, r24
+     3d2:	f1 70       	andi	r31, 0x01	; 1
+     3d4:	ea 51       	subi	r30, 0x1A	; 26
+     3d6:	fc 4f       	sbci	r31, 0xFC	; 252
+     3d8:	20 81       	ld	r18, Z
+     3da:	20 93 c6 00 	sts	0x00C6, r18	; 0x8000c6 <__TEXT_REGION_LENGTH__+0x7e00c6>
+		FIFO_POP(fifo0);
+     3de:	01 96       	adiw	r24, 0x01	; 1
+     3e0:	90 93 e7 05 	sts	0x05E7, r25	; 0x8005e7 <fifo0+0x201>
+     3e4:	80 93 e6 05 	sts	0x05E6, r24	; 0x8005e6 <fifo0+0x200>
+	}
+}
+     3e8:	ff 91       	pop	r31
+     3ea:	ef 91       	pop	r30
+     3ec:	9f 91       	pop	r25
+     3ee:	8f 91       	pop	r24
+     3f0:	3f 91       	pop	r19
+     3f2:	2f 91       	pop	r18
+     3f4:	0f 90       	pop	r0
+     3f6:	0f be       	out	0x3f, r0	; 63
+     3f8:	0f 90       	pop	r0
+     3fa:	1f 90       	pop	r1
+     3fc:	18 95       	reti
+
+ISR(USART0_UDRE_vect)
+{
+	if(FIFO_IS_EMPTY(fifo0))
+	{
+		UCSR0B &= ~(1 << UDRIE0);
+     3fe:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     402:	8f 7d       	andi	r24, 0xDF	; 223
+     404:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     408:	ef cf       	rjmp	.-34     	; 0x3e8 <__vector_21+0x44>
+
+0000040a <__vector_16>:
+		FIFO_POP(fifo0);
+	}
+}
+
+ISR(TIMER0_COMPA_vect)
+{
+     40a:	1f 92       	push	r1
+     40c:	0f 92       	push	r0
+     40e:	0f b6       	in	r0, 0x3f	; 63
+     410:	0f 92       	push	r0
+     412:	11 24       	eor	r1, r1
+     414:	8f 93       	push	r24
+	tick1 = 1;
+     416:	81 e0       	ldi	r24, 0x01	; 1
+     418:	80 93 f5 02 	sts	0x02F5, r24	; 0x8002f5 <tick1>
+}
+     41c:	8f 91       	pop	r24
+     41e:	0f 90       	pop	r0
+     420:	0f be       	out	0x3f, r0	; 63
+     422:	0f 90       	pop	r0
+     424:	1f 90       	pop	r1
+     426:	18 95       	reti
+
+00000428 <__vector_13>:
+
+ISR(TIMER1_COMPA_vect)
+{
+     428:	1f 92       	push	r1
+     42a:	0f 92       	push	r0
+     42c:	0f b6       	in	r0, 0x3f	; 63
+     42e:	0f 92       	push	r0
+     430:	11 24       	eor	r1, r1
+     432:	8f 93       	push	r24
+	tick2 = 1;
+     434:	81 e0       	ldi	r24, 0x01	; 1
+     436:	80 93 f4 02 	sts	0x02F4, r24	; 0x8002f4 <tick2>
+}
+     43a:	8f 91       	pop	r24
+     43c:	0f 90       	pop	r0
+     43e:	0f be       	out	0x3f, r0	; 63
+     440:	0f 90       	pop	r0
+     442:	1f 90       	pop	r1
+     444:	18 95       	reti
+
+00000446 <init>:
+
+void init()
+{
+	/* Watchdog clear*/
+	MCUSR &= ~(1 << WDRF);
+     446:	84 b7       	in	r24, 0x34	; 52
+     448:	87 7f       	andi	r24, 0xF7	; 247
+     44a:	84 bf       	out	0x34, r24	; 52
+	WDTCSR |= (1 << WDCE) | (1 << WDE);
+     44c:	e0 e6       	ldi	r30, 0x60	; 96
+     44e:	f0 e0       	ldi	r31, 0x00	; 0
+     450:	80 81       	ld	r24, Z
+     452:	88 61       	ori	r24, 0x18	; 24
+     454:	80 83       	st	Z, r24
+	WDTCSR = 0x00;
+     456:	10 82       	st	Z, r1
+	
+	/* External interrupts initialization */
+	EICRA |= (1 << ISC01) | (1 << ISC11);
+     458:	e9 e6       	ldi	r30, 0x69	; 105
+     45a:	f0 e0       	ldi	r31, 0x00	; 0
+     45c:	80 81       	ld	r24, Z
+     45e:	8a 60       	ori	r24, 0x0A	; 10
+     460:	80 83       	st	Z, r24
+	EIMSK |= (1 << INT0) | (1 << INT1);
+     462:	8d b3       	in	r24, 0x1d	; 29
+     464:	83 60       	ori	r24, 0x03	; 3
+     466:	8d bb       	out	0x1d, r24	; 29
+	
+	/* GPIO Initialization */
+	PORTC |= (1 << GATE1) | (1 << GATE2)  | (1 << V12POWER);
+     468:	88 b1       	in	r24, 0x08	; 8
+     46a:	80 6d       	ori	r24, 0xD0	; 208
+     46c:	88 b9       	out	0x08, r24	; 8
+	DDRC  |= (1 << LED1) | (1 << LED2) | (1 << GATE1) | (1 << GATE2) | (1 << V12POWER);
+     46e:	87 b1       	in	r24, 0x07	; 7
+     470:	8c 6d       	ori	r24, 0xDC	; 220
+     472:	87 b9       	out	0x07, r24	; 7
+	
+	/* UART Initialization */
+	TXD_PORT |= (1 << TXD_BIT);
+     474:	59 9a       	sbi	0x0b, 1	; 11
+	TXD_DDR |= (1 << TXD_BIT);
+     476:	51 9a       	sbi	0x0a, 1	; 10
+	#if U2X0_SET
+		UBRR0H = (uint8_t)(((F_CPU / (8 * BAUD_RATE)) - 1) >> 8);
+     478:	10 92 c5 00 	sts	0x00C5, r1	; 0x8000c5 <__TEXT_REGION_LENGTH__+0x7e00c5>
+		UBRR0L = (uint8_t)((F_CPU / (8 * BAUD_RATE)) - 1);
+     47c:	86 e2       	ldi	r24, 0x26	; 38
+     47e:	80 93 c4 00 	sts	0x00C4, r24	; 0x8000c4 <__TEXT_REGION_LENGTH__+0x7e00c4>
+		UCSR0A = (1 << U2X0);
+     482:	82 e0       	ldi	r24, 0x02	; 2
+     484:	80 93 c0 00 	sts	0x00C0, r24	; 0x8000c0 <__TEXT_REGION_LENGTH__+0x7e00c0>
+	#elif
+		UBRR0H = (uint8_t)(((F_CPU / (16 * BAUD_RATE)) - 1) >> 8);
+		UBRR0L = (uint8_t)((F_CPU / (16 * BAUD_RATE)) - 1);
+	#endif
+	UCSR0B = (1 << RXCIE0) | (1 << RXEN0) | (1 << TXEN0);
+     488:	98 e9       	ldi	r25, 0x98	; 152
+     48a:	90 93 c1 00 	sts	0x00C1, r25	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
+     48e:	96 e0       	ldi	r25, 0x06	; 6
+     490:	90 93 c2 00 	sts	0x00C2, r25	; 0x8000c2 <__TEXT_REGION_LENGTH__+0x7e00c2>
+	
+	/* SPI Initialization */
+	DDRB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT) | (7 << PORTB0);
+     494:	94 b1       	in	r25, 0x04	; 4
+     496:	97 6b       	ori	r25, 0xB7	; 183
+     498:	94 b9       	out	0x04, r25	; 4
+	PORTB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT);
+     49a:	95 b1       	in	r25, 0x05	; 5
+     49c:	90 6b       	ori	r25, 0xB0	; 176
+     49e:	95 b9       	out	0x05, r25	; 5
+	SPCR = (1 << SPE) | (1 << MSTR);
+     4a0:	90 e5       	ldi	r25, 0x50	; 80
+     4a2:	9c bd       	out	0x2c, r25	; 44
+	
+	/* TWI Initialization */
+	TWBR = (uint8_t)(((F_CPU / TWI_FREQ) - 16) / 2);
+     4a4:	94 e0       	ldi	r25, 0x04	; 4
+     4a6:	90 93 b8 00 	sts	0x00B8, r25	; 0x8000b8 <__TEXT_REGION_LENGTH__+0x7e00b8>
+	TWCR = (1 << TWEN);
+     4aa:	90 93 bc 00 	sts	0x00BC, r25	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+	
+	/* Timer0 Initialization */
+	TCCR0A = (1 << WGM01);
+     4ae:	84 bd       	out	0x24, r24	; 36
+	OCR0A = 0x80;
+     4b0:	90 e8       	ldi	r25, 0x80	; 128
+     4b2:	97 bd       	out	0x27, r25	; 39
+	TCCR0B = (1 << CS00) | (1 << CS02);
+     4b4:	95 e0       	ldi	r25, 0x05	; 5
+     4b6:	95 bd       	out	0x25, r25	; 37
+	TIMSK0 = (1 << OCIE0A);
+     4b8:	80 93 6e 00 	sts	0x006E, r24	; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
+	
+	/* Timer1 Initialization */
+	TCCR1B = (1 << CS12) | (1 << CS10) | (1 << WGM12);
+     4bc:	9d e0       	ldi	r25, 0x0D	; 13
+     4be:	90 93 81 00 	sts	0x0081, r25	; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
+	OCR1A = 0x400;
+     4c2:	20 e0       	ldi	r18, 0x00	; 0
+     4c4:	34 e0       	ldi	r19, 0x04	; 4
+     4c6:	30 93 89 00 	sts	0x0089, r19	; 0x800089 <__TEXT_REGION_LENGTH__+0x7e0089>
+     4ca:	20 93 88 00 	sts	0x0088, r18	; 0x800088 <__TEXT_REGION_LENGTH__+0x7e0088>
+	TIMSK1 = (1 << OCIE1A);
+     4ce:	80 93 6f 00 	sts	0x006F, r24	; 0x80006f <__TEXT_REGION_LENGTH__+0x7e006f>
+	
+	/* ADC Initialization */
+	ADMUX |= (1 << REFS0) | (1 << REFS1);
+     4d2:	ec e7       	ldi	r30, 0x7C	; 124
+     4d4:	f0 e0       	ldi	r31, 0x00	; 0
+     4d6:	80 81       	ld	r24, Z
+     4d8:	80 6c       	ori	r24, 0xC0	; 192
+     4da:	80 83       	st	Z, r24
+	ADCSRA = (1 << ADEN) | (1 << ADPS0) | (1 << ADPS1);
+     4dc:	83 e8       	ldi	r24, 0x83	; 131
+     4de:	80 93 7a 00 	sts	0x007A, r24	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+	DIDR0 = 0xFF;
+     4e2:	8f ef       	ldi	r24, 0xFF	; 255
+     4e4:	80 93 7e 00 	sts	0x007E, r24	; 0x80007e <__TEXT_REGION_LENGTH__+0x7e007e>
+	
+	PCICR = (1 << PCIE3);
+     4e8:	88 e0       	ldi	r24, 0x08	; 8
+     4ea:	80 93 68 00 	sts	0x0068, r24	; 0x800068 <__TEXT_REGION_LENGTH__+0x7e0068>
+	PCMSK3 = 0xF0;
+     4ee:	80 ef       	ldi	r24, 0xF0	; 240
+     4f0:	80 93 73 00 	sts	0x0073, r24	; 0x800073 <__TEXT_REGION_LENGTH__+0x7e0073>
+     4f4:	08 95       	ret
+
+000004f6 <MAX_ReadData>:
+}
+
+void MAX_ReadData()
+{
+     4f6:	0f 93       	push	r16
+     4f8:	1f 93       	push	r17
+     4fa:	cf 93       	push	r28
+     4fc:	df 93       	push	r29
+     4fe:	00 d0       	rcall	.+0      	; 0x500 <MAX_ReadData+0xa>
+     500:	00 d0       	rcall	.+0      	; 0x502 <MAX_ReadData+0xc>
+     502:	cd b7       	in	r28, 0x3d	; 61
+     504:	de b7       	in	r29, 0x3e	; 62
+	uint8_t i = 0;
+	max31855_t data;
+	btw32_t *dptr = (btw32_t*)&data;
+	PORTB = (PORTB & 0xF8) | MAXADDR;
+     506:	85 b1       	in	r24, 0x05	; 5
+     508:	88 7f       	andi	r24, 0xF8	; 248
+     50a:	86 60       	ori	r24, 0x06	; 6
+     50c:	85 b9       	out	0x05, r24	; 5
+	PORTB &= ~(1 << SS_BIT);
+     50e:	2c 98       	cbi	0x05, 4	; 5
+     510:	fe 01       	movw	r30, r28
+     512:	35 96       	adiw	r30, 0x05	; 5
+     514:	9e 01       	movw	r18, r28
+     516:	2f 5f       	subi	r18, 0xFF	; 255
+     518:	3f 4f       	sbci	r19, 0xFF	; 255
+	for(i = 0; i < 4; i++)
+	{
+		SPDR = 0xFF;
+     51a:	9f ef       	ldi	r25, 0xFF	; 255
+     51c:	9e bd       	out	0x2e, r25	; 46
+		while(!(SPSR & (1 << SPIF)));
+     51e:	0d b4       	in	r0, 0x2d	; 45
+     520:	07 fe       	sbrs	r0, 7
+     522:	fd cf       	rjmp	.-6      	; 0x51e <MAX_ReadData+0x28>
+		dptr->byte[3 - i] = SPDR;
+     524:	8e b5       	in	r24, 0x2e	; 46
+     526:	82 93       	st	-Z, r24
+	uint8_t i = 0;
+	max31855_t data;
+	btw32_t *dptr = (btw32_t*)&data;
+	PORTB = (PORTB & 0xF8) | MAXADDR;
+	PORTB &= ~(1 << SS_BIT);
+	for(i = 0; i < 4; i++)
+     528:	e2 17       	cp	r30, r18
+     52a:	f3 07       	cpc	r31, r19
+     52c:	b9 f7       	brne	.-18     	; 0x51c <MAX_ReadData+0x26>
+	{
+		SPDR = 0xFF;
+		while(!(SPSR & (1 << SPIF)));
+		dptr->byte[3 - i] = SPDR;
+	}
+	PORTB |= (1 << SS_BIT);
+     52e:	2c 9a       	sbi	0x05, 4	; 5
+	
+	heater[CH0].tintr = heater[CH1].tintr = (int8_t)data.intt_int;
+     530:	0a 81       	ldd	r16, Y+2	; 0x02
+     532:	00 93 36 03 	sts	0x0336, r16	; 0x800336 <heater+0x16>
+     536:	00 93 23 03 	sts	0x0323, r16	; 0x800323 <heater+0x3>
+	if(data.intt_frac * (100.0 / 16.0) >= 50)
+     53a:	19 81       	ldd	r17, Y+1	; 0x01
+     53c:	61 2f       	mov	r22, r17
+     53e:	62 95       	swap	r22
+     540:	6f 70       	andi	r22, 0x0F	; 15
+     542:	70 e0       	ldi	r23, 0x00	; 0
+     544:	80 e0       	ldi	r24, 0x00	; 0
+     546:	90 e0       	ldi	r25, 0x00	; 0
+     548:	0e 94 57 16 	call	0x2cae	; 0x2cae <__floatsisf>
+     54c:	20 e0       	ldi	r18, 0x00	; 0
+     54e:	30 e0       	ldi	r19, 0x00	; 0
+     550:	48 ec       	ldi	r20, 0xC8	; 200
+     552:	50 e4       	ldi	r21, 0x40	; 64
+     554:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+     558:	20 e0       	ldi	r18, 0x00	; 0
+     55a:	30 e0       	ldi	r19, 0x00	; 0
+     55c:	48 e4       	ldi	r20, 0x48	; 72
+     55e:	52 e4       	ldi	r21, 0x42	; 66
+     560:	0e 94 07 17 	call	0x2e0e	; 0x2e0e <__gesf2>
+     564:	87 fd       	sbrc	r24, 7
+     566:	03 c0       	rjmp	.+6      	; 0x56e <MAX_ReadData+0x78>
+		heater[CH0].tintr++;
+     568:	0f 5f       	subi	r16, 0xFF	; 255
+     56a:	00 93 23 03 	sts	0x0323, r16	; 0x800323 <heater+0x3>
+	
+	if(data.oc | data.scg | data.scg)
+     56e:	81 2f       	mov	r24, r17
+     570:	81 70       	andi	r24, 0x01	; 1
+     572:	11 fb       	bst	r17, 1
+     574:	99 27       	eor	r25, r25
+     576:	90 f9       	bld	r25, 0
+     578:	89 2b       	or	r24, r25
+     57a:	d9 f5       	brne	.+118    	; 0x5f2 <MAX_ReadData+0xfc>
+		heater[CH0].status.couple = heater[CH1].status.couple = dptr->byte[0] & 0x07;
+		heater[CH0].tcouple = heater[CH1].tcouple = 0;
+	}
+	else
+	{
+		heater[CH0].status.couple = heater[CH1].status.couple = 0;
+     57c:	80 91 34 03 	lds	r24, 0x0334	; 0x800334 <heater+0x14>
+     580:	81 7f       	andi	r24, 0xF1	; 241
+     582:	80 93 34 03 	sts	0x0334, r24	; 0x800334 <heater+0x14>
+     586:	80 91 21 03 	lds	r24, 0x0321	; 0x800321 <heater+0x1>
+     58a:	81 7f       	andi	r24, 0xF1	; 241
+     58c:	80 93 21 03 	sts	0x0321, r24	; 0x800321 <heater+0x1>
+		heater[CH0].tcouple = heater[CH1].tcouple = ((int16_t)data.tct_int ^ 0x0800) - 0x0800;
+     590:	8b 81       	ldd	r24, Y+3	; 0x03
+     592:	48 2f       	mov	r20, r24
+     594:	42 95       	swap	r20
+     596:	4f 70       	andi	r20, 0x0F	; 15
+     598:	9c 81       	ldd	r25, Y+4	; 0x04
+     59a:	59 2f       	mov	r21, r25
+     59c:	52 95       	swap	r21
+     59e:	50 7f       	andi	r21, 0xF0	; 240
+     5a0:	25 2f       	mov	r18, r21
+     5a2:	24 2b       	or	r18, r20
+     5a4:	39 2f       	mov	r19, r25
+     5a6:	32 95       	swap	r19
+     5a8:	3f 70       	andi	r19, 0x0F	; 15
+     5aa:	48 e0       	ldi	r20, 0x08	; 8
+     5ac:	34 27       	eor	r19, r20
+     5ae:	a9 01       	movw	r20, r18
+     5b0:	58 50       	subi	r21, 0x08	; 8
+     5b2:	50 93 38 03 	sts	0x0338, r21	; 0x800338 <heater+0x18>
+     5b6:	40 93 37 03 	sts	0x0337, r20	; 0x800337 <heater+0x17>
+     5ba:	50 93 25 03 	sts	0x0325, r21	; 0x800325 <heater+0x5>
+     5be:	40 93 24 03 	sts	0x0324, r20	; 0x800324 <heater+0x4>
+		if((data.tct_frac * (100 / 4)) >= 50)
+     5c2:	86 95       	lsr	r24
+     5c4:	86 95       	lsr	r24
+     5c6:	83 70       	andi	r24, 0x03	; 3
+     5c8:	49 e1       	ldi	r20, 0x19	; 25
+     5ca:	84 9f       	mul	r24, r20
+     5cc:	c0 01       	movw	r24, r0
+     5ce:	11 24       	eor	r1, r1
+     5d0:	c2 97       	sbiw	r24, 0x32	; 50
+     5d2:	34 f0       	brlt	.+12     	; 0x5e0 <MAX_ReadData+0xea>
+			heater[CH0].tcouple = heater[CH1].tcouple++;
+     5d4:	2f 5f       	subi	r18, 0xFF	; 255
+     5d6:	37 40       	sbci	r19, 0x07	; 7
+     5d8:	30 93 38 03 	sts	0x0338, r19	; 0x800338 <heater+0x18>
+     5dc:	20 93 37 03 	sts	0x0337, r18	; 0x800337 <heater+0x17>
+	}
+}
+     5e0:	0f 90       	pop	r0
+     5e2:	0f 90       	pop	r0
+     5e4:	0f 90       	pop	r0
+     5e6:	0f 90       	pop	r0
+     5e8:	df 91       	pop	r29
+     5ea:	cf 91       	pop	r28
+     5ec:	1f 91       	pop	r17
+     5ee:	0f 91       	pop	r16
+     5f0:	08 95       	ret
+	if(data.intt_frac * (100.0 / 16.0) >= 50)
+		heater[CH0].tintr++;
+	
+	if(data.oc | data.scg | data.scg)
+	{
+		heater[CH0].status.couple = heater[CH1].status.couple = dptr->byte[0] & 0x07;
+     5f2:	17 70       	andi	r17, 0x07	; 7
+     5f4:	11 0f       	add	r17, r17
+     5f6:	80 91 34 03 	lds	r24, 0x0334	; 0x800334 <heater+0x14>
+     5fa:	81 7f       	andi	r24, 0xF1	; 241
+     5fc:	81 2b       	or	r24, r17
+     5fe:	80 93 34 03 	sts	0x0334, r24	; 0x800334 <heater+0x14>
+     602:	80 91 21 03 	lds	r24, 0x0321	; 0x800321 <heater+0x1>
+     606:	81 7f       	andi	r24, 0xF1	; 241
+     608:	18 2b       	or	r17, r24
+     60a:	10 93 21 03 	sts	0x0321, r17	; 0x800321 <heater+0x1>
+		heater[CH0].tcouple = heater[CH1].tcouple = 0;
+     60e:	10 92 38 03 	sts	0x0338, r1	; 0x800338 <heater+0x18>
+     612:	10 92 37 03 	sts	0x0337, r1	; 0x800337 <heater+0x17>
+     616:	10 92 25 03 	sts	0x0325, r1	; 0x800325 <heater+0x5>
+     61a:	10 92 24 03 	sts	0x0324, r1	; 0x800324 <heater+0x4>
+     61e:	e0 cf       	rjmp	.-64     	; 0x5e0 <MAX_ReadData+0xea>
+
+00000620 <CalculateTemp>:
+			heater[CH0].tcouple = heater[CH1].tcouple++;
+	}
+}
+
+int16_t CalculateTemp(uint16_t data, uint8_t ch)
+{
+     620:	2f 92       	push	r2
+     622:	3f 92       	push	r3
+     624:	4f 92       	push	r4
+     626:	5f 92       	push	r5
+     628:	6f 92       	push	r6
+     62a:	7f 92       	push	r7
+     62c:	8f 92       	push	r8
+     62e:	9f 92       	push	r9
+     630:	af 92       	push	r10
+     632:	bf 92       	push	r11
+     634:	cf 92       	push	r12
+     636:	df 92       	push	r13
+     638:	ef 92       	push	r14
+     63a:	ff 92       	push	r15
+     63c:	0f 93       	push	r16
+     63e:	1f 93       	push	r17
+     640:	cf 93       	push	r28
+     642:	df 93       	push	r29
+	if(data > preset[ch].curve[0].adcdata)
+     644:	26 2f       	mov	r18, r22
+     646:	30 e0       	ldi	r19, 0x00	; 0
+     648:	40 e5       	ldi	r20, 0x50	; 80
+     64a:	64 9f       	mul	r22, r20
+     64c:	f0 01       	movw	r30, r0
+     64e:	11 24       	eor	r1, r1
+     650:	ea 5b       	subi	r30, 0xBA	; 186
+     652:	fc 4f       	sbci	r31, 0xFC	; 252
+     654:	02 89       	ldd	r16, Z+18	; 0x12
+     656:	13 89       	ldd	r17, Z+19	; 0x13
+     658:	08 17       	cp	r16, r24
+     65a:	19 07       	cpc	r17, r25
+     65c:	80 f1       	brcs	.+96     	; 0x6be <CalculateTemp+0x9e>
+		return 0;
+		
+	if(data < preset[ch].curve[15].adcdata)
+     65e:	e2 5b       	subi	r30, 0xB2	; 178
+     660:	ff 4f       	sbci	r31, 0xFF	; 255
+     662:	40 81       	ld	r20, Z
+     664:	51 81       	ldd	r21, Z+1	; 0x01
+     666:	84 17       	cp	r24, r20
+     668:	95 07       	cpc	r25, r21
+     66a:	a8 f4       	brcc	.+42     	; 0x696 <CalculateTemp+0x76>
+		return 150;
+     66c:	86 e9       	ldi	r24, 0x96	; 150
+     66e:	90 e0       	ldi	r25, 0x00	; 0
+			return Approx(preset[ch].curve[i - 1].adcdata, preset[ch].curve[i].adcdata,
+					preset[ch].curve[i - 1].temp, preset[ch].curve[i].temp, data);
+		}
+	}
+	return (-1);
+}
+     670:	df 91       	pop	r29
+     672:	cf 91       	pop	r28
+     674:	1f 91       	pop	r17
+     676:	0f 91       	pop	r16
+     678:	ff 90       	pop	r15
+     67a:	ef 90       	pop	r14
+     67c:	df 90       	pop	r13
+     67e:	cf 90       	pop	r12
+     680:	bf 90       	pop	r11
+     682:	af 90       	pop	r10
+     684:	9f 90       	pop	r9
+     686:	8f 90       	pop	r8
+     688:	7f 90       	pop	r7
+     68a:	6f 90       	pop	r6
+     68c:	5f 90       	pop	r5
+     68e:	4f 90       	pop	r4
+     690:	3f 90       	pop	r3
+     692:	2f 90       	pop	r2
+     694:	08 95       	ret
+     696:	40 e5       	ldi	r20, 0x50	; 80
+     698:	64 9f       	mul	r22, r20
+     69a:	f0 01       	movw	r30, r0
+     69c:	11 24       	eor	r1, r1
+     69e:	e4 5a       	subi	r30, 0xA4	; 164
+     6a0:	fc 4f       	sbci	r31, 0xFC	; 252
+int16_t CalculateTemp(uint16_t data, uint8_t ch)
+{
+	if(data > preset[ch].curve[0].adcdata)
+		return 0;
+		
+	if(data < preset[ch].curve[15].adcdata)
+     6a2:	c0 e0       	ldi	r28, 0x00	; 0
+     6a4:	03 c0       	rjmp	.+6      	; 0x6ac <CalculateTemp+0x8c>
+     6a6:	00 81       	ld	r16, Z
+     6a8:	11 81       	ldd	r17, Z+1	; 0x01
+     6aa:	34 96       	adiw	r30, 0x04	; 4
+		return 150;
+	
+	for(uint8_t i = 0; i < 16; i++)
+	{
+		if(data >= preset[ch].curve[i].adcdata)
+     6ac:	80 17       	cp	r24, r16
+     6ae:	91 07       	cpc	r25, r17
+     6b0:	48 f4       	brcc	.+18     	; 0x6c4 <CalculateTemp+0xa4>
+		return 0;
+		
+	if(data < preset[ch].curve[15].adcdata)
+		return 150;
+	
+	for(uint8_t i = 0; i < 16; i++)
+     6b2:	cf 5f       	subi	r28, 0xFF	; 255
+     6b4:	c0 31       	cpi	r28, 0x10	; 16
+     6b6:	b9 f7       	brne	.-18     	; 0x6a6 <CalculateTemp+0x86>
+		{
+			return Approx(preset[ch].curve[i - 1].adcdata, preset[ch].curve[i].adcdata,
+					preset[ch].curve[i - 1].temp, preset[ch].curve[i].temp, data);
+		}
+	}
+	return (-1);
+     6b8:	8f ef       	ldi	r24, 0xFF	; 255
+     6ba:	9f ef       	ldi	r25, 0xFF	; 255
+     6bc:	d9 cf       	rjmp	.-78     	; 0x670 <CalculateTemp+0x50>
+}
+
+int16_t CalculateTemp(uint16_t data, uint8_t ch)
+{
+	if(data > preset[ch].curve[0].adcdata)
+		return 0;
+     6be:	80 e0       	ldi	r24, 0x00	; 0
+     6c0:	90 e0       	ldi	r25, 0x00	; 0
+     6c2:	d6 cf       	rjmp	.-84     	; 0x670 <CalculateTemp+0x50>
+     6c4:	1c 01       	movw	r2, r24
+	if(data < preset[ch].curve[15].adcdata)
+		return 150;
+	
+	for(uint8_t i = 0; i < 16; i++)
+	{
+		if(data >= preset[ch].curve[i].adcdata)
+     6c6:	d0 e0       	ldi	r29, 0x00	; 0
+		{
+			return Approx(preset[ch].curve[i - 1].adcdata, preset[ch].curve[i].adcdata,
+					preset[ch].curve[i - 1].temp, preset[ch].curve[i].temp, data);
+     6c8:	7e 01       	movw	r14, r28
+     6ca:	81 e0       	ldi	r24, 0x01	; 1
+     6cc:	e8 1a       	sub	r14, r24
+     6ce:	f1 08       	sbc	r15, r1
+     6d0:	84 e1       	ldi	r24, 0x14	; 20
+     6d2:	82 9f       	mul	r24, r18
+     6d4:	60 01       	movw	r12, r0
+     6d6:	83 9f       	mul	r24, r19
+     6d8:	d0 0c       	add	r13, r0
+     6da:	11 24       	eor	r1, r1
+     6dc:	ec 0c       	add	r14, r12
+     6de:	fd 1c       	adc	r15, r13
+     6e0:	f7 01       	movw	r30, r14
+     6e2:	ee 0f       	add	r30, r30
+     6e4:	ff 1f       	adc	r31, r31
+     6e6:	ee 0f       	add	r30, r30
+     6e8:	ff 1f       	adc	r31, r31
+     6ea:	ea 5a       	subi	r30, 0xAA	; 170
+     6ec:	fc 4f       	sbci	r31, 0xFC	; 252
+	
+	for(uint8_t i = 0; i < 16; i++)
+	{
+		if(data >= preset[ch].curve[i].adcdata)
+		{
+			return Approx(preset[ch].curve[i - 1].adcdata, preset[ch].curve[i].adcdata,
+     6ee:	60 81       	ld	r22, Z
+     6f0:	71 81       	ldd	r23, Z+1	; 0x01
+     6f2:	80 e0       	ldi	r24, 0x00	; 0
+     6f4:	90 e0       	ldi	r25, 0x00	; 0
+     6f6:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     6fa:	4b 01       	movw	r8, r22
+     6fc:	5c 01       	movw	r10, r24
+     6fe:	f7 01       	movw	r30, r14
+     700:	ee 0f       	add	r30, r30
+     702:	ff 1f       	adc	r31, r31
+     704:	ee 0f       	add	r30, r30
+     706:	ff 1f       	adc	r31, r31
+     708:	ea 5b       	subi	r30, 0xBA	; 186
+     70a:	fc 4f       	sbci	r31, 0xFC	; 252
+     70c:	62 89       	ldd	r22, Z+18	; 0x12
+     70e:	73 89       	ldd	r23, Z+19	; 0x13
+     710:	80 e0       	ldi	r24, 0x00	; 0
+     712:	90 e0       	ldi	r25, 0x00	; 0
+     714:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     718:	2b 01       	movw	r4, r22
+     71a:	3c 01       	movw	r6, r24
+					preset[ch].curve[i - 1].temp, preset[ch].curve[i].temp, data);
+     71c:	cc 0d       	add	r28, r12
+     71e:	dd 1d       	adc	r29, r13
+     720:	cc 0f       	add	r28, r28
+     722:	dd 1f       	adc	r29, r29
+     724:	cc 0f       	add	r28, r28
+     726:	dd 1f       	adc	r29, r29
+     728:	ca 5a       	subi	r28, 0xAA	; 170
+     72a:	dc 4f       	sbci	r29, 0xFC	; 252
+	
+	for(uint8_t i = 0; i < 16; i++)
+	{
+		if(data >= preset[ch].curve[i].adcdata)
+		{
+			return Approx(preset[ch].curve[i - 1].adcdata, preset[ch].curve[i].adcdata,
+     72c:	68 81       	ld	r22, Y
+     72e:	79 81       	ldd	r23, Y+1	; 0x01
+     730:	80 e0       	ldi	r24, 0x00	; 0
+     732:	90 e0       	ldi	r25, 0x00	; 0
+     734:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     738:	a5 01       	movw	r20, r10
+     73a:	94 01       	movw	r18, r8
+     73c:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+     740:	6b 01       	movw	r12, r22
+     742:	7c 01       	movw	r14, r24
+     744:	b1 01       	movw	r22, r2
+     746:	80 e0       	ldi	r24, 0x00	; 0
+     748:	90 e0       	ldi	r25, 0x00	; 0
+     74a:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     74e:	a3 01       	movw	r20, r6
+     750:	92 01       	movw	r18, r4
+     752:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+     756:	9b 01       	movw	r18, r22
+     758:	ac 01       	movw	r20, r24
+     75a:	c7 01       	movw	r24, r14
+     75c:	b6 01       	movw	r22, r12
+     75e:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+     762:	6b 01       	movw	r12, r22
+     764:	7c 01       	movw	r14, r24
+     766:	b8 01       	movw	r22, r16
+     768:	80 e0       	ldi	r24, 0x00	; 0
+     76a:	90 e0       	ldi	r25, 0x00	; 0
+     76c:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     770:	a3 01       	movw	r20, r6
+     772:	92 01       	movw	r18, r4
+     774:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+     778:	9b 01       	movw	r18, r22
+     77a:	ac 01       	movw	r20, r24
+     77c:	c7 01       	movw	r24, r14
+     77e:	b6 01       	movw	r22, r12
+     780:	0e 94 bc 15 	call	0x2b78	; 0x2b78 <__divsf3>
+     784:	a5 01       	movw	r20, r10
+     786:	94 01       	movw	r18, r8
+     788:	0e 94 54 15 	call	0x2aa8	; 0x2aa8 <__addsf3>
+     78c:	0e 94 24 16 	call	0x2c48	; 0x2c48 <__fixsfsi>
+     790:	cb 01       	movw	r24, r22
+     792:	6e cf       	rjmp	.-292    	; 0x670 <CalculateTemp+0x50>
+
+00000794 <TMeasure>:
+	}
+	return (-1);
+}
+
+int16_t TMeasure(uint8_t ch)
+{
+     794:	cf 93       	push	r28
+     796:	df 93       	push	r29
+     798:	e8 2f       	mov	r30, r24
+	uint16_t addata = 0;
+	uint16_t avg_data = 0;
+	uint8_t i = 0;
+	
+	ADMUX = (ADMUX & 0xF8) | (ch & 0x01);
+     79a:	80 91 7c 00 	lds	r24, 0x007C	; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
+     79e:	98 2f       	mov	r25, r24
+     7a0:	98 7f       	andi	r25, 0xF8	; 248
+     7a2:	8e 2f       	mov	r24, r30
+     7a4:	81 70       	andi	r24, 0x01	; 1
+     7a6:	89 2b       	or	r24, r25
+     7a8:	80 93 7c 00 	sts	0x007C, r24	; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     7ac:	8b e2       	ldi	r24, 0x2B	; 43
+     7ae:	91 e0       	ldi	r25, 0x01	; 1
+     7b0:	01 97       	sbiw	r24, 0x01	; 1
+     7b2:	f1 f7       	brne	.-4      	; 0x7b0 <TMeasure+0x1c>
+     7b4:	00 c0       	rjmp	.+0      	; 0x7b6 <TMeasure+0x22>
+     7b6:	00 00       	nop
+     7b8:	3a e0       	ldi	r19, 0x0A	; 10
+	_delay_us(100);
+	avg_data = 0;
+     7ba:	40 e0       	ldi	r20, 0x00	; 0
+     7bc:	50 e0       	ldi	r21, 0x00	; 0
+	for(i = 0; i < 10; i++)
+	{
+		ADCSRA |= (1 << ADSC);
+     7be:	80 91 7a 00 	lds	r24, 0x007A	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+     7c2:	80 64       	ori	r24, 0x40	; 64
+     7c4:	80 93 7a 00 	sts	0x007A, r24	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+		while(!(ADCSRA & (1 << ADIF)));
+     7c8:	80 91 7a 00 	lds	r24, 0x007A	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+     7cc:	84 ff       	sbrs	r24, 4
+     7ce:	fc cf       	rjmp	.-8      	; 0x7c8 <TMeasure+0x34>
+		addata = ADCL;
+     7d0:	80 91 78 00 	lds	r24, 0x0078	; 0x800078 <__TEXT_REGION_LENGTH__+0x7e0078>
+		addata |= ((uint16_t)ADCH) << 8;
+     7d4:	20 91 79 00 	lds	r18, 0x0079	; 0x800079 <__TEXT_REGION_LENGTH__+0x7e0079>
+		avg_data += addata;
+     7d8:	90 e0       	ldi	r25, 0x00	; 0
+     7da:	92 2b       	or	r25, r18
+     7dc:	48 0f       	add	r20, r24
+     7de:	59 1f       	adc	r21, r25
+     7e0:	31 50       	subi	r19, 0x01	; 1
+	uint8_t i = 0;
+	
+	ADMUX = (ADMUX & 0xF8) | (ch & 0x01);
+	_delay_us(100);
+	avg_data = 0;
+	for(i = 0; i < 10; i++)
+     7e2:	69 f7       	brne	.-38     	; 0x7be <TMeasure+0x2a>
+		while(!(ADCSRA & (1 << ADIF)));
+		addata = ADCL;
+		addata |= ((uint16_t)ADCH) << 8;
+		avg_data += addata;
+	}
+	addata = avg_data / 10;
+     7e4:	9a 01       	movw	r18, r20
+     7e6:	ad ec       	ldi	r26, 0xCD	; 205
+     7e8:	bc ec       	ldi	r27, 0xCC	; 204
+     7ea:	0e 94 e5 1a 	call	0x35ca	; 0x35ca <__umulhisi3>
+     7ee:	96 95       	lsr	r25
+     7f0:	87 95       	ror	r24
+     7f2:	96 95       	lsr	r25
+     7f4:	87 95       	ror	r24
+     7f6:	96 95       	lsr	r25
+     7f8:	87 95       	ror	r24
+	heater[ch].tmeas_raw = addata;
+     7fa:	23 e1       	ldi	r18, 0x13	; 19
+     7fc:	e2 9f       	mul	r30, r18
+     7fe:	e0 01       	movw	r28, r0
+     800:	11 24       	eor	r1, r1
+     802:	c0 5e       	subi	r28, 0xE0	; 224
+     804:	dc 4f       	sbci	r29, 0xFC	; 252
+     806:	99 87       	std	Y+9, r25	; 0x09
+     808:	88 87       	std	Y+8, r24	; 0x08
+	heater[ch].tmeas = CalculateTemp(addata, ch);
+     80a:	6e 2f       	mov	r22, r30
+     80c:	09 df       	rcall	.-494    	; 0x620 <CalculateTemp>
+     80e:	9f 83       	std	Y+7, r25	; 0x07
+     810:	8e 83       	std	Y+6, r24	; 0x06
+	return (heater[ch].tmeas);
+}
+     812:	df 91       	pop	r29
+     814:	cf 91       	pop	r28
+     816:	08 95       	ret
+
+00000818 <CurrMeasure>:
+
+uint16_t CurrMeasure(uint8_t ch)
+{
+     818:	cf 93       	push	r28
+     81a:	c8 2f       	mov	r28, r24
+	uint16_t addata = 0;
+	
+	ADMUX = (ADMUX & 0xF8) | (ADC_CUR1 + (ch & 0x01));
+     81c:	80 91 7c 00 	lds	r24, 0x007C	; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
+     820:	9c 2f       	mov	r25, r28
+     822:	91 70       	andi	r25, 0x01	; 1
+     824:	9e 5f       	subi	r25, 0xFE	; 254
+     826:	88 7f       	andi	r24, 0xF8	; 248
+     828:	89 2b       	or	r24, r25
+     82a:	80 93 7c 00 	sts	0x007C, r24	; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
+     82e:	8b e2       	ldi	r24, 0x2B	; 43
+     830:	91 e0       	ldi	r25, 0x01	; 1
+     832:	01 97       	sbiw	r24, 0x01	; 1
+     834:	f1 f7       	brne	.-4      	; 0x832 <CurrMeasure+0x1a>
+     836:	00 c0       	rjmp	.+0      	; 0x838 <CurrMeasure+0x20>
+     838:	00 00       	nop
+	_delay_us(100);
+	ADCSRA |= (1 << ADSC);
+     83a:	80 91 7a 00 	lds	r24, 0x007A	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+     83e:	80 64       	ori	r24, 0x40	; 64
+     840:	80 93 7a 00 	sts	0x007A, r24	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+	while(!(ADCSRA & (1 << ADIF)));
+     844:	80 91 7a 00 	lds	r24, 0x007A	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+     848:	84 ff       	sbrs	r24, 4
+     84a:	fc cf       	rjmp	.-8      	; 0x844 <CurrMeasure+0x2c>
+	addata = ADCL;
+     84c:	60 91 78 00 	lds	r22, 0x0078	; 0x800078 <__TEXT_REGION_LENGTH__+0x7e0078>
+	addata |= ((uint16_t)ADCH) << 8;
+     850:	80 91 79 00 	lds	r24, 0x0079	; 0x800079 <__TEXT_REGION_LENGTH__+0x7e0079>
+	heater[ch].current = ((float)addata * 2.4);
+     854:	70 e0       	ldi	r23, 0x00	; 0
+     856:	78 2b       	or	r23, r24
+     858:	80 e0       	ldi	r24, 0x00	; 0
+     85a:	90 e0       	ldi	r25, 0x00	; 0
+     85c:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     860:	2a e9       	ldi	r18, 0x9A	; 154
+     862:	39 e9       	ldi	r19, 0x99	; 153
+     864:	49 e1       	ldi	r20, 0x19	; 25
+     866:	50 e4       	ldi	r21, 0x40	; 64
+     868:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+     86c:	0e 94 29 16 	call	0x2c52	; 0x2c52 <__fixunssfsi>
+     870:	23 e1       	ldi	r18, 0x13	; 19
+     872:	c2 9f       	mul	r28, r18
+     874:	f0 01       	movw	r30, r0
+     876:	11 24       	eor	r1, r1
+     878:	e0 5e       	subi	r30, 0xE0	; 224
+     87a:	fc 4f       	sbci	r31, 0xFC	; 252
+     87c:	77 87       	std	Z+15, r23	; 0x0f
+     87e:	66 87       	std	Z+14, r22	; 0x0e
+	return (heater[ch].current);
+}
+     880:	cb 01       	movw	r24, r22
+     882:	cf 91       	pop	r28
+     884:	08 95       	ret
+
+00000886 <TransmitPresets>:
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     886:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     888:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     88c:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     890:	20 91 e6 05 	lds	r18, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     894:	30 91 e7 05 	lds	r19, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     898:	ac 01       	movw	r20, r24
+     89a:	42 1b       	sub	r20, r18
+     89c:	53 0b       	sbc	r21, r19
+     89e:	9a 01       	movw	r18, r20
+     8a0:	21 15       	cp	r18, r1
+     8a2:	32 40       	sbci	r19, 0x02	; 2
+     8a4:	81 f0       	breq	.+32     	; 0x8c6 <TransmitPresets+0x40>
+	{
+		FIFO_PUSH(fifo0, c);
+     8a6:	fc 01       	movw	r30, r24
+     8a8:	f1 70       	andi	r31, 0x01	; 1
+     8aa:	ea 51       	subi	r30, 0x1A	; 26
+     8ac:	fc 4f       	sbci	r31, 0xFC	; 252
+     8ae:	25 e5       	ldi	r18, 0x55	; 85
+     8b0:	20 83       	st	Z, r18
+     8b2:	01 96       	adiw	r24, 0x01	; 1
+     8b4:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     8b8:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     8bc:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     8c0:	80 62       	ori	r24, 0x20	; 32
+     8c2:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     8c6:	78 94       	sei
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     8c8:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     8ca:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     8ce:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     8d2:	20 91 e6 05 	lds	r18, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     8d6:	30 91 e7 05 	lds	r19, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     8da:	bc 01       	movw	r22, r24
+     8dc:	62 1b       	sub	r22, r18
+     8de:	73 0b       	sbc	r23, r19
+     8e0:	9b 01       	movw	r18, r22
+     8e2:	21 15       	cp	r18, r1
+     8e4:	32 40       	sbci	r19, 0x02	; 2
+     8e6:	81 f0       	breq	.+32     	; 0x908 <TransmitPresets+0x82>
+	{
+		FIFO_PUSH(fifo0, c);
+     8e8:	fc 01       	movw	r30, r24
+     8ea:	f1 70       	andi	r31, 0x01	; 1
+     8ec:	ea 51       	subi	r30, 0x1A	; 26
+     8ee:	fc 4f       	sbci	r31, 0xFC	; 252
+     8f0:	25 e4       	ldi	r18, 0x45	; 69
+     8f2:	20 83       	st	Z, r18
+     8f4:	01 96       	adiw	r24, 0x01	; 1
+     8f6:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     8fa:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     8fe:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     902:	80 62       	ori	r24, 0x20	; 32
+     904:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     908:	78 94       	sei
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     90a:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     90c:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     910:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     914:	20 91 e6 05 	lds	r18, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     918:	30 91 e7 05 	lds	r19, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     91c:	fc 01       	movw	r30, r24
+     91e:	e2 1b       	sub	r30, r18
+     920:	f3 0b       	sbc	r31, r19
+     922:	9f 01       	movw	r18, r30
+     924:	21 15       	cp	r18, r1
+     926:	32 40       	sbci	r19, 0x02	; 2
+     928:	81 f0       	breq	.+32     	; 0x94a <TransmitPresets+0xc4>
+	{
+		FIFO_PUSH(fifo0, c);
+     92a:	fc 01       	movw	r30, r24
+     92c:	f1 70       	andi	r31, 0x01	; 1
+     92e:	ea 51       	subi	r30, 0x1A	; 26
+     930:	fc 4f       	sbci	r31, 0xFC	; 252
+     932:	25 e8       	ldi	r18, 0x85	; 133
+     934:	20 83       	st	Z, r18
+     936:	01 96       	adiw	r24, 0x01	; 1
+     938:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     93c:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     940:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     944:	80 62       	ori	r24, 0x20	; 32
+     946:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     94a:	78 94       	sei
+     94c:	ad e3       	ldi	r26, 0x3D	; 61
+     94e:	b0 e0       	ldi	r27, 0x00	; 0
+	return 0;
+}
+
+void TransmitPresets()
+{
+	uint8_t checksum = 0x1F;
+     950:	5f e1       	ldi	r21, 0x1F	; 31
+     952:	9d 01       	movw	r18, r26
+     954:	2d 50       	subi	r18, 0x0D	; 13
+     956:	31 09       	sbc	r19, r1
+	
+	for(uint8_t pn = 0; pn < 25; pn++)
+	{
+		for(uint8_t offs = 0; offs < 13; offs++)
+		{
+			EEAR = 0x30 + (pn * sizeof(preset_str)) + offs;
+     958:	32 bd       	out	0x22, r19	; 34
+     95a:	21 bd       	out	0x21, r18	; 33
+			EECR |= (1 << EERE);
+     95c:	f8 9a       	sbi	0x1f, 0	; 31
+			uint8_t data = EEDR;
+     95e:	40 b5       	in	r20, 0x20	; 32
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     960:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     962:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     966:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     96a:	60 91 e6 05 	lds	r22, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     96e:	70 91 e7 05 	lds	r23, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     972:	fc 01       	movw	r30, r24
+     974:	e6 1b       	sub	r30, r22
+     976:	f7 0b       	sbc	r31, r23
+     978:	bf 01       	movw	r22, r30
+     97a:	61 15       	cp	r22, r1
+     97c:	72 40       	sbci	r23, 0x02	; 2
+     97e:	79 f0       	breq	.+30     	; 0x99e <TransmitPresets+0x118>
+	{
+		FIFO_PUSH(fifo0, c);
+     980:	fc 01       	movw	r30, r24
+     982:	f1 70       	andi	r31, 0x01	; 1
+     984:	ea 51       	subi	r30, 0x1A	; 26
+     986:	fc 4f       	sbci	r31, 0xFC	; 252
+     988:	40 83       	st	Z, r20
+     98a:	01 96       	adiw	r24, 0x01	; 1
+     98c:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     990:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     994:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     998:	80 62       	ori	r24, 0x20	; 32
+     99a:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     99e:	78 94       	sei
+		{
+			EEAR = 0x30 + (pn * sizeof(preset_str)) + offs;
+			EECR |= (1 << EERE);
+			uint8_t data = EEDR;
+			uart_putchar(data, NULL);
+			checksum += data;
+     9a0:	54 0f       	add	r21, r20
+     9a2:	2f 5f       	subi	r18, 0xFF	; 255
+     9a4:	3f 4f       	sbci	r19, 0xFF	; 255
+	uart_putchar(0x45, NULL);
+	uart_putchar(0x85, NULL);
+	
+	for(uint8_t pn = 0; pn < 25; pn++)
+	{
+		for(uint8_t offs = 0; offs < 13; offs++)
+     9a6:	2a 17       	cp	r18, r26
+     9a8:	3b 07       	cpc	r19, r27
+     9aa:	b1 f6       	brne	.-84     	; 0x958 <TransmitPresets+0xd2>
+     9ac:	d9 01       	movw	r26, r18
+     9ae:	a0 5b       	subi	r26, 0xB0	; 176
+     9b0:	bf 4f       	sbci	r27, 0xFF	; 255
+	uart_putchar(0x55, NULL);
+//	fprintf(&uart_stdout, "BEG");
+	uart_putchar(0x45, NULL);
+	uart_putchar(0x85, NULL);
+	
+	for(uint8_t pn = 0; pn < 25; pn++)
+     9b2:	ad 30       	cpi	r26, 0x0D	; 13
+     9b4:	48 e0       	ldi	r20, 0x08	; 8
+     9b6:	b4 07       	cpc	r27, r20
+     9b8:	61 f6       	brne	.-104    	; 0x952 <TransmitPresets+0xcc>
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     9ba:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     9bc:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     9c0:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     9c4:	20 91 e6 05 	lds	r18, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     9c8:	30 91 e7 05 	lds	r19, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     9cc:	bc 01       	movw	r22, r24
+     9ce:	62 1b       	sub	r22, r18
+     9d0:	73 0b       	sbc	r23, r19
+     9d2:	9b 01       	movw	r18, r22
+     9d4:	21 15       	cp	r18, r1
+     9d6:	32 40       	sbci	r19, 0x02	; 2
+     9d8:	79 f0       	breq	.+30     	; 0x9f8 <TransmitPresets+0x172>
+	{
+		FIFO_PUSH(fifo0, c);
+     9da:	fc 01       	movw	r30, r24
+     9dc:	f1 70       	andi	r31, 0x01	; 1
+     9de:	ea 51       	subi	r30, 0x1A	; 26
+     9e0:	fc 4f       	sbci	r31, 0xFC	; 252
+     9e2:	50 83       	st	Z, r21
+     9e4:	01 96       	adiw	r24, 0x01	; 1
+     9e6:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     9ea:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     9ee:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     9f2:	80 62       	ori	r24, 0x20	; 32
+     9f4:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     9f8:	78 94       	sei
+			uart_putchar(data, NULL);
+			checksum += data;
+		}
+	}
+	uart_putchar(checksum, NULL);
+	txrequest = 0;
+     9fa:	10 92 f3 02 	sts	0x02F3, r1	; 0x8002f3 <txrequest>
+     9fe:	08 95       	ret
+
+00000a00 <Transmit>:
+//	fprintf(&uart_stdout, "END");
+}
+
+void Transmit()
+{
+     a00:	0f 93       	push	r16
+     a02:	1f 93       	push	r17
+     a04:	cf 93       	push	r28
+     a06:	df 93       	push	r29
+	comdata_str *txdata = (comdata_str*)calloc(1, sizeof(comdata_str));
+     a08:	64 ea       	ldi	r22, 0xA4	; 164
+     a0a:	70 e0       	ldi	r23, 0x00	; 0
+     a0c:	81 e0       	ldi	r24, 0x01	; 1
+     a0e:	90 e0       	ldi	r25, 0x00	; 0
+     a10:	0e 94 3f 1b 	call	0x367e	; 0x367e <calloc>
+     a14:	ec 01       	movw	r28, r24
+	txdata->start = 0x55;
+     a16:	85 e5       	ldi	r24, 0x55	; 85
+     a18:	88 83       	st	Y, r24
+
+	txdata->command = txrequest;
+     a1a:	80 91 f3 02 	lds	r24, 0x02F3	; 0x8002f3 <txrequest>
+     a1e:	8a 83       	std	Y+2, r24	; 0x02
+	
+	switch((txreq_t)txrequest)
+     a20:	83 30       	cpi	r24, 0x03	; 3
+     a22:	09 f4       	brne	.+2      	; 0xa26 <Transmit+0x26>
+     a24:	7e c0       	rjmp	.+252    	; 0xb22 <Transmit+0x122>
+     a26:	08 f4       	brcc	.+2      	; 0xa2a <Transmit+0x2a>
+     a28:	7a c0       	rjmp	.+244    	; 0xb1e <Transmit+0x11e>
+     a2a:	85 30       	cpi	r24, 0x05	; 5
+     a2c:	09 f4       	brne	.+2      	; 0xa30 <Transmit+0x30>
+     a2e:	6f c0       	rjmp	.+222    	; 0xb0e <Transmit+0x10e>
+     a30:	86 30       	cpi	r24, 0x06	; 6
+     a32:	51 f4       	brne	.+20     	; 0xa48 <Transmit+0x48>
+			TransmitPresets();
+			free(txdata);
+			return;
+			
+		case REQ_PRESETDATA:
+			txdata->len = sizeof(preset);
+     a34:	80 ea       	ldi	r24, 0xA0	; 160
+     a36:	89 83       	std	Y+1, r24	; 0x01
+			memcpy(txdata->data, preset, sizeof(preset));
+     a38:	e6 e4       	ldi	r30, 0x46	; 70
+     a3a:	f3 e0       	ldi	r31, 0x03	; 3
+     a3c:	de 01       	movw	r26, r28
+     a3e:	13 96       	adiw	r26, 0x03	; 3
+     a40:	01 90       	ld	r0, Z+
+     a42:	0d 92       	st	X+, r0
+     a44:	8a 95       	dec	r24
+     a46:	e1 f7       	brne	.-8      	; 0xa40 <Transmit+0x40>
+	txrequest = 0;
+//	fprintf(&uart_stdout, "END");
+}
+
+void Transmit()
+{
+     a48:	50 e0       	ldi	r21, 0x00	; 0
+     a4a:	80 e0       	ldi	r24, 0x00	; 0
+     a4c:	90 e0       	ldi	r25, 0x00	; 0
+     a4e:	8e 01       	movw	r16, r28
+     a50:	0d 55       	subi	r16, 0x5D	; 93
+     a52:	1f 4f       	sbci	r17, 0xFF	; 255
+	
+	//fprintf(&uart_stdout, "BEG");
+	
+	for(uint8_t i = 0; i < (txdata->len + 3); i++)
+	{
+		uart_putchar(((uint8_t*)txdata)[i], NULL);
+     a54:	fe 01       	movw	r30, r28
+     a56:	e8 0f       	add	r30, r24
+     a58:	f9 1f       	adc	r31, r25
+     a5a:	40 81       	ld	r20, Z
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     a5c:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     a5e:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     a62:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     a66:	20 91 e6 05 	lds	r18, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     a6a:	30 91 e7 05 	lds	r19, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     a6e:	bc 01       	movw	r22, r24
+     a70:	62 1b       	sub	r22, r18
+     a72:	73 0b       	sbc	r23, r19
+     a74:	9b 01       	movw	r18, r22
+     a76:	21 15       	cp	r18, r1
+     a78:	32 40       	sbci	r19, 0x02	; 2
+     a7a:	81 f0       	breq	.+32     	; 0xa9c <Transmit+0x9c>
+	{
+		FIFO_PUSH(fifo0, c);
+     a7c:	9c 01       	movw	r18, r24
+     a7e:	31 70       	andi	r19, 0x01	; 1
+     a80:	2a 51       	subi	r18, 0x1A	; 26
+     a82:	3c 4f       	sbci	r19, 0xFC	; 252
+     a84:	d9 01       	movw	r26, r18
+     a86:	4c 93       	st	X, r20
+     a88:	01 96       	adiw	r24, 0x01	; 1
+     a8a:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     a8e:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     a92:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     a96:	80 62       	ori	r24, 0x20	; 32
+     a98:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     a9c:	78 94       	sei
+	//fprintf(&uart_stdout, "BEG");
+	
+	for(uint8_t i = 0; i < (txdata->len + 3); i++)
+	{
+		uart_putchar(((uint8_t*)txdata)[i], NULL);
+		txdata->checksum += ((uint8_t*)txdata)[i];
+     a9e:	d8 01       	movw	r26, r16
+     aa0:	4c 91       	ld	r20, X
+     aa2:	80 81       	ld	r24, Z
+     aa4:	48 0f       	add	r20, r24
+     aa6:	4c 93       	st	X, r20
+			break;
+	}
+	
+	//fprintf(&uart_stdout, "BEG");
+	
+	for(uint8_t i = 0; i < (txdata->len + 3); i++)
+     aa8:	5f 5f       	subi	r21, 0xFF	; 255
+     aaa:	29 81       	ldd	r18, Y+1	; 0x01
+     aac:	30 e0       	ldi	r19, 0x00	; 0
+     aae:	2e 5f       	subi	r18, 0xFE	; 254
+     ab0:	3f 4f       	sbci	r19, 0xFF	; 255
+     ab2:	85 2f       	mov	r24, r21
+     ab4:	90 e0       	ldi	r25, 0x00	; 0
+     ab6:	28 17       	cp	r18, r24
+     ab8:	39 07       	cpc	r19, r25
+     aba:	64 f6       	brge	.-104    	; 0xa54 <Transmit+0x54>
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     abc:	f8 94       	cli
+	if(!FIFO_IS_FULL(fifo0))
+     abe:	80 91 e8 05 	lds	r24, 0x05E8	; 0x8005e8 <fifo0+0x202>
+     ac2:	90 91 e9 05 	lds	r25, 0x05E9	; 0x8005e9 <fifo0+0x203>
+     ac6:	20 91 e6 05 	lds	r18, 0x05E6	; 0x8005e6 <fifo0+0x200>
+     aca:	30 91 e7 05 	lds	r19, 0x05E7	; 0x8005e7 <fifo0+0x201>
+     ace:	fc 01       	movw	r30, r24
+     ad0:	e2 1b       	sub	r30, r18
+     ad2:	f3 0b       	sbc	r31, r19
+     ad4:	9f 01       	movw	r18, r30
+     ad6:	21 15       	cp	r18, r1
+     ad8:	32 40       	sbci	r19, 0x02	; 2
+     ada:	79 f0       	breq	.+30     	; 0xafa <Transmit+0xfa>
+	{
+		FIFO_PUSH(fifo0, c);
+     adc:	fc 01       	movw	r30, r24
+     ade:	f1 70       	andi	r31, 0x01	; 1
+     ae0:	ea 51       	subi	r30, 0x1A	; 26
+     ae2:	fc 4f       	sbci	r31, 0xFC	; 252
+     ae4:	40 83       	st	Z, r20
+     ae6:	01 96       	adiw	r24, 0x01	; 1
+     ae8:	90 93 e9 05 	sts	0x05E9, r25	; 0x8005e9 <fifo0+0x203>
+     aec:	80 93 e8 05 	sts	0x05E8, r24	; 0x8005e8 <fifo0+0x202>
+		UCSR0B |= (1 << UDRIE0);
+     af0:	80 91 c1 00 	lds	r24, 0x00C1	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+     af4:	80 62       	ori	r24, 0x20	; 32
+     af6:	80 93 c1 00 	sts	0x00C1, r24	; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
+	}
+	sei();
+     afa:	78 94       	sei
+		txdata->checksum += ((uint8_t*)txdata)[i];
+	}
+	uart_putchar(txdata->checksum, NULL);
+	
+	//fprintf(&uart_stdout, "END");
+	txrequest = 0;
+     afc:	10 92 f3 02 	sts	0x02F3, r1	; 0x8002f3 <txrequest>
+	free(txdata);
+     b00:	ce 01       	movw	r24, r28
+}
+     b02:	df 91       	pop	r29
+     b04:	cf 91       	pop	r28
+     b06:	1f 91       	pop	r17
+     b08:	0f 91       	pop	r16
+	}
+	uart_putchar(txdata->checksum, NULL);
+	
+	//fprintf(&uart_stdout, "END");
+	txrequest = 0;
+	free(txdata);
+     b0a:	0c 94 f1 1b 	jmp	0x37e2	; 0x37e2 <free>
+		
+		case REQ_DEBUGDATA:
+			break;
+			
+		case REQ_PRESETTABLE:
+			TransmitPresets();
+     b0e:	bb de       	rcall	.-650    	; 0x886 <TransmitPresets>
+	}
+	uart_putchar(txdata->checksum, NULL);
+	
+	//fprintf(&uart_stdout, "END");
+	txrequest = 0;
+	free(txdata);
+     b10:	ce 01       	movw	r24, r28
+}
+     b12:	df 91       	pop	r29
+     b14:	cf 91       	pop	r28
+     b16:	1f 91       	pop	r17
+     b18:	0f 91       	pop	r16
+	}
+	uart_putchar(txdata->checksum, NULL);
+	
+	//fprintf(&uart_stdout, "END");
+	txrequest = 0;
+	free(txdata);
+     b1a:	0c 94 f1 1b 	jmp	0x37e2	; 0x37e2 <free>
+	switch((txreq_t)txrequest)
+	{
+		case REQ_RST:
+		case REQ_ACK:
+		case REQ_NACK:
+			txdata->len = 0;
+     b1e:	19 82       	std	Y+1, r1	; 0x01
+			break;
+     b20:	93 cf       	rjmp	.-218    	; 0xa48 <Transmit+0x48>
+			
+		case REQ_MAINDATA:
+			txdata->len = sizeof(heater);
+     b22:	86 e2       	ldi	r24, 0x26	; 38
+     b24:	89 83       	std	Y+1, r24	; 0x01
+			memcpy(txdata->data, heater, sizeof(heater));
+     b26:	e0 e2       	ldi	r30, 0x20	; 32
+     b28:	f3 e0       	ldi	r31, 0x03	; 3
+     b2a:	de 01       	movw	r26, r28
+     b2c:	13 96       	adiw	r26, 0x03	; 3
+     b2e:	01 90       	ld	r0, Z+
+     b30:	0d 92       	st	X+, r0
+     b32:	8a 95       	dec	r24
+     b34:	e1 f7       	brne	.-8      	; 0xb2e <Transmit+0x12e>
+			break;
+     b36:	88 cf       	rjmp	.-240    	; 0xa48 <Transmit+0x48>
+
+00000b38 <ResetMCU>:
+	free(txdata);
+}
+
+void ResetMCU(void)
+{
+	cli();
+     b38:	f8 94       	cli
+	WDTCSR |= (1 << WDCE) | (1 << WDE);
+     b3a:	80 91 60 00 	lds	r24, 0x0060	; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
+     b3e:	88 61       	ori	r24, 0x18	; 24
+     b40:	80 93 60 00 	sts	0x0060, r24	; 0x800060 <__TEXT_REGION_LENGTH__+0x7e0060>
+     b44:	ff cf       	rjmp	.-2      	; 0xb44 <ResetMCU+0xc>
+
+00000b46 <SwitchHeating>:
+	while(1);
+}
+
+void SwitchHeating(uint8_t ch, uint8_t onoff)
+{
+	if(onoff)
+     b46:	61 11       	cpse	r22, r1
+     b48:	26 c0       	rjmp	.+76     	; 0xb96 <SwitchHeating+0x50>
+		LEDPORT |= (1 << (LED1 + (ch & 0x01)));
+		heater[ch].status.heating = 1;
+	}
+	else
+	{
+		GATEPORT |= (1 << (GATE1 + (ch & 0x01)));
+     b4a:	98 b1       	in	r25, 0x08	; 8
+     b4c:	48 2f       	mov	r20, r24
+     b4e:	41 70       	andi	r20, 0x01	; 1
+     b50:	50 e0       	ldi	r21, 0x00	; 0
+     b52:	ba 01       	movw	r22, r20
+     b54:	6a 5f       	subi	r22, 0xFA	; 250
+     b56:	7f 4f       	sbci	r23, 0xFF	; 255
+     b58:	21 e0       	ldi	r18, 0x01	; 1
+     b5a:	30 e0       	ldi	r19, 0x00	; 0
+     b5c:	f9 01       	movw	r30, r18
+     b5e:	02 c0       	rjmp	.+4      	; 0xb64 <SwitchHeating+0x1e>
+     b60:	ee 0f       	add	r30, r30
+     b62:	ff 1f       	adc	r31, r31
+     b64:	6a 95       	dec	r22
+     b66:	e2 f7       	brpl	.-8      	; 0xb60 <SwitchHeating+0x1a>
+     b68:	bf 01       	movw	r22, r30
+     b6a:	69 2b       	or	r22, r25
+     b6c:	68 b9       	out	0x08, r22	; 8
+		LEDPORT &= ~(1 << (LED1 + (ch & 0x01)));
+     b6e:	98 b1       	in	r25, 0x08	; 8
+     b70:	4e 5f       	subi	r20, 0xFE	; 254
+     b72:	5f 4f       	sbci	r21, 0xFF	; 255
+     b74:	01 c0       	rjmp	.+2      	; 0xb78 <SwitchHeating+0x32>
+     b76:	22 0f       	add	r18, r18
+     b78:	4a 95       	dec	r20
+     b7a:	ea f7       	brpl	.-6      	; 0xb76 <SwitchHeating+0x30>
+     b7c:	20 95       	com	r18
+     b7e:	29 23       	and	r18, r25
+     b80:	28 b9       	out	0x08, r18	; 8
+		heater[ch].status.heating = 0;
+     b82:	93 e1       	ldi	r25, 0x13	; 19
+     b84:	89 9f       	mul	r24, r25
+     b86:	f0 01       	movw	r30, r0
+     b88:	11 24       	eor	r1, r1
+     b8a:	e0 5e       	subi	r30, 0xE0	; 224
+     b8c:	fc 4f       	sbci	r31, 0xFC	; 252
+     b8e:	80 81       	ld	r24, Z
+     b90:	8b 7f       	andi	r24, 0xFB	; 251
+     b92:	80 83       	st	Z, r24
+     b94:	08 95       	ret
+     b96:	4b cb       	rjmp	.-2410   	; 0x22e <SwitchHeating.part.0>
+
+00000b98 <VoltageMeasure>:
+	}
+}
+
+float VoltageMeasure(uint8_t ch)
+{
+     b98:	cf 92       	push	r12
+     b9a:	df 92       	push	r13
+     b9c:	ef 92       	push	r14
+     b9e:	ff 92       	push	r15
+     ba0:	cf 93       	push	r28
+     ba2:	df 93       	push	r29
+	uint16_t addata = 0;
+	float voltage = 0.0;
+	ADMUX = (ADMUX & 0xF8) | (ch & 0x01);
+     ba4:	90 91 7c 00 	lds	r25, 0x007C	; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
+     ba8:	98 7f       	andi	r25, 0xF8	; 248
+     baa:	28 2f       	mov	r18, r24
+     bac:	21 70       	andi	r18, 0x01	; 1
+     bae:	92 2b       	or	r25, r18
+     bb0:	90 93 7c 00 	sts	0x007C, r25	; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
+     bb4:	eb e2       	ldi	r30, 0x2B	; 43
+     bb6:	f1 e0       	ldi	r31, 0x01	; 1
+     bb8:	31 97       	sbiw	r30, 0x01	; 1
+     bba:	f1 f7       	brne	.-4      	; 0xbb8 <VoltageMeasure+0x20>
+     bbc:	00 c0       	rjmp	.+0      	; 0xbbe <VoltageMeasure+0x26>
+     bbe:	00 00       	nop
+	_delay_us(100);
+	ADCSRA |= (1 << ADSC);
+     bc0:	90 91 7a 00 	lds	r25, 0x007A	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+     bc4:	90 64       	ori	r25, 0x40	; 64
+     bc6:	90 93 7a 00 	sts	0x007A, r25	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+	while(!(ADCSRA & (1 << ADIF)));
+     bca:	90 91 7a 00 	lds	r25, 0x007A	; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
+     bce:	94 ff       	sbrs	r25, 4
+     bd0:	fc cf       	rjmp	.-8      	; 0xbca <VoltageMeasure+0x32>
+	addata = ADCL;
+     bd2:	60 91 78 00 	lds	r22, 0x0078	; 0x800078 <__TEXT_REGION_LENGTH__+0x7e0078>
+	addata |= ((uint16_t)ADCH) << 8;
+     bd6:	90 91 79 00 	lds	r25, 0x0079	; 0x800079 <__TEXT_REGION_LENGTH__+0x7e0079>
+	voltage = (float)addata * 0.0025;
+	voltage = (voltage / (0.758 * opamp[ch].gain)) + opamp[ch].shift;
+     bda:	c8 2f       	mov	r28, r24
+     bdc:	d0 e0       	ldi	r29, 0x00	; 0
+     bde:	70 e0       	ldi	r23, 0x00	; 0
+     be0:	79 2b       	or	r23, r25
+     be2:	80 e0       	ldi	r24, 0x00	; 0
+     be4:	90 e0       	ldi	r25, 0x00	; 0
+     be6:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+     bea:	2a e0       	ldi	r18, 0x0A	; 10
+     bec:	37 ed       	ldi	r19, 0xD7	; 215
+     bee:	43 e2       	ldi	r20, 0x23	; 35
+     bf0:	5b e3       	ldi	r21, 0x3B	; 59
+     bf2:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+     bf6:	6b 01       	movw	r12, r22
+     bf8:	7c 01       	movw	r14, r24
+     bfa:	2d e0       	ldi	r18, 0x0D	; 13
+     bfc:	2c 9f       	mul	r18, r28
+     bfe:	c0 01       	movw	r24, r0
+     c00:	2d 9f       	mul	r18, r29
+     c02:	90 0d       	add	r25, r0
+     c04:	11 24       	eor	r1, r1
+     c06:	ec 01       	movw	r28, r24
+     c08:	c2 57       	subi	r28, 0x72	; 114
+     c0a:	d9 4f       	sbci	r29, 0xF9	; 249
+     c0c:	2a e4       	ldi	r18, 0x4A	; 74
+     c0e:	3c e0       	ldi	r19, 0x0C	; 12
+     c10:	42 e4       	ldi	r20, 0x42	; 66
+     c12:	5f e3       	ldi	r21, 0x3F	; 63
+     c14:	69 81       	ldd	r22, Y+1	; 0x01
+     c16:	7a 81       	ldd	r23, Y+2	; 0x02
+     c18:	8b 81       	ldd	r24, Y+3	; 0x03
+     c1a:	9c 81       	ldd	r25, Y+4	; 0x04
+     c1c:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+     c20:	9b 01       	movw	r18, r22
+     c22:	ac 01       	movw	r20, r24
+     c24:	c7 01       	movw	r24, r14
+     c26:	b6 01       	movw	r22, r12
+     c28:	0e 94 bc 15 	call	0x2b78	; 0x2b78 <__divsf3>
+	return voltage;
+     c2c:	2d 81       	ldd	r18, Y+5	; 0x05
+     c2e:	3e 81       	ldd	r19, Y+6	; 0x06
+     c30:	4f 81       	ldd	r20, Y+7	; 0x07
+     c32:	58 85       	ldd	r21, Y+8	; 0x08
+     c34:	0e 94 54 15 	call	0x2aa8	; 0x2aa8 <__addsf3>
+}
+     c38:	df 91       	pop	r29
+     c3a:	cf 91       	pop	r28
+     c3c:	ff 90       	pop	r15
+     c3e:	ef 90       	pop	r14
+     c40:	df 90       	pop	r13
+     c42:	cf 90       	pop	r12
+     c44:	08 95       	ret
+
+00000c46 <CircuitDetect>:
+
+circ_t CircuitDetect(uint8_t ch)
+{
+     c46:	7f 92       	push	r7
+     c48:	8f 92       	push	r8
+     c4a:	9f 92       	push	r9
+     c4c:	af 92       	push	r10
+     c4e:	bf 92       	push	r11
+     c50:	cf 92       	push	r12
+     c52:	df 92       	push	r13
+     c54:	ef 92       	push	r14
+     c56:	ff 92       	push	r15
+     c58:	0f 93       	push	r16
+     c5a:	1f 93       	push	r17
+     c5c:	cf 93       	push	r28
+     c5e:	df 93       	push	r29
+     c60:	c8 2f       	mov	r28, r24
+	uint8_t gain, shift, drive;
+	float voltage;
+	circ_t circ;
+	
+	gain = heater[ch].gain;
+     c62:	e8 2e       	mov	r14, r24
+     c64:	f1 2c       	mov	r15, r1
+     c66:	83 e1       	ldi	r24, 0x13	; 19
+     c68:	c8 9f       	mul	r28, r24
+     c6a:	f0 01       	movw	r30, r0
+     c6c:	11 24       	eor	r1, r1
+     c6e:	e0 5e       	subi	r30, 0xE0	; 224
+     c70:	fc 4f       	sbci	r31, 0xFC	; 252
+     c72:	70 88       	ldd	r7, Z+16	; 0x10
+	shift = heater[ch].shift;
+     c74:	c1 88       	ldd	r12, Z+17	; 0x11
+	drive = heater[ch].drive;
+     c76:	d2 88       	ldd	r13, Z+18	; 0x12
+	
+	SetDriveVoltage(ch, 0);
+     c78:	40 e0       	ldi	r20, 0x00	; 0
+     c7a:	50 e0       	ldi	r21, 0x00	; 0
+     c7c:	ba 01       	movw	r22, r20
+     c7e:	8c 2f       	mov	r24, r28
+     c80:	0e 94 32 13 	call	0x2664	; 0x2664 <SetDriveVoltage>
+
+	SetInputRange(ch, 0.0, 3.0);
+     c84:	00 e0       	ldi	r16, 0x00	; 0
+     c86:	10 e0       	ldi	r17, 0x00	; 0
+     c88:	20 e4       	ldi	r18, 0x40	; 64
+     c8a:	30 e4       	ldi	r19, 0x40	; 64
+     c8c:	40 e0       	ldi	r20, 0x00	; 0
+     c8e:	50 e0       	ldi	r21, 0x00	; 0
+     c90:	ba 01       	movw	r22, r20
+     c92:	8c 2f       	mov	r24, r28
+     c94:	0e 94 51 13 	call	0x26a2	; 0x26a2 <SetInputRange>
+	voltage = VoltageMeasure(ch);
+     c98:	8c 2f       	mov	r24, r28
+     c9a:	7e df       	rcall	.-260    	; 0xb98 <VoltageMeasure>
+     c9c:	4b 01       	movw	r8, r22
+     c9e:	5c 01       	movw	r10, r24
+	if(voltage > 3.0)
+     ca0:	20 e0       	ldi	r18, 0x00	; 0
+     ca2:	30 e0       	ldi	r19, 0x00	; 0
+     ca4:	40 e4       	ldi	r20, 0x40	; 64
+     ca6:	50 e4       	ldi	r21, 0x40	; 64
+     ca8:	0e 94 07 17 	call	0x2e0e	; 0x2e0e <__gesf2>
+     cac:	18 16       	cp	r1, r24
+     cae:	0c f4       	brge	.+2      	; 0xcb2 <CircuitDetect+0x6c>
+     cb0:	6f c0       	rjmp	.+222    	; 0xd90 <CircuitDetect+0x14a>
+	{
+		circ = CIRC_OPEN;
+	}
+	else if((voltage > 0.05) && (voltage <= 1.5))
+     cb2:	2d ec       	ldi	r18, 0xCD	; 205
+     cb4:	3c ec       	ldi	r19, 0xCC	; 204
+     cb6:	4c e4       	ldi	r20, 0x4C	; 76
+     cb8:	5d e3       	ldi	r21, 0x3D	; 61
+     cba:	c5 01       	movw	r24, r10
+     cbc:	b4 01       	movw	r22, r8
+     cbe:	0e 94 07 17 	call	0x2e0e	; 0x2e0e <__gesf2>
+     cc2:	18 16       	cp	r1, r24
+     cc4:	a4 f1       	brlt	.+104    	; 0xd2e <CircuitDetect+0xe8>
+     cc6:	d4 e0       	ldi	r29, 0x04	; 4
+			circ = CIRC_RES_DIODE;
+		}
+	}
+	else
+	{
+		circ = CIRC_RES;
+     cc8:	14 e0       	ldi	r17, 0x04	; 4
+	}
+	
+	SetGainData(ch, gain);
+     cca:	67 2d       	mov	r22, r7
+     ccc:	8c 2f       	mov	r24, r28
+     cce:	0e 94 e3 13 	call	0x27c6	; 0x27c6 <SetGainData>
+	SetShiftData(ch, shift);
+     cd2:	6c 2d       	mov	r22, r12
+     cd4:	8c 2f       	mov	r24, r28
+     cd6:	0e 94 12 14 	call	0x2824	; 0x2824 <SetShiftData>
+	SetDriveData(ch, drive);
+     cda:	6d 2d       	mov	r22, r13
+     cdc:	8c 2f       	mov	r24, r28
+     cde:	0e 94 40 14 	call	0x2880	; 0x2880 <SetDriveData>
+	heater[ch].status.circuit = circ;
+     ce2:	83 e1       	ldi	r24, 0x13	; 19
+     ce4:	8e 9d       	mul	r24, r14
+     ce6:	f0 01       	movw	r30, r0
+     ce8:	8f 9d       	mul	r24, r15
+     cea:	f0 0d       	add	r31, r0
+     cec:	11 24       	eor	r1, r1
+     cee:	e0 5e       	subi	r30, 0xE0	; 224
+     cf0:	fc 4f       	sbci	r31, 0xFC	; 252
+     cf2:	9d 2f       	mov	r25, r29
+     cf4:	92 95       	swap	r25
+     cf6:	99 0f       	add	r25, r25
+     cf8:	99 0f       	add	r25, r25
+     cfa:	90 7c       	andi	r25, 0xC0	; 192
+     cfc:	80 81       	ld	r24, Z
+     cfe:	8f 73       	andi	r24, 0x3F	; 63
+     d00:	89 2b       	or	r24, r25
+     d02:	80 83       	st	Z, r24
+     d04:	d6 95       	lsr	r29
+     d06:	d6 95       	lsr	r29
+     d08:	81 81       	ldd	r24, Z+1	; 0x01
+     d0a:	8e 7f       	andi	r24, 0xFE	; 254
+     d0c:	d8 2b       	or	r29, r24
+     d0e:	d1 83       	std	Z+1, r29	; 0x01
+	return circ;
+}
+     d10:	81 2f       	mov	r24, r17
+     d12:	df 91       	pop	r29
+     d14:	cf 91       	pop	r28
+     d16:	1f 91       	pop	r17
+     d18:	0f 91       	pop	r16
+     d1a:	ff 90       	pop	r15
+     d1c:	ef 90       	pop	r14
+     d1e:	df 90       	pop	r13
+     d20:	cf 90       	pop	r12
+     d22:	bf 90       	pop	r11
+     d24:	af 90       	pop	r10
+     d26:	9f 90       	pop	r9
+     d28:	8f 90       	pop	r8
+     d2a:	7f 90       	pop	r7
+     d2c:	08 95       	ret
+	voltage = VoltageMeasure(ch);
+	if(voltage > 3.0)
+	{
+		circ = CIRC_OPEN;
+	}
+	else if((voltage > 0.05) && (voltage <= 1.5))
+     d2e:	20 e0       	ldi	r18, 0x00	; 0
+     d30:	30 e0       	ldi	r19, 0x00	; 0
+     d32:	40 ec       	ldi	r20, 0xC0	; 192
+     d34:	5f e3       	ldi	r21, 0x3F	; 63
+     d36:	c5 01       	movw	r24, r10
+     d38:	b4 01       	movw	r22, r8
+     d3a:	0e 94 b8 15 	call	0x2b70	; 0x2b70 <__cmpsf2>
+     d3e:	18 16       	cp	r1, r24
+     d40:	14 f2       	brlt	.-124    	; 0xcc6 <CircuitDetect+0x80>
+	{
+		SetDriveData(ch, 0xFF);
+     d42:	6f ef       	ldi	r22, 0xFF	; 255
+     d44:	8c 2f       	mov	r24, r28
+     d46:	0e 94 40 14 	call	0x2880	; 0x2880 <SetDriveData>
+		SwitchDrive(ch, ON);
+     d4a:	61 e0       	ldi	r22, 0x01	; 1
+     d4c:	8c 2f       	mov	r24, r28
+     d4e:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     d52:	87 eb       	ldi	r24, 0xB7	; 183
+     d54:	9b e0       	ldi	r25, 0x0B	; 11
+     d56:	01 97       	sbiw	r24, 0x01	; 1
+     d58:	f1 f7       	brne	.-4      	; 0xd56 <CircuitDetect+0x110>
+     d5a:	00 c0       	rjmp	.+0      	; 0xd5c <CircuitDetect+0x116>
+     d5c:	00 00       	nop
+		_delay_ms(1);
+		voltage = VoltageMeasure(ch);
+     d5e:	8c 2f       	mov	r24, r28
+     d60:	1b df       	rcall	.-458    	; 0xb98 <VoltageMeasure>
+     d62:	4b 01       	movw	r8, r22
+     d64:	5c 01       	movw	r10, r24
+		SetDriveData(ch, drive);
+     d66:	6d 2d       	mov	r22, r13
+     d68:	8c 2f       	mov	r24, r28
+     d6a:	0e 94 40 14 	call	0x2880	; 0x2880 <SetDriveData>
+		SwitchDrive(ch, OFF);
+     d6e:	60 e0       	ldi	r22, 0x00	; 0
+     d70:	8c 2f       	mov	r24, r28
+     d72:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+		if(voltage < 0.2)
+     d76:	2d ec       	ldi	r18, 0xCD	; 205
+     d78:	3c ec       	ldi	r19, 0xCC	; 204
+     d7a:	4c e4       	ldi	r20, 0x4C	; 76
+     d7c:	5e e3       	ldi	r21, 0x3E	; 62
+     d7e:	c5 01       	movw	r24, r10
+     d80:	b4 01       	movw	r22, r8
+     d82:	0e 94 b8 15 	call	0x2b70	; 0x2b70 <__cmpsf2>
+     d86:	87 ff       	sbrs	r24, 7
+     d88:	06 c0       	rjmp	.+12     	; 0xd96 <CircuitDetect+0x150>
+     d8a:	d2 e0       	ldi	r29, 0x02	; 2
+		{
+			circ = CIRC_MOSFET;
+     d8c:	12 e0       	ldi	r17, 0x02	; 2
+     d8e:	9d cf       	rjmp	.-198    	; 0xcca <CircuitDetect+0x84>
+     d90:	d0 e0       	ldi	r29, 0x00	; 0
+
+	SetInputRange(ch, 0.0, 3.0);
+	voltage = VoltageMeasure(ch);
+	if(voltage > 3.0)
+	{
+		circ = CIRC_OPEN;
+     d92:	10 e0       	ldi	r17, 0x00	; 0
+     d94:	9a cf       	rjmp	.-204    	; 0xcca <CircuitDetect+0x84>
+     d96:	d3 e0       	ldi	r29, 0x03	; 3
+		{
+			circ = CIRC_MOSFET;
+		}
+		else
+		{
+			circ = CIRC_RES_DIODE;
+     d98:	13 e0       	ldi	r17, 0x03	; 3
+     d9a:	97 cf       	rjmp	.-210    	; 0xcca <CircuitDetect+0x84>
+
+00000d9c <AutoCalibration>:
+		count--;
+	}
+}
+
+int AutoCalibration(uint8_t ch)
+{
+     d9c:	2f 92       	push	r2
+     d9e:	3f 92       	push	r3
+     da0:	4f 92       	push	r4
+     da2:	5f 92       	push	r5
+     da4:	6f 92       	push	r6
+     da6:	7f 92       	push	r7
+     da8:	8f 92       	push	r8
+     daa:	9f 92       	push	r9
+     dac:	af 92       	push	r10
+     dae:	bf 92       	push	r11
+     db0:	cf 92       	push	r12
+     db2:	df 92       	push	r13
+     db4:	ef 92       	push	r14
+     db6:	ff 92       	push	r15
+     db8:	0f 93       	push	r16
+     dba:	1f 93       	push	r17
+     dbc:	cf 93       	push	r28
+     dbe:	df 93       	push	r29
+     dc0:	cd b7       	in	r28, 0x3d	; 61
+     dc2:	de b7       	in	r29, 0x3e	; 62
+     dc4:	64 97       	sbiw	r28, 0x14	; 20
+     dc6:	0f b6       	in	r0, 0x3f	; 63
+     dc8:	f8 94       	cli
+     dca:	de bf       	out	0x3e, r29	; 62
+     dcc:	0f be       	out	0x3f, r0	; 63
+     dce:	cd bf       	out	0x3d, r28	; 61
+     dd0:	38 2e       	mov	r3, r24
+	uint8_t drive = 0;
+	int16_t tstart = 0;
+	uint16_t delcnt = 0;
+	float vlow = 0.0, vhigh = 0.0;
+	
+	MAX_ReadData();
+     dd2:	91 db       	rcall	.-2270   	; 0x4f6 <MAX_ReadData>
+	CircuitDetect(ch);	
+     dd4:	83 2d       	mov	r24, r3
+     dd6:	37 df       	rcall	.-402    	; 0xc46 <CircuitDetect>
+	
+	if(((heater[ch].status.circuit == CIRC_MOSFET) || (heater[ch].status.circuit == CIRC_RES_DIODE))  && (heater[ch].status.couple == 0))
+     dd8:	23 2d       	mov	r18, r3
+     dda:	30 e0       	ldi	r19, 0x00	; 0
+     ddc:	3a 87       	std	Y+10, r19	; 0x0a
+     dde:	29 87       	std	Y+9, r18	; 0x09
+     de0:	33 e1       	ldi	r19, 0x13	; 19
+     de2:	33 9e       	mul	r3, r19
+     de4:	f0 01       	movw	r30, r0
+     de6:	11 24       	eor	r1, r1
+     de8:	e0 5e       	subi	r30, 0xE0	; 224
+     dea:	fc 4f       	sbci	r31, 0xFC	; 252
+     dec:	80 81       	ld	r24, Z
+     dee:	98 2f       	mov	r25, r24
+     df0:	92 95       	swap	r25
+     df2:	96 95       	lsr	r25
+     df4:	96 95       	lsr	r25
+     df6:	93 70       	andi	r25, 0x03	; 3
+     df8:	81 81       	ldd	r24, Z+1	; 0x01
+     dfa:	81 70       	andi	r24, 0x01	; 1
+     dfc:	88 0f       	add	r24, r24
+     dfe:	88 0f       	add	r24, r24
+     e00:	89 2b       	or	r24, r25
+     e02:	82 30       	cpi	r24, 0x02	; 2
+     e04:	41 f1       	breq	.+80     	; 0xe56 <AutoCalibration+0xba>
+     e06:	80 81       	ld	r24, Z
+     e08:	98 2f       	mov	r25, r24
+     e0a:	92 95       	swap	r25
+     e0c:	96 95       	lsr	r25
+     e0e:	96 95       	lsr	r25
+     e10:	93 70       	andi	r25, 0x03	; 3
+     e12:	81 81       	ldd	r24, Z+1	; 0x01
+     e14:	81 70       	andi	r24, 0x01	; 1
+     e16:	88 0f       	add	r24, r24
+     e18:	88 0f       	add	r24, r24
+     e1a:	89 2b       	or	r24, r25
+     e1c:	83 30       	cpi	r24, 0x03	; 3
+     e1e:	d9 f0       	breq	.+54     	; 0xe56 <AutoCalibration+0xba>
+	
+		SavePreset(ch);
+	
+		LCD_SendCmd(LCD_CLR);
+	}
+	return 0;
+     e20:	80 e0       	ldi	r24, 0x00	; 0
+     e22:	90 e0       	ldi	r25, 0x00	; 0
+}
+     e24:	64 96       	adiw	r28, 0x14	; 20
+     e26:	0f b6       	in	r0, 0x3f	; 63
+     e28:	f8 94       	cli
+     e2a:	de bf       	out	0x3e, r29	; 62
+     e2c:	0f be       	out	0x3f, r0	; 63
+     e2e:	cd bf       	out	0x3d, r28	; 61
+     e30:	df 91       	pop	r29
+     e32:	cf 91       	pop	r28
+     e34:	1f 91       	pop	r17
+     e36:	0f 91       	pop	r16
+     e38:	ff 90       	pop	r15
+     e3a:	ef 90       	pop	r14
+     e3c:	df 90       	pop	r13
+     e3e:	cf 90       	pop	r12
+     e40:	bf 90       	pop	r11
+     e42:	af 90       	pop	r10
+     e44:	9f 90       	pop	r9
+     e46:	8f 90       	pop	r8
+     e48:	7f 90       	pop	r7
+     e4a:	6f 90       	pop	r6
+     e4c:	5f 90       	pop	r5
+     e4e:	4f 90       	pop	r4
+     e50:	3f 90       	pop	r3
+     e52:	2f 90       	pop	r2
+     e54:	08 95       	ret
+	float vlow = 0.0, vhigh = 0.0;
+	
+	MAX_ReadData();
+	CircuitDetect(ch);	
+	
+	if(((heater[ch].status.circuit == CIRC_MOSFET) || (heater[ch].status.circuit == CIRC_RES_DIODE))  && (heater[ch].status.couple == 0))
+     e56:	83 e1       	ldi	r24, 0x13	; 19
+     e58:	69 85       	ldd	r22, Y+9	; 0x09
+     e5a:	7a 85       	ldd	r23, Y+10	; 0x0a
+     e5c:	86 9f       	mul	r24, r22
+     e5e:	a0 01       	movw	r20, r0
+     e60:	87 9f       	mul	r24, r23
+     e62:	50 0d       	add	r21, r0
+     e64:	11 24       	eor	r1, r1
+     e66:	5a 83       	std	Y+2, r21	; 0x02
+     e68:	49 83       	std	Y+1, r20	; 0x01
+     e6a:	fa 01       	movw	r30, r20
+     e6c:	ef 5d       	subi	r30, 0xDF	; 223
+     e6e:	fc 4f       	sbci	r31, 0xFC	; 252
+     e70:	80 81       	ld	r24, Z
+     e72:	86 95       	lsr	r24
+     e74:	87 70       	andi	r24, 0x07	; 7
+     e76:	a1 f6       	brne	.-88     	; 0xe20 <AutoCalibration+0x84>
+	{
+		LCD_SendCmd(LCD_CLR);
+     e78:	81 e0       	ldi	r24, 0x01	; 1
+     e7a:	0e 94 a1 12 	call	0x2542	; 0x2542 <LCD_SendCmd>
+		SetInputRange(ch, 0.0, 3.0);
+     e7e:	00 e0       	ldi	r16, 0x00	; 0
+     e80:	10 e0       	ldi	r17, 0x00	; 0
+     e82:	20 e4       	ldi	r18, 0x40	; 64
+     e84:	30 e4       	ldi	r19, 0x40	; 64
+     e86:	40 e0       	ldi	r20, 0x00	; 0
+     e88:	50 e0       	ldi	r21, 0x00	; 0
+     e8a:	ba 01       	movw	r22, r20
+     e8c:	83 2d       	mov	r24, r3
+     e8e:	0e 94 51 13 	call	0x26a2	; 0x26a2 <SetInputRange>
+		SetDriveVoltage(ch, 0.0);
+     e92:	40 e0       	ldi	r20, 0x00	; 0
+     e94:	50 e0       	ldi	r21, 0x00	; 0
+     e96:	ba 01       	movw	r22, r20
+     e98:	83 2d       	mov	r24, r3
+     e9a:	0e 94 32 13 	call	0x2664	; 0x2664 <SetDriveVoltage>
+     e9e:	8f e6       	ldi	r24, 0x6F	; 111
+     ea0:	97 e1       	ldi	r25, 0x17	; 23
+     ea2:	01 97       	sbiw	r24, 0x01	; 1
+     ea4:	f1 f7       	brne	.-4      	; 0xea2 <AutoCalibration+0x106>
+     ea6:	00 c0       	rjmp	.+0      	; 0xea8 <AutoCalibration+0x10c>
+     ea8:	00 00       	nop
+     eaa:	c9 84       	ldd	r12, Y+9	; 0x09
+     eac:	da 84       	ldd	r13, Y+10	; 0x0a
+     eae:	9f ef       	ldi	r25, 0xFF	; 255
+     eb0:	c9 1a       	sub	r12, r25
+     eb2:	d9 0a       	sbc	r13, r25
+		_delay_ms(2);
+	
+		do {
+			MAX_ReadData();
+			LCD_SetPos(0, 0);
+			fprintf(&lcd_stdout, "K%.1u P%.2u Tm=%.3u -", ch + 1, heater[ch].preset, heater[ch].tmeas);
+     eb4:	a9 81       	ldd	r26, Y+1	; 0x01
+     eb6:	ba 81       	ldd	r27, Y+2	; 0x02
+     eb8:	a0 5e       	subi	r26, 0xE0	; 224
+     eba:	bc 4f       	sbci	r27, 0xFC	; 252
+     ebc:	be 83       	std	Y+6, r27	; 0x06
+     ebe:	ad 83       	std	Y+5, r26	; 0x05
+     ec0:	7d 01       	movw	r14, r26
+     ec2:	b6 e0       	ldi	r27, 0x06	; 6
+     ec4:	eb 0e       	add	r14, r27
+     ec6:	f1 1c       	adc	r15, r1
+     ec8:	ad 80       	ldd	r10, Y+5	; 0x05
+     eca:	be 80       	ldd	r11, Y+6	; 0x06
+     ecc:	e2 e0       	ldi	r30, 0x02	; 2
+     ece:	ae 0e       	add	r10, r30
+     ed0:	b1 1c       	adc	r11, r1
+     ed2:	62 e3       	ldi	r22, 0x32	; 50
+     ed4:	86 2e       	mov	r8, r22
+     ed6:	61 e0       	ldi	r22, 0x01	; 1
+     ed8:	96 2e       	mov	r9, r22
+			LCD_SetPos(0, 1);
+			fprintf(&lcd_stdout, "CALIB. Tc=%.3u -", heater[ch].tcouple);
+     eda:	0d 81       	ldd	r16, Y+5	; 0x05
+     edc:	1e 81       	ldd	r17, Y+6	; 0x06
+     ede:	0c 5f       	subi	r16, 0xFC	; 252
+     ee0:	1f 4f       	sbci	r17, 0xFF	; 255
+     ee2:	78 e4       	ldi	r23, 0x48	; 72
+     ee4:	67 2e       	mov	r6, r23
+     ee6:	71 e0       	ldi	r23, 0x01	; 1
+		SetInputRange(ch, 0.0, 3.0);
+		SetDriveVoltage(ch, 0.0);
+		_delay_ms(2);
+	
+		do {
+			MAX_ReadData();
+     ee8:	77 2e       	mov	r7, r23
+     eea:	05 db       	rcall	.-2550   	; 0x4f6 <MAX_ReadData>
+			LCD_SetPos(0, 0);
+     eec:	60 e0       	ldi	r22, 0x00	; 0
+     eee:	80 e0       	ldi	r24, 0x00	; 0
+     ef0:	0e 94 c6 12 	call	0x258c	; 0x258c <LCD_SetPos>
+			fprintf(&lcd_stdout, "K%.1u P%.2u Tm=%.3u -", ch + 1, heater[ch].preset, heater[ch].tmeas);
+     ef4:	d7 01       	movw	r26, r14
+     ef6:	11 96       	adiw	r26, 0x01	; 1
+     ef8:	8c 91       	ld	r24, X
+     efa:	11 97       	sbiw	r26, 0x01	; 1
+     efc:	8f 93       	push	r24
+     efe:	8c 91       	ld	r24, X
+     f00:	8f 93       	push	r24
+     f02:	f5 01       	movw	r30, r10
+     f04:	80 81       	ld	r24, Z
+     f06:	1f 92       	push	r1
+     f08:	8f 93       	push	r24
+     f0a:	df 92       	push	r13
+     f0c:	cf 92       	push	r12
+     f0e:	9f 92       	push	r9
+     f10:	8f 92       	push	r8
+     f12:	24 e1       	ldi	r18, 0x14	; 20
+     f14:	31 e0       	ldi	r19, 0x01	; 1
+     f16:	3f 93       	push	r19
+     f18:	2f 93       	push	r18
+     f1a:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+			LCD_SetPos(0, 1);
+     f1e:	61 e0       	ldi	r22, 0x01	; 1
+     f20:	80 e0       	ldi	r24, 0x00	; 0
+     f22:	0e 94 c6 12 	call	0x258c	; 0x258c <LCD_SetPos>
+			fprintf(&lcd_stdout, "CALIB. Tc=%.3u -", heater[ch].tcouple);
+     f26:	d8 01       	movw	r26, r16
+     f28:	11 96       	adiw	r26, 0x01	; 1
+     f2a:	8c 91       	ld	r24, X
+     f2c:	11 97       	sbiw	r26, 0x01	; 1
+     f2e:	8f 93       	push	r24
+     f30:	8c 91       	ld	r24, X
+     f32:	8f 93       	push	r24
+     f34:	7f 92       	push	r7
+     f36:	6f 92       	push	r6
+     f38:	e4 e1       	ldi	r30, 0x14	; 20
+     f3a:	f1 e0       	ldi	r31, 0x01	; 1
+     f3c:	ff 93       	push	r31
+     f3e:	ef 93       	push	r30
+     f40:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+		} while(heater[ch].tcouple > cal_tmin);
+     f44:	d8 01       	movw	r26, r16
+     f46:	4d 90       	ld	r4, X+
+     f48:	5c 90       	ld	r5, X
+     f4a:	80 91 22 01 	lds	r24, 0x0122	; 0x800122 <cal_tmin>
+     f4e:	90 e0       	ldi	r25, 0x00	; 0
+     f50:	0f b6       	in	r0, 0x3f	; 63
+     f52:	f8 94       	cli
+     f54:	de bf       	out	0x3e, r29	; 62
+     f56:	0f be       	out	0x3f, r0	; 63
+     f58:	cd bf       	out	0x3d, r28	; 61
+     f5a:	84 15       	cp	r24, r4
+     f5c:	95 05       	cpc	r25, r5
+	
+		tstart = heater[ch].tcouple;
+		vhigh = VoltageMeasure(ch) + 0.04;
+     f5e:	2c f2       	brlt	.-118    	; 0xeea <AutoCalibration+0x14e>
+     f60:	83 2d       	mov	r24, r3
+     f62:	1a de       	rcall	.-972    	; 0xb98 <VoltageMeasure>
+     f64:	2a e0       	ldi	r18, 0x0A	; 10
+     f66:	37 ed       	ldi	r19, 0xD7	; 215
+     f68:	43 e2       	ldi	r20, 0x23	; 35
+     f6a:	5d e3       	ldi	r21, 0x3D	; 61
+     f6c:	0e 94 54 15 	call	0x2aa8	; 0x2aa8 <__addsf3>
+     f70:	6d 87       	std	Y+13, r22	; 0x0d
+     f72:	7e 87       	std	Y+14, r23	; 0x0e
+     f74:	88 8b       	std	Y+16, r24	; 0x10
+     f76:	9a 8b       	std	Y+18, r25	; 0x12
+     f78:	69 83       	std	Y+1, r22	; 0x01
+     f7a:	7b 87       	std	Y+11, r23	; 0x0b
+     f7c:	8b 83       	std	Y+3, r24	; 0x03
+     f7e:	29 2e       	mov	r2, r25
+		
+		if(heater[ch].status.circuit == CIRC_MOSFET)
+     f80:	ad 81       	ldd	r26, Y+5	; 0x05
+     f82:	be 81       	ldd	r27, Y+6	; 0x06
+     f84:	8c 91       	ld	r24, X
+     f86:	98 2f       	mov	r25, r24
+     f88:	92 95       	swap	r25
+     f8a:	96 95       	lsr	r25
+     f8c:	96 95       	lsr	r25
+     f8e:	93 70       	andi	r25, 0x03	; 3
+     f90:	11 96       	adiw	r26, 0x01	; 1
+     f92:	8c 91       	ld	r24, X
+     f94:	81 70       	andi	r24, 0x01	; 1
+     f96:	88 0f       	add	r24, r24
+     f98:	88 0f       	add	r24, r24
+     f9a:	89 2b       	or	r24, r25
+     f9c:	1f 82       	std	Y+7, r1	; 0x07
+     f9e:	82 30       	cpi	r24, 0x02	; 2
+     fa0:	09 f4       	brne	.+2      	; 0xfa4 <AutoCalibration+0x208>
+     fa2:	f4 c0       	rjmp	.+488    	; 0x118c <__stack+0x8d>
+     fa4:	83 2d       	mov	r24, r3
+     fa6:	43 d9       	rcall	.-3450   	; 0x22e <SwitchHeating.part.0>
+			SwitchDrive(ch, ON);
+		}
+
+		SwitchHeating(ch, ON);
+	
+		while(heater[ch].tcouple < (cal_tmax + 2))
+     fa8:	80 91 23 01 	lds	r24, 0x0123	; 0x800123 <cal_tmax>
+     fac:	90 e0       	ldi	r25, 0x00	; 0
+     fae:	01 96       	adiw	r24, 0x01	; 1
+     fb0:	43 e1       	ldi	r20, 0x13	; 19
+     fb2:	e9 85       	ldd	r30, Y+9	; 0x09
+     fb4:	fa 85       	ldd	r31, Y+10	; 0x0a
+     fb6:	4e 9f       	mul	r20, r30
+     fb8:	90 01       	movw	r18, r0
+     fba:	4f 9f       	mul	r20, r31
+     fbc:	30 0d       	add	r19, r0
+     fbe:	11 24       	eor	r1, r1
+     fc0:	a9 01       	movw	r20, r18
+     fc2:	40 5e       	subi	r20, 0xE0	; 224
+     fc4:	5c 4f       	sbci	r21, 0xFC	; 252
+     fc6:	5e 83       	std	Y+6, r21	; 0x06
+     fc8:	4d 83       	std	Y+5, r20	; 0x05
+     fca:	da 01       	movw	r26, r20
+     fcc:	14 96       	adiw	r26, 0x04	; 4
+     fce:	4d 91       	ld	r20, X+
+     fd0:	5c 91       	ld	r21, X
+     fd2:	15 97       	sbiw	r26, 0x05	; 5
+     fd4:	84 17       	cp	r24, r20
+     fd6:	95 07       	cpc	r25, r21
+     fd8:	0c f4       	brge	.+2      	; 0xfdc <AutoCalibration+0x240>
+     fda:	25 c1       	rjmp	.+586    	; 0x1226 <__stack+0x127>
+     fdc:	e1 2c       	mov	r14, r1
+     fde:	f1 2c       	mov	r15, r1
+		{
+			if(CurrMeasure(ch) > CURR_MAX)
+				return 0;
+			
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+     fe0:	4d 81       	ldd	r20, Y+5	; 0x05
+     fe2:	5e 81       	ldd	r21, Y+6	; 0x06
+     fe4:	5c 8b       	std	Y+20, r21	; 0x14
+     fe6:	4b 8b       	std	Y+19, r20	; 0x13
+			{
+				if(heater[ch].current > 1500)
+     fe8:	4a 01       	movw	r8, r20
+     fea:	5e e0       	ldi	r21, 0x0E	; 14
+     fec:	85 0e       	add	r8, r21
+     fee:	91 1c       	adc	r9, r1
+				}
+			}
+		
+			MAX_ReadData();
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0))
+     ff0:	b9 01       	movw	r22, r18
+     ff2:	6f 5d       	subi	r22, 0xDF	; 223
+     ff4:	7c 4f       	sbci	r23, 0xFC	; 252
+     ff6:	7e 83       	std	Y+6, r23	; 0x06
+     ff8:	6d 83       	std	Y+5, r22	; 0x05
+			}
+			
+			if(++delcnt > 300)
+			{
+				delcnt = 0;
+				if((heater[ch].tcouple - tstart) < 5)
+     ffa:	cb 88       	ldd	r12, Y+19	; 0x13
+     ffc:	dc 88       	ldd	r13, Y+20	; 0x14
+     ffe:	74 e0       	ldi	r23, 0x04	; 4
+    1000:	c7 0e       	add	r12, r23
+    1002:	d1 1c       	adc	r13, r1
+					tstart = heater[ch].tcouple;
+				}
+			}
+		
+			LCD_SetPos(0, 0);
+			fprintf(&lcd_stdout, "%04.2f-%04.2f G=%04.2f", vhigh, vlow, opamp[ch].drive);
+    1004:	8d e0       	ldi	r24, 0x0D	; 13
+    1006:	a9 85       	ldd	r26, Y+9	; 0x09
+    1008:	ba 85       	ldd	r27, Y+10	; 0x0a
+    100a:	8a 9f       	mul	r24, r26
+    100c:	80 01       	movw	r16, r0
+    100e:	8b 9f       	mul	r24, r27
+    1010:	10 0d       	add	r17, r0
+    1012:	11 24       	eor	r1, r1
+    1014:	09 56       	subi	r16, 0x69	; 105
+    1016:	19 4f       	sbci	r17, 0xF9	; 249
+    1018:	4b e7       	ldi	r20, 0x7B	; 123
+    101a:	a4 2e       	mov	r10, r20
+    101c:	41 e0       	ldi	r20, 0x01	; 1
+    101e:	b4 2e       	mov	r11, r20
+    1020:	54 e1       	ldi	r21, 0x14	; 20
+    1022:	65 2e       	mov	r6, r21
+    1024:	51 e0       	ldi	r21, 0x01	; 1
+    1026:	75 2e       	mov	r7, r21
+					SetDriveData(ch, ++drive);
+					SwitchDrive(ch, ON);
+				}
+			}
+		
+			MAX_ReadData();
+    1028:	83 c0       	rjmp	.+262    	; 0x1130 <__stack+0x31>
+    102a:	65 da       	rcall	.-2870   	; 0x4f6 <MAX_ReadData>
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0))
+    102c:	ab 89       	ldd	r26, Y+19	; 0x13
+    102e:	bc 89       	ldd	r27, Y+20	; 0x14
+    1030:	8c 91       	ld	r24, X
+    1032:	98 2f       	mov	r25, r24
+    1034:	92 95       	swap	r25
+    1036:	96 95       	lsr	r25
+    1038:	96 95       	lsr	r25
+    103a:	93 70       	andi	r25, 0x03	; 3
+    103c:	11 96       	adiw	r26, 0x01	; 1
+    103e:	8c 91       	ld	r24, X
+    1040:	81 70       	andi	r24, 0x01	; 1
+    1042:	88 0f       	add	r24, r24
+    1044:	88 0f       	add	r24, r24
+    1046:	89 2b       	or	r24, r25
+    1048:	09 f4       	brne	.+2      	; 0x104c <AutoCalibration+0x2b0>
+    104a:	e7 c0       	rjmp	.+462    	; 0x121a <__stack+0x11b>
+    104c:	eb 89       	ldd	r30, Y+19	; 0x13
+    104e:	fc 89       	ldd	r31, Y+20	; 0x14
+    1050:	80 81       	ld	r24, Z
+    1052:	98 2f       	mov	r25, r24
+    1054:	92 95       	swap	r25
+    1056:	96 95       	lsr	r25
+    1058:	96 95       	lsr	r25
+    105a:	93 70       	andi	r25, 0x03	; 3
+    105c:	81 81       	ldd	r24, Z+1	; 0x01
+    105e:	81 70       	andi	r24, 0x01	; 1
+    1060:	88 0f       	add	r24, r24
+    1062:	88 0f       	add	r24, r24
+    1064:	89 2b       	or	r24, r25
+    1066:	84 30       	cpi	r24, 0x04	; 4
+    1068:	09 f4       	brne	.+2      	; 0x106c <AutoCalibration+0x2d0>
+    106a:	d7 c0       	rjmp	.+430    	; 0x121a <__stack+0x11b>
+    106c:	ad 81       	ldd	r26, Y+5	; 0x05
+    106e:	be 81       	ldd	r27, Y+6	; 0x06
+    1070:	8c 91       	ld	r24, X
+    1072:	86 95       	lsr	r24
+    1074:	87 70       	andi	r24, 0x07	; 7
+    1076:	09 f0       	breq	.+2      	; 0x107a <AutoCalibration+0x2de>
+    1078:	d0 c0       	rjmp	.+416    	; 0x121a <__stack+0x11b>
+			{
+				LoadPreset(ch);
+				return (-1);
+			}
+			
+			if(++delcnt > 300)
+    107a:	bf ef       	ldi	r27, 0xFF	; 255
+    107c:	eb 1a       	sub	r14, r27
+    107e:	fb 0a       	sbc	r15, r27
+    1080:	ed e2       	ldi	r30, 0x2D	; 45
+    1082:	ee 16       	cp	r14, r30
+    1084:	e1 e0       	ldi	r30, 0x01	; 1
+    1086:	fe 06       	cpc	r15, r30
+    1088:	68 f0       	brcs	.+26     	; 0x10a4 <AutoCalibration+0x308>
+			{
+				delcnt = 0;
+				if((heater[ch].tcouple - tstart) < 5)
+    108a:	d6 01       	movw	r26, r12
+    108c:	8d 91       	ld	r24, X+
+    108e:	9c 91       	ld	r25, X
+    1090:	9c 01       	movw	r18, r24
+    1092:	24 19       	sub	r18, r4
+    1094:	35 09       	sbc	r19, r5
+    1096:	25 30       	cpi	r18, 0x05	; 5
+    1098:	31 05       	cpc	r19, r1
+    109a:	0c f4       	brge	.+2      	; 0x109e <AutoCalibration+0x302>
+    109c:	7c c3       	rjmp	.+1784   	; 0x1796 <__stack+0x697>
+					while(!btn_act);
+					return(-1);
+				}
+				else
+				{
+					tstart = heater[ch].tcouple;
+    109e:	2c 01       	movw	r4, r24
+				return (-1);
+			}
+			
+			if(++delcnt > 300)
+			{
+				delcnt = 0;
+    10a0:	e1 2c       	mov	r14, r1
+    10a2:	f1 2c       	mov	r15, r1
+				{
+					tstart = heater[ch].tcouple;
+				}
+			}
+		
+			LCD_SetPos(0, 0);
+    10a4:	60 e0       	ldi	r22, 0x00	; 0
+    10a6:	80 e0       	ldi	r24, 0x00	; 0
+    10a8:	0e 94 c6 12 	call	0x258c	; 0x258c <LCD_SetPos>
+			fprintf(&lcd_stdout, "%04.2f-%04.2f G=%04.2f", vhigh, vlow, opamp[ch].drive);
+    10ac:	f8 01       	movw	r30, r16
+    10ae:	83 81       	ldd	r24, Z+3	; 0x03
+    10b0:	8f 93       	push	r24
+    10b2:	82 81       	ldd	r24, Z+2	; 0x02
+    10b4:	8f 93       	push	r24
+    10b6:	81 81       	ldd	r24, Z+1	; 0x01
+    10b8:	8f 93       	push	r24
+    10ba:	80 81       	ld	r24, Z
+    10bc:	8f 93       	push	r24
+    10be:	1f 92       	push	r1
+    10c0:	1f 92       	push	r1
+    10c2:	1f 92       	push	r1
+    10c4:	1f 92       	push	r1
+    10c6:	2f 92       	push	r2
+    10c8:	fb 81       	ldd	r31, Y+3	; 0x03
+    10ca:	ff 93       	push	r31
+    10cc:	2b 85       	ldd	r18, Y+11	; 0x0b
+    10ce:	2f 93       	push	r18
+    10d0:	39 81       	ldd	r19, Y+1	; 0x01
+    10d2:	3f 93       	push	r19
+    10d4:	bf 92       	push	r11
+    10d6:	af 92       	push	r10
+    10d8:	7f 92       	push	r7
+    10da:	6f 92       	push	r6
+    10dc:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+			LCD_SetPos(0, 1);
+    10e0:	61 e0       	ldi	r22, 0x01	; 1
+    10e2:	80 e0       	ldi	r24, 0x00	; 0
+    10e4:	0e 94 c6 12 	call	0x258c	; 0x258c <LCD_SetPos>
+			fprintf(&lcd_stdout, "I=%.4umA Tc=%.3u ", heater[ch].current, heater[ch].tcouple);
+    10e8:	d6 01       	movw	r26, r12
+    10ea:	11 96       	adiw	r26, 0x01	; 1
+    10ec:	8c 91       	ld	r24, X
+    10ee:	11 97       	sbiw	r26, 0x01	; 1
+    10f0:	8f 93       	push	r24
+    10f2:	8c 91       	ld	r24, X
+    10f4:	8f 93       	push	r24
+    10f6:	f4 01       	movw	r30, r8
+    10f8:	81 81       	ldd	r24, Z+1	; 0x01
+    10fa:	8f 93       	push	r24
+    10fc:	80 81       	ld	r24, Z
+    10fe:	8f 93       	push	r24
+    1100:	22 e9       	ldi	r18, 0x92	; 146
+    1102:	31 e0       	ldi	r19, 0x01	; 1
+    1104:	3f 93       	push	r19
+    1106:	2f 93       	push	r18
+    1108:	7f 92       	push	r7
+    110a:	6f 92       	push	r6
+    110c:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+			SwitchDrive(ch, ON);
+		}
+
+		SwitchHeating(ch, ON);
+	
+		while(heater[ch].tcouple < (cal_tmax + 2))
+    1110:	80 91 23 01 	lds	r24, 0x0123	; 0x800123 <cal_tmax>
+    1114:	90 e0       	ldi	r25, 0x00	; 0
+    1116:	01 96       	adiw	r24, 0x01	; 1
+    1118:	0f b6       	in	r0, 0x3f	; 63
+    111a:	f8 94       	cli
+    111c:	de bf       	out	0x3e, r29	; 62
+    111e:	0f be       	out	0x3f, r0	; 63
+    1120:	cd bf       	out	0x3d, r28	; 61
+    1122:	d6 01       	movw	r26, r12
+    1124:	2d 91       	ld	r18, X+
+    1126:	3c 91       	ld	r19, X
+    1128:	82 17       	cp	r24, r18
+    112a:	93 07       	cpc	r25, r19
+    112c:	0c f4       	brge	.+2      	; 0x1130 <__stack+0x31>
+		{
+			if(CurrMeasure(ch) > CURR_MAX)
+    112e:	7b c0       	rjmp	.+246    	; 0x1226 <__stack+0x127>
+    1130:	83 2d       	mov	r24, r3
+    1132:	72 db       	rcall	.-2332   	; 0x818 <CurrMeasure>
+    1134:	85 3c       	cpi	r24, 0xC5	; 197
+    1136:	99 40       	sbci	r25, 0x09	; 9
+    1138:	08 f0       	brcs	.+2      	; 0x113c <__stack+0x3d>
+    113a:	72 ce       	rjmp	.-796    	; 0xe20 <AutoCalibration+0x84>
+				return 0;
+			
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+    113c:	eb 89       	ldd	r30, Y+19	; 0x13
+    113e:	fc 89       	ldd	r31, Y+20	; 0x14
+    1140:	80 81       	ld	r24, Z
+    1142:	98 2f       	mov	r25, r24
+    1144:	92 95       	swap	r25
+    1146:	96 95       	lsr	r25
+    1148:	96 95       	lsr	r25
+    114a:	93 70       	andi	r25, 0x03	; 3
+    114c:	81 81       	ldd	r24, Z+1	; 0x01
+    114e:	81 70       	andi	r24, 0x01	; 1
+    1150:	88 0f       	add	r24, r24
+    1152:	88 0f       	add	r24, r24
+    1154:	89 2b       	or	r24, r25
+    1156:	82 30       	cpi	r24, 0x02	; 2
+    1158:	09 f0       	breq	.+2      	; 0x115c <__stack+0x5d>
+    115a:	67 cf       	rjmp	.-306    	; 0x102a <AutoCalibration+0x28e>
+			{
+				if(heater[ch].current > 1500)
+    115c:	d4 01       	movw	r26, r8
+    115e:	8d 91       	ld	r24, X+
+    1160:	9c 91       	ld	r25, X
+    1162:	8d 3d       	cpi	r24, 0xDD	; 221
+    1164:	b5 e0       	ldi	r27, 0x05	; 5
+    1166:	9b 07       	cpc	r25, r27
+    1168:	08 f0       	brcs	.+2      	; 0x116c <__stack+0x6d>
+    116a:	47 c0       	rjmp	.+142    	; 0x11fa <__stack+0xfb>
+				{
+					SetDriveData(ch, --drive);
+					SwitchDrive(ch, ON);
+				}
+				
+				if(heater[ch].current < 1000)
+    116c:	88 3e       	cpi	r24, 0xE8	; 232
+    116e:	93 40       	sbci	r25, 0x03	; 3
+    1170:	08 f0       	brcs	.+2      	; 0x1174 <__stack+0x75>
+    1172:	5b cf       	rjmp	.-330    	; 0x102a <AutoCalibration+0x28e>
+				{
+					SetDriveData(ch, ++drive);
+    1174:	ef 81       	ldd	r30, Y+7	; 0x07
+    1176:	ef 5f       	subi	r30, 0xFF	; 255
+    1178:	ef 83       	std	Y+7, r30	; 0x07
+    117a:	6e 2f       	mov	r22, r30
+    117c:	83 2d       	mov	r24, r3
+    117e:	0e 94 40 14 	call	0x2880	; 0x2880 <SetDriveData>
+					SwitchDrive(ch, ON);
+    1182:	61 e0       	ldi	r22, 0x01	; 1
+    1184:	83 2d       	mov	r24, r3
+    1186:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+    118a:	4f cf       	rjmp	.-354    	; 0x102a <AutoCalibration+0x28e>
+				_delay_ms(1);
+				CurrMeasure(ch);
+				SwitchHeating(ch, OFF);
+				SwitchDrive(ch, OFF);
+				drive++;
+			} while(heater[ch].current < 1000);
+    118c:	83 e1       	ldi	r24, 0x13	; 19
+    118e:	29 85       	ldd	r18, Y+9	; 0x09
+    1190:	3a 85       	ldd	r19, Y+10	; 0x0a
+    1192:	82 9f       	mul	r24, r18
+    1194:	f0 01       	movw	r30, r0
+    1196:	83 9f       	mul	r24, r19
+    1198:	f0 0d       	add	r31, r0
+    119a:	11 24       	eor	r1, r1
+    119c:	e2 5d       	subi	r30, 0xD2	; 210
+    119e:	fc 4f       	sbci	r31, 0xFC	; 252
+    11a0:	fe 83       	std	Y+6, r31	; 0x06
+    11a2:	ed 83       	std	Y+5, r30	; 0x05
+    11a4:	10 e0       	ldi	r17, 0x00	; 0
+    11a6:	01 c0       	rjmp	.+2      	; 0x11aa <__stack+0xab>
+				SwitchHeating(ch, ON);
+				_delay_ms(1);
+				CurrMeasure(ch);
+				SwitchHeating(ch, OFF);
+				SwitchDrive(ch, OFF);
+				drive++;
+    11a8:	12 2f       	mov	r17, r18
+		vhigh = VoltageMeasure(ch) + 0.04;
+		
+		if(heater[ch].status.circuit == CIRC_MOSFET)
+		{
+			do {
+				SetDriveData(ch, drive);
+    11aa:	61 2f       	mov	r22, r17
+    11ac:	83 2d       	mov	r24, r3
+    11ae:	0e 94 40 14 	call	0x2880	; 0x2880 <SetDriveData>
+				SwitchDrive(ch, ON);
+    11b2:	61 e0       	ldi	r22, 0x01	; 1
+    11b4:	83 2d       	mov	r24, r3
+    11b6:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+    11ba:	83 2d       	mov	r24, r3
+    11bc:	38 d8       	rcall	.-3984   	; 0x22e <SwitchHeating.part.0>
+    11be:	87 eb       	ldi	r24, 0xB7	; 183
+    11c0:	9b e0       	ldi	r25, 0x0B	; 11
+    11c2:	01 97       	sbiw	r24, 0x01	; 1
+    11c4:	f1 f7       	brne	.-4      	; 0x11c2 <__stack+0xc3>
+				SwitchHeating(ch, ON);
+				_delay_ms(1);
+				CurrMeasure(ch);
+    11c6:	00 c0       	rjmp	.+0      	; 0x11c8 <__stack+0xc9>
+    11c8:	00 00       	nop
+    11ca:	83 2d       	mov	r24, r3
+				SwitchHeating(ch, OFF);
+    11cc:	25 db       	rcall	.-2486   	; 0x818 <CurrMeasure>
+    11ce:	60 e0       	ldi	r22, 0x00	; 0
+    11d0:	83 2d       	mov	r24, r3
+    11d2:	b9 dc       	rcall	.-1678   	; 0xb46 <SwitchHeating>
+				SwitchDrive(ch, OFF);
+    11d4:	60 e0       	ldi	r22, 0x00	; 0
+    11d6:	83 2d       	mov	r24, r3
+    11d8:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+				drive++;
+    11dc:	21 e0       	ldi	r18, 0x01	; 1
+    11de:	21 0f       	add	r18, r17
+			} while(heater[ch].current < 1000);
+    11e0:	ad 81       	ldd	r26, Y+5	; 0x05
+    11e2:	be 81       	ldd	r27, Y+6	; 0x06
+    11e4:	8d 91       	ld	r24, X+
+    11e6:	9c 91       	ld	r25, X
+    11e8:	88 3e       	cpi	r24, 0xE8	; 232
+    11ea:	93 40       	sbci	r25, 0x03	; 3
+    11ec:	e8 f2       	brcs	.-70     	; 0x11a8 <__stack+0xa9>
+    11ee:	1f 83       	std	Y+7, r17	; 0x07
+			
+			drive--;
+			SwitchDrive(ch, ON);
+    11f0:	61 e0       	ldi	r22, 0x01	; 1
+    11f2:	83 2d       	mov	r24, r3
+    11f4:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+    11f8:	d5 ce       	rjmp	.-598    	; 0xfa4 <AutoCalibration+0x208>
+			
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+			{
+				if(heater[ch].current > 1500)
+				{
+					SetDriveData(ch, --drive);
+    11fa:	ef 81       	ldd	r30, Y+7	; 0x07
+    11fc:	e1 50       	subi	r30, 0x01	; 1
+    11fe:	ef 83       	std	Y+7, r30	; 0x07
+    1200:	6e 2f       	mov	r22, r30
+    1202:	83 2d       	mov	r24, r3
+    1204:	0e 94 40 14 	call	0x2880	; 0x2880 <SetDriveData>
+					SwitchDrive(ch, ON);
+    1208:	61 e0       	ldi	r22, 0x01	; 1
+    120a:	83 2d       	mov	r24, r3
+    120c:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+    1210:	d4 01       	movw	r26, r8
+    1212:	8d 91       	ld	r24, X+
+    1214:	9c 91       	ld	r25, X
+    1216:	aa cf       	rjmp	.-172    	; 0x116c <__stack+0x6d>
+		
+			MAX_ReadData();
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0))
+			{
+				LoadPreset(ch);
+    1218:	3d 84       	ldd	r3, Y+13	; 0x0d
+    121a:	83 2d       	mov	r24, r3
+    121c:	0e 94 be 14 	call	0x297c	; 0x297c <LoadPreset>
+				return (-1);
+    1220:	8f ef       	ldi	r24, 0xFF	; 255
+    1222:	9f ef       	ldi	r25, 0xFF	; 255
+			fprintf(&lcd_stdout, "%04.2f-%04.2f G=%04.2f", vhigh, vlow, opamp[ch].drive);
+			LCD_SetPos(0, 1);
+			fprintf(&lcd_stdout, "I=%.4umA Tc=%.3u ", heater[ch].current, heater[ch].tcouple);
+		}
+	
+		SwitchHeating(ch, OFF);
+    1224:	ff cd       	rjmp	.-1026   	; 0xe24 <AutoCalibration+0x88>
+    1226:	60 e0       	ldi	r22, 0x00	; 0
+    1228:	83 2d       	mov	r24, r3
+    122a:	8d dc       	rcall	.-1766   	; 0xb46 <SwitchHeating>
+		SwitchDrive(ch, OFF);
+    122c:	60 e0       	ldi	r22, 0x00	; 0
+    122e:	83 2d       	mov	r24, r3
+    1230:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+    1234:	ef e6       	ldi	r30, 0x6F	; 111
+    1236:	f7 e1       	ldi	r31, 0x17	; 23
+    1238:	31 97       	sbiw	r30, 0x01	; 1
+    123a:	f1 f7       	brne	.-4      	; 0x1238 <__stack+0x139>
+    123c:	00 c0       	rjmp	.+0      	; 0x123e <__stack+0x13f>
+		_delay_ms(2);
+	
+		vlow = VoltageMeasure(ch);
+    123e:	00 00       	nop
+    1240:	83 2d       	mov	r24, r3
+    1242:	aa dc       	rcall	.-1708   	; 0xb98 <VoltageMeasure>
+    1244:	96 2e       	mov	r9, r22
+    1246:	87 2e       	mov	r8, r23
+    1248:	78 2e       	mov	r7, r24
+    124a:	69 2e       	mov	r6, r25
+		if(vlow > 0.01)
+    124c:	2a e0       	ldi	r18, 0x0A	; 10
+    124e:	37 ed       	ldi	r19, 0xD7	; 215
+    1250:	43 e2       	ldi	r20, 0x23	; 35
+    1252:	5c e3       	ldi	r21, 0x3C	; 60
+    1254:	d4 01       	movw	r26, r8
+    1256:	f3 01       	movw	r30, r6
+    1258:	6b 2f       	mov	r22, r27
+    125a:	7a 2f       	mov	r23, r26
+    125c:	8f 2f       	mov	r24, r31
+    125e:	9e 2f       	mov	r25, r30
+    1260:	0e 94 07 17 	call	0x2e0e	; 0x2e0e <__gesf2>
+    1264:	18 16       	cp	r1, r24
+    1266:	84 f4       	brge	.+32     	; 0x1288 <__stack+0x189>
+			vlow -= 0.01;
+    1268:	2a e0       	ldi	r18, 0x0A	; 10
+    126a:	37 ed       	ldi	r19, 0xD7	; 215
+    126c:	43 e2       	ldi	r20, 0x23	; 35
+    126e:	5c e3       	ldi	r21, 0x3C	; 60
+    1270:	d4 01       	movw	r26, r8
+    1272:	f3 01       	movw	r30, r6
+    1274:	6b 2f       	mov	r22, r27
+    1276:	7a 2f       	mov	r23, r26
+    1278:	8f 2f       	mov	r24, r31
+    127a:	9e 2f       	mov	r25, r30
+    127c:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    1280:	96 2e       	mov	r9, r22
+    1282:	87 2e       	mov	r8, r23
+    1284:	78 2e       	mov	r7, r24
+    1286:	69 2e       	mov	r6, r25
+		SetInputRange(ch, vlow, vhigh);
+    1288:	5d 85       	ldd	r21, Y+13	; 0x0d
+    128a:	4e 85       	ldd	r20, Y+14	; 0x0e
+    128c:	98 89       	ldd	r25, Y+16	; 0x10
+    128e:	8a 89       	ldd	r24, Y+18	; 0x12
+    1290:	05 2f       	mov	r16, r21
+    1292:	14 2f       	mov	r17, r20
+    1294:	29 2f       	mov	r18, r25
+    1296:	38 2f       	mov	r19, r24
+    1298:	f4 01       	movw	r30, r8
+    129a:	c3 01       	movw	r24, r6
+    129c:	4f 2f       	mov	r20, r31
+    129e:	58 2d       	mov	r21, r8
+    12a0:	69 2f       	mov	r22, r25
+    12a2:	76 2d       	mov	r23, r6
+    12a4:	83 2d       	mov	r24, r3
+    12a6:	0e 94 51 13 	call	0x26a2	; 0x26a2 <SetInputRange>
+	
+		for(uint8_t temp = cal_tmax; temp >= cal_tmin; temp -= 10)
+    12aa:	b0 91 23 01 	lds	r27, 0x0123	; 0x800123 <cal_tmax>
+    12ae:	bd 83       	std	Y+5, r27	; 0x05
+    12b0:	e0 91 22 01 	lds	r30, 0x0122	; 0x800122 <cal_tmin>
+    12b4:	ef 83       	std	Y+7, r30	; 0x07
+    12b6:	be 17       	cp	r27, r30
+    12b8:	08 f4       	brcc	.+2      	; 0x12bc <__stack+0x1bd>
+    12ba:	a1 c2       	rjmp	.+1346   	; 0x17fe <__stack+0x6ff>
+		{
+			while(heater[ch].tcouple >= temp)
+    12bc:	23 e1       	ldi	r18, 0x13	; 19
+    12be:	e9 85       	ldd	r30, Y+9	; 0x09
+    12c0:	fa 85       	ldd	r31, Y+10	; 0x0a
+    12c2:	2e 9f       	mul	r18, r30
+    12c4:	c0 01       	movw	r24, r0
+    12c6:	2f 9f       	mul	r18, r31
+    12c8:	90 0d       	add	r25, r0
+    12ca:	11 24       	eor	r1, r1
+    12cc:	9c 01       	movw	r18, r24
+    12ce:	20 5e       	subi	r18, 0xE0	; 224
+    12d0:	3c 4f       	sbci	r19, 0xFC	; 252
+    12d2:	38 87       	std	Y+8, r19	; 0x08
+    12d4:	2f 83       	std	Y+7, r18	; 0x07
+    12d6:	89 01       	movw	r16, r18
+    12d8:	0c 5f       	subi	r16, 0xFC	; 252
+    12da:	1f 4f       	sbci	r17, 0xFF	; 255
+			{
+				MAX_ReadData();
+				LCD_SetPos(0, 0);
+				fprintf(&lcd_stdout, "VH=%04.2f Dm=%.3u -", vhigh, heater[ch].tmeas_raw);
+    12dc:	79 01       	movw	r14, r18
+    12de:	38 e0       	ldi	r19, 0x08	; 8
+    12e0:	e3 0e       	add	r14, r19
+    12e2:	f1 1c       	adc	r15, r1
+    12e4:	a4 ea       	ldi	r26, 0xA4	; 164
+    12e6:	ca 2e       	mov	r12, r26
+    12e8:	a1 e0       	ldi	r26, 0x01	; 1
+    12ea:	da 2e       	mov	r13, r26
+				LCD_SetPos(0, 1);
+				fprintf(&lcd_stdout, "VL=%04.2f Tc=%.3u -", vlow, heater[ch].tcouple);
+    12ec:	b8 eb       	ldi	r27, 0xB8	; 184
+    12ee:	4b 2e       	mov	r4, r27
+    12f0:	b1 e0       	ldi	r27, 0x01	; 1
+    12f2:	5b 2e       	mov	r5, r27
+			}
+			TMeasure(ch);
+			preset[ch].curve[temp / 10].temp = temp;
+    12f4:	24 e1       	ldi	r18, 0x14	; 20
+    12f6:	2e 9f       	mul	r18, r30
+    12f8:	a0 01       	movw	r20, r0
+    12fa:	2f 9f       	mul	r18, r31
+    12fc:	50 0d       	add	r21, r0
+    12fe:	11 24       	eor	r1, r1
+    1300:	5f 87       	std	Y+15, r21	; 0x0f
+    1302:	4e 87       	std	Y+14, r20	; 0x0e
+			preset[ch].curve[temp / 10].adcdata = heater[ch].tmeas_raw;
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0) )
+    1304:	bc 01       	movw	r22, r24
+    1306:	6f 5d       	subi	r22, 0xDF	; 223
+    1308:	7c 4f       	sbci	r23, 0xFC	; 252
+    130a:	79 8b       	std	Y+17, r23	; 0x11
+    130c:	68 8b       	std	Y+16, r22	; 0x10
+    130e:	3d 86       	std	Y+13, r3	; 0x0d
+    1310:	37 2c       	mov	r3, r7
+    1312:	72 2c       	mov	r7, r2
+    1314:	26 2c       	mov	r2, r6
+			vlow -= 0.01;
+		SetInputRange(ch, vlow, vhigh);
+	
+		for(uint8_t temp = cal_tmax; temp >= cal_tmin; temp -= 10)
+		{
+			while(heater[ch].tcouple >= temp)
+    1316:	6b 84       	ldd	r6, Y+11	; 0x0b
+    1318:	7d 81       	ldd	r23, Y+5	; 0x05
+    131a:	a7 2e       	mov	r10, r23
+    131c:	b1 2c       	mov	r11, r1
+    131e:	d8 01       	movw	r26, r16
+    1320:	8d 91       	ld	r24, X+
+    1322:	9c 91       	ld	r25, X
+    1324:	8a 15       	cp	r24, r10
+    1326:	9b 05       	cpc	r25, r11
+			{
+				MAX_ReadData();
+    1328:	e4 f1       	brlt	.+120    	; 0x13a2 <__stack+0x2a3>
+    132a:	e5 d8       	rcall	.-3638   	; 0x4f6 <MAX_ReadData>
+				LCD_SetPos(0, 0);
+    132c:	60 e0       	ldi	r22, 0x00	; 0
+    132e:	80 e0       	ldi	r24, 0x00	; 0
+    1330:	0e 94 c6 12 	call	0x258c	; 0x258c <LCD_SetPos>
+				fprintf(&lcd_stdout, "VH=%04.2f Dm=%.3u -", vhigh, heater[ch].tmeas_raw);
+    1334:	d7 01       	movw	r26, r14
+    1336:	11 96       	adiw	r26, 0x01	; 1
+    1338:	8c 91       	ld	r24, X
+    133a:	11 97       	sbiw	r26, 0x01	; 1
+    133c:	8f 93       	push	r24
+    133e:	8c 91       	ld	r24, X
+    1340:	8f 93       	push	r24
+    1342:	7f 92       	push	r7
+    1344:	bb 81       	ldd	r27, Y+3	; 0x03
+    1346:	bf 93       	push	r27
+    1348:	6f 92       	push	r6
+    134a:	e9 81       	ldd	r30, Y+1	; 0x01
+    134c:	ef 93       	push	r30
+    134e:	df 92       	push	r13
+    1350:	cf 92       	push	r12
+    1352:	24 e1       	ldi	r18, 0x14	; 20
+    1354:	31 e0       	ldi	r19, 0x01	; 1
+    1356:	3f 93       	push	r19
+    1358:	2f 93       	push	r18
+    135a:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+				LCD_SetPos(0, 1);
+    135e:	61 e0       	ldi	r22, 0x01	; 1
+    1360:	80 e0       	ldi	r24, 0x00	; 0
+    1362:	0e 94 c6 12 	call	0x258c	; 0x258c <LCD_SetPos>
+				fprintf(&lcd_stdout, "VL=%04.2f Tc=%.3u -", vlow, heater[ch].tcouple);
+    1366:	d8 01       	movw	r26, r16
+    1368:	11 96       	adiw	r26, 0x01	; 1
+    136a:	8c 91       	ld	r24, X
+    136c:	11 97       	sbiw	r26, 0x01	; 1
+    136e:	8f 93       	push	r24
+    1370:	8c 91       	ld	r24, X
+    1372:	8f 93       	push	r24
+    1374:	2f 92       	push	r2
+    1376:	3f 92       	push	r3
+    1378:	8f 92       	push	r8
+    137a:	9f 92       	push	r9
+    137c:	5f 92       	push	r5
+    137e:	4f 92       	push	r4
+    1380:	e4 e1       	ldi	r30, 0x14	; 20
+    1382:	f1 e0       	ldi	r31, 0x01	; 1
+    1384:	ff 93       	push	r31
+    1386:	ef 93       	push	r30
+    1388:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+			vlow -= 0.01;
+		SetInputRange(ch, vlow, vhigh);
+	
+		for(uint8_t temp = cal_tmax; temp >= cal_tmin; temp -= 10)
+		{
+			while(heater[ch].tcouple >= temp)
+    138c:	0f b6       	in	r0, 0x3f	; 63
+    138e:	f8 94       	cli
+    1390:	de bf       	out	0x3e, r29	; 62
+    1392:	0f be       	out	0x3f, r0	; 63
+    1394:	cd bf       	out	0x3d, r28	; 61
+    1396:	d8 01       	movw	r26, r16
+    1398:	8d 91       	ld	r24, X+
+    139a:	9c 91       	ld	r25, X
+    139c:	8a 15       	cp	r24, r10
+    139e:	9b 05       	cpc	r25, r11
+				LCD_SetPos(0, 0);
+				fprintf(&lcd_stdout, "VH=%04.2f Dm=%.3u -", vhigh, heater[ch].tmeas_raw);
+				LCD_SetPos(0, 1);
+				fprintf(&lcd_stdout, "VL=%04.2f Tc=%.3u -", vlow, heater[ch].tcouple);
+			}
+			TMeasure(ch);
+    13a0:	24 f6       	brge	.-120    	; 0x132a <__stack+0x22b>
+    13a2:	8d 85       	ldd	r24, Y+13	; 0x0d
+    13a4:	f7 d9       	rcall	.-3090   	; 0x794 <TMeasure>
+			preset[ch].curve[temp / 10].temp = temp;
+    13a6:	8d ec       	ldi	r24, 0xCD	; 205
+    13a8:	bd 81       	ldd	r27, Y+5	; 0x05
+    13aa:	b8 9f       	mul	r27, r24
+    13ac:	81 2d       	mov	r24, r1
+    13ae:	11 24       	eor	r1, r1
+    13b0:	86 95       	lsr	r24
+    13b2:	86 95       	lsr	r24
+    13b4:	86 95       	lsr	r24
+    13b6:	ee 85       	ldd	r30, Y+14	; 0x0e
+    13b8:	ff 85       	ldd	r31, Y+15	; 0x0f
+    13ba:	e8 0f       	add	r30, r24
+    13bc:	f1 1d       	adc	r31, r1
+    13be:	cf 01       	movw	r24, r30
+    13c0:	ee 0f       	add	r30, r30
+    13c2:	ff 1f       	adc	r31, r31
+    13c4:	ee 0f       	add	r30, r30
+    13c6:	ff 1f       	adc	r31, r31
+    13c8:	ea 5a       	subi	r30, 0xAA	; 170
+    13ca:	fc 4f       	sbci	r31, 0xFC	; 252
+    13cc:	b1 82       	std	Z+1, r11	; 0x01
+    13ce:	a0 82       	st	Z, r10
+			preset[ch].curve[temp / 10].adcdata = heater[ch].tmeas_raw;
+    13d0:	88 0f       	add	r24, r24
+    13d2:	99 1f       	adc	r25, r25
+    13d4:	88 0f       	add	r24, r24
+    13d6:	99 1f       	adc	r25, r25
+    13d8:	fc 01       	movw	r30, r24
+    13da:	ea 5b       	subi	r30, 0xBA	; 186
+    13dc:	fc 4f       	sbci	r31, 0xFC	; 252
+    13de:	d7 01       	movw	r26, r14
+    13e0:	8d 91       	ld	r24, X+
+    13e2:	9c 91       	ld	r25, X
+    13e4:	93 8b       	std	Z+19, r25	; 0x13
+    13e6:	82 8b       	std	Z+18, r24	; 0x12
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0) )
+    13e8:	ef 81       	ldd	r30, Y+7	; 0x07
+    13ea:	f8 85       	ldd	r31, Y+8	; 0x08
+    13ec:	80 81       	ld	r24, Z
+    13ee:	98 2f       	mov	r25, r24
+    13f0:	92 95       	swap	r25
+    13f2:	96 95       	lsr	r25
+    13f4:	96 95       	lsr	r25
+    13f6:	93 70       	andi	r25, 0x03	; 3
+    13f8:	81 81       	ldd	r24, Z+1	; 0x01
+    13fa:	81 70       	andi	r24, 0x01	; 1
+    13fc:	88 0f       	add	r24, r24
+    13fe:	88 0f       	add	r24, r24
+    1400:	89 2b       	or	r24, r25
+    1402:	09 f4       	brne	.+2      	; 0x1406 <__stack+0x307>
+    1404:	09 cf       	rjmp	.-494    	; 0x1218 <__stack+0x119>
+    1406:	80 81       	ld	r24, Z
+    1408:	98 2f       	mov	r25, r24
+    140a:	92 95       	swap	r25
+    140c:	96 95       	lsr	r25
+    140e:	96 95       	lsr	r25
+    1410:	93 70       	andi	r25, 0x03	; 3
+    1412:	81 81       	ldd	r24, Z+1	; 0x01
+    1414:	81 70       	andi	r24, 0x01	; 1
+    1416:	88 0f       	add	r24, r24
+    1418:	88 0f       	add	r24, r24
+    141a:	89 2b       	or	r24, r25
+    141c:	84 30       	cpi	r24, 0x04	; 4
+    141e:	09 f4       	brne	.+2      	; 0x1422 <__stack+0x323>
+    1420:	fb ce       	rjmp	.-522    	; 0x1218 <__stack+0x119>
+    1422:	a8 89       	ldd	r26, Y+16	; 0x10
+    1424:	b9 89       	ldd	r27, Y+17	; 0x11
+    1426:	8c 91       	ld	r24, X
+    1428:	86 95       	lsr	r24
+    142a:	87 70       	andi	r24, 0x07	; 7
+    142c:	09 f0       	breq	.+2      	; 0x1430 <__stack+0x331>
+    142e:	f4 ce       	rjmp	.-536    	; 0x1218 <__stack+0x119>
+		vlow = VoltageMeasure(ch);
+		if(vlow > 0.01)
+			vlow -= 0.01;
+		SetInputRange(ch, vlow, vhigh);
+	
+		for(uint8_t temp = cal_tmax; temp >= cal_tmin; temp -= 10)
+    1430:	bd 81       	ldd	r27, Y+5	; 0x05
+    1432:	ba 50       	subi	r27, 0x0A	; 10
+    1434:	bd 83       	std	Y+5, r27	; 0x05
+    1436:	80 91 22 01 	lds	r24, 0x0122	; 0x800122 <cal_tmin>
+    143a:	b8 17       	cp	r27, r24
+    143c:	08 f0       	brcs	.+2      	; 0x1440 <__stack+0x341>
+    143e:	6c cf       	rjmp	.-296    	; 0x1318 <__stack+0x219>
+    1440:	8f 83       	std	Y+7, r24	; 0x07
+    1442:	3d 84       	ldd	r3, Y+13	; 0x0d
+    1444:	20 90 23 01 	lds	r2, 0x0123	; 0x800123 <cal_tmax>
+    1448:	8d ec       	ldi	r24, 0xCD	; 205
+    144a:	28 9e       	mul	r2, r24
+    144c:	21 2d       	mov	r18, r1
+    144e:	11 24       	eor	r1, r1
+    1450:	26 95       	lsr	r18
+    1452:	26 95       	lsr	r18
+    1454:	26 95       	lsr	r18
+    1456:	ef 81       	ldd	r30, Y+7	; 0x07
+    1458:	e8 9f       	mul	r30, r24
+    145a:	81 2d       	mov	r24, r1
+    145c:	11 24       	eor	r1, r1
+    145e:	86 95       	lsr	r24
+    1460:	86 95       	lsr	r24
+    1462:	86 95       	lsr	r24
+				LoadPreset(ch);
+				return (-1);
+			}
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+    1464:	10 e0       	ldi	r17, 0x00	; 0
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+    1466:	0d ec       	ldi	r16, 0xCD	; 205
+    1468:	94 e1       	ldi	r25, 0x14	; 20
+    146a:	49 85       	ldd	r20, Y+9	; 0x09
+    146c:	5a 85       	ldd	r21, Y+10	; 0x0a
+    146e:	94 9f       	mul	r25, r20
+    1470:	70 01       	movw	r14, r0
+    1472:	95 9f       	mul	r25, r21
+    1474:	f0 0c       	add	r15, r0
+    1476:	11 24       	eor	r1, r1
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+    1478:	b7 01       	movw	r22, r14
+    147a:	68 0f       	add	r22, r24
+    147c:	71 1d       	adc	r23, r1
+    147e:	ab 01       	movw	r20, r22
+    1480:	44 0f       	add	r20, r20
+    1482:	55 1f       	adc	r21, r21
+    1484:	44 0f       	add	r20, r20
+    1486:	55 1f       	adc	r21, r21
+    1488:	da 01       	movw	r26, r20
+    148a:	a8 5a       	subi	r26, 0xA8	; 168
+    148c:	bc 4f       	sbci	r27, 0xFC	; 252
+    148e:	ba 83       	std	Y+2, r27	; 0x02
+    1490:	a9 83       	std	Y+1, r26	; 0x01
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+    1492:	fa 01       	movw	r30, r20
+    1494:	ea 5a       	subi	r30, 0xAA	; 170
+    1496:	fc 4f       	sbci	r31, 0xFC	; 252
+    1498:	fc 83       	std	Y+4, r31	; 0x04
+    149a:	eb 83       	std	Y+3, r30	; 0x03
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+    149c:	c7 01       	movw	r24, r14
+    149e:	82 0f       	add	r24, r18
+    14a0:	91 1d       	adc	r25, r1
+    14a2:	9c 01       	movw	r18, r24
+    14a4:	22 0f       	add	r18, r18
+    14a6:	33 1f       	adc	r19, r19
+    14a8:	22 0f       	add	r18, r18
+    14aa:	33 1f       	adc	r19, r19
+    14ac:	a9 01       	movw	r20, r18
+    14ae:	48 5a       	subi	r20, 0xA8	; 168
+    14b0:	5c 4f       	sbci	r21, 0xFC	; 252
+    14b2:	5e 83       	std	Y+6, r21	; 0x06
+    14b4:	4d 83       	std	Y+5, r20	; 0x05
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+    14b6:	b9 01       	movw	r22, r18
+    14b8:	6a 5a       	subi	r22, 0xAA	; 170
+    14ba:	7c 4f       	sbci	r23, 0xFC	; 252
+    14bc:	7c 87       	std	Y+12, r23	; 0x0c
+    14be:	6b 87       	std	Y+11, r22	; 0x0b
+    14c0:	2d 86       	std	Y+13, r2	; 0x0d
+    14c2:	3e 86       	std	Y+14, r3	; 0x0e
+    14c4:	17 01       	movw	r2, r14
+			}
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+    14c6:	10 9f       	mul	r17, r16
+    14c8:	81 2d       	mov	r24, r1
+    14ca:	11 24       	eor	r1, r1
+    14cc:	86 95       	lsr	r24
+    14ce:	86 95       	lsr	r24
+    14d0:	86 95       	lsr	r24
+    14d2:	d1 01       	movw	r26, r2
+    14d4:	a8 0f       	add	r26, r24
+    14d6:	b1 1d       	adc	r27, r1
+    14d8:	b9 8b       	std	Y+17, r27	; 0x11
+    14da:	a8 8b       	std	Y+16, r26	; 0x10
+    14dc:	fd 01       	movw	r30, r26
+    14de:	ee 0f       	add	r30, r30
+    14e0:	ff 1f       	adc	r31, r31
+    14e2:	ee 0f       	add	r30, r30
+    14e4:	ff 1f       	adc	r31, r31
+    14e6:	ea 5a       	subi	r30, 0xAA	; 170
+    14e8:	fc 4f       	sbci	r31, 0xFC	; 252
+    14ea:	81 2f       	mov	r24, r17
+    14ec:	90 e0       	ldi	r25, 0x00	; 0
+    14ee:	91 83       	std	Z+1, r25	; 0x01
+    14f0:	80 83       	st	Z, r24
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+    14f2:	e9 81       	ldd	r30, Y+1	; 0x01
+    14f4:	fa 81       	ldd	r31, Y+2	; 0x02
+    14f6:	60 81       	ld	r22, Z
+    14f8:	71 81       	ldd	r23, Z+1	; 0x01
+    14fa:	80 e0       	ldi	r24, 0x00	; 0
+    14fc:	90 e0       	ldi	r25, 0x00	; 0
+    14fe:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    1502:	6b 01       	movw	r12, r22
+    1504:	7c 01       	movw	r14, r24
+    1506:	ab 81       	ldd	r26, Y+3	; 0x03
+    1508:	bc 81       	ldd	r27, Y+4	; 0x04
+    150a:	6d 91       	ld	r22, X+
+    150c:	7c 91       	ld	r23, X
+    150e:	80 e0       	ldi	r24, 0x00	; 0
+    1510:	90 e0       	ldi	r25, 0x00	; 0
+    1512:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    1516:	4b 01       	movw	r8, r22
+    1518:	5c 01       	movw	r10, r24
+    151a:	e8 89       	ldd	r30, Y+16	; 0x10
+    151c:	f9 89       	ldd	r31, Y+17	; 0x11
+    151e:	ee 0f       	add	r30, r30
+    1520:	ff 1f       	adc	r31, r31
+    1522:	ee 0f       	add	r30, r30
+    1524:	ff 1f       	adc	r31, r31
+    1526:	ea 5b       	subi	r30, 0xBA	; 186
+    1528:	fc 4f       	sbci	r31, 0xFC	; 252
+    152a:	f9 8b       	std	Y+17, r31	; 0x11
+    152c:	e8 8b       	std	Y+16, r30	; 0x10
+    152e:	ad 81       	ldd	r26, Y+5	; 0x05
+    1530:	be 81       	ldd	r27, Y+6	; 0x06
+    1532:	6d 91       	ld	r22, X+
+    1534:	7c 91       	ld	r23, X
+    1536:	80 e0       	ldi	r24, 0x00	; 0
+    1538:	90 e0       	ldi	r25, 0x00	; 0
+    153a:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    153e:	a7 01       	movw	r20, r14
+    1540:	96 01       	movw	r18, r12
+    1542:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    1546:	2b 01       	movw	r4, r22
+    1548:	3c 01       	movw	r6, r24
+    154a:	61 2f       	mov	r22, r17
+    154c:	70 e0       	ldi	r23, 0x00	; 0
+    154e:	80 e0       	ldi	r24, 0x00	; 0
+    1550:	90 e0       	ldi	r25, 0x00	; 0
+    1552:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    1556:	a5 01       	movw	r20, r10
+    1558:	94 01       	movw	r18, r8
+    155a:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    155e:	9b 01       	movw	r18, r22
+    1560:	ac 01       	movw	r20, r24
+    1562:	c3 01       	movw	r24, r6
+    1564:	b2 01       	movw	r22, r4
+    1566:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+    156a:	2b 01       	movw	r4, r22
+    156c:	3c 01       	movw	r6, r24
+    156e:	eb 85       	ldd	r30, Y+11	; 0x0b
+    1570:	fc 85       	ldd	r31, Y+12	; 0x0c
+    1572:	60 81       	ld	r22, Z
+    1574:	71 81       	ldd	r23, Z+1	; 0x01
+    1576:	80 e0       	ldi	r24, 0x00	; 0
+    1578:	90 e0       	ldi	r25, 0x00	; 0
+    157a:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    157e:	a5 01       	movw	r20, r10
+    1580:	94 01       	movw	r18, r8
+    1582:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    1586:	9b 01       	movw	r18, r22
+    1588:	ac 01       	movw	r20, r24
+    158a:	c3 01       	movw	r24, r6
+    158c:	b2 01       	movw	r22, r4
+    158e:	0e 94 bc 15 	call	0x2b78	; 0x2b78 <__divsf3>
+    1592:	a7 01       	movw	r20, r14
+    1594:	96 01       	movw	r18, r12
+    1596:	0e 94 54 15 	call	0x2aa8	; 0x2aa8 <__addsf3>
+    159a:	0e 94 29 16 	call	0x2c52	; 0x2c52 <__fixunssfsi>
+    159e:	a8 89       	ldd	r26, Y+16	; 0x10
+    15a0:	b9 89       	ldd	r27, Y+17	; 0x11
+    15a2:	53 96       	adiw	r26, 0x13	; 19
+    15a4:	7c 93       	st	X, r23
+    15a6:	6e 93       	st	-X, r22
+    15a8:	52 97       	sbiw	r26, 0x12	; 18
+				LoadPreset(ch);
+				return (-1);
+			}
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+    15aa:	16 5f       	subi	r17, 0xF6	; 246
+    15ac:	bf 81       	ldd	r27, Y+7	; 0x07
+    15ae:	1b 17       	cp	r17, r27
+    15b0:	08 f4       	brcc	.+2      	; 0x15b4 <__stack+0x4b5>
+    15b2:	89 cf       	rjmp	.-238    	; 0x14c6 <__stack+0x3c7>
+    15b4:	2d 84       	ldd	r2, Y+13	; 0x0d
+    15b6:	3e 84       	ldd	r3, Y+14	; 0x0e
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		for(uint8_t temp = (cal_tmax + 10); temp < 160; temp += 10)
+    15b8:	1a e0       	ldi	r17, 0x0A	; 10
+    15ba:	12 0d       	add	r17, r2
+    15bc:	10 3a       	cpi	r17, 0xA0	; 160
+    15be:	08 f0       	brcs	.+2      	; 0x15c2 <__stack+0x4c3>
+    15c0:	b4 c0       	rjmp	.+360    	; 0x172a <__stack+0x62b>
+    15c2:	8d ec       	ldi	r24, 0xCD	; 205
+    15c4:	28 9e       	mul	r2, r24
+    15c6:	91 2d       	mov	r25, r1
+    15c8:	11 24       	eor	r1, r1
+    15ca:	96 95       	lsr	r25
+    15cc:	96 95       	lsr	r25
+    15ce:	96 95       	lsr	r25
+    15d0:	bf 81       	ldd	r27, Y+7	; 0x07
+    15d2:	b8 9f       	mul	r27, r24
+    15d4:	81 2d       	mov	r24, r1
+    15d6:	11 24       	eor	r1, r1
+    15d8:	86 95       	lsr	r24
+    15da:	86 95       	lsr	r24
+    15dc:	86 95       	lsr	r24
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+    15de:	0d ec       	ldi	r16, 0xCD	; 205
+    15e0:	24 e1       	ldi	r18, 0x14	; 20
+    15e2:	e9 85       	ldd	r30, Y+9	; 0x09
+    15e4:	fa 85       	ldd	r31, Y+10	; 0x0a
+    15e6:	2e 9f       	mul	r18, r30
+    15e8:	70 01       	movw	r14, r0
+    15ea:	2f 9f       	mul	r18, r31
+    15ec:	f0 0c       	add	r15, r0
+    15ee:	11 24       	eor	r1, r1
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+    15f0:	97 01       	movw	r18, r14
+    15f2:	28 0f       	add	r18, r24
+    15f4:	31 1d       	adc	r19, r1
+    15f6:	a9 01       	movw	r20, r18
+    15f8:	44 0f       	add	r20, r20
+    15fa:	55 1f       	adc	r21, r21
+    15fc:	44 0f       	add	r20, r20
+    15fe:	55 1f       	adc	r21, r21
+    1600:	ba 01       	movw	r22, r20
+    1602:	68 5a       	subi	r22, 0xA8	; 168
+    1604:	7c 4f       	sbci	r23, 0xFC	; 252
+    1606:	7a 83       	std	Y+2, r23	; 0x02
+    1608:	69 83       	std	Y+1, r22	; 0x01
+		}
+	
+		for(uint8_t temp = (cal_tmax + 10); temp < 160; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+    160a:	da 01       	movw	r26, r20
+    160c:	aa 5a       	subi	r26, 0xAA	; 170
+    160e:	bc 4f       	sbci	r27, 0xFC	; 252
+    1610:	bc 83       	std	Y+4, r27	; 0x04
+    1612:	ab 83       	std	Y+3, r26	; 0x03
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+    1614:	f7 01       	movw	r30, r14
+    1616:	e9 0f       	add	r30, r25
+    1618:	f1 1d       	adc	r31, r1
+    161a:	9f 01       	movw	r18, r30
+    161c:	22 0f       	add	r18, r18
+    161e:	33 1f       	adc	r19, r19
+    1620:	22 0f       	add	r18, r18
+    1622:	33 1f       	adc	r19, r19
+    1624:	a9 01       	movw	r20, r18
+    1626:	48 5a       	subi	r20, 0xA8	; 168
+    1628:	5c 4f       	sbci	r21, 0xFC	; 252
+    162a:	5e 83       	std	Y+6, r21	; 0x06
+    162c:	4d 83       	std	Y+5, r20	; 0x05
+		}
+	
+		for(uint8_t temp = (cal_tmax + 10); temp < 160; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+    162e:	b9 01       	movw	r22, r18
+    1630:	6a 5a       	subi	r22, 0xAA	; 170
+    1632:	7c 4f       	sbci	r23, 0xFC	; 252
+    1634:	7c 87       	std	Y+12, r23	; 0x0c
+    1636:	6b 87       	std	Y+11, r22	; 0x0b
+    1638:	3f 82       	std	Y+7, r3	; 0x07
+    163a:	17 01       	movw	r2, r14
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		for(uint8_t temp = (cal_tmax + 10); temp < 160; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+    163c:	10 9f       	mul	r17, r16
+    163e:	81 2d       	mov	r24, r1
+    1640:	11 24       	eor	r1, r1
+    1642:	86 95       	lsr	r24
+    1644:	86 95       	lsr	r24
+    1646:	86 95       	lsr	r24
+    1648:	d1 01       	movw	r26, r2
+    164a:	a8 0f       	add	r26, r24
+    164c:	b1 1d       	adc	r27, r1
+    164e:	bf 87       	std	Y+15, r27	; 0x0f
+    1650:	ae 87       	std	Y+14, r26	; 0x0e
+    1652:	fd 01       	movw	r30, r26
+    1654:	ee 0f       	add	r30, r30
+    1656:	ff 1f       	adc	r31, r31
+    1658:	ee 0f       	add	r30, r30
+    165a:	ff 1f       	adc	r31, r31
+    165c:	ea 5a       	subi	r30, 0xAA	; 170
+    165e:	fc 4f       	sbci	r31, 0xFC	; 252
+    1660:	81 2f       	mov	r24, r17
+    1662:	90 e0       	ldi	r25, 0x00	; 0
+    1664:	91 83       	std	Z+1, r25	; 0x01
+    1666:	80 83       	st	Z, r24
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+    1668:	e9 81       	ldd	r30, Y+1	; 0x01
+    166a:	fa 81       	ldd	r31, Y+2	; 0x02
+    166c:	60 81       	ld	r22, Z
+    166e:	71 81       	ldd	r23, Z+1	; 0x01
+    1670:	80 e0       	ldi	r24, 0x00	; 0
+    1672:	90 e0       	ldi	r25, 0x00	; 0
+    1674:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    1678:	6b 01       	movw	r12, r22
+    167a:	7c 01       	movw	r14, r24
+    167c:	ab 81       	ldd	r26, Y+3	; 0x03
+    167e:	bc 81       	ldd	r27, Y+4	; 0x04
+    1680:	6d 91       	ld	r22, X+
+    1682:	7c 91       	ld	r23, X
+    1684:	80 e0       	ldi	r24, 0x00	; 0
+    1686:	90 e0       	ldi	r25, 0x00	; 0
+    1688:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    168c:	4b 01       	movw	r8, r22
+    168e:	5c 01       	movw	r10, r24
+    1690:	ee 85       	ldd	r30, Y+14	; 0x0e
+    1692:	ff 85       	ldd	r31, Y+15	; 0x0f
+    1694:	ee 0f       	add	r30, r30
+    1696:	ff 1f       	adc	r31, r31
+    1698:	ee 0f       	add	r30, r30
+    169a:	ff 1f       	adc	r31, r31
+    169c:	ea 5b       	subi	r30, 0xBA	; 186
+    169e:	fc 4f       	sbci	r31, 0xFC	; 252
+    16a0:	ff 87       	std	Y+15, r31	; 0x0f
+    16a2:	ee 87       	std	Y+14, r30	; 0x0e
+    16a4:	ad 81       	ldd	r26, Y+5	; 0x05
+    16a6:	be 81       	ldd	r27, Y+6	; 0x06
+    16a8:	6d 91       	ld	r22, X+
+    16aa:	7c 91       	ld	r23, X
+    16ac:	80 e0       	ldi	r24, 0x00	; 0
+    16ae:	90 e0       	ldi	r25, 0x00	; 0
+    16b0:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    16b4:	a7 01       	movw	r20, r14
+    16b6:	96 01       	movw	r18, r12
+    16b8:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    16bc:	2b 01       	movw	r4, r22
+    16be:	3c 01       	movw	r6, r24
+    16c0:	61 2f       	mov	r22, r17
+    16c2:	70 e0       	ldi	r23, 0x00	; 0
+    16c4:	80 e0       	ldi	r24, 0x00	; 0
+    16c6:	90 e0       	ldi	r25, 0x00	; 0
+    16c8:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    16cc:	a5 01       	movw	r20, r10
+    16ce:	94 01       	movw	r18, r8
+    16d0:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    16d4:	9b 01       	movw	r18, r22
+    16d6:	ac 01       	movw	r20, r24
+    16d8:	c3 01       	movw	r24, r6
+    16da:	b2 01       	movw	r22, r4
+    16dc:	0e 94 0b 17 	call	0x2e16	; 0x2e16 <__mulsf3>
+    16e0:	2b 01       	movw	r4, r22
+    16e2:	3c 01       	movw	r6, r24
+    16e4:	eb 85       	ldd	r30, Y+11	; 0x0b
+    16e6:	fc 85       	ldd	r31, Y+12	; 0x0c
+    16e8:	60 81       	ld	r22, Z
+    16ea:	71 81       	ldd	r23, Z+1	; 0x01
+    16ec:	80 e0       	ldi	r24, 0x00	; 0
+    16ee:	90 e0       	ldi	r25, 0x00	; 0
+    16f0:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    16f4:	a5 01       	movw	r20, r10
+    16f6:	94 01       	movw	r18, r8
+    16f8:	0e 94 53 15 	call	0x2aa6	; 0x2aa6 <__subsf3>
+    16fc:	9b 01       	movw	r18, r22
+    16fe:	ac 01       	movw	r20, r24
+    1700:	c3 01       	movw	r24, r6
+    1702:	b2 01       	movw	r22, r4
+    1704:	0e 94 bc 15 	call	0x2b78	; 0x2b78 <__divsf3>
+    1708:	a7 01       	movw	r20, r14
+    170a:	96 01       	movw	r18, r12
+    170c:	0e 94 54 15 	call	0x2aa8	; 0x2aa8 <__addsf3>
+    1710:	0e 94 29 16 	call	0x2c52	; 0x2c52 <__fixunssfsi>
+    1714:	ae 85       	ldd	r26, Y+14	; 0x0e
+    1716:	bf 85       	ldd	r27, Y+15	; 0x0f
+    1718:	53 96       	adiw	r26, 0x13	; 19
+    171a:	7c 93       	st	X, r23
+    171c:	6e 93       	st	-X, r22
+    171e:	52 97       	sbiw	r26, 0x12	; 18
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		for(uint8_t temp = (cal_tmax + 10); temp < 160; temp += 10)
+    1720:	16 5f       	subi	r17, 0xF6	; 246
+    1722:	10 3a       	cpi	r17, 0xA0	; 160
+    1724:	08 f4       	brcc	.+2      	; 0x1728 <__stack+0x629>
+    1726:	8a cf       	rjmp	.-236    	; 0x163c <__stack+0x53d>
+    1728:	3f 80       	ldd	r3, Y+7	; 0x07
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		if(strlen(preset[ch].header) == 0)
+    172a:	20 e5       	ldi	r18, 0x50	; 80
+    172c:	e9 85       	ldd	r30, Y+9	; 0x09
+    172e:	fa 85       	ldd	r31, Y+10	; 0x0a
+    1730:	2e 9f       	mul	r18, r30
+    1732:	c0 01       	movw	r24, r0
+    1734:	2f 9f       	mul	r18, r31
+    1736:	90 0d       	add	r25, r0
+    1738:	11 24       	eor	r1, r1
+    173a:	89 5b       	subi	r24, 0xB9	; 185
+    173c:	9c 4f       	sbci	r25, 0xFC	; 252
+    173e:	dc 01       	movw	r26, r24
+    1740:	2c 91       	ld	r18, X
+    1742:	22 23       	and	r18, r18
+    1744:	09 f4       	brne	.+2      	; 0x1748 <__stack+0x649>
+    1746:	54 c0       	rjmp	.+168    	; 0x17f0 <__stack+0x6f1>
+		{
+			strncpy(preset[ch].header, "DEFAULT", 12);
+		}
+	
+		preset[ch].number = heater[ch].preset;
+    1748:	80 e5       	ldi	r24, 0x50	; 80
+    174a:	29 85       	ldd	r18, Y+9	; 0x09
+    174c:	3a 85       	ldd	r19, Y+10	; 0x0a
+    174e:	82 9f       	mul	r24, r18
+    1750:	f0 01       	movw	r30, r0
+    1752:	83 9f       	mul	r24, r19
+    1754:	f0 0d       	add	r31, r0
+    1756:	11 24       	eor	r1, r1
+    1758:	ea 5b       	subi	r30, 0xBA	; 186
+    175a:	fc 4f       	sbci	r31, 0xFC	; 252
+    175c:	83 e1       	ldi	r24, 0x13	; 19
+    175e:	82 9f       	mul	r24, r18
+    1760:	d0 01       	movw	r26, r0
+    1762:	83 9f       	mul	r24, r19
+    1764:	b0 0d       	add	r27, r0
+    1766:	11 24       	eor	r1, r1
+    1768:	a0 5e       	subi	r26, 0xE0	; 224
+    176a:	bc 4f       	sbci	r27, 0xFC	; 252
+    176c:	12 96       	adiw	r26, 0x02	; 2
+    176e:	8c 91       	ld	r24, X
+    1770:	12 97       	sbiw	r26, 0x02	; 2
+    1772:	80 83       	st	Z, r24
+		preset[ch].gain = heater[ch].gain;
+    1774:	50 96       	adiw	r26, 0x10	; 16
+    1776:	8c 91       	ld	r24, X
+    1778:	50 97       	sbiw	r26, 0x10	; 16
+		preset[ch].shift = heater[ch].shift;
+    177a:	85 87       	std	Z+13, r24	; 0x0d
+    177c:	51 96       	adiw	r26, 0x11	; 17
+    177e:	8c 91       	ld	r24, X
+		preset[ch].drive = heater[ch].drive;
+    1780:	51 97       	sbiw	r26, 0x11	; 17
+    1782:	86 87       	std	Z+14, r24	; 0x0e
+    1784:	52 96       	adiw	r26, 0x12	; 18
+	
+		SavePreset(ch);
+    1786:	8c 91       	ld	r24, X
+    1788:	87 87       	std	Z+15, r24	; 0x0f
+	
+		LCD_SendCmd(LCD_CLR);
+    178a:	83 2d       	mov	r24, r3
+    178c:	0e 94 01 15 	call	0x2a02	; 0x2a02 <SavePreset>
+    1790:	81 e0       	ldi	r24, 0x01	; 1
+			if(++delcnt > 300)
+			{
+				delcnt = 0;
+				if((heater[ch].tcouple - tstart) < 5)
+				{
+					SwitchHeating(ch, OFF);
+    1792:	d7 d6       	rcall	.+3502   	; 0x2542 <LCD_SendCmd>
+    1794:	45 cb       	rjmp	.-2422   	; 0xe20 <AutoCalibration+0x84>
+    1796:	60 e0       	ldi	r22, 0x00	; 0
+    1798:	83 2d       	mov	r24, r3
+					SwitchDrive(ch, OFF);
+    179a:	d5 d9       	rcall	.-3158   	; 0xb46 <SwitchHeating>
+    179c:	60 e0       	ldi	r22, 0x00	; 0
+    179e:	83 2d       	mov	r24, r3
+					LCD_SetPos(0, 0);
+    17a0:	0e 94 5f 14 	call	0x28be	; 0x28be <SwitchDrive>
+    17a4:	60 e0       	ldi	r22, 0x00	; 0
+    17a6:	80 e0       	ldi	r24, 0x00	; 0
+					fprintf(&lcd_stdout, "Íåäîñòàòî÷íûé   ");
+    17a8:	f1 d6       	rcall	.+3554   	; 0x258c <LCD_SetPos>
+    17aa:	24 e1       	ldi	r18, 0x14	; 20
+    17ac:	31 e0       	ldi	r19, 0x01	; 1
+    17ae:	40 e1       	ldi	r20, 0x10	; 16
+    17b0:	50 e0       	ldi	r21, 0x00	; 0
+    17b2:	61 e0       	ldi	r22, 0x01	; 1
+    17b4:	70 e0       	ldi	r23, 0x00	; 0
+    17b6:	89 e5       	ldi	r24, 0x59	; 89
+    17b8:	91 e0       	ldi	r25, 0x01	; 1
+    17ba:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+					LCD_SetPos(0, 1);
+    17be:	61 e0       	ldi	r22, 0x01	; 1
+    17c0:	80 e0       	ldi	r24, 0x00	; 0
+    17c2:	e4 d6       	rcall	.+3528   	; 0x258c <LCD_SetPos>
+					fprintf(&lcd_stdout, "òåïëîâîé êîíòàêò");
+    17c4:	24 e1       	ldi	r18, 0x14	; 20
+    17c6:	31 e0       	ldi	r19, 0x01	; 1
+    17c8:	40 e1       	ldi	r20, 0x10	; 16
+    17ca:	50 e0       	ldi	r21, 0x00	; 0
+    17cc:	61 e0       	ldi	r22, 0x01	; 1
+    17ce:	70 e0       	ldi	r23, 0x00	; 0
+    17d0:	8a e6       	ldi	r24, 0x6A	; 106
+    17d2:	91 e0       	ldi	r25, 0x01	; 1
+    17d4:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+					LoadPreset(ch);
+    17d8:	83 2d       	mov	r24, r3
+    17da:	0e 94 be 14 	call	0x297c	; 0x297c <LoadPreset>
+					btn_act = 0;
+    17de:	10 92 f7 02 	sts	0x02F7, r1	; 0x8002f7 <btn_act>
+					while(!btn_act);
+    17e2:	80 91 f7 02 	lds	r24, 0x02F7	; 0x8002f7 <btn_act>
+    17e6:	88 23       	and	r24, r24
+    17e8:	e1 f3       	breq	.-8      	; 0x17e2 <__stack+0x6e3>
+					return(-1);
+    17ea:	8f ef       	ldi	r24, 0xFF	; 255
+    17ec:	9f ef       	ldi	r25, 0xFF	; 255
+    17ee:	1a cb       	rjmp	.-2508   	; 0xe24 <AutoCalibration+0x88>
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		if(strlen(preset[ch].header) == 0)
+		{
+			strncpy(preset[ch].header, "DEFAULT", 12);
+    17f0:	4c e0       	ldi	r20, 0x0C	; 12
+    17f2:	50 e0       	ldi	r21, 0x00	; 0
+    17f4:	6c ec       	ldi	r22, 0xCC	; 204
+    17f6:	71 e0       	ldi	r23, 0x01	; 1
+    17f8:	0e 94 6d 1d 	call	0x3ada	; 0x3ada <strncpy>
+    17fc:	a5 cf       	rjmp	.-182    	; 0x1748 <__stack+0x649>
+				LoadPreset(ch);
+				return (-1);
+			}
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+    17fe:	bf 81       	ldd	r27, Y+7	; 0x07
+    1800:	2d 80       	ldd	r2, Y+5	; 0x05
+    1802:	bb 23       	and	r27, r27
+    1804:	09 f4       	brne	.+2      	; 0x1808 <__stack+0x709>
+    1806:	d8 ce       	rjmp	.-592    	; 0x15b8 <__stack+0x4b9>
+    1808:	1f ce       	rjmp	.-962    	; 0x1448 <__stack+0x349>
+
+0000180a <ProcessCommand>:
+	}
+	heater[ch].status.heating = OFF;
+}
+
+void ProcessCommand()
+{
+    180a:	cf 93       	push	r28
+    180c:	df 93       	push	r29
+	uint8_t ch = ((rxdata.command & 0x80) >> 7) & 0x01;
+    180e:	c0 91 ec 05 	lds	r28, 0x05EC	; 0x8005ec <rxdata+0x2>
+    1812:	cc 1f       	adc	r28, r28
+    1814:	cc 27       	eor	r28, r28
+    1816:	cc 1f       	adc	r28, r28
+	rxdata.command &= 0x7F;
+    1818:	80 91 ec 05 	lds	r24, 0x05EC	; 0x8005ec <rxdata+0x2>
+    181c:	8f 77       	andi	r24, 0x7F	; 127
+    181e:	80 93 ec 05 	sts	0x05EC, r24	; 0x8005ec <rxdata+0x2>
+	txrequest = REQ_ACK;
+    1822:	81 e0       	ldi	r24, 0x01	; 1
+    1824:	80 93 f3 02 	sts	0x02F3, r24	; 0x8002f3 <txrequest>
+	switch(rxdata.command)
+    1828:	e0 91 ec 05 	lds	r30, 0x05EC	; 0x8005ec <rxdata+0x2>
+    182c:	8e 2f       	mov	r24, r30
+    182e:	90 e0       	ldi	r25, 0x00	; 0
+    1830:	8a 30       	cpi	r24, 0x0A	; 10
+    1832:	91 05       	cpc	r25, r1
+    1834:	80 f4       	brcc	.+32     	; 0x1856 <ProcessCommand+0x4c>
+    1836:	fc 01       	movw	r30, r24
+    1838:	e2 5c       	subi	r30, 0xC2	; 194
+    183a:	ff 4f       	sbci	r31, 0xFF	; 255
+    183c:	0c 94 df 1a 	jmp	0x35be	; 0x35be <__tablejump2__>
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+			break;
+		
+		case CMD_SETTEMP:
+			heater[ch].tset = rxdata.data[0];
+    1840:	80 91 ed 05 	lds	r24, 0x05ED	; 0x8005ed <rxdata+0x3>
+    1844:	93 e1       	ldi	r25, 0x13	; 19
+    1846:	c9 9f       	mul	r28, r25
+    1848:	e0 01       	movw	r28, r0
+    184a:	11 24       	eor	r1, r1
+    184c:	c0 5e       	subi	r28, 0xE0	; 224
+    184e:	dc 4f       	sbci	r29, 0xFC	; 252
+    1850:	90 e0       	ldi	r25, 0x00	; 0
+    1852:	9b 87       	std	Y+11, r25	; 0x0b
+    1854:	8a 87       	std	Y+10, r24	; 0x0a
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+    1856:	df 91       	pop	r29
+    1858:	cf 91       	pop	r28
+    185a:	08 95       	ret
+			memcpy((uint8_t*)preset, (uint8_t*)rxdata.data, rxdata.len);
+			SavePreset(ch);
+			break;
+		
+		case CMD_HEATING:
+			if(heater[ch].status.calib == CAL_MANUAL)
+    185c:	83 e1       	ldi	r24, 0x13	; 19
+    185e:	c8 9f       	mul	r28, r24
+    1860:	e0 01       	movw	r28, r0
+    1862:	11 24       	eor	r1, r1
+    1864:	c0 5e       	subi	r28, 0xE0	; 224
+    1866:	dc 4f       	sbci	r29, 0xFC	; 252
+    1868:	88 81       	ld	r24, Y
+    186a:	82 95       	swap	r24
+    186c:	83 70       	andi	r24, 0x03	; 3
+    186e:	82 30       	cpi	r24, 0x02	; 2
+    1870:	91 f7       	brne	.-28     	; 0x1856 <ProcessCommand+0x4c>
+			heater[ch].status.heating = rxdata.data[0];
+    1872:	90 91 ed 05 	lds	r25, 0x05ED	; 0x8005ed <rxdata+0x3>
+    1876:	88 81       	ld	r24, Y
+    1878:	90 fb       	bst	r25, 0
+    187a:	82 f9       	bld	r24, 2
+    187c:	88 83       	st	Y, r24
+    187e:	eb cf       	rjmp	.-42     	; 0x1856 <ProcessCommand+0x4c>
+			break;
+		
+		case CMD_CALIBRATION:
+			heater[ch].status.calib = rxdata.data[0];
+    1880:	80 91 ed 05 	lds	r24, 0x05ED	; 0x8005ed <rxdata+0x3>
+    1884:	83 70       	andi	r24, 0x03	; 3
+    1886:	93 e1       	ldi	r25, 0x13	; 19
+    1888:	c9 9f       	mul	r28, r25
+    188a:	f0 01       	movw	r30, r0
+    188c:	11 24       	eor	r1, r1
+    188e:	e0 5e       	subi	r30, 0xE0	; 224
+    1890:	fc 4f       	sbci	r31, 0xFC	; 252
+    1892:	98 2f       	mov	r25, r24
+    1894:	92 95       	swap	r25
+    1896:	90 7f       	andi	r25, 0xF0	; 240
+    1898:	80 81       	ld	r24, Z
+    189a:	8f 7c       	andi	r24, 0xCF	; 207
+    189c:	89 2b       	or	r24, r25
+    189e:	80 83       	st	Z, r24
+			cal_tmin = rxdata.data[1];
+    18a0:	80 91 ee 05 	lds	r24, 0x05EE	; 0x8005ee <rxdata+0x4>
+    18a4:	80 93 22 01 	sts	0x0122, r24	; 0x800122 <cal_tmin>
+			cal_tmax = rxdata.data[2];
+    18a8:	80 91 ef 05 	lds	r24, 0x05EF	; 0x8005ef <rxdata+0x5>
+    18ac:	80 93 23 01 	sts	0x0123, r24	; 0x800123 <cal_tmax>
+		
+			if(heater[ch].status.calib == CAL_MANUAL)
+    18b0:	80 81       	ld	r24, Z
+    18b2:	82 95       	swap	r24
+    18b4:	83 70       	andi	r24, 0x03	; 3
+    18b6:	82 30       	cpi	r24, 0x02	; 2
+    18b8:	09 f4       	brne	.+2      	; 0x18bc <ProcessCommand+0xb2>
+    18ba:	7c c0       	rjmp	.+248    	; 0x19b4 <ProcessCommand+0x1aa>
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+    18bc:	80 81       	ld	r24, Z
+    18be:	82 95       	swap	r24
+    18c0:	83 70       	andi	r24, 0x03	; 3
+    18c2:	81 30       	cpi	r24, 0x01	; 1
+    18c4:	41 f6       	brne	.-112    	; 0x1856 <ProcessCommand+0x4c>
+				AutoCalibration(ch);
+    18c6:	8c 2f       	mov	r24, r28
+			break;
+	}
+}
+    18c8:	df 91       	pop	r29
+    18ca:	cf 91       	pop	r28
+			cal_tmax = rxdata.data[2];
+		
+			if(heater[ch].status.calib == CAL_MANUAL)
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+    18cc:	67 ca       	rjmp	.-2866   	; 0xd9c <AutoCalibration>
+	rxdata.command &= 0x7F;
+	txrequest = REQ_ACK;
+	switch(rxdata.command)
+	{
+		case CMD_RESET:
+			ResetMCU();
+    18ce:	34 d9       	rcall	.-3480   	; 0xb38 <ResetMCU>
+    18d0:	80 91 ed 05 	lds	r24, 0x05ED	; 0x8005ed <rxdata+0x3>
+			break;
+		
+		case CMD_REQ:
+			txrequest = rxdata.data[0];
+    18d4:	80 93 f3 02 	sts	0x02F3, r24	; 0x8002f3 <txrequest>
+    18d8:	be cf       	rjmp	.-132    	; 0x1856 <ProcessCommand+0x4c>
+			break;
+    18da:	90 91 ed 05 	lds	r25, 0x05ED	; 0x8005ed <rxdata+0x3>
+		
+		case CMD_CHONOFF:
+			heater[ch].status.onoff = rxdata.data[0];
+    18de:	83 e1       	ldi	r24, 0x13	; 19
+    18e0:	c8 9f       	mul	r28, r24
+    18e2:	f0 01       	movw	r30, r0
+    18e4:	11 24       	eor	r1, r1
+    18e6:	e0 5e       	subi	r30, 0xE0	; 224
+    18e8:	fc 4f       	sbci	r31, 0xFC	; 252
+    18ea:	80 81       	ld	r24, Z
+    18ec:	90 fb       	bst	r25, 0
+    18ee:	81 f9       	bld	r24, 1
+    18f0:	80 83       	st	Z, r24
+    18f2:	60 e0       	ldi	r22, 0x00	; 0
+			SwitchHeating(ch, OFF);
+    18f4:	8c 2f       	mov	r24, r28
+    18f6:	27 d9       	rcall	.-3506   	; 0xb46 <SwitchHeating>
+    18f8:	60 e0       	ldi	r22, 0x00	; 0
+			SwitchDrive(ch, OFF);
+    18fa:	8c 2f       	mov	r24, r28
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+    18fc:	df 91       	pop	r29
+    18fe:	cf 91       	pop	r28
+			break;
+		
+		case CMD_CHONOFF:
+			heater[ch].status.onoff = rxdata.data[0];
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+    1900:	de c7       	rjmp	.+4028   	; 0x28be <SwitchDrive>
+    1902:	80 91 ed 05 	lds	r24, 0x05ED	; 0x8005ed <rxdata+0x3>
+		case CMD_SETTEMP:
+			heater[ch].tset = rxdata.data[0];
+			break;
+		
+		case CMD_SETRANGE:
+			heater[ch].gain = rxdata.data[0];
+    1906:	93 e1       	ldi	r25, 0x13	; 19
+    1908:	c9 9f       	mul	r28, r25
+    190a:	f0 01       	movw	r30, r0
+    190c:	11 24       	eor	r1, r1
+    190e:	e0 5e       	subi	r30, 0xE0	; 224
+    1910:	fc 4f       	sbci	r31, 0xFC	; 252
+    1912:	80 8b       	std	Z+16, r24	; 0x10
+    1914:	80 91 ee 05 	lds	r24, 0x05EE	; 0x8005ee <rxdata+0x4>
+			heater[ch].shift = rxdata.data[1];
+    1918:	81 8b       	std	Z+17, r24	; 0x11
+    191a:	60 91 ed 05 	lds	r22, 0x05ED	; 0x8005ed <rxdata+0x3>
+			SetGainData(ch, rxdata.data[0]);
+    191e:	8c 2f       	mov	r24, r28
+    1920:	52 d7       	rcall	.+3748   	; 0x27c6 <SetGainData>
+    1922:	60 91 ee 05 	lds	r22, 0x05EE	; 0x8005ee <rxdata+0x4>
+			SetShiftData(ch, rxdata.data[1]);
+    1926:	8c 2f       	mov	r24, r28
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+    1928:	df 91       	pop	r29
+    192a:	cf 91       	pop	r28
+		
+		case CMD_SETRANGE:
+			heater[ch].gain = rxdata.data[0];
+			heater[ch].shift = rxdata.data[1];
+			SetGainData(ch, rxdata.data[0]);
+			SetShiftData(ch, rxdata.data[1]);
+    192c:	7b c7       	rjmp	.+3830   	; 0x2824 <SetShiftData>
+    192e:	8c 2f       	mov	r24, r28
+			break;
+		
+		case CMD_SETVDRIVE:
+			heater[ch].drive = rxdata.data[0];
+    1930:	90 e0       	ldi	r25, 0x00	; 0
+    1932:	20 91 ed 05 	lds	r18, 0x05ED	; 0x8005ed <rxdata+0x3>
+    1936:	33 e1       	ldi	r19, 0x13	; 19
+    1938:	38 9f       	mul	r19, r24
+    193a:	f0 01       	movw	r30, r0
+    193c:	39 9f       	mul	r19, r25
+    193e:	f0 0d       	add	r31, r0
+    1940:	11 24       	eor	r1, r1
+    1942:	e0 5e       	subi	r30, 0xE0	; 224
+    1944:	fc 4f       	sbci	r31, 0xFC	; 252
+    1946:	22 8b       	std	Z+18, r18	; 0x12
+    1948:	2d e0       	ldi	r18, 0x0D	; 13
+			opamp[ch].drive = ((float)heater->drive / 25.76);
+    194a:	28 9f       	mul	r18, r24
+    194c:	e0 01       	movw	r28, r0
+    194e:	29 9f       	mul	r18, r25
+    1950:	d0 0d       	add	r29, r0
+    1952:	11 24       	eor	r1, r1
+    1954:	c2 57       	subi	r28, 0x72	; 114
+    1956:	d9 4f       	sbci	r29, 0xF9	; 249
+    1958:	60 91 32 03 	lds	r22, 0x0332	; 0x800332 <heater+0x12>
+    195c:	70 e0       	ldi	r23, 0x00	; 0
+    195e:	80 e0       	ldi	r24, 0x00	; 0
+    1960:	90 e0       	ldi	r25, 0x00	; 0
+    1962:	0e 94 55 16 	call	0x2caa	; 0x2caa <__floatunsisf>
+    1966:	2b e7       	ldi	r18, 0x7B	; 123
+    1968:	34 e1       	ldi	r19, 0x14	; 20
+    196a:	4e ec       	ldi	r20, 0xCE	; 206
+    196c:	51 e4       	ldi	r21, 0x41	; 65
+    196e:	0e 94 bc 15 	call	0x2b78	; 0x2b78 <__divsf3>
+    1972:	69 87       	std	Y+9, r22	; 0x09
+    1974:	7a 87       	std	Y+10, r23	; 0x0a
+    1976:	8b 87       	std	Y+11, r24	; 0x0b
+    1978:	9c 87       	std	Y+12, r25	; 0x0c
+    197a:	6d cf       	rjmp	.-294    	; 0x1856 <ProcessCommand+0x4c>
+			break;
+    197c:	80 91 ed 05 	lds	r24, 0x05ED	; 0x8005ed <rxdata+0x3>
+
+		case CMD_SWPRESET:
+			heater[ch].preset = rxdata.data[0];
+    1980:	93 e1       	ldi	r25, 0x13	; 19
+    1982:	c9 9f       	mul	r28, r25
+    1984:	f0 01       	movw	r30, r0
+    1986:	11 24       	eor	r1, r1
+    1988:	e0 5e       	subi	r30, 0xE0	; 224
+    198a:	fc 4f       	sbci	r31, 0xFC	; 252
+			LoadPreset(ch);
+    198c:	82 83       	std	Z+2, r24	; 0x02
+    198e:	8c 2f       	mov	r24, r28
+    1990:	f5 d7       	rcall	.+4074   	; 0x297c <LoadPreset>
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+    1992:	df 91       	pop	r29
+    1994:	cf 91       	pop	r28
+			break;
+
+		case CMD_SWPRESET:
+			heater[ch].preset = rxdata.data[0];
+			LoadPreset(ch);
+			SavePrefs();
+    1996:	ce c7       	rjmp	.+3996   	; 0x2934 <SavePrefs>
+    1998:	40 91 eb 05 	lds	r20, 0x05EB	; 0x8005eb <rxdata+0x1>
+			break;
+		
+		case CMD_LOADDATA:
+			memcpy((uint8_t*)preset, (uint8_t*)rxdata.data, rxdata.len);
+    199c:	50 e0       	ldi	r21, 0x00	; 0
+    199e:	6d ee       	ldi	r22, 0xED	; 237
+    19a0:	75 e0       	ldi	r23, 0x05	; 5
+    19a2:	86 e4       	ldi	r24, 0x46	; 70
+    19a4:	93 e0       	ldi	r25, 0x03	; 3
+    19a6:	0e 94 5d 1d 	call	0x3aba	; 0x3aba <memcpy>
+    19aa:	8c 2f       	mov	r24, r28
+			SavePreset(ch);
+    19ac:	df 91       	pop	r29
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+    19ae:	cf 91       	pop	r28
+    19b0:	0c 94 01 15 	jmp	0x2a02	; 0x2a02 <SavePreset>
+			heater[ch].status.calib = rxdata.data[0];
+			cal_tmin = rxdata.data[1];
+			cal_tmax = rxdata.data[2];
+		
+			if(heater[ch].status.calib == CAL_MANUAL)
+				ManualCalibration(ch);
+    19b4:	8c 2f       	mov	r24, r28
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+    19b6:	df 91       	pop	r29
+    19b8:	cf 91       	pop	r28
+			heater[ch].status.calib = rxdata.data[0];
+			cal_tmin = rxdata.data[1];
+			cal_tmax = rxdata.data[2];
+		
+			if(heater[ch].status.calib == CAL_MANUAL)
+				ManualCalibration(ch);
+    19ba:	72 c0       	rjmp	.+228    	; 0x1aa0 <ManualCalibration>
+
+000019bc <UARTDataAvail>:
+    19bc:	df 92       	push	r13
+	heater[ch].status.circuit = circ;
+	return circ;
+}
+
+void UARTDataAvail()
+{
+    19be:	ef 92       	push	r14
+    19c0:	ff 92       	push	r15
+    19c2:	0f 93       	push	r16
+    19c4:	1f 93       	push	r17
+    19c6:	cf 93       	push	r28
+    19c8:	df 93       	push	r29
+	static uint8_t rxcnt;
+	uint8_t localcnt = count;
+    19ca:	00 91 f6 02 	lds	r16, 0x02F6	; 0x8002f6 <count>
+	
+	for(uint8_t i = 0; i < localcnt; i++)
+    19ce:	00 23       	and	r16, r16
+    19d0:	09 f4       	brne	.+2      	; 0x19d4 <UARTDataAvail+0x18>
+    19d2:	5e c0       	rjmp	.+188    	; 0x1a90 <UARTDataAvail+0xd4>
+    19d4:	01 50       	subi	r16, 0x01	; 1
+    19d6:	10 e0       	ldi	r17, 0x00	; 0
+    19d8:	0f 5f       	subi	r16, 0xFF	; 255
+    19da:	1f 4f       	sbci	r17, 0xFF	; 255
+    19dc:	c0 e0       	ldi	r28, 0x00	; 0
+    19de:	d0 e0       	ldi	r29, 0x00	; 0
+			case 1:
+			if(rxbyte < 100)
+			{
+				rxdata.len = rxbyte;
+				rxdata.checksum += rxbyte;
+				rxcnt++;
+    19e0:	82 e0       	ldi	r24, 0x02	; 2
+    19e2:	e8 2e       	mov	r14, r24
+			case 0:
+			if(rxbyte == 0x55)
+			{
+				//rxdata.start = rxbyte;
+				rxdata.checksum = rxbyte;
+				rxcnt++;
+    19e4:	dd 24       	eor	r13, r13
+    19e6:	d3 94       	inc	r13
+			break;
+			
+			case 2:
+			rxdata.command = rxbyte;
+			rxdata.checksum += rxbyte;
+			rxcnt++;
+    19e8:	93 e0       	ldi	r25, 0x03	; 3
+    19ea:	f9 2e       	mov	r15, r25
+    19ec:	17 c0       	rjmp	.+46     	; 0x1a1c <UARTDataAvail+0x60>
+	uint8_t localcnt = count;
+	
+	for(uint8_t i = 0; i < localcnt; i++)
+	{
+		uint8_t rxbyte = rxbuf[i];
+		switch(rxcnt)
+    19ee:	81 30       	cpi	r24, 0x01	; 1
+    19f0:	08 f4       	brcc	.+2      	; 0x19f4 <UARTDataAvail+0x38>
+    19f2:	3f c0       	rjmp	.+126    	; 0x1a72 <UARTDataAvail+0xb6>
+    19f4:	82 30       	cpi	r24, 0x02	; 2
+    19f6:	31 f5       	brne	.+76     	; 0x1a44 <UARTDataAvail+0x88>
+				rxcnt = 0;
+			}
+			break;
+			
+			case 2:
+			rxdata.command = rxbyte;
+    19f8:	90 93 ec 05 	sts	0x05EC, r25	; 0x8005ec <rxdata+0x2>
+			rxdata.checksum += rxbyte;
+    19fc:	80 91 8d 06 	lds	r24, 0x068D	; 0x80068d <rxdata+0xa3>
+    1a00:	98 0f       	add	r25, r24
+    1a02:	90 93 8d 06 	sts	0x068D, r25	; 0x80068d <rxdata+0xa3>
+			rxcnt++;
+    1a06:	f0 92 f2 02 	sts	0x02F2, r15	; 0x8002f2 <__data_end>
+					ProcessCommand();
+				}
+				rxcnt = 0;
+			}
+		}
+		count--;
+    1a0a:	80 91 f6 02 	lds	r24, 0x02F6	; 0x8002f6 <count>
+    1a0e:	81 50       	subi	r24, 0x01	; 1
+    1a10:	80 93 f6 02 	sts	0x02F6, r24	; 0x8002f6 <count>
+    1a14:	21 96       	adiw	r28, 0x01	; 1
+void UARTDataAvail()
+{
+	static uint8_t rxcnt;
+	uint8_t localcnt = count;
+	
+	for(uint8_t i = 0; i < localcnt; i++)
+    1a16:	c0 17       	cp	r28, r16
+    1a18:	d1 07       	cpc	r29, r17
+    1a1a:	d1 f1       	breq	.+116    	; 0x1a90 <UARTDataAvail+0xd4>
+	{
+		uint8_t rxbyte = rxbuf[i];
+    1a1c:	fe 01       	movw	r30, r28
+    1a1e:	e8 50       	subi	r30, 0x08	; 8
+    1a20:	fd 4f       	sbci	r31, 0xFD	; 253
+    1a22:	90 81       	ld	r25, Z
+		switch(rxcnt)
+    1a24:	80 91 f2 02 	lds	r24, 0x02F2	; 0x8002f2 <__data_end>
+    1a28:	81 30       	cpi	r24, 0x01	; 1
+    1a2a:	09 f7       	brne	.-62     	; 0x19ee <UARTDataAvail+0x32>
+				rxcnt++;
+			}
+			break;
+			
+			case 1:
+			if(rxbyte < 100)
+    1a2c:	94 36       	cpi	r25, 0x64	; 100
+    1a2e:	68 f5       	brcc	.+90     	; 0x1a8a <UARTDataAvail+0xce>
+			{
+				rxdata.len = rxbyte;
+    1a30:	90 93 eb 05 	sts	0x05EB, r25	; 0x8005eb <rxdata+0x1>
+				rxdata.checksum += rxbyte;
+    1a34:	80 91 8d 06 	lds	r24, 0x068D	; 0x80068d <rxdata+0xa3>
+    1a38:	98 0f       	add	r25, r24
+    1a3a:	90 93 8d 06 	sts	0x068D, r25	; 0x80068d <rxdata+0xa3>
+				rxcnt++;
+    1a3e:	e0 92 f2 02 	sts	0x02F2, r14	; 0x8002f2 <__data_end>
+    1a42:	e3 cf       	rjmp	.-58     	; 0x1a0a <UARTDataAvail+0x4e>
+			rxdata.checksum += rxbyte;
+			rxcnt++;
+			break;
+			
+			default:
+			if(rxcnt < (rxdata.len + 3))
+    1a44:	20 91 eb 05 	lds	r18, 0x05EB	; 0x8005eb <rxdata+0x1>
+    1a48:	48 2f       	mov	r20, r24
+    1a4a:	50 e0       	ldi	r21, 0x00	; 0
+    1a4c:	30 e0       	ldi	r19, 0x00	; 0
+    1a4e:	2e 5f       	subi	r18, 0xFE	; 254
+    1a50:	3f 4f       	sbci	r19, 0xFF	; 255
+    1a52:	24 17       	cp	r18, r20
+    1a54:	35 07       	cpc	r19, r21
+    1a56:	a4 f0       	brlt	.+40     	; 0x1a80 <UARTDataAvail+0xc4>
+			{
+				rxdata.data[rxcnt - 3] = rxbyte;
+    1a58:	fa 01       	movw	r30, r20
+    1a5a:	e9 51       	subi	r30, 0x19	; 25
+    1a5c:	fa 4f       	sbci	r31, 0xFA	; 250
+    1a5e:	93 83       	std	Z+3, r25	; 0x03
+				rxdata.checksum += rxbyte;
+    1a60:	20 91 8d 06 	lds	r18, 0x068D	; 0x80068d <rxdata+0xa3>
+    1a64:	92 0f       	add	r25, r18
+    1a66:	90 93 8d 06 	sts	0x068D, r25	; 0x80068d <rxdata+0xa3>
+				rxcnt++;
+    1a6a:	8f 5f       	subi	r24, 0xFF	; 255
+    1a6c:	80 93 f2 02 	sts	0x02F2, r24	; 0x8002f2 <__data_end>
+    1a70:	cc cf       	rjmp	.-104    	; 0x1a0a <UARTDataAvail+0x4e>
+	{
+		uint8_t rxbyte = rxbuf[i];
+		switch(rxcnt)
+		{
+			case 0:
+			if(rxbyte == 0x55)
+    1a72:	95 35       	cpi	r25, 0x55	; 85
+    1a74:	51 f6       	brne	.-108    	; 0x1a0a <UARTDataAvail+0x4e>
+			{
+				//rxdata.start = rxbyte;
+				rxdata.checksum = rxbyte;
+    1a76:	90 93 8d 06 	sts	0x068D, r25	; 0x80068d <rxdata+0xa3>
+				rxcnt++;
+    1a7a:	d0 92 f2 02 	sts	0x02F2, r13	; 0x8002f2 <__data_end>
+    1a7e:	c5 cf       	rjmp	.-118    	; 0x1a0a <UARTDataAvail+0x4e>
+				rxdata.checksum += rxbyte;
+				rxcnt++;
+			}
+			else
+			{
+				if(rxbyte == rxdata.checksum)
+    1a80:	80 91 8d 06 	lds	r24, 0x068D	; 0x80068d <rxdata+0xa3>
+    1a84:	98 13       	cpse	r25, r24
+    1a86:	01 c0       	rjmp	.+2      	; 0x1a8a <UARTDataAvail+0xce>
+				{
+					ProcessCommand();
+    1a88:	c0 de       	rcall	.-640    	; 0x180a <ProcessCommand>
+				rxdata.checksum += rxbyte;
+				rxcnt++;
+			}
+			else
+			{
+				rxcnt = 0;
+    1a8a:	10 92 f2 02 	sts	0x02F2, r1	; 0x8002f2 <__data_end>
+    1a8e:	bd cf       	rjmp	.-134    	; 0x1a0a <UARTDataAvail+0x4e>
+				rxcnt = 0;
+			}
+		}
+		count--;
+	}
+}
+    1a90:	df 91       	pop	r29
+    1a92:	cf 91       	pop	r28
+    1a94:	1f 91       	pop	r17
+    1a96:	0f 91       	pop	r16
+    1a98:	ff 90       	pop	r15
+    1a9a:	ef 90       	pop	r14
+    1a9c:	df 90       	pop	r13
+    1a9e:	08 95       	ret
+
+00001aa0 <ManualCalibration>:
+	}
+	return 0;
+}
+
+void ManualCalibration(uint8_t ch)
+{
+    1aa0:	ef 92       	push	r14
+    1aa2:	ff 92       	push	r15
+    1aa4:	0f 93       	push	r16
+    1aa6:	1f 93       	push	r17
+    1aa8:	cf 93       	push	r28
+    1aaa:	df 93       	push	r29
+    1aac:	c8 2f       	mov	r28, r24
+	uint8_t drive = 0;
+	float vlow = 0.0, vhigh = 0.0;
+	
+	LCD_SendCmd(LCD_CLR);
+    1aae:	81 e0       	ldi	r24, 0x01	; 1
+    1ab0:	48 d5       	rcall	.+2704   	; 0x2542 <LCD_SendCmd>
+	LCD_SetPos(0, 0);
+    1ab2:	60 e0       	ldi	r22, 0x00	; 0
+    1ab4:	80 e0       	ldi	r24, 0x00	; 0
+    1ab6:	6a d5       	rcall	.+2772   	; 0x258c <LCD_SetPos>
+	fprintf(&lcd_stdout, "ÐÓ×Í. ÊÀËÈÁÐÎÂÊÀ");
+    1ab8:	24 e1       	ldi	r18, 0x14	; 20
+    1aba:	31 e0       	ldi	r19, 0x01	; 1
+    1abc:	40 e1       	ldi	r20, 0x10	; 16
+    1abe:	50 e0       	ldi	r21, 0x00	; 0
+    1ac0:	61 e0       	ldi	r22, 0x01	; 1
+    1ac2:	70 e0       	ldi	r23, 0x00	; 0
+    1ac4:	84 ed       	ldi	r24, 0xD4	; 212
+    1ac6:	91 e0       	ldi	r25, 0x01	; 1
+    1ac8:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+	
+	if(heater[ch].status.circuit == CIRC_MOSFET)
+    1acc:	ec 2e       	mov	r14, r28
+    1ace:	f1 2c       	mov	r15, r1
+    1ad0:	23 e1       	ldi	r18, 0x13	; 19
+    1ad2:	c2 9f       	mul	r28, r18
+    1ad4:	80 01       	movw	r16, r0
+    1ad6:	11 24       	eor	r1, r1
+    1ad8:	f8 01       	movw	r30, r16
+    1ada:	e0 5e       	subi	r30, 0xE0	; 224
+    1adc:	fc 4f       	sbci	r31, 0xFC	; 252
+    1ade:	80 81       	ld	r24, Z
+    1ae0:	98 2f       	mov	r25, r24
+    1ae2:	92 95       	swap	r25
+    1ae4:	96 95       	lsr	r25
+    1ae6:	96 95       	lsr	r25
+    1ae8:	93 70       	andi	r25, 0x03	; 3
+    1aea:	81 81       	ldd	r24, Z+1	; 0x01
+    1aec:	81 70       	andi	r24, 0x01	; 1
+    1aee:	88 0f       	add	r24, r24
+    1af0:	88 0f       	add	r24, r24
+    1af2:	89 2b       	or	r24, r25
+    1af4:	d0 e0       	ldi	r29, 0x00	; 0
+    1af6:	82 30       	cpi	r24, 0x02	; 2
+    1af8:	09 f4       	brne	.+2      	; 0x1afc <ManualCalibration+0x5c>
+    1afa:	5e c0       	rjmp	.+188    	; 0x1bb8 <ManualCalibration+0x118>
+		} while(heater[ch].current < 1000);
+		
+		drive--;
+	}
+	
+	while(heater[ch].status.calib == CAL_MANUAL)
+    1afc:	83 e1       	ldi	r24, 0x13	; 19
+    1afe:	8e 9d       	mul	r24, r14
+    1b00:	80 01       	movw	r16, r0
+    1b02:	8f 9d       	mul	r24, r15
+    1b04:	10 0d       	add	r17, r0
+    1b06:	11 24       	eor	r1, r1
+    1b08:	00 5e       	subi	r16, 0xE0	; 224
+    1b0a:	1c 4f       	sbci	r17, 0xFC	; 252
+    1b0c:	f8 01       	movw	r30, r16
+    1b0e:	80 81       	ld	r24, Z
+    1b10:	82 95       	swap	r24
+    1b12:	83 70       	andi	r24, 0x03	; 3
+    1b14:	82 30       	cpi	r24, 0x02	; 2
+    1b16:	a9 f5       	brne	.+106    	; 0x1b82 <ManualCalibration+0xe2>
+	{
+		if(count)
+    1b18:	80 91 f6 02 	lds	r24, 0x02F6	; 0x8002f6 <count>
+    1b1c:	81 11       	cpse	r24, r1
+    1b1e:	46 c0       	rjmp	.+140    	; 0x1bac <ManualCalibration+0x10c>
+		{
+			UARTDataAvail();
+		}
+		
+		if(txrequest)
+    1b20:	80 91 f3 02 	lds	r24, 0x02F3	; 0x8002f3 <txrequest>
+    1b24:	81 11       	cpse	r24, r1
+    1b26:	3f c0       	rjmp	.+126    	; 0x1ba6 <ManualCalibration+0x106>
+		{
+			Transmit();
+		}
+		
+		if(heater[ch].status.heating)
+    1b28:	f8 01       	movw	r30, r16
+    1b2a:	80 81       	ld	r24, Z
+    1b2c:	82 ff       	sbrs	r24, 2
+    1b2e:	33 c0       	rjmp	.+102    	; 0x1b96 <ManualCalibration+0xf6>
+		{
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+    1b30:	80 81       	ld	r24, Z
+    1b32:	98 2f       	mov	r25, r24
+    1b34:	92 95       	swap	r25
+    1b36:	96 95       	lsr	r25
+    1b38:	96 95       	lsr	r25
+    1b3a:	93 70       	andi	r25, 0x03	; 3
+    1b3c:	81 81       	ldd	r24, Z+1	; 0x01
+    1b3e:	81 70       	andi	r24, 0x01	; 1
+    1b40:	88 0f       	add	r24, r24
+    1b42:	88 0f       	add	r24, r24
+    1b44:	89 2b       	or	r24, r25
+    1b46:	82 30       	cpi	r24, 0x02	; 2
+    1b48:	99 f1       	breq	.+102    	; 0x1bb0 <ManualCalibration+0x110>
+    1b4a:	8c 2f       	mov	r24, r28
+    1b4c:	0e 94 17 01 	call	0x22e	; 0x22e <SwitchHeating.part.0>
+    1b50:	87 eb       	ldi	r24, 0xB7	; 183
+    1b52:	9b e0       	ldi	r25, 0x0B	; 11
+    1b54:	01 97       	sbiw	r24, 0x01	; 1
+    1b56:	f1 f7       	brne	.-4      	; 0x1b54 <ManualCalibration+0xb4>
+    1b58:	00 c0       	rjmp	.+0      	; 0x1b5a <ManualCalibration+0xba>
+    1b5a:	00 00       	nop
+				SwitchDrive(ch, ON);
+
+			SwitchHeating(ch, ON);
+			_delay_ms(1);
+			if(CurrMeasure(ch) > 2000)
+    1b5c:	8c 2f       	mov	r24, r28
+    1b5e:	0e 94 0c 04 	call	0x818	; 0x818 <CurrMeasure>
+    1b62:	81 3d       	cpi	r24, 0xD1	; 209
+    1b64:	97 40       	sbci	r25, 0x07	; 7
+    1b66:	90 f2       	brcs	.-92     	; 0x1b0c <ManualCalibration+0x6c>
+			{
+				drive--;
+    1b68:	d1 50       	subi	r29, 0x01	; 1
+				SetDriveData(ch, drive);
+    1b6a:	6d 2f       	mov	r22, r29
+    1b6c:	8c 2f       	mov	r24, r28
+    1b6e:	88 d6       	rcall	.+3344   	; 0x2880 <SetDriveData>
+				SwitchDrive(ch, ON);
+    1b70:	61 e0       	ldi	r22, 0x01	; 1
+    1b72:	8c 2f       	mov	r24, r28
+    1b74:	a4 d6       	rcall	.+3400   	; 0x28be <SwitchDrive>
+    1b76:	f8 01       	movw	r30, r16
+		} while(heater[ch].current < 1000);
+		
+		drive--;
+	}
+	
+	while(heater[ch].status.calib == CAL_MANUAL)
+    1b78:	80 81       	ld	r24, Z
+    1b7a:	82 95       	swap	r24
+    1b7c:	83 70       	andi	r24, 0x03	; 3
+    1b7e:	82 30       	cpi	r24, 0x02	; 2
+    1b80:	59 f2       	breq	.-106    	; 0x1b18 <ManualCalibration+0x78>
+    1b82:	80 81       	ld	r24, Z
+		{
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+		}
+	}
+	heater[ch].status.heating = OFF;
+    1b84:	8b 7f       	andi	r24, 0xFB	; 251
+    1b86:	80 83       	st	Z, r24
+    1b88:	df 91       	pop	r29
+}
+    1b8a:	cf 91       	pop	r28
+    1b8c:	1f 91       	pop	r17
+    1b8e:	0f 91       	pop	r16
+    1b90:	ff 90       	pop	r15
+    1b92:	ef 90       	pop	r14
+    1b94:	08 95       	ret
+    1b96:	60 e0       	ldi	r22, 0x00	; 0
+				SwitchDrive(ch, ON);
+			}
+		}
+		else
+		{
+			SwitchHeating(ch, OFF);
+    1b98:	8c 2f       	mov	r24, r28
+    1b9a:	0e 94 a3 05 	call	0xb46	; 0xb46 <SwitchHeating>
+			SwitchDrive(ch, OFF);
+    1b9e:	60 e0       	ldi	r22, 0x00	; 0
+    1ba0:	8c 2f       	mov	r24, r28
+    1ba2:	8d d6       	rcall	.+3354   	; 0x28be <SwitchDrive>
+    1ba4:	b3 cf       	rjmp	.-154    	; 0x1b0c <ManualCalibration+0x6c>
+			UARTDataAvail();
+		}
+		
+		if(txrequest)
+		{
+			Transmit();
+    1ba6:	0e 94 00 05 	call	0xa00	; 0xa00 <Transmit>
+	
+	while(heater[ch].status.calib == CAL_MANUAL)
+	{
+		if(count)
+		{
+			UARTDataAvail();
+    1baa:	be cf       	rjmp	.-132    	; 0x1b28 <ManualCalibration+0x88>
+    1bac:	07 df       	rcall	.-498    	; 0x19bc <UARTDataAvail>
+    1bae:	b8 cf       	rjmp	.-144    	; 0x1b20 <ManualCalibration+0x80>
+		}
+		
+		if(heater[ch].status.heating)
+		{
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+				SwitchDrive(ch, ON);
+    1bb0:	61 e0       	ldi	r22, 0x01	; 1
+    1bb2:	8c 2f       	mov	r24, r28
+    1bb4:	84 d6       	rcall	.+3336   	; 0x28be <SwitchDrive>
+    1bb6:	c9 cf       	rjmp	.-110    	; 0x1b4a <ManualCalibration+0xaa>
+    1bb8:	8f 01       	movw	r16, r30
+			_delay_ms(1);
+			CurrMeasure(ch);
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+			drive++;
+		} while(heater[ch].current < 1000);
+    1bba:	02 5f       	subi	r16, 0xF2	; 242
+    1bbc:	1f 4f       	sbci	r17, 0xFF	; 255
+    1bbe:	01 c0       	rjmp	.+2      	; 0x1bc2 <ManualCalibration+0x122>
+			SwitchHeating(ch, ON);
+			_delay_ms(1);
+			CurrMeasure(ch);
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+			drive++;
+    1bc0:	d2 2f       	mov	r29, r18
+	fprintf(&lcd_stdout, "ÐÓ×Í. ÊÀËÈÁÐÎÂÊÀ");
+	
+	if(heater[ch].status.circuit == CIRC_MOSFET)
+	{
+		do {
+			SetDriveData(ch, drive);
+    1bc2:	6d 2f       	mov	r22, r29
+    1bc4:	8c 2f       	mov	r24, r28
+    1bc6:	5c d6       	rcall	.+3256   	; 0x2880 <SetDriveData>
+    1bc8:	61 e0       	ldi	r22, 0x01	; 1
+			SwitchDrive(ch, ON);
+    1bca:	8c 2f       	mov	r24, r28
+    1bcc:	78 d6       	rcall	.+3312   	; 0x28be <SwitchDrive>
+    1bce:	8c 2f       	mov	r24, r28
+    1bd0:	0e 94 17 01 	call	0x22e	; 0x22e <SwitchHeating.part.0>
+    1bd4:	87 eb       	ldi	r24, 0xB7	; 183
+    1bd6:	9b e0       	ldi	r25, 0x0B	; 11
+    1bd8:	01 97       	sbiw	r24, 0x01	; 1
+    1bda:	f1 f7       	brne	.-4      	; 0x1bd8 <ManualCalibration+0x138>
+    1bdc:	00 c0       	rjmp	.+0      	; 0x1bde <ManualCalibration+0x13e>
+    1bde:	00 00       	nop
+    1be0:	8c 2f       	mov	r24, r28
+    1be2:	0e 94 0c 04 	call	0x818	; 0x818 <CurrMeasure>
+			SwitchHeating(ch, ON);
+			_delay_ms(1);
+			CurrMeasure(ch);
+    1be6:	60 e0       	ldi	r22, 0x00	; 0
+			SwitchHeating(ch, OFF);
+    1be8:	8c 2f       	mov	r24, r28
+    1bea:	0e 94 a3 05 	call	0xb46	; 0xb46 <SwitchHeating>
+    1bee:	60 e0       	ldi	r22, 0x00	; 0
+			SwitchDrive(ch, OFF);
+    1bf0:	8c 2f       	mov	r24, r28
+    1bf2:	65 d6       	rcall	.+3274   	; 0x28be <SwitchDrive>
+    1bf4:	21 e0       	ldi	r18, 0x01	; 1
+    1bf6:	2d 0f       	add	r18, r29
+			drive++;
+    1bf8:	f8 01       	movw	r30, r16
+    1bfa:	80 81       	ld	r24, Z
+		} while(heater[ch].current < 1000);
+    1bfc:	91 81       	ldd	r25, Z+1	; 0x01
+    1bfe:	88 3e       	cpi	r24, 0xE8	; 232
+    1c00:	93 40       	sbci	r25, 0x03	; 3
+    1c02:	f0 f2       	brcs	.-68     	; 0x1bc0 <ManualCalibration+0x120>
+    1c04:	7b cf       	rjmp	.-266    	; 0x1afc <ManualCalibration+0x5c>
+
+00001c06 <LoadingScreen>:
+    1c06:	ff 92       	push	r15
+    1c08:	0f 93       	push	r16
+			break;
+	}
+}
+
+void LoadingScreen()
+{
+    1c0a:	1f 93       	push	r17
+    1c0c:	cf 93       	push	r28
+    1c0e:	df 93       	push	r29
+    1c10:	8f e5       	ldi	r24, 0x5F	; 95
+    1c12:	9a ee       	ldi	r25, 0xEA	; 234
+    1c14:	01 97       	sbiw	r24, 0x01	; 1
+    1c16:	f1 f7       	brne	.-4      	; 0x1c14 <LoadingScreen+0xe>
+    1c18:	00 c0       	rjmp	.+0      	; 0x1c1a <LoadingScreen+0x14>
+    1c1a:	00 00       	nop
+	uint8_t c = 0xFF, i = 0, d = 0, btn = 0;
+	do
+	{
+		_delay_ms(20);
+		LCD_SetPos(i, 0);
+    1c1c:	60 e0       	ldi	r22, 0x00	; 0
+    1c1e:	80 e0       	ldi	r24, 0x00	; 0
+    1c20:	b5 d4       	rcall	.+2410   	; 0x258c <LCD_SetPos>
+		LCD_SendData(c);
+    1c22:	8f ef       	ldi	r24, 0xFF	; 255
+    1c24:	73 d4       	rcall	.+2278   	; 0x250c <LCD_SendData>
+		LCD_SetPos(15 - i, 1);
+    1c26:	61 e0       	ldi	r22, 0x01	; 1
+    1c28:	8f e0       	ldi	r24, 0x0F	; 15
+		LCD_SendData(c);
+    1c2a:	b0 d4       	rcall	.+2400   	; 0x258c <LCD_SetPos>
+    1c2c:	8f ef       	ldi	r24, 0xFF	; 255
+    1c2e:	6e d4       	rcall	.+2268   	; 0x250c <LCD_SendData>
+	}
+}
+
+void LoadingScreen()
+{
+	uint8_t c = 0xFF, i = 0, d = 0, btn = 0;
+    1c30:	10 e0       	ldi	r17, 0x00	; 0
+		_delay_ms(20);
+		LCD_SetPos(i, 0);
+		LCD_SendData(c);
+		LCD_SetPos(15 - i, 1);
+		LCD_SendData(c);
+		if(++i > 15)
+    1c32:	c1 e0       	ldi	r28, 0x01	; 1
+	}
+}
+
+void LoadingScreen()
+{
+	uint8_t c = 0xFF, i = 0, d = 0, btn = 0;
+    1c34:	df ef       	ldi	r29, 0xFF	; 255
+	do
+	{
+		_delay_ms(20);
+		LCD_SetPos(i, 0);
+		LCD_SendData(c);
+		LCD_SetPos(15 - i, 1);
+    1c36:	0f e0       	ldi	r16, 0x0F	; 15
+		LCD_SendData(c);
+		if(++i > 15)
+		{
+			c ^= ~' ';
+    1c38:	8f ed       	ldi	r24, 0xDF	; 223
+    1c3a:	f8 2e       	mov	r15, r24
+			i = 0;
+			d++;
+		}
+		btn = ~((BTNPIN >> 4) | 0xF0);
+    1c3c:	89 b1       	in	r24, 0x09	; 9
+	}
+	while(btn || (d < 2));
+    1c3e:	82 95       	swap	r24
+    1c40:	8f 70       	andi	r24, 0x0F	; 15
+    1c42:	80 6f       	ori	r24, 0xF0	; 240
+    1c44:	8f 3f       	cpi	r24, 0xFF	; 255
+    1c46:	e9 f0       	breq	.+58     	; 0x1c82 <LoadingScreen+0x7c>
+    1c48:	8f e5       	ldi	r24, 0x5F	; 95
+    1c4a:	9a ee       	ldi	r25, 0xEA	; 234
+    1c4c:	01 97       	sbiw	r24, 0x01	; 1
+    1c4e:	f1 f7       	brne	.-4      	; 0x1c4c <LoadingScreen+0x46>
+    1c50:	00 c0       	rjmp	.+0      	; 0x1c52 <LoadingScreen+0x4c>
+{
+	uint8_t c = 0xFF, i = 0, d = 0, btn = 0;
+	do
+	{
+		_delay_ms(20);
+		LCD_SetPos(i, 0);
+    1c52:	00 00       	nop
+    1c54:	60 e0       	ldi	r22, 0x00	; 0
+    1c56:	8c 2f       	mov	r24, r28
+		LCD_SendData(c);
+    1c58:	99 d4       	rcall	.+2354   	; 0x258c <LCD_SetPos>
+    1c5a:	8d 2f       	mov	r24, r29
+		LCD_SetPos(15 - i, 1);
+    1c5c:	57 d4       	rcall	.+2222   	; 0x250c <LCD_SendData>
+    1c5e:	61 e0       	ldi	r22, 0x01	; 1
+    1c60:	80 2f       	mov	r24, r16
+    1c62:	8c 1b       	sub	r24, r28
+    1c64:	93 d4       	rcall	.+2342   	; 0x258c <LCD_SetPos>
+		LCD_SendData(c);
+    1c66:	8d 2f       	mov	r24, r29
+    1c68:	51 d4       	rcall	.+2210   	; 0x250c <LCD_SendData>
+    1c6a:	cf 5f       	subi	r28, 0xFF	; 255
+		if(++i > 15)
+    1c6c:	c0 31       	cpi	r28, 0x10	; 16
+    1c6e:	31 f7       	brne	.-52     	; 0x1c3c <LoadingScreen+0x36>
+    1c70:	df 25       	eor	r29, r15
+		{
+			c ^= ~' ';
+    1c72:	1f 5f       	subi	r17, 0xFF	; 255
+			i = 0;
+			d++;
+    1c74:	c0 e0       	ldi	r28, 0x00	; 0
+		LCD_SetPos(15 - i, 1);
+		LCD_SendData(c);
+		if(++i > 15)
+		{
+			c ^= ~' ';
+			i = 0;
+    1c76:	89 b1       	in	r24, 0x09	; 9
+			d++;
+		}
+		btn = ~((BTNPIN >> 4) | 0xF0);
+    1c78:	82 95       	swap	r24
+	}
+	while(btn || (d < 2));
+    1c7a:	8f 70       	andi	r24, 0x0F	; 15
+    1c7c:	80 6f       	ori	r24, 0xF0	; 240
+    1c7e:	8f 3f       	cpi	r24, 0xFF	; 255
+    1c80:	19 f7       	brne	.-58     	; 0x1c48 <LoadingScreen+0x42>
+    1c82:	12 30       	cpi	r17, 0x02	; 2
+    1c84:	08 f3       	brcs	.-62     	; 0x1c48 <LoadingScreen+0x42>
+	LCD_SendCmd(LCD_CLR);
+    1c86:	81 e0       	ldi	r24, 0x01	; 1
+}
+    1c88:	df 91       	pop	r29
+    1c8a:	cf 91       	pop	r28
+    1c8c:	1f 91       	pop	r17
+    1c8e:	0f 91       	pop	r16
+    1c90:	ff 90       	pop	r15
+			d++;
+		}
+		btn = ~((BTNPIN >> 4) | 0xF0);
+	}
+	while(btn || (d < 2));
+	LCD_SendCmd(LCD_CLR);
+    1c92:	57 c4       	rjmp	.+2222   	; 0x2542 <LCD_SendCmd>
+
+00001c94 <main>:
+    1c94:	cf 93       	push	r28
+}
+
+int main()
+{
+    1c96:	df 93       	push	r29
+    1c98:	00 d0       	rcall	.+0      	; 0x1c9a <main+0x6>
+    1c9a:	00 d0       	rcall	.+0      	; 0x1c9c <main+0x8>
+    1c9c:	cd b7       	in	r28, 0x3d	; 61
+    1c9e:	de b7       	in	r29, 0x3e	; 62
+	uint8_t ch = CH0;
+	uint8_t tmp = 0;
+	uint8_t display = DISP_MAIN;
+	btn_t button;
+	
+	menu_str *menu = (menu_str*)calloc(sizeof(menu_str), 1);
+    1ca0:	61 e0       	ldi	r22, 0x01	; 1
+    1ca2:	70 e0       	ldi	r23, 0x00	; 0
+    1ca4:	83 e0       	ldi	r24, 0x03	; 3
+    1ca6:	90 e0       	ldi	r25, 0x00	; 0
+    1ca8:	0e 94 3f 1b 	call	0x367e	; 0x367e <calloc>
+    1cac:	4c 01       	movw	r8, r24
+	
+	memset(heater, 0x00, sizeof(heater));
+    1cae:	86 e2       	ldi	r24, 0x26	; 38
+    1cb0:	e0 e2       	ldi	r30, 0x20	; 32
+    1cb2:	f3 e0       	ldi	r31, 0x03	; 3
+    1cb4:	df 01       	movw	r26, r30
+    1cb6:	1d 92       	st	X+, r1
+    1cb8:	8a 95       	dec	r24
+    1cba:	e9 f7       	brne	.-6      	; 0x1cb6 <main+0x22>
+	memset(opamp,  0x00, sizeof(opamp));
+    1cbc:	8a e1       	ldi	r24, 0x1A	; 26
+    1cbe:	ee e8       	ldi	r30, 0x8E	; 142
+    1cc0:	f6 e0       	ldi	r31, 0x06	; 6
+    1cc2:	df 01       	movw	r26, r30
+    1cc4:	1d 92       	st	X+, r1
+    1cc6:	8a 95       	dec	r24
+    1cc8:	e9 f7       	brne	.-6      	; 0x1cc4 <main+0x30>
+	memset(preset, 0x00, sizeof(preset));
+    1cca:	80 ea       	ldi	r24, 0xA0	; 160
+    1ccc:	e6 e4       	ldi	r30, 0x46	; 70
+    1cce:	f3 e0       	ldi	r31, 0x03	; 3
+    1cd0:	df 01       	movw	r26, r30
+    1cd2:	1d 92       	st	X+, r1
+    1cd4:	8a 95       	dec	r24
+    1cd6:	e9 f7       	brne	.-6      	; 0x1cd2 <main+0x3e>
+
+	opamp[CH0].ch = heater[CH0].status.channel = CH0;
+    1cd8:	80 91 20 03 	lds	r24, 0x0320	; 0x800320 <heater>
+    1cdc:	8e 7f       	andi	r24, 0xFE	; 254
+    1cde:	80 93 20 03 	sts	0x0320, r24	; 0x800320 <heater>
+	opamp[CH1].ch = heater[CH1].status.channel = CH1;
+    1ce2:	80 91 33 03 	lds	r24, 0x0333	; 0x800333 <heater+0x13>
+    1ce6:	81 60       	ori	r24, 0x01	; 1
+    1ce8:	80 93 33 03 	sts	0x0333, r24	; 0x800333 <heater+0x13>
+    1cec:	81 e0       	ldi	r24, 0x01	; 1
+    1cee:	80 93 9b 06 	sts	0x069B, r24	; 0x80069b <opamp+0xd>
+	
+	heater[CH0].tset = heater[CH1].tset = 25;
+    1cf2:	89 e1       	ldi	r24, 0x19	; 25
+    1cf4:	90 e0       	ldi	r25, 0x00	; 0
+    1cf6:	90 93 3e 03 	sts	0x033E, r25	; 0x80033e <heater+0x1e>
+    1cfa:	80 93 3d 03 	sts	0x033D, r24	; 0x80033d <heater+0x1d>
+    1cfe:	90 93 2b 03 	sts	0x032B, r25	; 0x80032b <heater+0xb>
+    1d02:	80 93 2a 03 	sts	0x032A, r24	; 0x80032a <heater+0xa>
+
+	stdout = &uart_stdout;
+    1d06:	86 e0       	ldi	r24, 0x06	; 6
+    1d08:	91 e0       	ldi	r25, 0x01	; 1
+    1d0a:	90 93 af 06 	sts	0x06AF, r25	; 0x8006af <__iob+0x3>
+    1d0e:	80 93 ae 06 	sts	0x06AE, r24	; 0x8006ae <__iob+0x2>
+	
+	init();
+    1d12:	0e 94 23 02 	call	0x446	; 0x446 <init>
+	LCD_Init();
+    1d16:	6f d4       	rcall	.+2270   	; 0x25f6 <LCD_Init>
+	
+	LoadingScreen();
+    1d18:	76 df       	rcall	.-276    	; 0x1c06 <LoadingScreen>
+
+	LoadPrefs();
+    1d1a:	e2 d5       	rcall	.+3012   	; 0x28e0 <LoadPrefs>
+	LoadPreset(CH0);
+    1d1c:	80 e0       	ldi	r24, 0x00	; 0
+    1d1e:	2e d6       	rcall	.+3164   	; 0x297c <LoadPreset>
+	LoadPreset(CH1);
+    1d20:	81 e0       	ldi	r24, 0x01	; 1
+    1d22:	2c d6       	rcall	.+3160   	; 0x297c <LoadPreset>
+    1d24:	80 e0       	ldi	r24, 0x00	; 0
+	
+	//SwitchPower(ON);
+	
+	CircuitDetect(CH0);
+    1d26:	0e 94 23 06 	call	0xc46	; 0xc46 <CircuitDetect>
+    1d2a:	81 e0       	ldi	r24, 0x01	; 1
+	CircuitDetect(CH1);
+    1d2c:	0e 94 23 06 	call	0xc46	; 0xc46 <CircuitDetect>
+    1d30:	78 94       	sei
+	
+	sei();
+    1d32:	0e 94 00 05 	call	0xa00	; 0xa00 <Transmit>
+	
+	Transmit();
+    1d36:	11 e0       	ldi	r17, 0x01	; 1
+
+int main()
+{
+	uint8_t ch = CH0;
+	uint8_t tmp = 0;
+	uint8_t display = DISP_MAIN;
+    1d38:	1b 82       	std	Y+3, r1	; 0x03
+	LCD_SendCmd(LCD_CLR);
+}
+
+int main()
+{
+	uint8_t ch = CH0;
+    1d3a:	77 e0       	ldi	r23, 0x07	; 7
+			/* ------------- DISPLAY SECTION ----------------- */
+			tick2 = 0;
+			if(display == DISP_MAIN)
+			{
+				LCD_SetPos(0, 0);
+				fprintf(&lcd_stdout, "K%.1u #%.2u  Tï=", ch + 1, heater[ch].preset);
+    1d3c:	27 2e       	mov	r2, r23
+    1d3e:	72 e0       	ldi	r23, 0x02	; 2
+    1d40:	37 2e       	mov	r3, r23
+    1d42:	b9 81       	ldd	r27, Y+1	; 0x01
+    1d44:	bc 83       	std	Y+4, r27	; 0x04
+    1d46:	80 91 f6 02 	lds	r24, 0x02F6	; 0x8002f6 <count>
+	
+	Transmit();
+	
+	while(1)
+    {
+		if(count)
+    1d4a:	81 11       	cpse	r24, r1
+    1d4c:	9e c0       	rjmp	.+316    	; 0x1e8a <main+0x1f6>
+    1d4e:	80 91 f3 02 	lds	r24, 0x02F3	; 0x8002f3 <txrequest>
+		{
+			UARTDataAvail();
+		}
+		
+		if(txrequest)
+    1d52:	81 11       	cpse	r24, r1
+    1d54:	66 c0       	rjmp	.+204    	; 0x1e22 <main+0x18e>
+    1d56:	80 91 20 03 	lds	r24, 0x0320	; 0x800320 <heater>
+		{
+			Transmit();
+		}
+		
+		if(heater[CH0].status.ocp || heater[CH1].status.ocp)
+    1d5a:	83 fd       	sbrc	r24, 3
+    1d5c:	68 c0       	rjmp	.+208    	; 0x1e2e <main+0x19a>
+    1d5e:	80 91 33 03 	lds	r24, 0x0333	; 0x800333 <heater+0x13>
+    1d62:	83 fd       	sbrc	r24, 3
+    1d64:	64 c0       	rjmp	.+200    	; 0x1e2e <main+0x19a>
+    1d66:	80 91 f5 02 	lds	r24, 0x02F5	; 0x8002f5 <tick1>
+			fprintf(&lcd_stdout, " ÄËß ÑÁÐÎÑÀ");
+			while(((BTNPIN >> 4) | 0xF0) != 0xF7);
+			ResetMCU();
+		}
+		
+		if(tick1)
+    1d6a:	81 11       	cpse	r24, r1
+    1d6c:	90 c0       	rjmp	.+288    	; 0x1e8e <main+0x1fa>
+    1d6e:	80 91 f4 02 	lds	r24, 0x02F4	; 0x8002f4 <tick2>
+				}
+			}
+			ch = tmp;
+		} ////// if(tick1) end
+		
+		if(tick2)
+    1d72:	88 23       	and	r24, r24
+    1d74:	41 f0       	breq	.+16     	; 0x1d86 <main+0xf2>
+    1d76:	10 92 f4 02 	sts	0x02F4, r1	; 0x8002f4 <tick2>
+		{
+			/* ------------- DISPLAY SECTION ----------------- */
+			tick2 = 0;
+    1d7a:	11 30       	cpi	r17, 0x01	; 1
+			if(display == DISP_MAIN)
+    1d7c:	09 f4       	brne	.+2      	; 0x1d80 <main+0xec>
+    1d7e:	2d c1       	rjmp	.+602    	; 0x1fda <main+0x346>
+    1d80:	13 30       	cpi	r17, 0x03	; 3
+						button.holded = 1;
+						btn_act = 1;
+					}
+				}
+			}
+			else if(display == DISP_VER)
+    1d82:	09 f4       	brne	.+2      	; 0x1d86 <main+0xf2>
+    1d84:	2a c2       	rjmp	.+1108   	; 0x21da <main+0x546>
+    1d86:	80 91 f7 02 	lds	r24, 0x02F7	; 0x8002f7 <btn_act>
+			//txrequest = REQ_MAINDATA;
+			//Transmit();
+		} ////// if(tick2) end
+		
+		/* ---------------- BUTTON SECTION --------------- */
+		if(btn_act)
+    1d8a:	88 23       	and	r24, r24
+    1d8c:	e1 f2       	breq	.-72     	; 0x1d46 <main+0xb2>
+    1d8e:	8f e5       	ldi	r24, 0x5F	; 95
+    1d90:	9a ee       	ldi	r25, 0xEA	; 234
+    1d92:	01 97       	sbiw	r24, 0x01	; 1
+    1d94:	f1 f7       	brne	.-4      	; 0x1d92 <main+0xfe>
+    1d96:	00 c0       	rjmp	.+0      	; 0x1d98 <main+0x104>
+    1d98:	00 00       	nop
+    1d9a:	10 92 f7 02 	sts	0x02F7, r1	; 0x8002f7 <btn_act>
+		{
+			_delay_ms(20);
+			btn_act = 0;
+    1d9e:	89 b1       	in	r24, 0x09	; 9
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+    1da0:	82 95       	swap	r24
+    1da2:	8f 70       	andi	r24, 0x0F	; 15
+    1da4:	80 95       	com	r24
+    1da6:	8f 70       	andi	r24, 0x0F	; 15
+    1da8:	94 2d       	mov	r25, r4
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+    1daa:	92 95       	swap	r25
+    1dac:	90 7f       	andi	r25, 0xF0	; 240
+    1dae:	98 2b       	or	r25, r24
+    1db0:	88 23       	and	r24, r24
+    1db2:	09 f4       	brne	.+2      	; 0x1db6 <main+0x122>
+    1db4:	d7 c0       	rjmp	.+430    	; 0x1f64 <main+0x2d0>
+    1db6:	9c 81       	ldd	r25, Y+4	; 0x04
+    1db8:	60 fa       	bst	r6, 0
+    1dba:	90 f9       	bld	r25, 0
+    1dbc:	50 fa       	bst	r5, 0
+    1dbe:	91 f9       	bld	r25, 1
+    1dc0:	70 fa       	bst	r7, 0
+    1dc2:	92 f9       	bld	r25, 2
+    1dc4:	97 70       	andi	r25, 0x07	; 7
+    1dc6:	99 83       	std	Y+1, r25	; 0x01
+    1dc8:	90 2f       	mov	r25, r16
+    1dca:	99 0f       	add	r25, r25
+    1dcc:	99 0f       	add	r25, r25
+    1dce:	99 0f       	add	r25, r25
+    1dd0:	a9 81       	ldd	r26, Y+1	; 0x01
+    1dd2:	a9 2b       	or	r26, r25
+    1dd4:	ac 83       	std	Y+4, r26	; 0x04
+    1dd6:	a2 fd       	sbrc	r26, 2
+    1dd8:	df c0       	rjmp	.+446    	; 0x1f98 <main+0x304>
+    1dda:	11 30       	cpi	r17, 0x01	; 1
+			{
+				if(display == DISP_MAIN)
+    1ddc:	09 f0       	breq	.+2      	; 0x1de0 <main+0x14c>
+    1dde:	b3 cf       	rjmp	.-154    	; 0x1d46 <main+0xb2>
+    1de0:	82 30       	cpi	r24, 0x02	; 2
+				{
+					button.pressed = 1;
+					button.released = 0;
+					button.prev_code = button.code;
+					switch(button.code)
+    1de2:	09 f4       	brne	.+2      	; 0x1de6 <main+0x152>
+    1de4:	d9 c2       	rjmp	.+1458   	; 0x2398 <main+0x704>
+    1de6:	08 f4       	brcc	.+2      	; 0x1dea <main+0x156>
+    1de8:	c6 c2       	rjmp	.+1420   	; 0x2376 <main+0x6e2>
+    1dea:	83 30       	cpi	r24, 0x03	; 3
+    1dec:	09 f4       	brne	.+2      	; 0x1df0 <main+0x15c>
+    1dee:	ec c2       	rjmp	.+1496   	; 0x23c8 <main+0x734>
+    1df0:	84 30       	cpi	r24, 0x04	; 4
+    1df2:	09 f0       	breq	.+2      	; 0x1df6 <main+0x162>
+    1df4:	e4 c2       	rjmp	.+1480   	; 0x23be <main+0x72a>
+    1df6:	d4 01       	movw	r26, r8
+							LCD_SendCmd(LCD_CLR);
+							display = DISP_VER;
+							break;
+							
+						case 0x04:
+							menu->set = (menu->set + 1) % 3;
+    1df8:	8c 91       	ld	r24, X
+    1dfa:	90 e0       	ldi	r25, 0x00	; 0
+    1dfc:	01 96       	adiw	r24, 0x01	; 1
+    1dfe:	63 e0       	ldi	r22, 0x03	; 3
+    1e00:	70 e0       	ldi	r23, 0x00	; 0
+    1e02:	0e 94 cc 1a 	call	0x3598	; 0x3598 <__divmodhi4>
+    1e06:	f4 01       	movw	r30, r8
+    1e08:	80 83       	st	Z, r24
+    1e0a:	88 23       	and	r24, r24
+							if(menu->set == 0)
+    1e0c:	09 f4       	brne	.+2      	; 0x1e10 <main+0x17c>
+    1e0e:	ee c2       	rjmp	.+1500   	; 0x23ec <main+0x758>
+    1e10:	d4 01       	movw	r26, r8
+								SavePrefs();
+							menu->blink_cnt = 0;
+    1e12:	11 96       	adiw	r26, 0x01	; 1
+    1e14:	1c 92       	st	X, r1
+    1e16:	84 e0       	ldi	r24, 0x04	; 4
+							break;
+    1e18:	48 2e       	mov	r4, r24
+    1e1a:	51 2c       	mov	r5, r1
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    1e1c:	66 24       	eor	r6, r6
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    1e1e:	63 94       	inc	r6
+    1e20:	92 cf       	rjmp	.-220    	; 0x1d46 <main+0xb2>
+						case 0x04:
+							menu->set = (menu->set + 1) % 3;
+							if(menu->set == 0)
+								SavePrefs();
+							menu->blink_cnt = 0;
+							break;
+    1e22:	0e 94 00 05 	call	0xa00	; 0xa00 <Transmit>
+			UARTDataAvail();
+		}
+		
+		if(txrequest)
+		{
+			Transmit();
+    1e26:	80 91 20 03 	lds	r24, 0x0320	; 0x800320 <heater>
+		}
+		
+		if(heater[CH0].status.ocp || heater[CH1].status.ocp)
+    1e2a:	83 ff       	sbrs	r24, 3
+    1e2c:	98 cf       	rjmp	.-208    	; 0x1d5e <main+0xca>
+		{
+			LCD_SetPos(0, 0);
+    1e2e:	60 e0       	ldi	r22, 0x00	; 0
+    1e30:	80 e0       	ldi	r24, 0x00	; 0
+    1e32:	ac d3       	rcall	.+1880   	; 0x258c <LCD_SetPos>
+    1e34:	24 e1       	ldi	r18, 0x14	; 20
+			fprintf(&lcd_stdout, "ÇÀÙÈÒÀ ÏÎ ÒÎÊÓ!!");
+    1e36:	31 e0       	ldi	r19, 0x01	; 1
+    1e38:	40 e1       	ldi	r20, 0x10	; 16
+    1e3a:	50 e0       	ldi	r21, 0x00	; 0
+    1e3c:	61 e0       	ldi	r22, 0x01	; 1
+    1e3e:	70 e0       	ldi	r23, 0x00	; 0
+    1e40:	85 ee       	ldi	r24, 0xE5	; 229
+    1e42:	91 e0       	ldi	r25, 0x01	; 1
+    1e44:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+			LCD_SetPos(0, 1);
+    1e48:	61 e0       	ldi	r22, 0x01	; 1
+    1e4a:	80 e0       	ldi	r24, 0x00	; 0
+    1e4c:	9f d3       	rcall	.+1854   	; 0x258c <LCD_SetPos>
+    1e4e:	24 e1       	ldi	r18, 0x14	; 20
+			fprintf(&lcd_stdout, "ÍÀÆ.");
+    1e50:	31 e0       	ldi	r19, 0x01	; 1
+    1e52:	44 e0       	ldi	r20, 0x04	; 4
+    1e54:	50 e0       	ldi	r21, 0x00	; 0
+    1e56:	61 e0       	ldi	r22, 0x01	; 1
+    1e58:	70 e0       	ldi	r23, 0x00	; 0
+    1e5a:	86 ef       	ldi	r24, 0xF6	; 246
+    1e5c:	91 e0       	ldi	r25, 0x01	; 1
+    1e5e:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+			LCD_SendData(0x00);
+    1e62:	80 e0       	ldi	r24, 0x00	; 0
+    1e64:	53 d3       	rcall	.+1702   	; 0x250c <LCD_SendData>
+    1e66:	24 e1       	ldi	r18, 0x14	; 20
+			fprintf(&lcd_stdout, " ÄËß ÑÁÐÎÑÀ");
+    1e68:	31 e0       	ldi	r19, 0x01	; 1
+    1e6a:	4b e0       	ldi	r20, 0x0B	; 11
+    1e6c:	50 e0       	ldi	r21, 0x00	; 0
+    1e6e:	61 e0       	ldi	r22, 0x01	; 1
+    1e70:	70 e0       	ldi	r23, 0x00	; 0
+    1e72:	8b ef       	ldi	r24, 0xFB	; 251
+    1e74:	91 e0       	ldi	r25, 0x01	; 1
+    1e76:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+    1e7a:	89 b1       	in	r24, 0x09	; 9
+			while(((BTNPIN >> 4) | 0xF0) != 0xF7);
+    1e7c:	82 95       	swap	r24
+    1e7e:	8f 70       	andi	r24, 0x0F	; 15
+    1e80:	80 6f       	ori	r24, 0xF0	; 240
+    1e82:	87 3f       	cpi	r24, 0xF7	; 247
+    1e84:	d1 f7       	brne	.-12     	; 0x1e7a <main+0x1e6>
+			ResetMCU();
+    1e86:	0e 94 9c 05 	call	0xb38	; 0xb38 <ResetMCU>
+	
+	while(1)
+    {
+		if(count)
+		{
+			UARTDataAvail();
+    1e8a:	98 dd       	rcall	.-1232   	; 0x19bc <UARTDataAvail>
+    1e8c:	60 cf       	rjmp	.-320    	; 0x1d4e <main+0xba>
+    1e8e:	10 92 f5 02 	sts	0x02F5, r1	; 0x8002f5 <tick1>
+		}
+		
+		if(tick1)
+		{
+			/* ------------- MEASURING SECTION ----------------- */
+			tick1 = 0;
+    1e92:	0e 94 7b 02 	call	0x4f6	; 0x4f6 <MAX_ReadData>
+			MAX_ReadData();
+    1e96:	e1 2c       	mov	r14, r1
+    1e98:	f1 2c       	mov	r15, r1
+    1e9a:	de 2c       	mov	r13, r14
+    1e9c:	8e 2d       	mov	r24, r14
+			
+			tmp = ch;
+			for(uint8_t ch = CH0; ch <= CH1; ch++)
+			{
+				if(CurrMeasure(ch) > CURR_MAX)
+    1e9e:	0e 94 0c 04 	call	0x818	; 0x818 <CurrMeasure>
+    1ea2:	85 3c       	cpi	r24, 0xC5	; 197
+    1ea4:	99 40       	sbci	r25, 0x09	; 9
+    1ea6:	58 f0       	brcs	.+22     	; 0x1ebe <main+0x22a>
+    1ea8:	23 e1       	ldi	r18, 0x13	; 19
+				{
+					heater[ch].status.onoff = OFF;
+    1eaa:	2e 9d       	mul	r18, r14
+    1eac:	f0 01       	movw	r30, r0
+    1eae:	2f 9d       	mul	r18, r15
+    1eb0:	f0 0d       	add	r31, r0
+    1eb2:	11 24       	eor	r1, r1
+    1eb4:	e0 5e       	subi	r30, 0xE0	; 224
+    1eb6:	fc 4f       	sbci	r31, 0xFC	; 252
+    1eb8:	80 81       	ld	r24, Z
+    1eba:	8d 7f       	andi	r24, 0xFD	; 253
+    1ebc:	80 83       	st	Z, r24
+				}
+				SwitchHeating(ch, OFF);
+    1ebe:	60 e0       	ldi	r22, 0x00	; 0
+    1ec0:	8d 2d       	mov	r24, r13
+    1ec2:	0e 94 a3 05 	call	0xb46	; 0xb46 <SwitchHeating>
+				SwitchDrive(ch, OFF);
+    1ec6:	60 e0       	ldi	r22, 0x00	; 0
+    1ec8:	8d 2d       	mov	r24, r13
+    1eca:	f9 d4       	rcall	.+2546   	; 0x28be <SwitchDrive>
+    1ecc:	87 eb       	ldi	r24, 0xB7	; 183
+    1ece:	9b e0       	ldi	r25, 0x0B	; 11
+    1ed0:	01 97       	sbiw	r24, 0x01	; 1
+    1ed2:	f1 f7       	brne	.-4      	; 0x1ed0 <main+0x23c>
+    1ed4:	00 c0       	rjmp	.+0      	; 0x1ed6 <main+0x242>
+    1ed6:	00 00       	nop
+    1ed8:	8d 2d       	mov	r24, r13
+				_delay_ms(1);
+
+				CircuitDetect(ch);
+    1eda:	0e 94 23 06 	call	0xc46	; 0xc46 <CircuitDetect>
+    1ede:	8d 2d       	mov	r24, r13
+				TMeasure(ch);
+    1ee0:	0e 94 ca 03 	call	0x794	; 0x794 <TMeasure>
+    1ee4:	93 e1       	ldi	r25, 0x13	; 19
+					
+				if(heater[ch].status.circuit == CIRC_OPEN)
+    1ee6:	9e 9d       	mul	r25, r14
+    1ee8:	f0 01       	movw	r30, r0
+    1eea:	9f 9d       	mul	r25, r15
+    1eec:	f0 0d       	add	r31, r0
+    1eee:	11 24       	eor	r1, r1
+    1ef0:	e0 5e       	subi	r30, 0xE0	; 224
+    1ef2:	fc 4f       	sbci	r31, 0xFC	; 252
+    1ef4:	80 81       	ld	r24, Z
+    1ef6:	98 2f       	mov	r25, r24
+    1ef8:	92 95       	swap	r25
+    1efa:	96 95       	lsr	r25
+    1efc:	96 95       	lsr	r25
+    1efe:	93 70       	andi	r25, 0x03	; 3
+    1f00:	81 81       	ldd	r24, Z+1	; 0x01
+    1f02:	81 70       	andi	r24, 0x01	; 1
+    1f04:	88 0f       	add	r24, r24
+    1f06:	88 0f       	add	r24, r24
+    1f08:	89 2b       	or	r24, r25
+    1f0a:	61 f4       	brne	.+24     	; 0x1f24 <main+0x290>
+    1f0c:	80 81       	ld	r24, Z
+				{
+					heater[ch].status.onoff = OFF;
+    1f0e:	8d 7f       	andi	r24, 0xFD	; 253
+    1f10:	80 83       	st	Z, r24
+    1f12:	af ef       	ldi	r26, 0xFF	; 255
+    1f14:	ea 1a       	sub	r14, r26
+    1f16:	fa 0a       	sbc	r15, r26
+    1f18:	b2 e0       	ldi	r27, 0x02	; 2
+			/* ------------- MEASURING SECTION ----------------- */
+			tick1 = 0;
+			MAX_ReadData();
+			
+			tmp = ch;
+			for(uint8_t ch = CH0; ch <= CH1; ch++)
+    1f1a:	eb 16       	cp	r14, r27
+    1f1c:	f1 04       	cpc	r15, r1
+    1f1e:	09 f0       	breq	.+2      	; 0x1f22 <main+0x28e>
+    1f20:	bc cf       	rjmp	.-136    	; 0x1e9a <main+0x206>
+    1f22:	25 cf       	rjmp	.-438    	; 0x1d6e <main+0xda>
+    1f24:	80 81       	ld	r24, Z
+					
+				if(heater[ch].status.circuit == CIRC_OPEN)
+				{
+					heater[ch].status.onoff = OFF;
+				}
+				else if(heater[ch].status.circuit == CIRC_RES)
+    1f26:	98 2f       	mov	r25, r24
+    1f28:	92 95       	swap	r25
+    1f2a:	96 95       	lsr	r25
+    1f2c:	96 95       	lsr	r25
+    1f2e:	93 70       	andi	r25, 0x03	; 3
+    1f30:	81 81       	ldd	r24, Z+1	; 0x01
+    1f32:	81 70       	andi	r24, 0x01	; 1
+    1f34:	88 0f       	add	r24, r24
+    1f36:	88 0f       	add	r24, r24
+    1f38:	89 2b       	or	r24, r25
+    1f3a:	84 30       	cpi	r24, 0x04	; 4
+    1f3c:	d1 f1       	breq	.+116    	; 0x1fb2 <main+0x31e>
+    1f3e:	80 81       	ld	r24, Z
+						SwitchHeating(ch, OFF);
+					}
+				}
+				else
+				{
+					if((heater[ch].status.onoff == ON) && (heater[ch].tmeas < heater[ch].tset))
+    1f40:	81 ff       	sbrs	r24, 1
+    1f42:	08 c0       	rjmp	.+16     	; 0x1f54 <main+0x2c0>
+    1f44:	86 81       	ldd	r24, Z+6	; 0x06
+    1f46:	97 81       	ldd	r25, Z+7	; 0x07
+    1f48:	22 85       	ldd	r18, Z+10	; 0x0a
+    1f4a:	33 85       	ldd	r19, Z+11	; 0x0b
+    1f4c:	82 17       	cp	r24, r18
+    1f4e:	93 07       	cpc	r25, r19
+    1f50:	08 f4       	brcc	.+2      	; 0x1f54 <main+0x2c0>
+    1f52:	74 c1       	rjmp	.+744    	; 0x223c <main+0x5a8>
+						SwitchDrive(ch, ON);
+						SwitchHeating(ch, ON);
+					}
+					else
+					{
+						SwitchDrive(ch, OFF);
+    1f54:	60 e0       	ldi	r22, 0x00	; 0
+    1f56:	8d 2d       	mov	r24, r13
+    1f58:	b2 d4       	rcall	.+2404   	; 0x28be <SwitchDrive>
+    1f5a:	60 e0       	ldi	r22, 0x00	; 0
+						SwitchHeating(ch, OFF);
+    1f5c:	8d 2d       	mov	r24, r13
+    1f5e:	0e 94 a3 05 	call	0xb46	; 0xb46 <SwitchHeating>
+    1f62:	d7 cf       	rjmp	.-82     	; 0x1f12 <main+0x27e>
+    1f64:	bc 81       	ldd	r27, Y+4	; 0x04
+					} ////// switch(btn_code) end
+				} ////// if(display == ON) end
+			}
+			else if(button.code == 0) // Button up event
+			{
+				if(!button.holded)
+    1f66:	60 fa       	bst	r6, 0
+    1f68:	b0 f9       	bld	r27, 0
+    1f6a:	50 fa       	bst	r5, 0
+    1f6c:	b1 f9       	bld	r27, 1
+    1f6e:	70 fa       	bst	r7, 0
+    1f70:	b2 f9       	bld	r27, 2
+    1f72:	00 0f       	add	r16, r16
+    1f74:	00 0f       	add	r16, r16
+    1f76:	00 0f       	add	r16, r16
+    1f78:	b7 70       	andi	r27, 0x07	; 7
+    1f7a:	b0 2b       	or	r27, r16
+    1f7c:	bc 83       	std	Y+4, r27	; 0x04
+    1f7e:	b2 fd       	sbrc	r27, 2
+    1f80:	26 c0       	rjmp	.+76     	; 0x1fce <main+0x33a>
+    1f82:	90 7f       	andi	r25, 0xF0	; 240
+				{
+					display = DISP_MAIN;
+					if(button.prev_code == 0x08)
+    1f84:	90 38       	cpi	r25, 0x80	; 128
+    1f86:	09 f4       	brne	.+2      	; 0x1f8a <main+0x2f6>
+    1f88:	74 c1       	rjmp	.+744    	; 0x2272 <main+0x5de>
+    1f8a:	00 e0       	ldi	r16, 0x00	; 0
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+				button.holded = 0;
+				button.holdcnt = 0;
+    1f8c:	71 2c       	mov	r7, r1
+					}
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+				button.holded = 0;
+    1f8e:	55 24       	eor	r5, r5
+						SwitchHeating(ch, OFF);
+					}
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+    1f90:	53 94       	inc	r5
+    1f92:	61 2c       	mov	r6, r1
+						SwitchDrive(ch, OFF);
+						SwitchHeating(ch, OFF);
+					}
+				}
+				
+				button.pressed = 0;
+    1f94:	11 e0       	ldi	r17, 0x01	; 1
+			}
+			else if(button.code == 0) // Button up event
+			{
+				if(!button.holded)
+				{
+					display = DISP_MAIN;
+    1f96:	d7 ce       	rjmp	.-594    	; 0x1d46 <main+0xb2>
+				button.holded = 0;
+				button.holdcnt = 0;
+			}
+			else // Button hold event
+			{
+				switch(button.code)
+    1f98:	84 30       	cpi	r24, 0x04	; 4
+    1f9a:	09 f4       	brne	.+2      	; 0x1f9e <main+0x30a>
+    1f9c:	5b c1       	rjmp	.+694    	; 0x2254 <main+0x5c0>
+    1f9e:	08 f4       	brcc	.+2      	; 0x1fa2 <main+0x30e>
+    1fa0:	37 c1       	rjmp	.+622    	; 0x2210 <main+0x57c>
+    1fa2:	88 30       	cpi	r24, 0x08	; 8
+    1fa4:	09 f0       	breq	.+2      	; 0x1fa8 <main+0x314>
+    1fa6:	cf ce       	rjmp	.-610    	; 0x1d46 <main+0xb2>
+						break;
+						
+					case 0x08:
+						button.prev_code = 0;
+						display = OFF;
+						LCD_SendCmd(LCD_CLR);
+    1fa8:	81 e0       	ldi	r24, 0x01	; 1
+    1faa:	cb d2       	rcall	.+1430   	; 0x2542 <LCD_SendCmd>
+    1fac:	41 2c       	mov	r4, r1
+						button.holded = 0;
+						button.holdcnt = 0;
+						break;
+						
+					case 0x08:
+						button.prev_code = 0;
+    1fae:	10 e0       	ldi	r17, 0x00	; 0
+						display = OFF;
+    1fb0:	ca ce       	rjmp	.-620    	; 0x1d46 <main+0xb2>
+						LCD_SendCmd(LCD_CLR);
+						//btn_hold = 0;
+						break;
+    1fb2:	80 81       	ld	r24, Z
+				{
+					heater[ch].status.onoff = OFF;
+				}
+				else if(heater[ch].status.circuit == CIRC_RES)
+				{
+					if((heater[ch].status.onoff == ON) && (heater[ch].tcouple < heater[ch].tset))
+    1fb4:	81 ff       	sbrs	r24, 1
+    1fb6:	d1 cf       	rjmp	.-94     	; 0x1f5a <main+0x2c6>
+    1fb8:	84 81       	ldd	r24, Z+4	; 0x04
+    1fba:	95 81       	ldd	r25, Z+5	; 0x05
+    1fbc:	22 85       	ldd	r18, Z+10	; 0x0a
+    1fbe:	33 85       	ldd	r19, Z+11	; 0x0b
+    1fc0:	82 17       	cp	r24, r18
+    1fc2:	93 07       	cpc	r25, r19
+    1fc4:	50 f6       	brcc	.-108    	; 0x1f5a <main+0x2c6>
+    1fc6:	8d 2d       	mov	r24, r13
+    1fc8:	0e 94 17 01 	call	0x22e	; 0x22e <SwitchHeating.part.0>
+    1fcc:	a2 cf       	rjmp	.-188    	; 0x1f12 <main+0x27e>
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+				button.holded = 0;
+				button.holdcnt = 0;
+    1fce:	00 e0       	ldi	r16, 0x00	; 0
+					}
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+				button.holded = 0;
+    1fd0:	71 2c       	mov	r7, r1
+						SwitchHeating(ch, OFF);
+					}
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+    1fd2:	55 24       	eor	r5, r5
+    1fd4:	53 94       	inc	r5
+						SwitchDrive(ch, OFF);
+						SwitchHeating(ch, OFF);
+					}
+				}
+				
+				button.pressed = 0;
+    1fd6:	61 2c       	mov	r6, r1
+    1fd8:	b6 ce       	rjmp	.-660    	; 0x1d46 <main+0xb2>
+		{
+			/* ------------- DISPLAY SECTION ----------------- */
+			tick2 = 0;
+			if(display == DISP_MAIN)
+			{
+				LCD_SetPos(0, 0);
+    1fda:	60 e0       	ldi	r22, 0x00	; 0
+    1fdc:	80 e0       	ldi	r24, 0x00	; 0
+    1fde:	d6 d2       	rcall	.+1452   	; 0x258c <LCD_SetPos>
+    1fe0:	eb 81       	ldd	r30, Y+3	; 0x03
+				fprintf(&lcd_stdout, "K%.1u #%.2u  Tï=", ch + 1, heater[ch].preset);
+    1fe2:	ae 2e       	mov	r10, r30
+    1fe4:	b1 2c       	mov	r11, r1
+    1fe6:	f3 e1       	ldi	r31, 0x13	; 19
+    1fe8:	fa 9d       	mul	r31, r10
+    1fea:	60 01       	movw	r12, r0
+    1fec:	fb 9d       	mul	r31, r11
+    1fee:	d0 0c       	add	r13, r0
+    1ff0:	11 24       	eor	r1, r1
+    1ff2:	96 01       	movw	r18, r12
+    1ff4:	20 5e       	subi	r18, 0xE0	; 224
+    1ff6:	3c 4f       	sbci	r19, 0xFC	; 252
+    1ff8:	3a 83       	std	Y+2, r19	; 0x02
+    1ffa:	29 83       	std	Y+1, r18	; 0x01
+    1ffc:	d9 01       	movw	r26, r18
+    1ffe:	12 96       	adiw	r26, 0x02	; 2
+    2000:	8c 91       	ld	r24, X
+    2002:	1f 92       	push	r1
+    2004:	8f 93       	push	r24
+    2006:	c5 01       	movw	r24, r10
+    2008:	01 96       	adiw	r24, 0x01	; 1
+    200a:	9f 93       	push	r25
+    200c:	8f 93       	push	r24
+    200e:	3f 92       	push	r3
+    2010:	2f 92       	push	r2
+    2012:	54 e1       	ldi	r21, 0x14	; 20
+    2014:	e5 2e       	mov	r14, r21
+    2016:	51 e0       	ldi	r21, 0x01	; 1
+    2018:	f5 2e       	mov	r15, r21
+    201a:	ff 92       	push	r15
+    201c:	ef 92       	push	r14
+    201e:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+    2022:	f6 01       	movw	r30, r12
+				if(!heater[ch].status.couple)
+    2024:	ef 5d       	subi	r30, 0xDF	; 223
+    2026:	fc 4f       	sbci	r31, 0xFC	; 252
+    2028:	80 81       	ld	r24, Z
+    202a:	86 95       	lsr	r24
+    202c:	87 70       	andi	r24, 0x07	; 7
+    202e:	0f b6       	in	r0, 0x3f	; 63
+    2030:	f8 94       	cli
+    2032:	de bf       	out	0x3e, r29	; 62
+    2034:	0f be       	out	0x3f, r0	; 63
+    2036:	cd bf       	out	0x3d, r28	; 61
+    2038:	09 f0       	breq	.+2      	; 0x203c <main+0x3a8>
+    203a:	f5 c0       	rjmp	.+490    	; 0x2226 <main+0x592>
+    203c:	a9 81       	ldd	r26, Y+1	; 0x01
+				{
+					fprintf(&lcd_stdout, "%.3d\x01", heater[ch].tcouple);
+    203e:	ba 81       	ldd	r27, Y+2	; 0x02
+    2040:	15 96       	adiw	r26, 0x05	; 5
+    2042:	8c 91       	ld	r24, X
+    2044:	15 97       	sbiw	r26, 0x05	; 5
+    2046:	8f 93       	push	r24
+    2048:	14 96       	adiw	r26, 0x04	; 4
+    204a:	8c 91       	ld	r24, X
+    204c:	8f 93       	push	r24
+    204e:	eb e3       	ldi	r30, 0x3B	; 59
+    2050:	f2 e0       	ldi	r31, 0x02	; 2
+    2052:	ff 93       	push	r31
+    2054:	ef 93       	push	r30
+    2056:	ff 92       	push	r15
+    2058:	ef 92       	push	r14
+    205a:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+    205e:	0f 90       	pop	r0
+    2060:	0f 90       	pop	r0
+    2062:	0f 90       	pop	r0
+    2064:	0f 90       	pop	r0
+    2066:	0f 90       	pop	r0
+    2068:	0f 90       	pop	r0
+    206a:	33 e1       	ldi	r19, 0x13	; 19
+				else
+				{
+					fprintf(&lcd_stdout, "--- ");
+				}
+			
+				switch(heater[ch].status.circuit)
+    206c:	3a 9d       	mul	r19, r10
+    206e:	f0 01       	movw	r30, r0
+    2070:	3b 9d       	mul	r19, r11
+    2072:	f0 0d       	add	r31, r0
+    2074:	11 24       	eor	r1, r1
+    2076:	e0 5e       	subi	r30, 0xE0	; 224
+    2078:	fc 4f       	sbci	r31, 0xFC	; 252
+    207a:	80 81       	ld	r24, Z
+    207c:	98 2f       	mov	r25, r24
+    207e:	92 95       	swap	r25
+    2080:	96 95       	lsr	r25
+    2082:	96 95       	lsr	r25
+    2084:	93 70       	andi	r25, 0x03	; 3
+    2086:	81 81       	ldd	r24, Z+1	; 0x01
+    2088:	81 70       	andi	r24, 0x01	; 1
+    208a:	88 0f       	add	r24, r24
+    208c:	88 0f       	add	r24, r24
+    208e:	89 2b       	or	r24, r25
+    2090:	82 30       	cpi	r24, 0x02	; 2
+    2092:	09 f4       	brne	.+2      	; 0x2096 <main+0x402>
+    2094:	51 c1       	rjmp	.+674    	; 0x2338 <main+0x6a4>
+    2096:	08 f0       	brcs	.+2      	; 0x209a <main+0x406>
+    2098:	d5 c0       	rjmp	.+426    	; 0x2244 <main+0x5b0>
+    209a:	88 23       	and	r24, r24
+    209c:	09 f4       	brne	.+2      	; 0x20a0 <main+0x40c>
+    209e:	e6 c0       	rjmp	.+460    	; 0x226c <main+0x5d8>
+    20a0:	81 30       	cpi	r24, 0x01	; 1
+				{
+					case CIRC_OPEN:
+						LCD_SendData(SYM_OPEN);
+						break;
+					case CIRC_SHORT:
+						LCD_SendData(SYM_SHORT);
+    20a2:	11 f4       	brne	.+4      	; 0x20a8 <main+0x414>
+    20a4:	87 e0       	ldi	r24, 0x07	; 7
+    20a6:	32 d2       	rcall	.+1124   	; 0x250c <LCD_SendData>
+						break;
+					case CIRC_DIODE:
+						break;
+				}
+
+				LCD_SetPos(0, 1);
+    20a8:	61 e0       	ldi	r22, 0x01	; 1
+    20aa:	80 e0       	ldi	r24, 0x00	; 0
+    20ac:	6f d2       	rcall	.+1246   	; 0x258c <LCD_SetPos>
+    20ae:	a3 e1       	ldi	r26, 0x13	; 19
+				fprintf(&lcd_stdout, "Tó=%.3u\x01 ", heater[ch].tset);
+    20b0:	aa 9d       	mul	r26, r10
+    20b2:	c0 01       	movw	r24, r0
+    20b4:	ab 9d       	mul	r26, r11
+    20b6:	90 0d       	add	r25, r0
+    20b8:	11 24       	eor	r1, r1
+    20ba:	fc 01       	movw	r30, r24
+    20bc:	e0 5e       	subi	r30, 0xE0	; 224
+    20be:	fc 4f       	sbci	r31, 0xFC	; 252
+    20c0:	7f 01       	movw	r14, r30
+    20c2:	83 85       	ldd	r24, Z+11	; 0x0b
+    20c4:	8f 93       	push	r24
+    20c6:	82 85       	ldd	r24, Z+10	; 0x0a
+    20c8:	8f 93       	push	r24
+    20ca:	2d e1       	ldi	r18, 0x1D	; 29
+    20cc:	32 e0       	ldi	r19, 0x02	; 2
+    20ce:	3f 93       	push	r19
+    20d0:	2f 93       	push	r18
+    20d2:	44 e1       	ldi	r20, 0x14	; 20
+    20d4:	c4 2e       	mov	r12, r20
+    20d6:	41 e0       	ldi	r20, 0x01	; 1
+    20d8:	d4 2e       	mov	r13, r20
+    20da:	df 92       	push	r13
+    20dc:	cf 92       	push	r12
+    20de:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+    20e2:	d7 01       	movw	r26, r14
+			
+				if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_SHORT))
+    20e4:	8c 91       	ld	r24, X
+    20e6:	98 2f       	mov	r25, r24
+    20e8:	92 95       	swap	r25
+    20ea:	96 95       	lsr	r25
+    20ec:	96 95       	lsr	r25
+    20ee:	93 70       	andi	r25, 0x03	; 3
+    20f0:	11 96       	adiw	r26, 0x01	; 1
+    20f2:	8c 91       	ld	r24, X
+    20f4:	11 97       	sbiw	r26, 0x01	; 1
+    20f6:	81 70       	andi	r24, 0x01	; 1
+    20f8:	88 0f       	add	r24, r24
+    20fa:	88 0f       	add	r24, r24
+    20fc:	89 2b       	or	r24, r25
+    20fe:	0f 90       	pop	r0
+    2100:	0f 90       	pop	r0
+    2102:	0f 90       	pop	r0
+    2104:	0f 90       	pop	r0
+    2106:	0f 90       	pop	r0
+    2108:	0f 90       	pop	r0
+    210a:	09 f4       	brne	.+2      	; 0x210e <main+0x47a>
+    210c:	cb c0       	rjmp	.+406    	; 0x22a4 <main+0x610>
+    210e:	8c 91       	ld	r24, X
+    2110:	98 2f       	mov	r25, r24
+    2112:	92 95       	swap	r25
+    2114:	96 95       	lsr	r25
+    2116:	96 95       	lsr	r25
+    2118:	93 70       	andi	r25, 0x03	; 3
+    211a:	11 96       	adiw	r26, 0x01	; 1
+    211c:	8c 91       	ld	r24, X
+    211e:	81 70       	andi	r24, 0x01	; 1
+    2120:	88 0f       	add	r24, r24
+    2122:	88 0f       	add	r24, r24
+    2124:	89 2b       	or	r24, r25
+    2126:	81 30       	cpi	r24, 0x01	; 1
+    2128:	09 f4       	brne	.+2      	; 0x212c <main+0x498>
+    212a:	bc c0       	rjmp	.+376    	; 0x22a4 <main+0x610>
+    212c:	f7 01       	movw	r30, r14
+				{
+					fprintf(&lcd_stdout, "ÎÒÊËÞ×.");
+				}
+				else if(heater[ch].status.circuit == CIRC_RES)
+    212e:	80 81       	ld	r24, Z
+    2130:	98 2f       	mov	r25, r24
+    2132:	92 95       	swap	r25
+    2134:	96 95       	lsr	r25
+    2136:	96 95       	lsr	r25
+    2138:	93 70       	andi	r25, 0x03	; 3
+    213a:	81 81       	ldd	r24, Z+1	; 0x01
+    213c:	81 70       	andi	r24, 0x01	; 1
+    213e:	88 0f       	add	r24, r24
+    2140:	88 0f       	add	r24, r24
+    2142:	89 2b       	or	r24, r25
+    2144:	84 30       	cpi	r24, 0x04	; 4
+    2146:	09 f4       	brne	.+2      	; 0x214a <main+0x4b6>
+    2148:	fa c0       	rjmp	.+500    	; 0x233e <main+0x6aa>
+    214a:	f7 01       	movw	r30, r14
+				{
+					fprintf(&lcd_stdout, "I=%4.2fA", ((float)heater[ch].current) / 1000.0);
+				}
+				else
+				{
+					fprintf(&lcd_stdout, "Òí=%.3d\x01", heater[ch].tmeas);
+    214c:	87 81       	ldd	r24, Z+7	; 0x07
+    214e:	8f 93       	push	r24
+    2150:	86 81       	ldd	r24, Z+6	; 0x06
+    2152:	8f 93       	push	r24
+    2154:	28 e3       	ldi	r18, 0x38	; 56
+    2156:	32 e0       	ldi	r19, 0x02	; 2
+    2158:	3f 93       	push	r19
+    215a:	2f 93       	push	r18
+    215c:	df 92       	push	r13
+    215e:	cf 92       	push	r12
+    2160:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+    2164:	0f 90       	pop	r0
+    2166:	0f 90       	pop	r0
+    2168:	0f 90       	pop	r0
+    216a:	0f 90       	pop	r0
+    216c:	0f 90       	pop	r0
+    216e:	0f 90       	pop	r0
+    2170:	93 e1       	ldi	r25, 0x13	; 19
+				}
+			
+				if(heater[ch].status.onoff)
+    2172:	9a 9d       	mul	r25, r10
+    2174:	f0 01       	movw	r30, r0
+    2176:	9b 9d       	mul	r25, r11
+    2178:	f0 0d       	add	r31, r0
+    217a:	11 24       	eor	r1, r1
+    217c:	e0 5e       	subi	r30, 0xE0	; 224
+    217e:	fc 4f       	sbci	r31, 0xFC	; 252
+    2180:	80 81       	ld	r24, Z
+    2182:	81 ff       	sbrs	r24, 1
+    2184:	9d c0       	rjmp	.+314    	; 0x22c0 <main+0x62c>
+				{
+					if(heater[ch].status.heating)
+    2186:	80 81       	ld	r24, Z
+    2188:	82 ff       	sbrs	r24, 2
+    218a:	97 c0       	rjmp	.+302    	; 0x22ba <main+0x626>
+					{
+						LCD_SendData(0xD9);
+    218c:	89 ed       	ldi	r24, 0xD9	; 217
+    218e:	be d1       	rcall	.+892    	; 0x250c <LCD_SendData>
+    2190:	d4 01       	movw	r26, r8
+				else
+				{
+					LCD_SendData('-');
+				}
+			
+				if(menu->set == 1)
+    2192:	8c 91       	ld	r24, X
+    2194:	81 30       	cpi	r24, 0x01	; 1
+    2196:	09 f4       	brne	.+2      	; 0x219a <main+0x506>
+    2198:	96 c0       	rjmp	.+300    	; 0x22c6 <main+0x632>
+    219a:	82 30       	cpi	r24, 0x02	; 2
+						LCD_SetPos(3, 1);
+						fprintf(&lcd_stdout, "   ");
+					}
+					menu->blink_cnt++;
+				}
+				else if(menu->set == 2)
+    219c:	09 f4       	brne	.+2      	; 0x21a0 <main+0x50c>
+    219e:	b0 c0       	rjmp	.+352    	; 0x2300 <main+0x66c>
+    21a0:	fc 81       	ldd	r31, Y+4	; 0x04
+						fprintf(&lcd_stdout, "  ");
+					}
+					menu->blink_cnt++;	
+				}
+			
+				if(button.pressed && !button.holded)
+    21a2:	60 fa       	bst	r6, 0
+    21a4:	f0 f9       	bld	r31, 0
+    21a6:	50 fa       	bst	r5, 0
+    21a8:	f1 f9       	bld	r31, 1
+    21aa:	70 fa       	bst	r7, 0
+    21ac:	f2 f9       	bld	r31, 2
+    21ae:	f7 70       	andi	r31, 0x07	; 7
+    21b0:	80 2f       	mov	r24, r16
+    21b2:	88 0f       	add	r24, r24
+    21b4:	88 0f       	add	r24, r24
+    21b6:	88 0f       	add	r24, r24
+    21b8:	f8 2b       	or	r31, r24
+    21ba:	fc 83       	std	Y+4, r31	; 0x04
+    21bc:	8f 2f       	mov	r24, r31
+    21be:	85 70       	andi	r24, 0x05	; 5
+    21c0:	81 30       	cpi	r24, 0x01	; 1
+    21c2:	09 f0       	breq	.+2      	; 0x21c6 <main+0x532>
+    21c4:	e0 cd       	rjmp	.-1088   	; 0x1d86 <main+0xf2>
+				{
+					if(++button.holdcnt == 12)
+    21c6:	0f 5f       	subi	r16, 0xFF	; 255
+    21c8:	0f 71       	andi	r16, 0x1F	; 31
+    21ca:	0c 30       	cpi	r16, 0x0C	; 12
+    21cc:	09 f0       	breq	.+2      	; 0x21d0 <main+0x53c>
+    21ce:	db cd       	rjmp	.-1098   	; 0x1d86 <main+0xf2>
+					{
+						button.holded = 1;
+						btn_act = 1;
+    21d0:	80 93 f7 02 	sts	0x02F7, r24	; 0x8002f7 <btn_act>
+			
+				if(button.pressed && !button.holded)
+				{
+					if(++button.holdcnt == 12)
+					{
+						button.holded = 1;
+    21d4:	77 24       	eor	r7, r7
+    21d6:	73 94       	inc	r7
+					}
+				}
+			}
+			else if(display == DISP_VER)
+			{
+				LCD_SetPos(0, 0);
+    21d8:	d6 cd       	rjmp	.-1108   	; 0x1d86 <main+0xf2>
+    21da:	60 e0       	ldi	r22, 0x00	; 0
+    21dc:	80 e0       	ldi	r24, 0x00	; 0
+    21de:	d6 d1       	rcall	.+940    	; 0x258c <LCD_SetPos>
+				fprintf(&lcd_stdout, "ÓÊÍ-2 09.09.2019");
+    21e0:	24 e1       	ldi	r18, 0x14	; 20
+    21e2:	31 e0       	ldi	r19, 0x01	; 1
+    21e4:	40 e1       	ldi	r20, 0x10	; 16
+    21e6:	50 e0       	ldi	r21, 0x00	; 0
+    21e8:	61 e0       	ldi	r22, 0x01	; 1
+    21ea:	70 e0       	ldi	r23, 0x00	; 0
+    21ec:	81 e4       	ldi	r24, 0x41	; 65
+    21ee:	92 e0       	ldi	r25, 0x02	; 2
+    21f0:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+				LCD_SetPos(0, 1);
+    21f4:	61 e0       	ldi	r22, 0x01	; 1
+    21f6:	80 e0       	ldi	r24, 0x00	; 0
+    21f8:	c9 d1       	rcall	.+914    	; 0x258c <LCD_SetPos>
+    21fa:	24 e1       	ldi	r18, 0x14	; 20
+				fprintf(&lcd_stdout, "Íàãàåâ Àëåêñàíäð");
+    21fc:	31 e0       	ldi	r19, 0x01	; 1
+    21fe:	40 e1       	ldi	r20, 0x10	; 16
+    2200:	50 e0       	ldi	r21, 0x00	; 0
+    2202:	61 e0       	ldi	r22, 0x01	; 1
+    2204:	70 e0       	ldi	r23, 0x00	; 0
+    2206:	82 e5       	ldi	r24, 0x52	; 82
+    2208:	92 e0       	ldi	r25, 0x02	; 2
+    220a:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+    220e:	bb cd       	rjmp	.-1162   	; 0x1d86 <main+0xf2>
+    2210:	81 50       	subi	r24, 0x01	; 1
+				button.holded = 0;
+				button.holdcnt = 0;
+			}
+			else // Button hold event
+			{
+				switch(button.code)
+    2212:	82 30       	cpi	r24, 0x02	; 2
+    2214:	08 f0       	brcs	.+2      	; 0x2218 <main+0x584>
+    2216:	97 cd       	rjmp	.-1234   	; 0x1d46 <main+0xb2>
+    2218:	81 e0       	ldi	r24, 0x01	; 1
+				{
+					case 0x01:
+					case 0x02:
+						btn_act = 1;
+    221a:	80 93 f7 02 	sts	0x02F7, r24	; 0x8002f7 <btn_act>
+						button.holded = 0;
+						button.holdcnt--;
+    221e:	01 5e       	subi	r16, 0xE1	; 225
+    2220:	0f 71       	andi	r16, 0x1F	; 31
+				switch(button.code)
+				{
+					case 0x01:
+					case 0x02:
+						btn_act = 1;
+						button.holded = 0;
+    2222:	71 2c       	mov	r7, r1
+						button.holdcnt--;
+						break;
+    2224:	90 cd       	rjmp	.-1248   	; 0x1d46 <main+0xb2>
+				{
+					fprintf(&lcd_stdout, "%.3d\x01", heater[ch].tcouple);
+				}
+				else
+				{
+					fprintf(&lcd_stdout, "--- ");
+    2226:	24 e1       	ldi	r18, 0x14	; 20
+    2228:	31 e0       	ldi	r19, 0x01	; 1
+    222a:	44 e0       	ldi	r20, 0x04	; 4
+    222c:	50 e0       	ldi	r21, 0x00	; 0
+    222e:	61 e0       	ldi	r22, 0x01	; 1
+    2230:	70 e0       	ldi	r23, 0x00	; 0
+    2232:	88 e1       	ldi	r24, 0x18	; 24
+    2234:	92 e0       	ldi	r25, 0x02	; 2
+    2236:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+				}
+				else
+				{
+					if((heater[ch].status.onoff == ON) && (heater[ch].tmeas < heater[ch].tset))
+					{
+						SwitchDrive(ch, ON);
+    223a:	17 cf       	rjmp	.-466    	; 0x206a <main+0x3d6>
+    223c:	61 e0       	ldi	r22, 0x01	; 1
+    223e:	8d 2d       	mov	r24, r13
+    2240:	3e d3       	rcall	.+1660   	; 0x28be <SwitchDrive>
+				else
+				{
+					fprintf(&lcd_stdout, "--- ");
+				}
+			
+				switch(heater[ch].status.circuit)
+    2242:	c1 ce       	rjmp	.-638    	; 0x1fc6 <main+0x332>
+    2244:	83 30       	cpi	r24, 0x03	; 3
+    2246:	79 f0       	breq	.+30     	; 0x2266 <main+0x5d2>
+    2248:	84 30       	cpi	r24, 0x04	; 4
+						break;
+					case CIRC_SHORT:
+						LCD_SendData(SYM_SHORT);
+						break;
+					case CIRC_RES:
+						LCD_SendData(SYM_RES);
+    224a:	09 f0       	breq	.+2      	; 0x224e <main+0x5ba>
+    224c:	2d cf       	rjmp	.-422    	; 0x20a8 <main+0x414>
+    224e:	84 e0       	ldi	r24, 0x04	; 4
+						break;
+    2250:	5d d1       	rcall	.+698    	; 0x250c <LCD_SendData>
+						button.holded = 0;
+						button.holdcnt--;
+						break;
+						
+					case 0x04:
+						menu->set = 0;
+    2252:	2a cf       	rjmp	.-428    	; 0x20a8 <main+0x414>
+    2254:	d4 01       	movw	r26, r8
+						AutoCalibration(ch);
+    2256:	1c 92       	st	X, r1
+    2258:	8b 81       	ldd	r24, Y+3	; 0x03
+    225a:	0e 94 ce 06 	call	0xd9c	; 0xd9c <AutoCalibration>
+						button.pressed = 0;
+						button.holded = 0;
+    225e:	00 e0       	ldi	r16, 0x00	; 0
+						break;
+						
+					case 0x04:
+						menu->set = 0;
+						AutoCalibration(ch);
+						button.pressed = 0;
+    2260:	71 2c       	mov	r7, r1
+						button.holded = 0;
+						button.holdcnt = 0;
+						break;
+    2262:	61 2c       	mov	r6, r1
+						break;
+					case CIRC_MOSFET:
+						LCD_SendData(SYM_MOSFET);
+						break;
+					case CIRC_RES_DIODE:
+						LCD_SendData(SYM_DIODE);
+    2264:	70 cd       	rjmp	.-1312   	; 0x1d46 <main+0xb2>
+    2266:	83 e0       	ldi	r24, 0x03	; 3
+    2268:	51 d1       	rcall	.+674    	; 0x250c <LCD_SendData>
+						break;
+    226a:	1e cf       	rjmp	.-452    	; 0x20a8 <main+0x414>
+				}
+			
+				switch(heater[ch].status.circuit)
+				{
+					case CIRC_OPEN:
+						LCD_SendData(SYM_OPEN);
+    226c:	86 e0       	ldi	r24, 0x06	; 6
+    226e:	4e d1       	rcall	.+668    	; 0x250c <LCD_SendData>
+						break;
+    2270:	1b cf       	rjmp	.-458    	; 0x20a8 <main+0x414>
+				if(!button.holded)
+				{
+					display = DISP_MAIN;
+					if(button.prev_code == 0x08)
+					{
+						heater[ch].status.onoff ^= 1;
+    2272:	b3 e1       	ldi	r27, 0x13	; 19
+    2274:	2b 81       	ldd	r18, Y+3	; 0x03
+    2276:	b2 9f       	mul	r27, r18
+    2278:	f0 01       	movw	r30, r0
+    227a:	11 24       	eor	r1, r1
+    227c:	e0 5e       	subi	r30, 0xE0	; 224
+    227e:	fc 4f       	sbci	r31, 0xFC	; 252
+    2280:	80 81       	ld	r24, Z
+    2282:	81 fb       	bst	r24, 1
+    2284:	99 27       	eor	r25, r25
+    2286:	90 f9       	bld	r25, 0
+    2288:	81 e0       	ldi	r24, 0x01	; 1
+    228a:	89 27       	eor	r24, r25
+    228c:	90 81       	ld	r25, Z
+    228e:	80 fb       	bst	r24, 0
+    2290:	91 f9       	bld	r25, 1
+						SwitchDrive(ch, OFF);
+    2292:	90 83       	st	Z, r25
+    2294:	60 e0       	ldi	r22, 0x00	; 0
+    2296:	82 2f       	mov	r24, r18
+						SwitchHeating(ch, OFF);
+    2298:	12 d3       	rcall	.+1572   	; 0x28be <SwitchDrive>
+    229a:	60 e0       	ldi	r22, 0x00	; 0
+    229c:	8b 81       	ldd	r24, Y+3	; 0x03
+    229e:	0e 94 a3 05 	call	0xb46	; 0xb46 <SwitchHeating>
+				LCD_SetPos(0, 1);
+				fprintf(&lcd_stdout, "Tó=%.3u\x01 ", heater[ch].tset);
+			
+				if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_SHORT))
+				{
+					fprintf(&lcd_stdout, "ÎÒÊËÞ×.");
+    22a2:	73 ce       	rjmp	.-794    	; 0x1f8a <main+0x2f6>
+    22a4:	24 e1       	ldi	r18, 0x14	; 20
+    22a6:	31 e0       	ldi	r19, 0x01	; 1
+    22a8:	47 e0       	ldi	r20, 0x07	; 7
+    22aa:	50 e0       	ldi	r21, 0x00	; 0
+    22ac:	61 e0       	ldi	r22, 0x01	; 1
+    22ae:	70 e0       	ldi	r23, 0x00	; 0
+    22b0:	87 e2       	ldi	r24, 0x27	; 39
+    22b2:	92 e0       	ldi	r25, 0x02	; 2
+    22b4:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+					{
+						LCD_SendData(0xD9);
+					}
+					else
+					{
+						LCD_SendData(0xDA);
+    22b8:	5b cf       	rjmp	.-330    	; 0x2170 <main+0x4dc>
+    22ba:	8a ed       	ldi	r24, 0xDA	; 218
+    22bc:	27 d1       	rcall	.+590    	; 0x250c <LCD_SendData>
+					}
+				}
+				else
+				{
+					LCD_SendData('-');
+    22be:	68 cf       	rjmp	.-304    	; 0x2190 <main+0x4fc>
+    22c0:	8d e2       	ldi	r24, 0x2D	; 45
+    22c2:	24 d1       	rcall	.+584    	; 0x250c <LCD_SendData>
+    22c4:	65 cf       	rjmp	.-310    	; 0x2190 <main+0x4fc>
+				}
+			
+				if(menu->set == 1)
+				{
+					if(menu->blink_cnt % 4 == 0)
+    22c6:	11 96       	adiw	r26, 0x01	; 1
+    22c8:	8c 91       	ld	r24, X
+    22ca:	11 97       	sbiw	r26, 0x01	; 1
+    22cc:	98 2f       	mov	r25, r24
+    22ce:	93 70       	andi	r25, 0x03	; 3
+    22d0:	91 f4       	brne	.+36     	; 0x22f6 <main+0x662>
+					{
+						if(menu->blink_cnt > 40)
+    22d2:	89 32       	cpi	r24, 0x29	; 41
+    22d4:	08 f0       	brcs	.+2      	; 0x22d8 <main+0x644>
+    22d6:	81 c0       	rjmp	.+258    	; 0x23da <main+0x746>
+						{
+							menu->set = 0;
+							menu->blink_cnt = 0;
+							SavePrefs();
+						}
+						LCD_SetPos(3, 1);
+    22d8:	61 e0       	ldi	r22, 0x01	; 1
+    22da:	83 e0       	ldi	r24, 0x03	; 3
+    22dc:	57 d1       	rcall	.+686    	; 0x258c <LCD_SetPos>
+    22de:	24 e1       	ldi	r18, 0x14	; 20
+						fprintf(&lcd_stdout, "   ");
+    22e0:	31 e0       	ldi	r19, 0x01	; 1
+    22e2:	43 e0       	ldi	r20, 0x03	; 3
+    22e4:	50 e0       	ldi	r21, 0x00	; 0
+    22e6:	61 e0       	ldi	r22, 0x01	; 1
+    22e8:	70 e0       	ldi	r23, 0x00	; 0
+    22ea:	86 e6       	ldi	r24, 0x66	; 102
+    22ec:	91 e0       	ldi	r25, 0x01	; 1
+    22ee:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+    22f2:	f4 01       	movw	r30, r8
+    22f4:	81 81       	ldd	r24, Z+1	; 0x01
+					}
+					menu->blink_cnt++;
+    22f6:	8f 5f       	subi	r24, 0xFF	; 255
+    22f8:	d4 01       	movw	r26, r8
+    22fa:	11 96       	adiw	r26, 0x01	; 1
+    22fc:	8c 93       	st	X, r24
+    22fe:	50 cf       	rjmp	.-352    	; 0x21a0 <main+0x50c>
+				}
+				else if(menu->set == 2)
+				{
+					if(menu->blink_cnt % 4 == 0)
+    2300:	f4 01       	movw	r30, r8
+    2302:	81 81       	ldd	r24, Z+1	; 0x01
+    2304:	98 2f       	mov	r25, r24
+    2306:	93 70       	andi	r25, 0x03	; 3
+					{
+						if(menu->blink_cnt > 40)
+    2308:	99 f4       	brne	.+38     	; 0x2330 <main+0x69c>
+    230a:	89 32       	cpi	r24, 0x29	; 41
+    230c:	08 f0       	brcs	.+2      	; 0x2310 <main+0x67c>
+						{
+							menu->set = 0;
+							menu->blink_cnt = 0;
+							SavePrefs();
+						}
+						LCD_SetPos(4, 0);
+    230e:	6a c0       	rjmp	.+212    	; 0x23e4 <main+0x750>
+    2310:	60 e0       	ldi	r22, 0x00	; 0
+    2312:	84 e0       	ldi	r24, 0x04	; 4
+						fprintf(&lcd_stdout, "  ");
+    2314:	3b d1       	rcall	.+630    	; 0x258c <LCD_SetPos>
+    2316:	24 e1       	ldi	r18, 0x14	; 20
+    2318:	31 e0       	ldi	r19, 0x01	; 1
+    231a:	42 e0       	ldi	r20, 0x02	; 2
+    231c:	50 e0       	ldi	r21, 0x00	; 0
+    231e:	61 e0       	ldi	r22, 0x01	; 1
+    2320:	70 e0       	ldi	r23, 0x00	; 0
+    2322:	87 e6       	ldi	r24, 0x67	; 103
+    2324:	91 e0       	ldi	r25, 0x01	; 1
+    2326:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+    232a:	d4 01       	movw	r26, r8
+					}
+					menu->blink_cnt++;	
+    232c:	11 96       	adiw	r26, 0x01	; 1
+    232e:	8c 91       	ld	r24, X
+    2330:	8f 5f       	subi	r24, 0xFF	; 255
+    2332:	f4 01       	movw	r30, r8
+						break;
+					case CIRC_RES:
+						LCD_SendData(SYM_RES);
+						break;
+					case CIRC_MOSFET:
+						LCD_SendData(SYM_MOSFET);
+    2334:	81 83       	std	Z+1, r24	; 0x01
+    2336:	34 cf       	rjmp	.-408    	; 0x21a0 <main+0x50c>
+    2338:	85 e0       	ldi	r24, 0x05	; 5
+						break;
+    233a:	e8 d0       	rcall	.+464    	; 0x250c <LCD_SendData>
+				{
+					fprintf(&lcd_stdout, "ÎÒÊËÞ×.");
+				}
+				else if(heater[ch].status.circuit == CIRC_RES)
+				{
+					fprintf(&lcd_stdout, "I=%4.2fA", ((float)heater[ch].current) / 1000.0);
+    233c:	b5 ce       	rjmp	.-662    	; 0x20a8 <main+0x414>
+    233e:	66 85       	ldd	r22, Z+14	; 0x0e
+    2340:	77 85       	ldd	r23, Z+15	; 0x0f
+    2342:	80 e0       	ldi	r24, 0x00	; 0
+    2344:	90 e0       	ldi	r25, 0x00	; 0
+    2346:	b1 d4       	rcall	.+2402   	; 0x2caa <__floatunsisf>
+    2348:	20 e0       	ldi	r18, 0x00	; 0
+    234a:	30 e0       	ldi	r19, 0x00	; 0
+    234c:	4a e7       	ldi	r20, 0x7A	; 122
+    234e:	54 e4       	ldi	r21, 0x44	; 68
+    2350:	13 d4       	rcall	.+2086   	; 0x2b78 <__divsf3>
+    2352:	9f 93       	push	r25
+    2354:	8f 93       	push	r24
+    2356:	7f 93       	push	r23
+    2358:	6f 93       	push	r22
+    235a:	2f e2       	ldi	r18, 0x2F	; 47
+    235c:	32 e0       	ldi	r19, 0x02	; 2
+    235e:	3f 93       	push	r19
+    2360:	2f 93       	push	r18
+    2362:	df 92       	push	r13
+    2364:	cf 92       	push	r12
+    2366:	0e 94 87 1d 	call	0x3b0e	; 0x3b0e <fprintf>
+    236a:	0f b6       	in	r0, 0x3f	; 63
+    236c:	f8 94       	cli
+    236e:	de bf       	out	0x3e, r29	; 62
+    2370:	0f be       	out	0x3f, r0	; 63
+    2372:	cd bf       	out	0x3d, r28	; 61
+    2374:	fd ce       	rjmp	.-518    	; 0x2170 <main+0x4dc>
+    2376:	81 30       	cpi	r24, 0x01	; 1
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+					button.prev_code = button.code;
+					switch(button.code)
+    2378:	11 f5       	brne	.+68     	; 0x23be <main+0x72a>
+    237a:	f4 01       	movw	r30, r8
+					{
+						case 0x01:
+							menu->blink_cnt = 1;
+    237c:	11 83       	std	Z+1, r17	; 0x01
+    237e:	80 81       	ld	r24, Z
+							if(menu->set == 1)
+    2380:	81 30       	cpi	r24, 0x01	; 1
+    2382:	b1 f1       	breq	.+108    	; 0x23f0 <main+0x75c>
+    2384:	82 30       	cpi	r24, 0x02	; 2
+							{
+								heater[ch].tset -= (heater[ch].tset != 0);
+							}
+							else if(menu->set == 2)
+    2386:	09 f4       	brne	.+2      	; 0x238a <main+0x6f6>
+    2388:	64 c0       	rjmp	.+200    	; 0x2452 <main+0x7be>
+    238a:	44 24       	eor	r4, r4
+    238c:	43 94       	inc	r4
+    238e:	51 2c       	mov	r5, r1
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    2390:	66 24       	eor	r6, r6
+    2392:	63 94       	inc	r6
+								heater[ch].preset -= (heater[ch].preset != 0);
+								LoadPreset(ch);
+							}
+							else
+							{
+								ch = CH0;
+    2394:	1b 82       	std	Y+3, r1	; 0x03
+    2396:	d7 cc       	rjmp	.-1618   	; 0x1d46 <main+0xb2>
+							}
+							break;
+						
+						case 0x02:
+							menu->blink_cnt = 1;
+    2398:	d4 01       	movw	r26, r8
+    239a:	11 96       	adiw	r26, 0x01	; 1
+    239c:	1c 93       	st	X, r17
+    239e:	11 97       	sbiw	r26, 0x01	; 1
+							if(menu->set == 1)
+    23a0:	8c 91       	ld	r24, X
+    23a2:	81 30       	cpi	r24, 0x01	; 1
+    23a4:	09 f4       	brne	.+2      	; 0x23a8 <main+0x714>
+							{
+								heater[ch].tset += (heater[ch].tset != 150);
+							}
+							else if(menu->set == 2)
+    23a6:	3d c0       	rjmp	.+122    	; 0x2422 <main+0x78e>
+    23a8:	82 30       	cpi	r24, 0x02	; 2
+    23aa:	09 f4       	brne	.+2      	; 0x23ae <main+0x71a>
+    23ac:	68 c0       	rjmp	.+208    	; 0x247e <main+0x7ea>
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    23ae:	62 e0       	ldi	r22, 0x02	; 2
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    23b0:	46 2e       	mov	r4, r22
+    23b2:	51 2c       	mov	r5, r1
+								heater[ch].preset += (heater[ch].preset != 24);
+								LoadPreset(ch);
+							}
+							else
+							{
+								ch = CH1;
+    23b4:	66 24       	eor	r6, r6
+    23b6:	63 94       	inc	r6
+    23b8:	e1 e0       	ldi	r30, 0x01	; 1
+		/* ---------------- BUTTON SECTION --------------- */
+		if(btn_act)
+		{
+			_delay_ms(20);
+			btn_act = 0;
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+    23ba:	eb 83       	std	Y+3, r30	; 0x03
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    23bc:	c4 cc       	rjmp	.-1656   	; 0x1d46 <main+0xb2>
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    23be:	48 2e       	mov	r4, r24
+    23c0:	51 2c       	mov	r5, r1
+    23c2:	66 24       	eor	r6, r6
+								ch = CH1;
+							}
+							break;
+							
+						case 0x03:
+							LCD_SendCmd(LCD_CLR);
+    23c4:	63 94       	inc	r6
+    23c6:	bf cc       	rjmp	.-1666   	; 0x1d46 <main+0xb2>
+    23c8:	81 e0       	ldi	r24, 0x01	; 1
+							display = DISP_VER;
+							break;
+    23ca:	bb d0       	rcall	.+374    	; 0x2542 <LCD_SendCmd>
+    23cc:	93 e0       	ldi	r25, 0x03	; 3
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    23ce:	49 2e       	mov	r4, r25
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    23d0:	51 2c       	mov	r5, r1
+    23d2:	66 24       	eor	r6, r6
+							}
+							break;
+							
+						case 0x03:
+							LCD_SendCmd(LCD_CLR);
+							display = DISP_VER;
+    23d4:	63 94       	inc	r6
+							break;
+    23d6:	13 e0       	ldi	r17, 0x03	; 3
+				{
+					if(menu->blink_cnt % 4 == 0)
+					{
+						if(menu->blink_cnt > 40)
+						{
+							menu->set = 0;
+    23d8:	b6 cc       	rjmp	.-1684   	; 0x1d46 <main+0xb2>
+							menu->blink_cnt = 0;
+    23da:	1c 92       	st	X, r1
+    23dc:	11 96       	adiw	r26, 0x01	; 1
+							SavePrefs();
+    23de:	1c 92       	st	X, r1
+    23e0:	a9 d2       	rcall	.+1362   	; 0x2934 <SavePrefs>
+    23e2:	7a cf       	rjmp	.-268    	; 0x22d8 <main+0x644>
+				{
+					if(menu->blink_cnt % 4 == 0)
+					{
+						if(menu->blink_cnt > 40)
+						{
+							menu->set = 0;
+    23e4:	10 82       	st	Z, r1
+							menu->blink_cnt = 0;
+    23e6:	11 82       	std	Z+1, r1	; 0x01
+							SavePrefs();
+    23e8:	a5 d2       	rcall	.+1354   	; 0x2934 <SavePrefs>
+    23ea:	92 cf       	rjmp	.-220    	; 0x2310 <main+0x67c>
+    23ec:	a3 d2       	rcall	.+1350   	; 0x2934 <SavePrefs>
+							break;
+							
+						case 0x04:
+							menu->set = (menu->set + 1) % 3;
+							if(menu->set == 0)
+								SavePrefs();
+    23ee:	10 cd       	rjmp	.-1504   	; 0x1e10 <main+0x17c>
+    23f0:	23 e1       	ldi	r18, 0x13	; 19
+    23f2:	3b 81       	ldd	r19, Y+3	; 0x03
+					{
+						case 0x01:
+							menu->blink_cnt = 1;
+							if(menu->set == 1)
+							{
+								heater[ch].tset -= (heater[ch].tset != 0);
+    23f4:	23 9f       	mul	r18, r19
+    23f6:	f0 01       	movw	r30, r0
+    23f8:	11 24       	eor	r1, r1
+    23fa:	e0 5e       	subi	r30, 0xE0	; 224
+    23fc:	fc 4f       	sbci	r31, 0xFC	; 252
+    23fe:	82 85       	ldd	r24, Z+10	; 0x0a
+    2400:	93 85       	ldd	r25, Z+11	; 0x0b
+    2402:	21 e0       	ldi	r18, 0x01	; 1
+    2404:	30 e0       	ldi	r19, 0x00	; 0
+    2406:	00 97       	sbiw	r24, 0x00	; 0
+    2408:	11 f4       	brne	.+4      	; 0x240e <main+0x77a>
+    240a:	20 e0       	ldi	r18, 0x00	; 0
+    240c:	30 e0       	ldi	r19, 0x00	; 0
+    240e:	82 1b       	sub	r24, r18
+    2410:	93 0b       	sbc	r25, r19
+    2412:	93 87       	std	Z+11, r25	; 0x0b
+    2414:	82 87       	std	Z+10, r24	; 0x0a
+    2416:	44 24       	eor	r4, r4
+    2418:	43 94       	inc	r4
+    241a:	51 2c       	mov	r5, r1
+    241c:	66 24       	eor	r6, r6
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    241e:	63 94       	inc	r6
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    2420:	92 cc       	rjmp	.-1756   	; 0x1d46 <main+0xb2>
+    2422:	b3 e1       	ldi	r27, 0x13	; 19
+    2424:	2b 81       	ldd	r18, Y+3	; 0x03
+						
+						case 0x02:
+							menu->blink_cnt = 1;
+							if(menu->set == 1)
+							{
+								heater[ch].tset += (heater[ch].tset != 150);
+    2426:	b2 9f       	mul	r27, r18
+    2428:	f0 01       	movw	r30, r0
+    242a:	11 24       	eor	r1, r1
+    242c:	e0 5e       	subi	r30, 0xE0	; 224
+    242e:	fc 4f       	sbci	r31, 0xFC	; 252
+    2430:	82 85       	ldd	r24, Z+10	; 0x0a
+    2432:	93 85       	ldd	r25, Z+11	; 0x0b
+    2434:	21 e0       	ldi	r18, 0x01	; 1
+    2436:	30 e0       	ldi	r19, 0x00	; 0
+    2438:	86 39       	cpi	r24, 0x96	; 150
+    243a:	91 05       	cpc	r25, r1
+    243c:	a9 f1       	breq	.+106    	; 0x24a8 <main+0x814>
+    243e:	82 0f       	add	r24, r18
+    2440:	93 1f       	adc	r25, r19
+    2442:	93 87       	std	Z+11, r25	; 0x0b
+    2444:	82 87       	std	Z+10, r24	; 0x0a
+    2446:	32 e0       	ldi	r19, 0x02	; 2
+    2448:	43 2e       	mov	r4, r19
+    244a:	51 2c       	mov	r5, r1
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    244c:	66 24       	eor	r6, r6
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    244e:	63 94       	inc	r6
+    2450:	7a cc       	rjmp	.-1804   	; 0x1d46 <main+0xb2>
+    2452:	83 e1       	ldi	r24, 0x13	; 19
+							{
+								heater[ch].tset -= (heater[ch].tset != 0);
+							}
+							else if(menu->set == 2)
+							{
+								heater[ch].preset -= (heater[ch].preset != 0);
+    2454:	9b 81       	ldd	r25, Y+3	; 0x03
+    2456:	89 9f       	mul	r24, r25
+    2458:	f0 01       	movw	r30, r0
+    245a:	11 24       	eor	r1, r1
+    245c:	e0 5e       	subi	r30, 0xE0	; 224
+    245e:	fc 4f       	sbci	r31, 0xFC	; 252
+    2460:	82 81       	ldd	r24, Z+2	; 0x02
+    2462:	91 e0       	ldi	r25, 0x01	; 1
+    2464:	81 11       	cpse	r24, r1
+    2466:	01 c0       	rjmp	.+2      	; 0x246a <main+0x7d6>
+    2468:	90 e0       	ldi	r25, 0x00	; 0
+    246a:	89 1b       	sub	r24, r25
+    246c:	82 83       	std	Z+2, r24	; 0x02
+								LoadPreset(ch);
+    246e:	8b 81       	ldd	r24, Y+3	; 0x03
+    2470:	85 d2       	rcall	.+1290   	; 0x297c <LoadPreset>
+    2472:	44 24       	eor	r4, r4
+    2474:	43 94       	inc	r4
+    2476:	51 2c       	mov	r5, r1
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    2478:	66 24       	eor	r6, r6
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    247a:	63 94       	inc	r6
+    247c:	64 cc       	rjmp	.-1848   	; 0x1d46 <main+0xb2>
+    247e:	33 e1       	ldi	r19, 0x13	; 19
+							{
+								heater[ch].tset += (heater[ch].tset != 150);
+							}
+							else if(menu->set == 2)
+							{
+								heater[ch].preset += (heater[ch].preset != 24);
+    2480:	8b 81       	ldd	r24, Y+3	; 0x03
+    2482:	38 9f       	mul	r19, r24
+    2484:	f0 01       	movw	r30, r0
+    2486:	11 24       	eor	r1, r1
+    2488:	e0 5e       	subi	r30, 0xE0	; 224
+    248a:	fc 4f       	sbci	r31, 0xFC	; 252
+    248c:	82 81       	ldd	r24, Z+2	; 0x02
+    248e:	91 e0       	ldi	r25, 0x01	; 1
+    2490:	88 31       	cpi	r24, 0x18	; 24
+    2492:	69 f0       	breq	.+26     	; 0x24ae <main+0x81a>
+    2494:	89 0f       	add	r24, r25
+    2496:	82 83       	std	Z+2, r24	; 0x02
+    2498:	8b 81       	ldd	r24, Y+3	; 0x03
+								LoadPreset(ch);
+    249a:	70 d2       	rcall	.+1248   	; 0x297c <LoadPreset>
+    249c:	22 e0       	ldi	r18, 0x02	; 2
+    249e:	42 2e       	mov	r4, r18
+    24a0:	51 2c       	mov	r5, r1
+    24a2:	66 24       	eor	r6, r6
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+    24a4:	63 94       	inc	r6
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+    24a6:	4f cc       	rjmp	.-1890   	; 0x1d46 <main+0xb2>
+    24a8:	20 e0       	ldi	r18, 0x00	; 0
+    24aa:	30 e0       	ldi	r19, 0x00	; 0
+						
+						case 0x02:
+							menu->blink_cnt = 1;
+							if(menu->set == 1)
+							{
+								heater[ch].tset += (heater[ch].tset != 150);
+    24ac:	c8 cf       	rjmp	.-112    	; 0x243e <main+0x7aa>
+    24ae:	90 e0       	ldi	r25, 0x00	; 0
+    24b0:	f1 cf       	rjmp	.-30     	; 0x2494 <main+0x800>
+
+000024b2 <I2C_SendByte>:
+							{ 0x08, 0x08, 0x04, 0x02, 0x01, 0x08, 0x08, 0x08 }, /* 6 OPEN */
+							{ 0x08, 0x08, 0x04, 0x04, 0x02, 0x0F, 0x0A, 0x08 }};/* 7 SHORT */
+	
+void I2C_SendByte(uint8_t byte)
+{	
+	cli();
+    24b2:	f8 94       	cli
+	TWCR |= (1 << TWINT) | (1 << TWSTA);
+    24b4:	90 91 bc 00 	lds	r25, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24b8:	90 6a       	ori	r25, 0xA0	; 160
+    24ba:	90 93 bc 00 	sts	0x00BC, r25	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+	while(!(TWCR & (1 << TWINT)));
+    24be:	90 91 bc 00 	lds	r25, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24c2:	97 ff       	sbrs	r25, 7
+    24c4:	fc cf       	rjmp	.-8      	; 0x24be <I2C_SendByte+0xc>
+	TWDR = LCDI2CADDR;
+    24c6:	9e e4       	ldi	r25, 0x4E	; 78
+    24c8:	90 93 bb 00 	sts	0x00BB, r25	; 0x8000bb <__TEXT_REGION_LENGTH__+0x7e00bb>
+	TWCR &= ~(1 << TWSTA);
+    24cc:	90 91 bc 00 	lds	r25, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24d0:	9f 7d       	andi	r25, 0xDF	; 223
+    24d2:	90 93 bc 00 	sts	0x00BC, r25	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+	TWCR |= (1 << TWINT);
+    24d6:	90 91 bc 00 	lds	r25, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24da:	90 68       	ori	r25, 0x80	; 128
+    24dc:	90 93 bc 00 	sts	0x00BC, r25	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+	while(!(TWCR & (1 << TWINT)));
+    24e0:	90 91 bc 00 	lds	r25, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24e4:	97 ff       	sbrs	r25, 7
+    24e6:	fc cf       	rjmp	.-8      	; 0x24e0 <I2C_SendByte+0x2e>
+	TWDR = byte;
+    24e8:	80 93 bb 00 	sts	0x00BB, r24	; 0x8000bb <__TEXT_REGION_LENGTH__+0x7e00bb>
+	TWCR |= (1 << TWINT);
+    24ec:	80 91 bc 00 	lds	r24, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24f0:	80 68       	ori	r24, 0x80	; 128
+    24f2:	80 93 bc 00 	sts	0x00BC, r24	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+	while(!(TWCR & (1 << TWINT)));
+    24f6:	80 91 bc 00 	lds	r24, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    24fa:	87 ff       	sbrs	r24, 7
+    24fc:	fc cf       	rjmp	.-8      	; 0x24f6 <I2C_SendByte+0x44>
+	TWCR |= (1 << TWINT) | (1 << TWSTO);
+    24fe:	80 91 bc 00 	lds	r24, 0x00BC	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+    2502:	80 69       	ori	r24, 0x90	; 144
+    2504:	80 93 bc 00 	sts	0x00BC, r24	; 0x8000bc <__TEXT_REGION_LENGTH__+0x7e00bc>
+	sei();
+    2508:	78 94       	sei
+    250a:	08 95       	ret
+
+0000250c <LCD_SendData>:
+}
+
+void LCD_SendData(uint8_t data)
+{
+    250c:	cf 93       	push	r28
+    250e:	df 93       	push	r29
+    2510:	c8 2f       	mov	r28, r24
+	I2C_SendByte((data & 0xF0) | LCD_RS | LCD_E);
+    2512:	d8 2f       	mov	r29, r24
+    2514:	d0 7f       	andi	r29, 0xF0	; 240
+    2516:	8d 2f       	mov	r24, r29
+    2518:	85 60       	ori	r24, 0x05	; 5
+    251a:	cb df       	rcall	.-106    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte((data & 0xF0) | LCD_RS);
+    251c:	8d 2f       	mov	r24, r29
+    251e:	81 60       	ori	r24, 0x01	; 1
+    2520:	c8 df       	rcall	.-112    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte((data << 4) | LCD_RS | LCD_E);
+    2522:	80 e1       	ldi	r24, 0x10	; 16
+    2524:	c8 9f       	mul	r28, r24
+    2526:	e0 01       	movw	r28, r0
+    2528:	11 24       	eor	r1, r1
+    252a:	8c 2f       	mov	r24, r28
+    252c:	85 60       	ori	r24, 0x05	; 5
+    252e:	c1 df       	rcall	.-126    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte((data << 4) | LCD_RS);
+    2530:	8c 2f       	mov	r24, r28
+    2532:	81 60       	ori	r24, 0x01	; 1
+    2534:	be df       	rcall	.-132    	; 0x24b2 <I2C_SendByte>
+    2536:	80 e1       	ldi	r24, 0x10	; 16
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+    2538:	8a 95       	dec	r24
+    253a:	f1 f7       	brne	.-4      	; 0x2538 <LCD_SendData+0x2c>
+    253c:	df 91       	pop	r29
+	_delay_us(4);
+}
+    253e:	cf 91       	pop	r28
+    2540:	08 95       	ret
+
+00002542 <LCD_SendCmd>:
+    2542:	cf 93       	push	r28
+
+void LCD_SendCmd(uint8_t cmd)
+{
+    2544:	df 93       	push	r29
+    2546:	c8 2f       	mov	r28, r24
+	I2C_SendByte(((cmd & 0xF0) & ~LCD_RS) | LCD_E);
+    2548:	d8 2f       	mov	r29, r24
+    254a:	d0 7f       	andi	r29, 0xF0	; 240
+    254c:	8d 2f       	mov	r24, r29
+    254e:	84 60       	ori	r24, 0x04	; 4
+    2550:	b0 df       	rcall	.-160    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte((cmd & 0xF0) & ~LCD_RS);
+    2552:	8d 2f       	mov	r24, r29
+    2554:	ae df       	rcall	.-164    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte(((cmd << 4) & ~LCD_RS) | LCD_E);
+    2556:	20 e1       	ldi	r18, 0x10	; 16
+    2558:	c2 9f       	mul	r28, r18
+    255a:	c0 01       	movw	r24, r0
+    255c:	11 24       	eor	r1, r1
+    255e:	84 60       	ori	r24, 0x04	; 4
+    2560:	a8 df       	rcall	.-176    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte((cmd << 4) & ~LCD_RS);
+    2562:	8c 2f       	mov	r24, r28
+    2564:	82 95       	swap	r24
+    2566:	80 7f       	andi	r24, 0xF0	; 240
+    2568:	a4 df       	rcall	.-184    	; 0x24b2 <I2C_SendByte>
+
+	if(cmd == LCD_CLR)
+    256a:	c1 30       	cpi	r28, 0x01	; 1
+    256c:	31 f0       	breq	.+12     	; 0x257a <LCD_SendCmd+0x38>
+    256e:	98 e2       	ldi	r25, 0x28	; 40
+    2570:	9a 95       	dec	r25
+    2572:	f1 f7       	brne	.-4      	; 0x2570 <LCD_SendCmd+0x2e>
+	}
+	else
+	{
+		_delay_us(10);
+	}
+}
+    2574:	df 91       	pop	r29
+    2576:	cf 91       	pop	r28
+    2578:	08 95       	ret
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+    257a:	8f e4       	ldi	r24, 0x4F	; 79
+    257c:	96 e4       	ldi	r25, 0x46	; 70
+    257e:	01 97       	sbiw	r24, 0x01	; 1
+    2580:	f1 f7       	brne	.-4      	; 0x257e <LCD_SendCmd+0x3c>
+    2582:	00 c0       	rjmp	.+0      	; 0x2584 <LCD_SendCmd+0x42>
+    2584:	00 00       	nop
+    2586:	df 91       	pop	r29
+    2588:	cf 91       	pop	r28
+    258a:	08 95       	ret
+
+0000258c <LCD_SetPos>:
+
+void LCD_SetPos(uint8_t x, uint8_t y)
+{
+	y = ((y & 0x01) * 0x40);
+    258c:	61 70       	andi	r22, 0x01	; 1
+	x &= 0x0F;
+	LCD_SendCmd(LCD_DDRAM | (x + y));
+    258e:	8f 70       	andi	r24, 0x0F	; 15
+    2590:	90 e4       	ldi	r25, 0x40	; 64
+    2592:	69 9f       	mul	r22, r25
+    2594:	80 0d       	add	r24, r0
+    2596:	11 24       	eor	r1, r1
+    2598:	80 68       	ori	r24, 0x80	; 128
+    259a:	d3 cf       	rjmp	.-90     	; 0x2542 <LCD_SendCmd>
+
+0000259c <LoadSymbols>:
+}
+
+void LoadSymbols()
+{
+    259c:	cf 92       	push	r12
+    259e:	df 92       	push	r13
+    25a0:	ff 92       	push	r15
+    25a2:	0f 93       	push	r16
+    25a4:	1f 93       	push	r17
+    25a6:	cf 93       	push	r28
+    25a8:	df 93       	push	r29
+    25aa:	84 ea       	ldi	r24, 0xA4	; 164
+    25ac:	c8 2e       	mov	r12, r24
+    25ae:	82 e0       	ldi	r24, 0x02	; 2
+    25b0:	d8 2e       	mov	r13, r24
+    25b2:	f1 2c       	mov	r15, r1
+    25b4:	d0 e0       	ldi	r29, 0x00	; 0
+	for(uint8_t i = 0; i < 8; i++)
+	{
+		LCD_SendCmd(LCD_CGRAM | (0x08 * i));
+    25b6:	8f 2d       	mov	r24, r15
+    25b8:	80 64       	ori	r24, 0x40	; 64
+    25ba:	c3 df       	rcall	.-122    	; 0x2542 <LCD_SendCmd>
+    25bc:	86 01       	movw	r16, r12
+    25be:	c8 e0       	ldi	r28, 0x08	; 8
+    25c0:	03 c0       	rjmp	.+6      	; 0x25c8 <LoadSymbols+0x2c>
+    25c2:	f8 01       	movw	r30, r16
+    25c4:	d1 91       	ld	r29, Z+
+    25c6:	8f 01       	movw	r16, r30
+		for(uint8_t j = 0; j < 8; j++)
+		{
+			LCD_SendData(symbols[i][j]);
+    25c8:	8d 2f       	mov	r24, r29
+    25ca:	a0 df       	rcall	.-192    	; 0x250c <LCD_SendData>
+    25cc:	c1 50       	subi	r28, 0x01	; 1
+void LoadSymbols()
+{
+	for(uint8_t i = 0; i < 8; i++)
+	{
+		LCD_SendCmd(LCD_CGRAM | (0x08 * i));
+		for(uint8_t j = 0; j < 8; j++)
+    25ce:	c9 f7       	brne	.-14     	; 0x25c2 <LoadSymbols+0x26>
+    25d0:	f8 e0       	ldi	r31, 0x08	; 8
+    25d2:	ff 0e       	add	r15, r31
+	LCD_SendCmd(LCD_DDRAM | (x + y));
+}
+
+void LoadSymbols()
+{
+	for(uint8_t i = 0; i < 8; i++)
+    25d4:	80 e4       	ldi	r24, 0x40	; 64
+    25d6:	f8 16       	cp	r15, r24
+    25d8:	31 f0       	breq	.+12     	; 0x25e6 <LoadSymbols+0x4a>
+    25da:	f6 01       	movw	r30, r12
+    25dc:	d7 81       	ldd	r29, Z+7	; 0x07
+    25de:	f8 e0       	ldi	r31, 0x08	; 8
+    25e0:	cf 0e       	add	r12, r31
+    25e2:	d1 1c       	adc	r13, r1
+    25e4:	e8 cf       	rjmp	.-48     	; 0x25b6 <LoadSymbols+0x1a>
+		for(uint8_t j = 0; j < 8; j++)
+		{
+			LCD_SendData(symbols[i][j]);
+		}
+	}
+}
+    25e6:	df 91       	pop	r29
+    25e8:	cf 91       	pop	r28
+    25ea:	1f 91       	pop	r17
+    25ec:	0f 91       	pop	r16
+    25ee:	ff 90       	pop	r15
+    25f0:	df 90       	pop	r13
+    25f2:	cf 90       	pop	r12
+    25f4:	08 95       	ret
+
+000025f6 <LCD_Init>:
+
+void LCD_Init(void)
+{
+    25f6:	cf 93       	push	r28
+	I2C_SendByte(0x00);
+    25f8:	80 e0       	ldi	r24, 0x00	; 0
+    25fa:	5b df       	rcall	.-330    	; 0x24b2 <I2C_SendByte>
+    25fc:	2f eb       	ldi	r18, 0xBF	; 191
+    25fe:	84 ed       	ldi	r24, 0xD4	; 212
+    2600:	91 e0       	ldi	r25, 0x01	; 1
+    2602:	21 50       	subi	r18, 0x01	; 1
+    2604:	80 40       	sbci	r24, 0x00	; 0
+    2606:	90 40       	sbci	r25, 0x00	; 0
+    2608:	e1 f7       	brne	.-8      	; 0x2602 <LCD_Init+0xc>
+    260a:	00 c0       	rjmp	.+0      	; 0x260c <LCD_Init+0x16>
+    260c:	00 00       	nop
+    260e:	c5 e0       	ldi	r28, 0x05	; 5
+
+	_delay_ms(50);
+
+	for(uint8_t i = 0; i < 5; i++)
+	{
+		I2C_SendByte(0x00 | LCD_E);
+    2610:	84 e0       	ldi	r24, 0x04	; 4
+    2612:	4f df       	rcall	.-354    	; 0x24b2 <I2C_SendByte>
+		I2C_SendByte(0x00 & ~LCD_E);
+    2614:	80 e0       	ldi	r24, 0x00	; 0
+    2616:	4d df       	rcall	.-358    	; 0x24b2 <I2C_SendByte>
+    2618:	c1 50       	subi	r28, 0x01	; 1
+    261a:	d1 f7       	brne	.-12     	; 0x2610 <LCD_Init+0x1a>
+{
+	I2C_SendByte(0x00);
+
+	_delay_ms(50);
+
+	for(uint8_t i = 0; i < 5; i++)
+    261c:	28 ec       	ldi	r18, 0xC8	; 200
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+    261e:	2a 95       	dec	r18
+    2620:	f1 f7       	brne	.-4      	; 0x261e <LCD_Init+0x28>
+		I2C_SendByte(0x00 | LCD_E);
+		I2C_SendByte(0x00 & ~LCD_E);
+	}
+	_delay_us(50);
+	
+	I2C_SendByte(LCD_WIDTH | LCD_E);
+    2622:	84 e2       	ldi	r24, 0x24	; 36
+    2624:	46 df       	rcall	.-372    	; 0x24b2 <I2C_SendByte>
+	I2C_SendByte(LCD_WIDTH & ~LCD_E);
+    2626:	80 e2       	ldi	r24, 0x20	; 32
+    2628:	44 df       	rcall	.-376    	; 0x24b2 <I2C_SendByte>
+	LCD_SendCmd(LCD_WIDTH | LCD_WIDTH_N | LCD_WIDTH_FT1);
+    262a:	8a e2       	ldi	r24, 0x2A	; 42
+    262c:	8a df       	rcall	.-236    	; 0x2542 <LCD_SendCmd>
+	LCD_SendCmd(LCD_ONOFF);
+    262e:	88 e0       	ldi	r24, 0x08	; 8
+    2630:	88 df       	rcall	.-240    	; 0x2542 <LCD_SendCmd>
+	LCD_SendCmd(LCD_CLR);
+    2632:	81 e0       	ldi	r24, 0x01	; 1
+    2634:	86 df       	rcall	.-244    	; 0x2542 <LCD_SendCmd>
+	LCD_SendCmd(LCD_DIR | LCD_DIR_ID);
+    2636:	86 e0       	ldi	r24, 0x06	; 6
+    2638:	84 df       	rcall	.-248    	; 0x2542 <LCD_SendCmd>
+    263a:	8c e0       	ldi	r24, 0x0C	; 12
+	LCD_SendCmd(LCD_ONOFF | LCD_ONOFF_D);
+    263c:	82 df       	rcall	.-252    	; 0x2542 <LCD_SendCmd>
+    263e:	cf 91       	pop	r28
+    2640:	ad cf       	rjmp	.-166    	; 0x259c <LoadSymbols>
+
+00002642 <POT_SendData>:
+	LoadSymbols();
+}
+    2642:	95 b1       	in	r25, 0x05	; 5
+	LCD_SendCmd(LCD_WIDTH | LCD_WIDTH_N | LCD_WIDTH_FT1);
+	LCD_SendCmd(LCD_ONOFF);
+	LCD_SendCmd(LCD_CLR);
+	LCD_SendCmd(LCD_DIR | LCD_DIR_ID);
+	LCD_SendCmd(LCD_ONOFF | LCD_ONOFF_D);
+	LoadSymbols();
+    2644:	98 7f       	andi	r25, 0xF8	; 248
+    2646:	67 70       	andi	r22, 0x07	; 7
+	ch = (ch & 0x01) * 2;
+	potval = (uint8_t)((shift * 255.0) / 2.037);
+	POT_SendData(potval, ch);
+	//return (((float)potval * 2.037) / 255.0);
+	return potval;
+}
+    2648:	69 2b       	or	r22, r25
+    264a:	65 b9       	out	0x05, r22	; 5
+    264c:	2c 98       	cbi	0x05, 4	; 5
+    264e:	91 e1       	ldi	r25, 0x11	; 17
+    2650:	9e bd       	out	0x2e, r25	; 46
+    2652:	0d b4       	in	r0, 0x2d	; 45
+    2654:	07 fe       	sbrs	r0, 7
+    2656:	fd cf       	rjmp	.-6      	; 0x2652 <POT_SendData+0x10>
+    2658:	8e bd       	out	0x2e, r24	; 46
+    265a:	0d b4       	in	r0, 0x2d	; 45
+    265c:	07 fe       	sbrs	r0, 7
+    265e:	fd cf       	rjmp	.-6      	; 0x265a <POT_SendData+0x18>
+    2660:	2c 9a       	sbi	0x05, 4	; 5
+    2662:	08 95       	ret
+
+00002664 <SetDriveVoltage>:
+
+uint8_t SetDriveVoltage(uint8_t ch, float voltage)
+{
+    2664:	cf 92       	push	r12
+    2666:	df 92       	push	r13
+    2668:	ef 92       	push	r14
+    266a:	ff 92       	push	r15
+    266c:	cf 93       	push	r28
+    266e:	df 93       	push	r29
+    2670:	6a 01       	movw	r12, r20
+    2672:	7b 01       	movw	r14, r22
+	uint8_t potval;
+	ch = POT_DRIVE1 + (ch & 0x01);
+    2674:	c8 2f       	mov	r28, r24
+    2676:	c1 70       	andi	r28, 0x01	; 1
+	potval = (uint8_t)(voltage * 25.76);
+    2678:	2b e7       	ldi	r18, 0x7B	; 123
+    267a:	34 e1       	ldi	r19, 0x14	; 20
+    267c:	4e ec       	ldi	r20, 0xCE	; 206
+    267e:	51 e4       	ldi	r21, 0x41	; 65
+    2680:	c7 01       	movw	r24, r14
+    2682:	b6 01       	movw	r22, r12
+    2684:	c8 d3       	rcall	.+1936   	; 0x2e16 <__mulsf3>
+    2686:	e5 d2       	rcall	.+1482   	; 0x2c52 <__fixunssfsi>
+    2688:	d6 2f       	mov	r29, r22
+	POT_SendData(potval, ch);
+    268a:	64 e0       	ldi	r22, 0x04	; 4
+    268c:	6c 0f       	add	r22, r28
+    268e:	8d 2f       	mov	r24, r29
+    2690:	d8 df       	rcall	.-80     	; 0x2642 <POT_SendData>
+	//return ((float)potval / 25.76);
+	return potval;
+}
+    2692:	8d 2f       	mov	r24, r29
+    2694:	df 91       	pop	r29
+    2696:	cf 91       	pop	r28
+    2698:	ff 90       	pop	r15
+    269a:	ef 90       	pop	r14
+    269c:	df 90       	pop	r13
+    269e:	cf 90       	pop	r12
+    26a0:	08 95       	ret
+
+000026a2 <SetInputRange>:
+
+void SetInputRange(uint8_t ch, float vlow, float vhigh)
+{
+    26a2:	8f 92       	push	r8
+    26a4:	9f 92       	push	r9
+    26a6:	af 92       	push	r10
+    26a8:	bf 92       	push	r11
+    26aa:	cf 92       	push	r12
+    26ac:	df 92       	push	r13
+    26ae:	ef 92       	push	r14
+    26b0:	ff 92       	push	r15
+    26b2:	0f 93       	push	r16
+    26b4:	1f 93       	push	r17
+    26b6:	cf 93       	push	r28
+    26b8:	df 93       	push	r29
+    26ba:	e8 2f       	mov	r30, r24
+    26bc:	4a 01       	movw	r8, r20
+    26be:	5b 01       	movw	r10, r22
+    26c0:	c9 01       	movw	r24, r18
+    26c2:	b8 01       	movw	r22, r16
+	heater[ch].gain = SetOpampGain(ch, (3.3 / (vhigh - vlow)));
+    26c4:	ce 2e       	mov	r12, r30
+    26c6:	d1 2c       	mov	r13, r1
+}
+
+uint8_t SetOpampGain(uint8_t ch, float gain)
+{
+	uint8_t potval;
+	ch = ((ch & 0x01) * 2) + 1;
+    26c8:	2e 2f       	mov	r18, r30
+    26ca:	21 70       	andi	r18, 0x01	; 1
+    26cc:	c2 2f       	mov	r28, r18
+    26ce:	cc 0f       	add	r28, r28
+	potval = (uint8_t)((8.448 * gain) - 8.9088);
+    26d0:	a5 01       	movw	r20, r10
+    26d2:	94 01       	movw	r18, r8
+    26d4:	e8 d1       	rcall	.+976    	; 0x2aa6 <__subsf3>
+    26d6:	9b 01       	movw	r18, r22
+    26d8:	ac 01       	movw	r20, r24
+    26da:	63 e3       	ldi	r22, 0x33	; 51
+    26dc:	73 e3       	ldi	r23, 0x33	; 51
+    26de:	83 e5       	ldi	r24, 0x53	; 83
+    26e0:	90 e4       	ldi	r25, 0x40	; 64
+    26e2:	4a d2       	rcall	.+1172   	; 0x2b78 <__divsf3>
+    26e4:	22 e0       	ldi	r18, 0x02	; 2
+    26e6:	3b e2       	ldi	r19, 0x2B	; 43
+    26e8:	47 e0       	ldi	r20, 0x07	; 7
+    26ea:	51 e4       	ldi	r21, 0x41	; 65
+    26ec:	94 d3       	rcall	.+1832   	; 0x2e16 <__mulsf3>
+    26ee:	22 e7       	ldi	r18, 0x72	; 114
+    26f0:	3a e8       	ldi	r19, 0x8A	; 138
+    26f2:	4e e0       	ldi	r20, 0x0E	; 14
+    26f4:	51 e4       	ldi	r21, 0x41	; 65
+    26f6:	d7 d1       	rcall	.+942    	; 0x2aa6 <__subsf3>
+    26f8:	ac d2       	rcall	.+1368   	; 0x2c52 <__fixunssfsi>
+    26fa:	d6 2f       	mov	r29, r22
+	POT_SendData(potval, ch);
+    26fc:	61 e0       	ldi	r22, 0x01	; 1
+    26fe:	6c 0f       	add	r22, r28
+    2700:	8d 2f       	mov	r24, r29
+    2702:	9f df       	rcall	.-194    	; 0x2642 <POT_SendData>
+    2704:	83 e1       	ldi	r24, 0x13	; 19
+	return potval;
+}
+
+void SetInputRange(uint8_t ch, float vlow, float vhigh)
+{
+	heater[ch].gain = SetOpampGain(ch, (3.3 / (vhigh - vlow)));
+    2706:	8c 9d       	mul	r24, r12
+    2708:	80 01       	movw	r16, r0
+    270a:	8d 9d       	mul	r24, r13
+    270c:	10 0d       	add	r17, r0
+    270e:	11 24       	eor	r1, r1
+    2710:	00 5e       	subi	r16, 0xE0	; 224
+    2712:	1c 4f       	sbci	r17, 0xFC	; 252
+    2714:	f8 01       	movw	r30, r16
+    2716:	d0 8b       	std	Z+16, r29	; 0x10
+    2718:	2a e4       	ldi	r18, 0x4A	; 74
+
+uint8_t SetOpampShift(uint8_t ch, float shift)
+{
+	uint8_t potval;
+	ch = (ch & 0x01) * 2;
+	potval = (uint8_t)((shift * 255.0) / 2.037);
+    271a:	3c e0       	ldi	r19, 0x0C	; 12
+    271c:	42 e4       	ldi	r20, 0x42	; 66
+    271e:	5f e3       	ldi	r21, 0x3F	; 63
+    2720:	c5 01       	movw	r24, r10
+    2722:	b4 01       	movw	r22, r8
+    2724:	78 d3       	rcall	.+1776   	; 0x2e16 <__mulsf3>
+    2726:	20 e0       	ldi	r18, 0x00	; 0
+    2728:	30 e0       	ldi	r19, 0x00	; 0
+    272a:	4f e7       	ldi	r20, 0x7F	; 127
+    272c:	53 e4       	ldi	r21, 0x43	; 67
+    272e:	73 d3       	rcall	.+1766   	; 0x2e16 <__mulsf3>
+    2730:	25 e3       	ldi	r18, 0x35	; 53
+    2732:	3e e5       	ldi	r19, 0x5E	; 94
+    2734:	42 e0       	ldi	r20, 0x02	; 2
+    2736:	50 e4       	ldi	r21, 0x40	; 64
+    2738:	1f d2       	rcall	.+1086   	; 0x2b78 <__divsf3>
+    273a:	8b d2       	rcall	.+1302   	; 0x2c52 <__fixunssfsi>
+    273c:	d6 2f       	mov	r29, r22
+	POT_SendData(potval, ch);
+    273e:	6c 2f       	mov	r22, r28
+    2740:	8d 2f       	mov	r24, r29
+    2742:	7f df       	rcall	.-258    	; 0x2642 <POT_SendData>
+    2744:	f8 01       	movw	r30, r16
+}
+
+void SetInputRange(uint8_t ch, float vlow, float vhigh)
+{
+	heater[ch].gain = SetOpampGain(ch, (3.3 / (vhigh - vlow)));
+	heater[ch].shift = SetOpampShift(ch, (0.758 * vlow));
+    2746:	d1 8b       	std	Z+17, r29	; 0x11
+    2748:	2d e0       	ldi	r18, 0x0D	; 13
+	opamp[ch].gain = (((float)heater[ch].gain + 8.9088) / 8.448);
+    274a:	2c 9d       	mul	r18, r12
+    274c:	c0 01       	movw	r24, r0
+    274e:	2d 9d       	mul	r18, r13
+    2750:	90 0d       	add	r25, r0
+    2752:	11 24       	eor	r1, r1
+    2754:	9c 01       	movw	r18, r24
+    2756:	22 57       	subi	r18, 0x72	; 114
+    2758:	39 4f       	sbci	r19, 0xF9	; 249
+    275a:	79 01       	movw	r14, r18
+    275c:	60 89       	ldd	r22, Z+16	; 0x10
+    275e:	70 e0       	ldi	r23, 0x00	; 0
+    2760:	80 e0       	ldi	r24, 0x00	; 0
+    2762:	90 e0       	ldi	r25, 0x00	; 0
+    2764:	a2 d2       	rcall	.+1348   	; 0x2caa <__floatunsisf>
+    2766:	22 e7       	ldi	r18, 0x72	; 114
+    2768:	3a e8       	ldi	r19, 0x8A	; 138
+    276a:	4e e0       	ldi	r20, 0x0E	; 14
+    276c:	51 e4       	ldi	r21, 0x41	; 65
+    276e:	9c d1       	rcall	.+824    	; 0x2aa8 <__addsf3>
+    2770:	22 e0       	ldi	r18, 0x02	; 2
+    2772:	3b e2       	ldi	r19, 0x2B	; 43
+    2774:	47 e0       	ldi	r20, 0x07	; 7
+    2776:	51 e4       	ldi	r21, 0x41	; 65
+    2778:	ff d1       	rcall	.+1022   	; 0x2b78 <__divsf3>
+    277a:	f7 01       	movw	r30, r14
+    277c:	61 83       	std	Z+1, r22	; 0x01
+    277e:	72 83       	std	Z+2, r23	; 0x02
+    2780:	83 83       	std	Z+3, r24	; 0x03
+	opamp[ch].shift = (((float)heater[ch].shift * 2.037) / 255.0);
+    2782:	94 83       	std	Z+4, r25	; 0x04
+    2784:	6d 2f       	mov	r22, r29
+    2786:	70 e0       	ldi	r23, 0x00	; 0
+    2788:	80 e0       	ldi	r24, 0x00	; 0
+    278a:	90 e0       	ldi	r25, 0x00	; 0
+    278c:	8e d2       	rcall	.+1308   	; 0x2caa <__floatunsisf>
+    278e:	25 e3       	ldi	r18, 0x35	; 53
+    2790:	3e e5       	ldi	r19, 0x5E	; 94
+    2792:	42 e0       	ldi	r20, 0x02	; 2
+    2794:	50 e4       	ldi	r21, 0x40	; 64
+    2796:	3f d3       	rcall	.+1662   	; 0x2e16 <__mulsf3>
+    2798:	20 e0       	ldi	r18, 0x00	; 0
+    279a:	30 e0       	ldi	r19, 0x00	; 0
+    279c:	4f e7       	ldi	r20, 0x7F	; 127
+    279e:	53 e4       	ldi	r21, 0x43	; 67
+    27a0:	eb d1       	rcall	.+982    	; 0x2b78 <__divsf3>
+    27a2:	f7 01       	movw	r30, r14
+    27a4:	65 83       	std	Z+5, r22	; 0x05
+    27a6:	76 83       	std	Z+6, r23	; 0x06
+    27a8:	87 83       	std	Z+7, r24	; 0x07
+    27aa:	90 87       	std	Z+8, r25	; 0x08
+    27ac:	df 91       	pop	r29
+}
+    27ae:	cf 91       	pop	r28
+    27b0:	1f 91       	pop	r17
+    27b2:	0f 91       	pop	r16
+    27b4:	ff 90       	pop	r15
+    27b6:	ef 90       	pop	r14
+    27b8:	df 90       	pop	r13
+    27ba:	cf 90       	pop	r12
+    27bc:	bf 90       	pop	r11
+    27be:	af 90       	pop	r10
+    27c0:	9f 90       	pop	r9
+    27c2:	8f 90       	pop	r8
+    27c4:	08 95       	ret
+
+000027c6 <SetGainData>:
+    27c6:	1f 93       	push	r17
+
+void SetGainData(uint8_t ch, uint8_t data)
+{
+    27c8:	cf 93       	push	r28
+    27ca:	df 93       	push	r29
+    27cc:	c8 2f       	mov	r28, r24
+    27ce:	16 2f       	mov	r17, r22
+	POT_SendData(data, ((ch & 0x01) * 2) + 1);
+    27d0:	68 2f       	mov	r22, r24
+    27d2:	61 70       	andi	r22, 0x01	; 1
+    27d4:	66 0f       	add	r22, r22
+    27d6:	6f 5f       	subi	r22, 0xFF	; 255
+    27d8:	81 2f       	mov	r24, r17
+    27da:	33 df       	rcall	.-410    	; 0x2642 <POT_SendData>
+	heater[ch].gain = data;
+    27dc:	83 e1       	ldi	r24, 0x13	; 19
+    27de:	c8 9f       	mul	r28, r24
+    27e0:	f0 01       	movw	r30, r0
+    27e2:	11 24       	eor	r1, r1
+    27e4:	e0 5e       	subi	r30, 0xE0	; 224
+    27e6:	fc 4f       	sbci	r31, 0xFC	; 252
+    27e8:	10 8b       	std	Z+16, r17	; 0x10
+	opamp[ch].gain = (((float)data + 8.9088) / 8.448);
+    27ea:	8d e0       	ldi	r24, 0x0D	; 13
+    27ec:	c8 9f       	mul	r28, r24
+    27ee:	e0 01       	movw	r28, r0
+    27f0:	11 24       	eor	r1, r1
+    27f2:	c2 57       	subi	r28, 0x72	; 114
+    27f4:	d9 4f       	sbci	r29, 0xF9	; 249
+    27f6:	61 2f       	mov	r22, r17
+    27f8:	70 e0       	ldi	r23, 0x00	; 0
+    27fa:	80 e0       	ldi	r24, 0x00	; 0
+    27fc:	90 e0       	ldi	r25, 0x00	; 0
+    27fe:	55 d2       	rcall	.+1194   	; 0x2caa <__floatunsisf>
+    2800:	22 e7       	ldi	r18, 0x72	; 114
+    2802:	3a e8       	ldi	r19, 0x8A	; 138
+    2804:	4e e0       	ldi	r20, 0x0E	; 14
+    2806:	51 e4       	ldi	r21, 0x41	; 65
+    2808:	4f d1       	rcall	.+670    	; 0x2aa8 <__addsf3>
+    280a:	22 e0       	ldi	r18, 0x02	; 2
+    280c:	3b e2       	ldi	r19, 0x2B	; 43
+    280e:	47 e0       	ldi	r20, 0x07	; 7
+    2810:	51 e4       	ldi	r21, 0x41	; 65
+    2812:	b2 d1       	rcall	.+868    	; 0x2b78 <__divsf3>
+    2814:	69 83       	std	Y+1, r22	; 0x01
+    2816:	7a 83       	std	Y+2, r23	; 0x02
+    2818:	8b 83       	std	Y+3, r24	; 0x03
+    281a:	9c 83       	std	Y+4, r25	; 0x04
+}
+    281c:	df 91       	pop	r29
+    281e:	cf 91       	pop	r28
+    2820:	1f 91       	pop	r17
+    2822:	08 95       	ret
+
+00002824 <SetShiftData>:
+
+void SetShiftData(uint8_t ch, uint8_t data)
+{
+    2824:	1f 93       	push	r17
+    2826:	cf 93       	push	r28
+    2828:	df 93       	push	r29
+    282a:	c8 2f       	mov	r28, r24
+    282c:	16 2f       	mov	r17, r22
+	POT_SendData(data, (ch & 0x01) * 2);
+    282e:	68 2f       	mov	r22, r24
+    2830:	61 70       	andi	r22, 0x01	; 1
+    2832:	66 0f       	add	r22, r22
+    2834:	81 2f       	mov	r24, r17
+    2836:	05 df       	rcall	.-502    	; 0x2642 <POT_SendData>
+	heater[ch].shift = data;
+    2838:	83 e1       	ldi	r24, 0x13	; 19
+    283a:	c8 9f       	mul	r28, r24
+    283c:	f0 01       	movw	r30, r0
+    283e:	11 24       	eor	r1, r1
+    2840:	e0 5e       	subi	r30, 0xE0	; 224
+    2842:	fc 4f       	sbci	r31, 0xFC	; 252
+    2844:	11 8b       	std	Z+17, r17	; 0x11
+	opamp[ch].shift = (((float)data * 2.037) / 255.0);
+    2846:	8d e0       	ldi	r24, 0x0D	; 13
+    2848:	c8 9f       	mul	r28, r24
+    284a:	e0 01       	movw	r28, r0
+    284c:	11 24       	eor	r1, r1
+    284e:	c2 57       	subi	r28, 0x72	; 114
+    2850:	d9 4f       	sbci	r29, 0xF9	; 249
+    2852:	61 2f       	mov	r22, r17
+    2854:	70 e0       	ldi	r23, 0x00	; 0
+    2856:	80 e0       	ldi	r24, 0x00	; 0
+    2858:	90 e0       	ldi	r25, 0x00	; 0
+    285a:	27 d2       	rcall	.+1102   	; 0x2caa <__floatunsisf>
+    285c:	25 e3       	ldi	r18, 0x35	; 53
+    285e:	3e e5       	ldi	r19, 0x5E	; 94
+    2860:	42 e0       	ldi	r20, 0x02	; 2
+    2862:	50 e4       	ldi	r21, 0x40	; 64
+    2864:	d8 d2       	rcall	.+1456   	; 0x2e16 <__mulsf3>
+    2866:	20 e0       	ldi	r18, 0x00	; 0
+    2868:	30 e0       	ldi	r19, 0x00	; 0
+    286a:	4f e7       	ldi	r20, 0x7F	; 127
+    286c:	53 e4       	ldi	r21, 0x43	; 67
+    286e:	84 d1       	rcall	.+776    	; 0x2b78 <__divsf3>
+    2870:	6d 83       	std	Y+5, r22	; 0x05
+    2872:	7e 83       	std	Y+6, r23	; 0x06
+    2874:	8f 83       	std	Y+7, r24	; 0x07
+    2876:	98 87       	std	Y+8, r25	; 0x08
+}
+    2878:	df 91       	pop	r29
+    287a:	cf 91       	pop	r28
+    287c:	1f 91       	pop	r17
+    287e:	08 95       	ret
+
+00002880 <SetDriveData>:
+
+void SetDriveData(uint8_t ch, uint8_t data)
+{
+    2880:	cf 93       	push	r28
+    2882:	df 93       	push	r29
+	heater[ch].drive = data;
+    2884:	93 e1       	ldi	r25, 0x13	; 19
+    2886:	89 9f       	mul	r24, r25
+    2888:	f0 01       	movw	r30, r0
+    288a:	11 24       	eor	r1, r1
+    288c:	e0 5e       	subi	r30, 0xE0	; 224
+    288e:	fc 4f       	sbci	r31, 0xFC	; 252
+    2890:	62 8b       	std	Z+18, r22	; 0x12
+	opamp[ch].drive = ((float)data / 25.76);
+    2892:	9d e0       	ldi	r25, 0x0D	; 13
+    2894:	89 9f       	mul	r24, r25
+    2896:	e0 01       	movw	r28, r0
+    2898:	11 24       	eor	r1, r1
+    289a:	c2 57       	subi	r28, 0x72	; 114
+    289c:	d9 4f       	sbci	r29, 0xF9	; 249
+    289e:	70 e0       	ldi	r23, 0x00	; 0
+    28a0:	80 e0       	ldi	r24, 0x00	; 0
+    28a2:	90 e0       	ldi	r25, 0x00	; 0
+    28a4:	02 d2       	rcall	.+1028   	; 0x2caa <__floatunsisf>
+    28a6:	2b e7       	ldi	r18, 0x7B	; 123
+    28a8:	34 e1       	ldi	r19, 0x14	; 20
+    28aa:	4e ec       	ldi	r20, 0xCE	; 206
+    28ac:	51 e4       	ldi	r21, 0x41	; 65
+    28ae:	64 d1       	rcall	.+712    	; 0x2b78 <__divsf3>
+    28b0:	69 87       	std	Y+9, r22	; 0x09
+    28b2:	7a 87       	std	Y+10, r23	; 0x0a
+    28b4:	8b 87       	std	Y+11, r24	; 0x0b
+    28b6:	9c 87       	std	Y+12, r25	; 0x0c
+}
+    28b8:	df 91       	pop	r29
+    28ba:	cf 91       	pop	r28
+    28bc:	08 95       	ret
+
+000028be <SwitchDrive>:
+
+void SwitchDrive(uint8_t ch, uint8_t onoff)
+{
+    28be:	96 2f       	mov	r25, r22
+	uint8_t potnum = POT_DRIVE1 + (ch & 0x01);
+	POT_SendData(heater[ch].drive * (onoff & 0x01), potnum);
+    28c0:	68 2f       	mov	r22, r24
+    28c2:	61 70       	andi	r22, 0x01	; 1
+    28c4:	6c 5f       	subi	r22, 0xFC	; 252
+    28c6:	23 e1       	ldi	r18, 0x13	; 19
+    28c8:	82 9f       	mul	r24, r18
+    28ca:	f0 01       	movw	r30, r0
+    28cc:	11 24       	eor	r1, r1
+    28ce:	e0 5e       	subi	r30, 0xE0	; 224
+    28d0:	fc 4f       	sbci	r31, 0xFC	; 252
+    28d2:	89 2f       	mov	r24, r25
+    28d4:	81 70       	andi	r24, 0x01	; 1
+    28d6:	92 89       	ldd	r25, Z+18	; 0x12
+    28d8:	89 9f       	mul	r24, r25
+    28da:	80 2d       	mov	r24, r0
+    28dc:	11 24       	eor	r1, r1
+    28de:	b1 ce       	rjmp	.-670    	; 0x2642 <POT_SendData>
+
+000028e0 <LoadPrefs>:
+extern heater_str	heater[2];
+extern opamp_str	opamp[2];
+extern preset_str	preset[2];
+
+void LoadPrefs()
+{
+    28e0:	21 e0       	ldi	r18, 0x01	; 1
+    28e2:	80 e0       	ldi	r24, 0x00	; 0
+    28e4:	90 e0       	ldi	r25, 0x00	; 0
+	for(uint8_t addr = 0; addr < 4; addr++)
+	{
+		EEAR = addr;
+    28e6:	92 bd       	out	0x22, r25	; 34
+    28e8:	81 bd       	out	0x21, r24	; 33
+		EECR |= (1 << EERE);
+    28ea:	f8 9a       	sbi	0x1f, 0	; 31
+		switch(addr)
+    28ec:	82 30       	cpi	r24, 0x02	; 2
+    28ee:	81 f0       	breq	.+32     	; 0x2910 <LoadPrefs+0x30>
+    28f0:	83 30       	cpi	r24, 0x03	; 3
+    28f2:	c1 f0       	breq	.+48     	; 0x2924 <LoadPrefs+0x44>
+		{
+			case 0:
+				heater[CH0].preset = EEDR;
+				break;
+			case 1:
+				heater[CH1].preset = EEDR;
+    28f4:	30 b5       	in	r19, 0x20	; 32
+{
+	for(uint8_t addr = 0; addr < 4; addr++)
+	{
+		EEAR = addr;
+		EECR |= (1 << EERE);
+		switch(addr)
+    28f6:	81 30       	cpi	r24, 0x01	; 1
+    28f8:	91 f0       	breq	.+36     	; 0x291e <LoadPrefs+0x3e>
+		{
+			case 0:
+				heater[CH0].preset = EEDR;
+    28fa:	30 93 22 03 	sts	0x0322, r19	; 0x800322 <heater+0x2>
+extern opamp_str	opamp[2];
+extern preset_str	preset[2];
+
+void LoadPrefs()
+{
+	for(uint8_t addr = 0; addr < 4; addr++)
+    28fe:	24 30       	cpi	r18, 0x04	; 4
+    2900:	c1 f0       	breq	.+48     	; 0x2932 <LoadPrefs+0x52>
+    2902:	01 96       	adiw	r24, 0x01	; 1
+    2904:	2f 5f       	subi	r18, 0xFF	; 255
+	{
+		EEAR = addr;
+    2906:	92 bd       	out	0x22, r25	; 34
+    2908:	81 bd       	out	0x21, r24	; 33
+		EECR |= (1 << EERE);
+    290a:	f8 9a       	sbi	0x1f, 0	; 31
+		switch(addr)
+    290c:	82 30       	cpi	r24, 0x02	; 2
+    290e:	81 f7       	brne	.-32     	; 0x28f0 <LoadPrefs+0x10>
+				break;
+			case 1:
+				heater[CH1].preset = EEDR;
+				break;
+			case 2:
+				heater[CH0].tset = EEDR;
+    2910:	40 b5       	in	r20, 0x20	; 32
+    2912:	50 e0       	ldi	r21, 0x00	; 0
+    2914:	50 93 2b 03 	sts	0x032B, r21	; 0x80032b <heater+0xb>
+    2918:	40 93 2a 03 	sts	0x032A, r20	; 0x80032a <heater+0xa>
+				break;
+    291c:	f2 cf       	rjmp	.-28     	; 0x2902 <LoadPrefs+0x22>
+		{
+			case 0:
+				heater[CH0].preset = EEDR;
+				break;
+			case 1:
+				heater[CH1].preset = EEDR;
+    291e:	30 93 35 03 	sts	0x0335, r19	; 0x800335 <heater+0x15>
+				break;
+    2922:	ef cf       	rjmp	.-34     	; 0x2902 <LoadPrefs+0x22>
+			case 2:
+				heater[CH0].tset = EEDR;
+				break;
+			case 3:
+				heater[CH1].tset = EEDR;
+    2924:	80 b5       	in	r24, 0x20	; 32
+    2926:	90 e0       	ldi	r25, 0x00	; 0
+    2928:	90 93 3e 03 	sts	0x033E, r25	; 0x80033e <heater+0x1e>
+    292c:	80 93 3d 03 	sts	0x033D, r24	; 0x80033d <heater+0x1d>
+    2930:	08 95       	ret
+    2932:	08 95       	ret
+
+00002934 <SavePrefs>:
+	}
+}
+
+void SavePrefs()
+{
+	cli();
+    2934:	f8 94       	cli
+    2936:	80 e0       	ldi	r24, 0x00	; 0
+    2938:	90 e0       	ldi	r25, 0x00	; 0
+	for(uint8_t addr = 0; addr < 4; addr++)
+	{
+		EEAR = addr;
+    293a:	92 bd       	out	0x22, r25	; 34
+    293c:	81 bd       	out	0x21, r24	; 33
+		switch(addr)
+    293e:	82 30       	cpi	r24, 0x02	; 2
+    2940:	c9 f0       	breq	.+50     	; 0x2974 <SavePrefs+0x40>
+    2942:	83 30       	cpi	r24, 0x03	; 3
+    2944:	99 f0       	breq	.+38     	; 0x296c <SavePrefs+0x38>
+    2946:	81 30       	cpi	r24, 0x01	; 1
+    2948:	69 f0       	breq	.+26     	; 0x2964 <SavePrefs+0x30>
+		{
+			case 0:
+				EEDR = heater[CH0].preset;
+    294a:	20 91 22 03 	lds	r18, 0x0322	; 0x800322 <heater+0x2>
+    294e:	20 bd       	out	0x20, r18	; 32
+			case 3:
+				EEDR = heater[CH1].tset;
+				break;
+		}
+
+		EECR |= (1 << EEMPE);
+    2950:	fa 9a       	sbi	0x1f, 2	; 31
+		EECR |= (1 << EEPE);
+    2952:	f9 9a       	sbi	0x1f, 1	; 31
+		while(EECR & (1 << EEPE));
+    2954:	f9 99       	sbic	0x1f, 1	; 31
+    2956:	fe cf       	rjmp	.-4      	; 0x2954 <SavePrefs+0x20>
+    2958:	01 96       	adiw	r24, 0x01	; 1
+}
+
+void SavePrefs()
+{
+	cli();
+	for(uint8_t addr = 0; addr < 4; addr++)
+    295a:	84 30       	cpi	r24, 0x04	; 4
+    295c:	91 05       	cpc	r25, r1
+    295e:	69 f7       	brne	.-38     	; 0x293a <SavePrefs+0x6>
+
+		EECR |= (1 << EEMPE);
+		EECR |= (1 << EEPE);
+		while(EECR & (1 << EEPE));
+	}
+	sei();
+    2960:	78 94       	sei
+    2962:	08 95       	ret
+		{
+			case 0:
+				EEDR = heater[CH0].preset;
+				break;
+			case 1:
+				EEDR = heater[CH1].preset;
+    2964:	20 91 35 03 	lds	r18, 0x0335	; 0x800335 <heater+0x15>
+    2968:	20 bd       	out	0x20, r18	; 32
+				break;
+    296a:	f2 cf       	rjmp	.-28     	; 0x2950 <SavePrefs+0x1c>
+			case 2:
+				EEDR = heater[CH0].tset;
+				break;
+			case 3:
+				EEDR = heater[CH1].tset;
+    296c:	20 91 3d 03 	lds	r18, 0x033D	; 0x80033d <heater+0x1d>
+    2970:	20 bd       	out	0x20, r18	; 32
+				break;
+    2972:	ee cf       	rjmp	.-36     	; 0x2950 <SavePrefs+0x1c>
+				break;
+			case 1:
+				EEDR = heater[CH1].preset;
+				break;
+			case 2:
+				EEDR = heater[CH0].tset;
+    2974:	20 91 2a 03 	lds	r18, 0x032A	; 0x80032a <heater+0xa>
+    2978:	20 bd       	out	0x20, r18	; 32
+				break;
+    297a:	ea cf       	rjmp	.-44     	; 0x2950 <SavePrefs+0x1c>
+
+0000297c <LoadPreset>:
+	}
+	sei();
+}
+
+void LoadPreset(uint8_t ch)
+{
+    297c:	0f 93       	push	r16
+    297e:	1f 93       	push	r17
+    2980:	cf 93       	push	r28
+    2982:	df 93       	push	r29
+    2984:	c8 2f       	mov	r28, r24
+    2986:	20 e5       	ldi	r18, 0x50	; 80
+    2988:	82 9f       	mul	r24, r18
+    298a:	f0 01       	movw	r30, r0
+    298c:	11 24       	eor	r1, r1
+    298e:	ea 5b       	subi	r30, 0xBA	; 186
+    2990:	fc 4f       	sbci	r31, 0xFC	; 252
+    2992:	80 e0       	ldi	r24, 0x00	; 0
+    2994:	90 e0       	ldi	r25, 0x00	; 0
+	uint8_t offset;
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+	{
+		EEAR = 0x30 + (heater[ch].preset * sizeof(preset_str)) + offset;
+    2996:	4c 2f       	mov	r20, r28
+    2998:	50 e0       	ldi	r21, 0x00	; 0
+    299a:	63 e1       	ldi	r22, 0x13	; 19
+    299c:	c6 9f       	mul	r28, r22
+    299e:	d0 01       	movw	r26, r0
+    29a0:	11 24       	eor	r1, r1
+    29a2:	ae 5d       	subi	r26, 0xDE	; 222
+    29a4:	bc 4f       	sbci	r27, 0xFC	; 252
+    29a6:	2c 91       	ld	r18, X
+    29a8:	bc 01       	movw	r22, r24
+    29aa:	d0 e5       	ldi	r29, 0x50	; 80
+    29ac:	2d 9f       	mul	r18, r29
+    29ae:	60 0d       	add	r22, r0
+    29b0:	71 1d       	adc	r23, r1
+    29b2:	11 24       	eor	r1, r1
+    29b4:	9b 01       	movw	r18, r22
+    29b6:	20 5d       	subi	r18, 0xD0	; 208
+    29b8:	3f 4f       	sbci	r19, 0xFF	; 255
+    29ba:	32 bd       	out	0x22, r19	; 34
+    29bc:	21 bd       	out	0x21, r18	; 33
+		EECR |= (1 << EERE);
+    29be:	f8 9a       	sbi	0x1f, 0	; 31
+		((uint8_t*)&preset[ch])[offset] = EEDR;
+    29c0:	20 b5       	in	r18, 0x20	; 32
+    29c2:	21 93       	st	Z+, r18
+    29c4:	01 96       	adiw	r24, 0x01	; 1
+}
+
+void LoadPreset(uint8_t ch)
+{
+	uint8_t offset;
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+    29c6:	80 35       	cpi	r24, 0x50	; 80
+    29c8:	91 05       	cpc	r25, r1
+    29ca:	69 f7       	brne	.-38     	; 0x29a6 <LoadPreset+0x2a>
+		EEAR = 0x30 + (heater[ch].preset * sizeof(preset_str)) + offset;
+		EECR |= (1 << EERE);
+		((uint8_t*)&preset[ch])[offset] = EEDR;
+	}
+	
+	SetGainData(ch, preset[ch].gain);
+    29cc:	80 e5       	ldi	r24, 0x50	; 80
+    29ce:	84 9f       	mul	r24, r20
+    29d0:	80 01       	movw	r16, r0
+    29d2:	85 9f       	mul	r24, r21
+    29d4:	10 0d       	add	r17, r0
+    29d6:	11 24       	eor	r1, r1
+    29d8:	0a 5b       	subi	r16, 0xBA	; 186
+    29da:	1c 4f       	sbci	r17, 0xFC	; 252
+    29dc:	f8 01       	movw	r30, r16
+    29de:	65 85       	ldd	r22, Z+13	; 0x0d
+    29e0:	8c 2f       	mov	r24, r28
+    29e2:	f1 de       	rcall	.-542    	; 0x27c6 <SetGainData>
+	SetShiftData(ch, preset[ch].shift);
+    29e4:	f8 01       	movw	r30, r16
+    29e6:	66 85       	ldd	r22, Z+14	; 0x0e
+    29e8:	8c 2f       	mov	r24, r28
+    29ea:	1c df       	rcall	.-456    	; 0x2824 <SetShiftData>
+	SetDriveData(ch, preset[ch].drive);
+    29ec:	f8 01       	movw	r30, r16
+    29ee:	67 85       	ldd	r22, Z+15	; 0x0f
+    29f0:	8c 2f       	mov	r24, r28
+    29f2:	46 df       	rcall	.-372    	; 0x2880 <SetDriveData>
+	SwitchDrive(ch, OFF);
+    29f4:	60 e0       	ldi	r22, 0x00	; 0
+    29f6:	8c 2f       	mov	r24, r28
+}
+    29f8:	df 91       	pop	r29
+    29fa:	cf 91       	pop	r28
+    29fc:	1f 91       	pop	r17
+	}
+	
+	SetGainData(ch, preset[ch].gain);
+	SetShiftData(ch, preset[ch].shift);
+	SetDriveData(ch, preset[ch].drive);
+	SwitchDrive(ch, OFF);
+    29fe:	0f 91       	pop	r16
+    2a00:	5e cf       	rjmp	.-324    	; 0x28be <SwitchDrive>
+
+00002a02 <SavePreset>:
+}
+
+void SavePreset(uint8_t ch)
+{
+    2a02:	cf 92       	push	r12
+    2a04:	df 92       	push	r13
+    2a06:	ef 92       	push	r14
+    2a08:	ff 92       	push	r15
+    2a0a:	0f 93       	push	r16
+    2a0c:	1f 93       	push	r17
+    2a0e:	cf 93       	push	r28
+    2a10:	df 93       	push	r29
+    2a12:	08 2f       	mov	r16, r24
+	uint8_t offset;
+	static FILE lcd_stdout = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
+	
+	cli();
+    2a14:	f8 94       	cli
+	LCD_SendCmd(LCD_CLR);
+    2a16:	81 e0       	ldi	r24, 0x01	; 1
+    2a18:	94 dd       	rcall	.-1240   	; 0x2542 <LCD_SendCmd>
+	LCD_SetPos(0, 0);
+    2a1a:	60 e0       	ldi	r22, 0x00	; 0
+    2a1c:	80 e0       	ldi	r24, 0x00	; 0
+    2a1e:	b6 dd       	rcall	.-1172   	; 0x258c <LCD_SetPos>
+	fprintf(&lcd_stdout, "ÑÎÕÐÀÍÅÍÈÅ...");
+    2a20:	24 e2       	ldi	r18, 0x24	; 36
+    2a22:	31 e0       	ldi	r19, 0x01	; 1
+    2a24:	4d e0       	ldi	r20, 0x0D	; 13
+    2a26:	50 e0       	ldi	r21, 0x00	; 0
+    2a28:	61 e0       	ldi	r22, 0x01	; 1
+    2a2a:	70 e0       	ldi	r23, 0x00	; 0
+    2a2c:	83 ee       	ldi	r24, 0xE3	; 227
+    2a2e:	92 e0       	ldi	r25, 0x02	; 2
+    2a30:	0e 94 d2 1d 	call	0x3ba4	; 0x3ba4 <fwrite>
+	LCD_SetPos(0, 1);
+    2a34:	61 e0       	ldi	r22, 0x01	; 1
+    2a36:	80 e0       	ldi	r24, 0x00	; 0
+    2a38:	a9 dd       	rcall	.-1198   	; 0x258c <LCD_SetPos>
+    2a3a:	20 e5       	ldi	r18, 0x50	; 80
+    2a3c:	02 9f       	mul	r16, r18
+    2a3e:	80 01       	movw	r16, r0
+    2a40:	11 24       	eor	r1, r1
+    2a42:	0a 5b       	subi	r16, 0xBA	; 186
+    2a44:	1c 4f       	sbci	r17, 0xFC	; 252
+    2a46:	c0 e0       	ldi	r28, 0x00	; 0
+    2a48:	d0 e0       	ldi	r29, 0x00	; 0
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+	{
+		EEAR = 0x30 + (preset[ch].number * sizeof(preset_str)) + offset;
+    2a4a:	68 01       	movw	r12, r16
+		EEDR = ((uint8_t*)&preset[ch])[offset];
+		EECR |= (1 << EEMPE);
+		EECR |= (1 << EEPE);
+		while(EECR & (1 << EEPE));
+		if((offset + 1) % 5 == 0)
+    2a4c:	85 e0       	ldi	r24, 0x05	; 5
+    2a4e:	e8 2e       	mov	r14, r24
+    2a50:	f1 2c       	mov	r15, r1
+	LCD_SetPos(0, 0);
+	fprintf(&lcd_stdout, "ÑÎÕÐÀÍÅÍÈÅ...");
+	LCD_SetPos(0, 1);
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+	{
+		EEAR = 0x30 + (preset[ch].number * sizeof(preset_str)) + offset;
+    2a52:	f6 01       	movw	r30, r12
+    2a54:	80 81       	ld	r24, Z
+    2a56:	9e 01       	movw	r18, r28
+    2a58:	40 e5       	ldi	r20, 0x50	; 80
+    2a5a:	84 9f       	mul	r24, r20
+    2a5c:	20 0d       	add	r18, r0
+    2a5e:	31 1d       	adc	r19, r1
+    2a60:	11 24       	eor	r1, r1
+    2a62:	c9 01       	movw	r24, r18
+    2a64:	c0 96       	adiw	r24, 0x30	; 48
+    2a66:	92 bd       	out	0x22, r25	; 34
+    2a68:	81 bd       	out	0x21, r24	; 33
+		EEDR = ((uint8_t*)&preset[ch])[offset];
+    2a6a:	f8 01       	movw	r30, r16
+    2a6c:	81 91       	ld	r24, Z+
+    2a6e:	8f 01       	movw	r16, r30
+    2a70:	21 96       	adiw	r28, 0x01	; 1
+    2a72:	80 bd       	out	0x20, r24	; 32
+		EECR |= (1 << EEMPE);
+    2a74:	fa 9a       	sbi	0x1f, 2	; 31
+		EECR |= (1 << EEPE);
+    2a76:	f9 9a       	sbi	0x1f, 1	; 31
+		while(EECR & (1 << EEPE));
+    2a78:	f9 99       	sbic	0x1f, 1	; 31
+		if((offset + 1) % 5 == 0)
+    2a7a:	fe cf       	rjmp	.-4      	; 0x2a78 <SavePreset+0x76>
+    2a7c:	ce 01       	movw	r24, r28
+    2a7e:	b7 01       	movw	r22, r14
+    2a80:	8b d5       	rcall	.+2838   	; 0x3598 <__divmodhi4>
+    2a82:	89 2b       	or	r24, r25
+    2a84:	69 f0       	breq	.+26     	; 0x2aa0 <SavePreset+0x9e>
+	cli();
+	LCD_SendCmd(LCD_CLR);
+	LCD_SetPos(0, 0);
+	fprintf(&lcd_stdout, "ÑÎÕÐÀÍÅÍÈÅ...");
+	LCD_SetPos(0, 1);
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+    2a86:	c0 35       	cpi	r28, 0x50	; 80
+    2a88:	d1 05       	cpc	r29, r1
+    2a8a:	19 f7       	brne	.-58     	; 0x2a52 <SavePreset+0x50>
+		EECR |= (1 << EEPE);
+		while(EECR & (1 << EEPE));
+		if((offset + 1) % 5 == 0)
+			LCD_SendData(0xFF);
+	}
+	sei();
+    2a8c:	78 94       	sei
+}
+    2a8e:	df 91       	pop	r29
+    2a90:	cf 91       	pop	r28
+    2a92:	1f 91       	pop	r17
+    2a94:	0f 91       	pop	r16
+    2a96:	ff 90       	pop	r15
+    2a98:	ef 90       	pop	r14
+    2a9a:	df 90       	pop	r13
+    2a9c:	cf 90       	pop	r12
+		EEDR = ((uint8_t*)&preset[ch])[offset];
+		EECR |= (1 << EEMPE);
+		EECR |= (1 << EEPE);
+		while(EECR & (1 << EEPE));
+		if((offset + 1) % 5 == 0)
+			LCD_SendData(0xFF);
+    2a9e:	08 95       	ret
+    2aa0:	8f ef       	ldi	r24, 0xFF	; 255
+    2aa2:	34 dd       	rcall	.-1432   	; 0x250c <LCD_SendData>
+    2aa4:	f0 cf       	rjmp	.-32     	; 0x2a86 <SavePreset+0x84>
+
+00002aa6 <__subsf3>:
+    2aa6:	50 58       	subi	r21, 0x80	; 128
+
+00002aa8 <__addsf3>:
+    2aa8:	bb 27       	eor	r27, r27
+    2aaa:	aa 27       	eor	r26, r26
+    2aac:	0e d0       	rcall	.+28     	; 0x2aca <__addsf3x>
+    2aae:	75 c1       	rjmp	.+746    	; 0x2d9a <__fp_round>
+    2ab0:	66 d1       	rcall	.+716    	; 0x2d7e <__fp_pscA>
+    2ab2:	30 f0       	brcs	.+12     	; 0x2ac0 <__addsf3+0x18>
+    2ab4:	6b d1       	rcall	.+726    	; 0x2d8c <__fp_pscB>
+    2ab6:	20 f0       	brcs	.+8      	; 0x2ac0 <__addsf3+0x18>
+    2ab8:	31 f4       	brne	.+12     	; 0x2ac6 <__addsf3+0x1e>
+    2aba:	9f 3f       	cpi	r25, 0xFF	; 255
+    2abc:	11 f4       	brne	.+4      	; 0x2ac2 <__addsf3+0x1a>
+    2abe:	1e f4       	brtc	.+6      	; 0x2ac6 <__addsf3+0x1e>
+    2ac0:	5b c1       	rjmp	.+694    	; 0x2d78 <__fp_nan>
+    2ac2:	0e f4       	brtc	.+2      	; 0x2ac6 <__addsf3+0x1e>
+    2ac4:	e0 95       	com	r30
+    2ac6:	e7 fb       	bst	r30, 7
+    2ac8:	51 c1       	rjmp	.+674    	; 0x2d6c <__fp_inf>
+
+00002aca <__addsf3x>:
+    2aca:	e9 2f       	mov	r30, r25
+    2acc:	77 d1       	rcall	.+750    	; 0x2dbc <__fp_split3>
+    2ace:	80 f3       	brcs	.-32     	; 0x2ab0 <__addsf3+0x8>
+    2ad0:	ba 17       	cp	r27, r26
+    2ad2:	62 07       	cpc	r22, r18
+    2ad4:	73 07       	cpc	r23, r19
+    2ad6:	84 07       	cpc	r24, r20
+    2ad8:	95 07       	cpc	r25, r21
+    2ada:	18 f0       	brcs	.+6      	; 0x2ae2 <__addsf3x+0x18>
+    2adc:	71 f4       	brne	.+28     	; 0x2afa <__addsf3x+0x30>
+    2ade:	9e f5       	brtc	.+102    	; 0x2b46 <__addsf3x+0x7c>
+    2ae0:	8f c1       	rjmp	.+798    	; 0x2e00 <__fp_zero>
+    2ae2:	0e f4       	brtc	.+2      	; 0x2ae6 <__addsf3x+0x1c>
+    2ae4:	e0 95       	com	r30
+    2ae6:	0b 2e       	mov	r0, r27
+    2ae8:	ba 2f       	mov	r27, r26
+    2aea:	a0 2d       	mov	r26, r0
+    2aec:	0b 01       	movw	r0, r22
+    2aee:	b9 01       	movw	r22, r18
+    2af0:	90 01       	movw	r18, r0
+    2af2:	0c 01       	movw	r0, r24
+    2af4:	ca 01       	movw	r24, r20
+    2af6:	a0 01       	movw	r20, r0
+    2af8:	11 24       	eor	r1, r1
+    2afa:	ff 27       	eor	r31, r31
+    2afc:	59 1b       	sub	r21, r25
+    2afe:	99 f0       	breq	.+38     	; 0x2b26 <__addsf3x+0x5c>
+    2b00:	59 3f       	cpi	r21, 0xF9	; 249
+    2b02:	50 f4       	brcc	.+20     	; 0x2b18 <__addsf3x+0x4e>
+    2b04:	50 3e       	cpi	r21, 0xE0	; 224
+    2b06:	68 f1       	brcs	.+90     	; 0x2b62 <__addsf3x+0x98>
+    2b08:	1a 16       	cp	r1, r26
+    2b0a:	f0 40       	sbci	r31, 0x00	; 0
+    2b0c:	a2 2f       	mov	r26, r18
+    2b0e:	23 2f       	mov	r18, r19
+    2b10:	34 2f       	mov	r19, r20
+    2b12:	44 27       	eor	r20, r20
+    2b14:	58 5f       	subi	r21, 0xF8	; 248
+    2b16:	f3 cf       	rjmp	.-26     	; 0x2afe <__addsf3x+0x34>
+    2b18:	46 95       	lsr	r20
+    2b1a:	37 95       	ror	r19
+    2b1c:	27 95       	ror	r18
+    2b1e:	a7 95       	ror	r26
+    2b20:	f0 40       	sbci	r31, 0x00	; 0
+    2b22:	53 95       	inc	r21
+    2b24:	c9 f7       	brne	.-14     	; 0x2b18 <__addsf3x+0x4e>
+    2b26:	7e f4       	brtc	.+30     	; 0x2b46 <__addsf3x+0x7c>
+    2b28:	1f 16       	cp	r1, r31
+    2b2a:	ba 0b       	sbc	r27, r26
+    2b2c:	62 0b       	sbc	r22, r18
+    2b2e:	73 0b       	sbc	r23, r19
+    2b30:	84 0b       	sbc	r24, r20
+    2b32:	ba f0       	brmi	.+46     	; 0x2b62 <__addsf3x+0x98>
+    2b34:	91 50       	subi	r25, 0x01	; 1
+    2b36:	a1 f0       	breq	.+40     	; 0x2b60 <__addsf3x+0x96>
+    2b38:	ff 0f       	add	r31, r31
+    2b3a:	bb 1f       	adc	r27, r27
+    2b3c:	66 1f       	adc	r22, r22
+    2b3e:	77 1f       	adc	r23, r23
+    2b40:	88 1f       	adc	r24, r24
+    2b42:	c2 f7       	brpl	.-16     	; 0x2b34 <__addsf3x+0x6a>
+    2b44:	0e c0       	rjmp	.+28     	; 0x2b62 <__addsf3x+0x98>
+    2b46:	ba 0f       	add	r27, r26
+    2b48:	62 1f       	adc	r22, r18
+    2b4a:	73 1f       	adc	r23, r19
+    2b4c:	84 1f       	adc	r24, r20
+    2b4e:	48 f4       	brcc	.+18     	; 0x2b62 <__addsf3x+0x98>
+    2b50:	87 95       	ror	r24
+    2b52:	77 95       	ror	r23
+    2b54:	67 95       	ror	r22
+    2b56:	b7 95       	ror	r27
+    2b58:	f7 95       	ror	r31
+    2b5a:	9e 3f       	cpi	r25, 0xFE	; 254
+    2b5c:	08 f0       	brcs	.+2      	; 0x2b60 <__addsf3x+0x96>
+    2b5e:	b3 cf       	rjmp	.-154    	; 0x2ac6 <__addsf3+0x1e>
+    2b60:	93 95       	inc	r25
+    2b62:	88 0f       	add	r24, r24
+    2b64:	08 f0       	brcs	.+2      	; 0x2b68 <__addsf3x+0x9e>
+    2b66:	99 27       	eor	r25, r25
+    2b68:	ee 0f       	add	r30, r30
+    2b6a:	97 95       	ror	r25
+    2b6c:	87 95       	ror	r24
+    2b6e:	08 95       	ret
+
+00002b70 <__cmpsf2>:
+    2b70:	d9 d0       	rcall	.+434    	; 0x2d24 <__fp_cmp>
+    2b72:	08 f4       	brcc	.+2      	; 0x2b76 <__cmpsf2+0x6>
+    2b74:	81 e0       	ldi	r24, 0x01	; 1
+    2b76:	08 95       	ret
+
+00002b78 <__divsf3>:
+    2b78:	0c d0       	rcall	.+24     	; 0x2b92 <__divsf3x>
+    2b7a:	0f c1       	rjmp	.+542    	; 0x2d9a <__fp_round>
+    2b7c:	07 d1       	rcall	.+526    	; 0x2d8c <__fp_pscB>
+    2b7e:	40 f0       	brcs	.+16     	; 0x2b90 <__divsf3+0x18>
+    2b80:	fe d0       	rcall	.+508    	; 0x2d7e <__fp_pscA>
+    2b82:	30 f0       	brcs	.+12     	; 0x2b90 <__divsf3+0x18>
+    2b84:	21 f4       	brne	.+8      	; 0x2b8e <__divsf3+0x16>
+    2b86:	5f 3f       	cpi	r21, 0xFF	; 255
+    2b88:	19 f0       	breq	.+6      	; 0x2b90 <__divsf3+0x18>
+    2b8a:	f0 c0       	rjmp	.+480    	; 0x2d6c <__fp_inf>
+    2b8c:	51 11       	cpse	r21, r1
+    2b8e:	39 c1       	rjmp	.+626    	; 0x2e02 <__fp_szero>
+    2b90:	f3 c0       	rjmp	.+486    	; 0x2d78 <__fp_nan>
+
+00002b92 <__divsf3x>:
+    2b92:	14 d1       	rcall	.+552    	; 0x2dbc <__fp_split3>
+    2b94:	98 f3       	brcs	.-26     	; 0x2b7c <__divsf3+0x4>
+
+00002b96 <__divsf3_pse>:
+    2b96:	99 23       	and	r25, r25
+    2b98:	c9 f3       	breq	.-14     	; 0x2b8c <__divsf3+0x14>
+    2b9a:	55 23       	and	r21, r21
+    2b9c:	b1 f3       	breq	.-20     	; 0x2b8a <__divsf3+0x12>
+    2b9e:	95 1b       	sub	r25, r21
+    2ba0:	55 0b       	sbc	r21, r21
+    2ba2:	bb 27       	eor	r27, r27
+    2ba4:	aa 27       	eor	r26, r26
+    2ba6:	62 17       	cp	r22, r18
+    2ba8:	73 07       	cpc	r23, r19
+    2baa:	84 07       	cpc	r24, r20
+    2bac:	38 f0       	brcs	.+14     	; 0x2bbc <__divsf3_pse+0x26>
+    2bae:	9f 5f       	subi	r25, 0xFF	; 255
+    2bb0:	5f 4f       	sbci	r21, 0xFF	; 255
+    2bb2:	22 0f       	add	r18, r18
+    2bb4:	33 1f       	adc	r19, r19
+    2bb6:	44 1f       	adc	r20, r20
+    2bb8:	aa 1f       	adc	r26, r26
+    2bba:	a9 f3       	breq	.-22     	; 0x2ba6 <__divsf3_pse+0x10>
+    2bbc:	33 d0       	rcall	.+102    	; 0x2c24 <__divsf3_pse+0x8e>
+    2bbe:	0e 2e       	mov	r0, r30
+    2bc0:	3a f0       	brmi	.+14     	; 0x2bd0 <__divsf3_pse+0x3a>
+    2bc2:	e0 e8       	ldi	r30, 0x80	; 128
+    2bc4:	30 d0       	rcall	.+96     	; 0x2c26 <__divsf3_pse+0x90>
+    2bc6:	91 50       	subi	r25, 0x01	; 1
+    2bc8:	50 40       	sbci	r21, 0x00	; 0
+    2bca:	e6 95       	lsr	r30
+    2bcc:	00 1c       	adc	r0, r0
+    2bce:	ca f7       	brpl	.-14     	; 0x2bc2 <__divsf3_pse+0x2c>
+    2bd0:	29 d0       	rcall	.+82     	; 0x2c24 <__divsf3_pse+0x8e>
+    2bd2:	fe 2f       	mov	r31, r30
+    2bd4:	27 d0       	rcall	.+78     	; 0x2c24 <__divsf3_pse+0x8e>
+    2bd6:	66 0f       	add	r22, r22
+    2bd8:	77 1f       	adc	r23, r23
+    2bda:	88 1f       	adc	r24, r24
+    2bdc:	bb 1f       	adc	r27, r27
+    2bde:	26 17       	cp	r18, r22
+    2be0:	37 07       	cpc	r19, r23
+    2be2:	48 07       	cpc	r20, r24
+    2be4:	ab 07       	cpc	r26, r27
+    2be6:	b0 e8       	ldi	r27, 0x80	; 128
+    2be8:	09 f0       	breq	.+2      	; 0x2bec <__divsf3_pse+0x56>
+    2bea:	bb 0b       	sbc	r27, r27
+    2bec:	80 2d       	mov	r24, r0
+    2bee:	bf 01       	movw	r22, r30
+    2bf0:	ff 27       	eor	r31, r31
+    2bf2:	93 58       	subi	r25, 0x83	; 131
+    2bf4:	5f 4f       	sbci	r21, 0xFF	; 255
+    2bf6:	2a f0       	brmi	.+10     	; 0x2c02 <__divsf3_pse+0x6c>
+    2bf8:	9e 3f       	cpi	r25, 0xFE	; 254
+    2bfa:	51 05       	cpc	r21, r1
+    2bfc:	68 f0       	brcs	.+26     	; 0x2c18 <__divsf3_pse+0x82>
+    2bfe:	b6 c0       	rjmp	.+364    	; 0x2d6c <__fp_inf>
+    2c00:	00 c1       	rjmp	.+512    	; 0x2e02 <__fp_szero>
+    2c02:	5f 3f       	cpi	r21, 0xFF	; 255
+    2c04:	ec f3       	brlt	.-6      	; 0x2c00 <__divsf3_pse+0x6a>
+    2c06:	98 3e       	cpi	r25, 0xE8	; 232
+    2c08:	dc f3       	brlt	.-10     	; 0x2c00 <__divsf3_pse+0x6a>
+    2c0a:	86 95       	lsr	r24
+    2c0c:	77 95       	ror	r23
+    2c0e:	67 95       	ror	r22
+    2c10:	b7 95       	ror	r27
+    2c12:	f7 95       	ror	r31
+    2c14:	9f 5f       	subi	r25, 0xFF	; 255
+    2c16:	c9 f7       	brne	.-14     	; 0x2c0a <__divsf3_pse+0x74>
+    2c18:	88 0f       	add	r24, r24
+    2c1a:	91 1d       	adc	r25, r1
+    2c1c:	96 95       	lsr	r25
+    2c1e:	87 95       	ror	r24
+    2c20:	97 f9       	bld	r25, 7
+    2c22:	08 95       	ret
+    2c24:	e1 e0       	ldi	r30, 0x01	; 1
+    2c26:	66 0f       	add	r22, r22
+    2c28:	77 1f       	adc	r23, r23
+    2c2a:	88 1f       	adc	r24, r24
+    2c2c:	bb 1f       	adc	r27, r27
+    2c2e:	62 17       	cp	r22, r18
+    2c30:	73 07       	cpc	r23, r19
+    2c32:	84 07       	cpc	r24, r20
+    2c34:	ba 07       	cpc	r27, r26
+    2c36:	20 f0       	brcs	.+8      	; 0x2c40 <__divsf3_pse+0xaa>
+    2c38:	62 1b       	sub	r22, r18
+    2c3a:	73 0b       	sbc	r23, r19
+    2c3c:	84 0b       	sbc	r24, r20
+    2c3e:	ba 0b       	sbc	r27, r26
+    2c40:	ee 1f       	adc	r30, r30
+    2c42:	88 f7       	brcc	.-30     	; 0x2c26 <__divsf3_pse+0x90>
+    2c44:	e0 95       	com	r30
+    2c46:	08 95       	ret
+
+00002c48 <__fixsfsi>:
+    2c48:	04 d0       	rcall	.+8      	; 0x2c52 <__fixunssfsi>
+    2c4a:	68 94       	set
+    2c4c:	b1 11       	cpse	r27, r1
+    2c4e:	d9 c0       	rjmp	.+434    	; 0x2e02 <__fp_szero>
+    2c50:	08 95       	ret
+
+00002c52 <__fixunssfsi>:
+    2c52:	bc d0       	rcall	.+376    	; 0x2dcc <__fp_splitA>
+    2c54:	88 f0       	brcs	.+34     	; 0x2c78 <__fixunssfsi+0x26>
+    2c56:	9f 57       	subi	r25, 0x7F	; 127
+    2c58:	90 f0       	brcs	.+36     	; 0x2c7e <__fixunssfsi+0x2c>
+    2c5a:	b9 2f       	mov	r27, r25
+    2c5c:	99 27       	eor	r25, r25
+    2c5e:	b7 51       	subi	r27, 0x17	; 23
+    2c60:	a0 f0       	brcs	.+40     	; 0x2c8a <__fixunssfsi+0x38>
+    2c62:	d1 f0       	breq	.+52     	; 0x2c98 <__fixunssfsi+0x46>
+    2c64:	66 0f       	add	r22, r22
+    2c66:	77 1f       	adc	r23, r23
+    2c68:	88 1f       	adc	r24, r24
+    2c6a:	99 1f       	adc	r25, r25
+    2c6c:	1a f0       	brmi	.+6      	; 0x2c74 <__fixunssfsi+0x22>
+    2c6e:	ba 95       	dec	r27
+    2c70:	c9 f7       	brne	.-14     	; 0x2c64 <__fixunssfsi+0x12>
+    2c72:	12 c0       	rjmp	.+36     	; 0x2c98 <__fixunssfsi+0x46>
+    2c74:	b1 30       	cpi	r27, 0x01	; 1
+    2c76:	81 f0       	breq	.+32     	; 0x2c98 <__fixunssfsi+0x46>
+    2c78:	c3 d0       	rcall	.+390    	; 0x2e00 <__fp_zero>
+    2c7a:	b1 e0       	ldi	r27, 0x01	; 1
+    2c7c:	08 95       	ret
+    2c7e:	c0 c0       	rjmp	.+384    	; 0x2e00 <__fp_zero>
+    2c80:	67 2f       	mov	r22, r23
+    2c82:	78 2f       	mov	r23, r24
+    2c84:	88 27       	eor	r24, r24
+    2c86:	b8 5f       	subi	r27, 0xF8	; 248
+    2c88:	39 f0       	breq	.+14     	; 0x2c98 <__fixunssfsi+0x46>
+    2c8a:	b9 3f       	cpi	r27, 0xF9	; 249
+    2c8c:	cc f3       	brlt	.-14     	; 0x2c80 <__fixunssfsi+0x2e>
+    2c8e:	86 95       	lsr	r24
+    2c90:	77 95       	ror	r23
+    2c92:	67 95       	ror	r22
+    2c94:	b3 95       	inc	r27
+    2c96:	d9 f7       	brne	.-10     	; 0x2c8e <__fixunssfsi+0x3c>
+    2c98:	3e f4       	brtc	.+14     	; 0x2ca8 <__fixunssfsi+0x56>
+    2c9a:	90 95       	com	r25
+    2c9c:	80 95       	com	r24
+    2c9e:	70 95       	com	r23
+    2ca0:	61 95       	neg	r22
+    2ca2:	7f 4f       	sbci	r23, 0xFF	; 255
+    2ca4:	8f 4f       	sbci	r24, 0xFF	; 255
+    2ca6:	9f 4f       	sbci	r25, 0xFF	; 255
+    2ca8:	08 95       	ret
+
+00002caa <__floatunsisf>:
+    2caa:	e8 94       	clt
+    2cac:	09 c0       	rjmp	.+18     	; 0x2cc0 <__floatsisf+0x12>
+
+00002cae <__floatsisf>:
+    2cae:	97 fb       	bst	r25, 7
+    2cb0:	3e f4       	brtc	.+14     	; 0x2cc0 <__floatsisf+0x12>
+    2cb2:	90 95       	com	r25
+    2cb4:	80 95       	com	r24
+    2cb6:	70 95       	com	r23
+    2cb8:	61 95       	neg	r22
+    2cba:	7f 4f       	sbci	r23, 0xFF	; 255
+    2cbc:	8f 4f       	sbci	r24, 0xFF	; 255
+    2cbe:	9f 4f       	sbci	r25, 0xFF	; 255
+    2cc0:	99 23       	and	r25, r25
+    2cc2:	a9 f0       	breq	.+42     	; 0x2cee <__floatsisf+0x40>
+    2cc4:	f9 2f       	mov	r31, r25
+    2cc6:	96 e9       	ldi	r25, 0x96	; 150
+    2cc8:	bb 27       	eor	r27, r27
+    2cca:	93 95       	inc	r25
+    2ccc:	f6 95       	lsr	r31
+    2cce:	87 95       	ror	r24
+    2cd0:	77 95       	ror	r23
+    2cd2:	67 95       	ror	r22
+    2cd4:	b7 95       	ror	r27
+    2cd6:	f1 11       	cpse	r31, r1
+    2cd8:	f8 cf       	rjmp	.-16     	; 0x2cca <__floatsisf+0x1c>
+    2cda:	fa f4       	brpl	.+62     	; 0x2d1a <__floatsisf+0x6c>
+    2cdc:	bb 0f       	add	r27, r27
+    2cde:	11 f4       	brne	.+4      	; 0x2ce4 <__floatsisf+0x36>
+    2ce0:	60 ff       	sbrs	r22, 0
+    2ce2:	1b c0       	rjmp	.+54     	; 0x2d1a <__floatsisf+0x6c>
+    2ce4:	6f 5f       	subi	r22, 0xFF	; 255
+    2ce6:	7f 4f       	sbci	r23, 0xFF	; 255
+    2ce8:	8f 4f       	sbci	r24, 0xFF	; 255
+    2cea:	9f 4f       	sbci	r25, 0xFF	; 255
+    2cec:	16 c0       	rjmp	.+44     	; 0x2d1a <__floatsisf+0x6c>
+    2cee:	88 23       	and	r24, r24
+    2cf0:	11 f0       	breq	.+4      	; 0x2cf6 <__floatsisf+0x48>
+    2cf2:	96 e9       	ldi	r25, 0x96	; 150
+    2cf4:	11 c0       	rjmp	.+34     	; 0x2d18 <__floatsisf+0x6a>
+    2cf6:	77 23       	and	r23, r23
+    2cf8:	21 f0       	breq	.+8      	; 0x2d02 <__floatsisf+0x54>
+    2cfa:	9e e8       	ldi	r25, 0x8E	; 142
+    2cfc:	87 2f       	mov	r24, r23
+    2cfe:	76 2f       	mov	r23, r22
+    2d00:	05 c0       	rjmp	.+10     	; 0x2d0c <__floatsisf+0x5e>
+    2d02:	66 23       	and	r22, r22
+    2d04:	71 f0       	breq	.+28     	; 0x2d22 <__floatsisf+0x74>
+    2d06:	96 e8       	ldi	r25, 0x86	; 134
+    2d08:	86 2f       	mov	r24, r22
+    2d0a:	70 e0       	ldi	r23, 0x00	; 0
+    2d0c:	60 e0       	ldi	r22, 0x00	; 0
+    2d0e:	2a f0       	brmi	.+10     	; 0x2d1a <__floatsisf+0x6c>
+    2d10:	9a 95       	dec	r25
+    2d12:	66 0f       	add	r22, r22
+    2d14:	77 1f       	adc	r23, r23
+    2d16:	88 1f       	adc	r24, r24
+    2d18:	da f7       	brpl	.-10     	; 0x2d10 <__floatsisf+0x62>
+    2d1a:	88 0f       	add	r24, r24
+    2d1c:	96 95       	lsr	r25
+    2d1e:	87 95       	ror	r24
+    2d20:	97 f9       	bld	r25, 7
+    2d22:	08 95       	ret
+
+00002d24 <__fp_cmp>:
+    2d24:	99 0f       	add	r25, r25
+    2d26:	00 08       	sbc	r0, r0
+    2d28:	55 0f       	add	r21, r21
+    2d2a:	aa 0b       	sbc	r26, r26
+    2d2c:	e0 e8       	ldi	r30, 0x80	; 128
+    2d2e:	fe ef       	ldi	r31, 0xFE	; 254
+    2d30:	16 16       	cp	r1, r22
+    2d32:	17 06       	cpc	r1, r23
+    2d34:	e8 07       	cpc	r30, r24
+    2d36:	f9 07       	cpc	r31, r25
+    2d38:	c0 f0       	brcs	.+48     	; 0x2d6a <__fp_cmp+0x46>
+    2d3a:	12 16       	cp	r1, r18
+    2d3c:	13 06       	cpc	r1, r19
+    2d3e:	e4 07       	cpc	r30, r20
+    2d40:	f5 07       	cpc	r31, r21
+    2d42:	98 f0       	brcs	.+38     	; 0x2d6a <__fp_cmp+0x46>
+    2d44:	62 1b       	sub	r22, r18
+    2d46:	73 0b       	sbc	r23, r19
+    2d48:	84 0b       	sbc	r24, r20
+    2d4a:	95 0b       	sbc	r25, r21
+    2d4c:	39 f4       	brne	.+14     	; 0x2d5c <__fp_cmp+0x38>
+    2d4e:	0a 26       	eor	r0, r26
+    2d50:	61 f0       	breq	.+24     	; 0x2d6a <__fp_cmp+0x46>
+    2d52:	23 2b       	or	r18, r19
+    2d54:	24 2b       	or	r18, r20
+    2d56:	25 2b       	or	r18, r21
+    2d58:	21 f4       	brne	.+8      	; 0x2d62 <__fp_cmp+0x3e>
+    2d5a:	08 95       	ret
+    2d5c:	0a 26       	eor	r0, r26
+    2d5e:	09 f4       	brne	.+2      	; 0x2d62 <__fp_cmp+0x3e>
+    2d60:	a1 40       	sbci	r26, 0x01	; 1
+    2d62:	a6 95       	lsr	r26
+    2d64:	8f ef       	ldi	r24, 0xFF	; 255
+    2d66:	81 1d       	adc	r24, r1
+    2d68:	81 1d       	adc	r24, r1
+    2d6a:	08 95       	ret
+
+00002d6c <__fp_inf>:
+    2d6c:	97 f9       	bld	r25, 7
+    2d6e:	9f 67       	ori	r25, 0x7F	; 127
+    2d70:	80 e8       	ldi	r24, 0x80	; 128
+    2d72:	70 e0       	ldi	r23, 0x00	; 0
+    2d74:	60 e0       	ldi	r22, 0x00	; 0
+    2d76:	08 95       	ret
+
+00002d78 <__fp_nan>:
+    2d78:	9f ef       	ldi	r25, 0xFF	; 255
+    2d7a:	80 ec       	ldi	r24, 0xC0	; 192
+    2d7c:	08 95       	ret
+
+00002d7e <__fp_pscA>:
+    2d7e:	00 24       	eor	r0, r0
+    2d80:	0a 94       	dec	r0
+    2d82:	16 16       	cp	r1, r22
+    2d84:	17 06       	cpc	r1, r23
+    2d86:	18 06       	cpc	r1, r24
+    2d88:	09 06       	cpc	r0, r25
+    2d8a:	08 95       	ret
+
+00002d8c <__fp_pscB>:
+    2d8c:	00 24       	eor	r0, r0
+    2d8e:	0a 94       	dec	r0
+    2d90:	12 16       	cp	r1, r18
+    2d92:	13 06       	cpc	r1, r19
+    2d94:	14 06       	cpc	r1, r20
+    2d96:	05 06       	cpc	r0, r21
+    2d98:	08 95       	ret
+
+00002d9a <__fp_round>:
+    2d9a:	09 2e       	mov	r0, r25
+    2d9c:	03 94       	inc	r0
+    2d9e:	00 0c       	add	r0, r0
+    2da0:	11 f4       	brne	.+4      	; 0x2da6 <__fp_round+0xc>
+    2da2:	88 23       	and	r24, r24
+    2da4:	52 f0       	brmi	.+20     	; 0x2dba <__fp_round+0x20>
+    2da6:	bb 0f       	add	r27, r27
+    2da8:	40 f4       	brcc	.+16     	; 0x2dba <__fp_round+0x20>
+    2daa:	bf 2b       	or	r27, r31
+    2dac:	11 f4       	brne	.+4      	; 0x2db2 <__fp_round+0x18>
+    2dae:	60 ff       	sbrs	r22, 0
+    2db0:	04 c0       	rjmp	.+8      	; 0x2dba <__fp_round+0x20>
+    2db2:	6f 5f       	subi	r22, 0xFF	; 255
+    2db4:	7f 4f       	sbci	r23, 0xFF	; 255
+    2db6:	8f 4f       	sbci	r24, 0xFF	; 255
+    2db8:	9f 4f       	sbci	r25, 0xFF	; 255
+    2dba:	08 95       	ret
+
+00002dbc <__fp_split3>:
+    2dbc:	57 fd       	sbrc	r21, 7
+    2dbe:	90 58       	subi	r25, 0x80	; 128
+    2dc0:	44 0f       	add	r20, r20
+    2dc2:	55 1f       	adc	r21, r21
+    2dc4:	59 f0       	breq	.+22     	; 0x2ddc <__fp_splitA+0x10>
+    2dc6:	5f 3f       	cpi	r21, 0xFF	; 255
+    2dc8:	71 f0       	breq	.+28     	; 0x2de6 <__fp_splitA+0x1a>
+    2dca:	47 95       	ror	r20
+
+00002dcc <__fp_splitA>:
+    2dcc:	88 0f       	add	r24, r24
+    2dce:	97 fb       	bst	r25, 7
+    2dd0:	99 1f       	adc	r25, r25
+    2dd2:	61 f0       	breq	.+24     	; 0x2dec <__fp_splitA+0x20>
+    2dd4:	9f 3f       	cpi	r25, 0xFF	; 255
+    2dd6:	79 f0       	breq	.+30     	; 0x2df6 <__fp_splitA+0x2a>
+    2dd8:	87 95       	ror	r24
+    2dda:	08 95       	ret
+    2ddc:	12 16       	cp	r1, r18
+    2dde:	13 06       	cpc	r1, r19
+    2de0:	14 06       	cpc	r1, r20
+    2de2:	55 1f       	adc	r21, r21
+    2de4:	f2 cf       	rjmp	.-28     	; 0x2dca <__fp_split3+0xe>
+    2de6:	46 95       	lsr	r20
+    2de8:	f1 df       	rcall	.-30     	; 0x2dcc <__fp_splitA>
+    2dea:	08 c0       	rjmp	.+16     	; 0x2dfc <__fp_splitA+0x30>
+    2dec:	16 16       	cp	r1, r22
+    2dee:	17 06       	cpc	r1, r23
+    2df0:	18 06       	cpc	r1, r24
+    2df2:	99 1f       	adc	r25, r25
+    2df4:	f1 cf       	rjmp	.-30     	; 0x2dd8 <__fp_splitA+0xc>
+    2df6:	86 95       	lsr	r24
+    2df8:	71 05       	cpc	r23, r1
+    2dfa:	61 05       	cpc	r22, r1
+    2dfc:	08 94       	sec
+    2dfe:	08 95       	ret
+
+00002e00 <__fp_zero>:
+    2e00:	e8 94       	clt
+
+00002e02 <__fp_szero>:
+    2e02:	bb 27       	eor	r27, r27
+    2e04:	66 27       	eor	r22, r22
+    2e06:	77 27       	eor	r23, r23
+    2e08:	cb 01       	movw	r24, r22
+    2e0a:	97 f9       	bld	r25, 7
+    2e0c:	08 95       	ret
+
+00002e0e <__gesf2>:
+    2e0e:	8a df       	rcall	.-236    	; 0x2d24 <__fp_cmp>
+    2e10:	08 f4       	brcc	.+2      	; 0x2e14 <__gesf2+0x6>
+    2e12:	8f ef       	ldi	r24, 0xFF	; 255
+    2e14:	08 95       	ret
+
+00002e16 <__mulsf3>:
+    2e16:	0b d0       	rcall	.+22     	; 0x2e2e <__mulsf3x>
+    2e18:	c0 cf       	rjmp	.-128    	; 0x2d9a <__fp_round>
+    2e1a:	b1 df       	rcall	.-158    	; 0x2d7e <__fp_pscA>
+    2e1c:	28 f0       	brcs	.+10     	; 0x2e28 <__mulsf3+0x12>
+    2e1e:	b6 df       	rcall	.-148    	; 0x2d8c <__fp_pscB>
+    2e20:	18 f0       	brcs	.+6      	; 0x2e28 <__mulsf3+0x12>
+    2e22:	95 23       	and	r25, r21
+    2e24:	09 f0       	breq	.+2      	; 0x2e28 <__mulsf3+0x12>
+    2e26:	a2 cf       	rjmp	.-188    	; 0x2d6c <__fp_inf>
+    2e28:	a7 cf       	rjmp	.-178    	; 0x2d78 <__fp_nan>
+    2e2a:	11 24       	eor	r1, r1
+    2e2c:	ea cf       	rjmp	.-44     	; 0x2e02 <__fp_szero>
+
+00002e2e <__mulsf3x>:
+    2e2e:	c6 df       	rcall	.-116    	; 0x2dbc <__fp_split3>
+    2e30:	a0 f3       	brcs	.-24     	; 0x2e1a <__mulsf3+0x4>
+
+00002e32 <__mulsf3_pse>:
+    2e32:	95 9f       	mul	r25, r21
+    2e34:	d1 f3       	breq	.-12     	; 0x2e2a <__mulsf3+0x14>
+    2e36:	95 0f       	add	r25, r21
+    2e38:	50 e0       	ldi	r21, 0x00	; 0
+    2e3a:	55 1f       	adc	r21, r21
+    2e3c:	62 9f       	mul	r22, r18
+    2e3e:	f0 01       	movw	r30, r0
+    2e40:	72 9f       	mul	r23, r18
+    2e42:	bb 27       	eor	r27, r27
+    2e44:	f0 0d       	add	r31, r0
+    2e46:	b1 1d       	adc	r27, r1
+    2e48:	63 9f       	mul	r22, r19
+    2e4a:	aa 27       	eor	r26, r26
+    2e4c:	f0 0d       	add	r31, r0
+    2e4e:	b1 1d       	adc	r27, r1
+    2e50:	aa 1f       	adc	r26, r26
+    2e52:	64 9f       	mul	r22, r20
+    2e54:	66 27       	eor	r22, r22
+    2e56:	b0 0d       	add	r27, r0
+    2e58:	a1 1d       	adc	r26, r1
+    2e5a:	66 1f       	adc	r22, r22
+    2e5c:	82 9f       	mul	r24, r18
+    2e5e:	22 27       	eor	r18, r18
+    2e60:	b0 0d       	add	r27, r0
+    2e62:	a1 1d       	adc	r26, r1
+    2e64:	62 1f       	adc	r22, r18
+    2e66:	73 9f       	mul	r23, r19
+    2e68:	b0 0d       	add	r27, r0
+    2e6a:	a1 1d       	adc	r26, r1
+    2e6c:	62 1f       	adc	r22, r18
+    2e6e:	83 9f       	mul	r24, r19
+    2e70:	a0 0d       	add	r26, r0
+    2e72:	61 1d       	adc	r22, r1
+    2e74:	22 1f       	adc	r18, r18
+    2e76:	74 9f       	mul	r23, r20
+    2e78:	33 27       	eor	r19, r19
+    2e7a:	a0 0d       	add	r26, r0
+    2e7c:	61 1d       	adc	r22, r1
+    2e7e:	23 1f       	adc	r18, r19
+    2e80:	84 9f       	mul	r24, r20
+    2e82:	60 0d       	add	r22, r0
+    2e84:	21 1d       	adc	r18, r1
+    2e86:	82 2f       	mov	r24, r18
+    2e88:	76 2f       	mov	r23, r22
+    2e8a:	6a 2f       	mov	r22, r26
+    2e8c:	11 24       	eor	r1, r1
+    2e8e:	9f 57       	subi	r25, 0x7F	; 127
+    2e90:	50 40       	sbci	r21, 0x00	; 0
+    2e92:	8a f0       	brmi	.+34     	; 0x2eb6 <__mulsf3_pse+0x84>
+    2e94:	e1 f0       	breq	.+56     	; 0x2ece <__mulsf3_pse+0x9c>
+    2e96:	88 23       	and	r24, r24
+    2e98:	4a f0       	brmi	.+18     	; 0x2eac <__mulsf3_pse+0x7a>
+    2e9a:	ee 0f       	add	r30, r30
+    2e9c:	ff 1f       	adc	r31, r31
+    2e9e:	bb 1f       	adc	r27, r27
+    2ea0:	66 1f       	adc	r22, r22
+    2ea2:	77 1f       	adc	r23, r23
+    2ea4:	88 1f       	adc	r24, r24
+    2ea6:	91 50       	subi	r25, 0x01	; 1
+    2ea8:	50 40       	sbci	r21, 0x00	; 0
+    2eaa:	a9 f7       	brne	.-22     	; 0x2e96 <__mulsf3_pse+0x64>
+    2eac:	9e 3f       	cpi	r25, 0xFE	; 254
+    2eae:	51 05       	cpc	r21, r1
+    2eb0:	70 f0       	brcs	.+28     	; 0x2ece <__mulsf3_pse+0x9c>
+    2eb2:	5c cf       	rjmp	.-328    	; 0x2d6c <__fp_inf>
+    2eb4:	a6 cf       	rjmp	.-180    	; 0x2e02 <__fp_szero>
+    2eb6:	5f 3f       	cpi	r21, 0xFF	; 255
+    2eb8:	ec f3       	brlt	.-6      	; 0x2eb4 <__mulsf3_pse+0x82>
+    2eba:	98 3e       	cpi	r25, 0xE8	; 232
+    2ebc:	dc f3       	brlt	.-10     	; 0x2eb4 <__mulsf3_pse+0x82>
+    2ebe:	86 95       	lsr	r24
+    2ec0:	77 95       	ror	r23
+    2ec2:	67 95       	ror	r22
+    2ec4:	b7 95       	ror	r27
+    2ec6:	f7 95       	ror	r31
+    2ec8:	e7 95       	ror	r30
+    2eca:	9f 5f       	subi	r25, 0xFF	; 255
+    2ecc:	c1 f7       	brne	.-16     	; 0x2ebe <__mulsf3_pse+0x8c>
+    2ece:	fe 2b       	or	r31, r30
+    2ed0:	88 0f       	add	r24, r24
+    2ed2:	91 1d       	adc	r25, r1
+    2ed4:	96 95       	lsr	r25
+    2ed6:	87 95       	ror	r24
+    2ed8:	97 f9       	bld	r25, 7
+    2eda:	08 95       	ret
+
+00002edc <vfprintf>:
+    2edc:	a0 e1       	ldi	r26, 0x10	; 16
+    2ede:	b0 e0       	ldi	r27, 0x00	; 0
+    2ee0:	e3 e7       	ldi	r30, 0x73	; 115
+    2ee2:	f7 e1       	ldi	r31, 0x17	; 23
+    2ee4:	81 c3       	rjmp	.+1794   	; 0x35e8 <__prologue_saves__>
+    2ee6:	7c 01       	movw	r14, r24
+    2ee8:	1b 01       	movw	r2, r22
+    2eea:	6a 01       	movw	r12, r20
+    2eec:	fc 01       	movw	r30, r24
+    2eee:	17 82       	std	Z+7, r1	; 0x07
+    2ef0:	16 82       	std	Z+6, r1	; 0x06
+    2ef2:	83 81       	ldd	r24, Z+3	; 0x03
+    2ef4:	81 ff       	sbrs	r24, 1
+    2ef6:	2a c3       	rjmp	.+1620   	; 0x354c <vfprintf+0x670>
+    2ef8:	9e 01       	movw	r18, r28
+    2efa:	2f 5f       	subi	r18, 0xFF	; 255
+    2efc:	3f 4f       	sbci	r19, 0xFF	; 255
+    2efe:	39 01       	movw	r6, r18
+    2f00:	f7 01       	movw	r30, r14
+    2f02:	93 81       	ldd	r25, Z+3	; 0x03
+    2f04:	f1 01       	movw	r30, r2
+    2f06:	93 fd       	sbrc	r25, 3
+    2f08:	85 91       	lpm	r24, Z+
+    2f0a:	93 ff       	sbrs	r25, 3
+    2f0c:	81 91       	ld	r24, Z+
+    2f0e:	1f 01       	movw	r2, r30
+    2f10:	88 23       	and	r24, r24
+    2f12:	09 f4       	brne	.+2      	; 0x2f16 <vfprintf+0x3a>
+    2f14:	17 c3       	rjmp	.+1582   	; 0x3544 <vfprintf+0x668>
+    2f16:	85 32       	cpi	r24, 0x25	; 37
+    2f18:	39 f4       	brne	.+14     	; 0x2f28 <vfprintf+0x4c>
+    2f1a:	93 fd       	sbrc	r25, 3
+    2f1c:	85 91       	lpm	r24, Z+
+    2f1e:	93 ff       	sbrs	r25, 3
+    2f20:	81 91       	ld	r24, Z+
+    2f22:	1f 01       	movw	r2, r30
+    2f24:	85 32       	cpi	r24, 0x25	; 37
+    2f26:	31 f4       	brne	.+12     	; 0x2f34 <vfprintf+0x58>
+    2f28:	b7 01       	movw	r22, r14
+    2f2a:	90 e0       	ldi	r25, 0x00	; 0
+    2f2c:	ff d5       	rcall	.+3070   	; 0x3b2c <fputc>
+    2f2e:	56 01       	movw	r10, r12
+    2f30:	65 01       	movw	r12, r10
+    2f32:	e6 cf       	rjmp	.-52     	; 0x2f00 <vfprintf+0x24>
+    2f34:	10 e0       	ldi	r17, 0x00	; 0
+    2f36:	51 2c       	mov	r5, r1
+    2f38:	91 2c       	mov	r9, r1
+    2f3a:	ff e1       	ldi	r31, 0x1F	; 31
+    2f3c:	f9 15       	cp	r31, r9
+    2f3e:	d8 f0       	brcs	.+54     	; 0x2f76 <vfprintf+0x9a>
+    2f40:	8b 32       	cpi	r24, 0x2B	; 43
+    2f42:	79 f0       	breq	.+30     	; 0x2f62 <vfprintf+0x86>
+    2f44:	38 f4       	brcc	.+14     	; 0x2f54 <vfprintf+0x78>
+    2f46:	80 32       	cpi	r24, 0x20	; 32
+    2f48:	79 f0       	breq	.+30     	; 0x2f68 <vfprintf+0x8c>
+    2f4a:	83 32       	cpi	r24, 0x23	; 35
+    2f4c:	a1 f4       	brne	.+40     	; 0x2f76 <vfprintf+0x9a>
+    2f4e:	f9 2d       	mov	r31, r9
+    2f50:	f0 61       	ori	r31, 0x10	; 16
+    2f52:	2e c0       	rjmp	.+92     	; 0x2fb0 <vfprintf+0xd4>
+    2f54:	8d 32       	cpi	r24, 0x2D	; 45
+    2f56:	61 f0       	breq	.+24     	; 0x2f70 <vfprintf+0x94>
+    2f58:	80 33       	cpi	r24, 0x30	; 48
+    2f5a:	69 f4       	brne	.+26     	; 0x2f76 <vfprintf+0x9a>
+    2f5c:	29 2d       	mov	r18, r9
+    2f5e:	21 60       	ori	r18, 0x01	; 1
+    2f60:	2d c0       	rjmp	.+90     	; 0x2fbc <vfprintf+0xe0>
+    2f62:	39 2d       	mov	r19, r9
+    2f64:	32 60       	ori	r19, 0x02	; 2
+    2f66:	93 2e       	mov	r9, r19
+    2f68:	89 2d       	mov	r24, r9
+    2f6a:	84 60       	ori	r24, 0x04	; 4
+    2f6c:	98 2e       	mov	r9, r24
+    2f6e:	2a c0       	rjmp	.+84     	; 0x2fc4 <vfprintf+0xe8>
+    2f70:	e9 2d       	mov	r30, r9
+    2f72:	e8 60       	ori	r30, 0x08	; 8
+    2f74:	15 c0       	rjmp	.+42     	; 0x2fa0 <vfprintf+0xc4>
+    2f76:	97 fc       	sbrc	r9, 7
+    2f78:	2d c0       	rjmp	.+90     	; 0x2fd4 <vfprintf+0xf8>
+    2f7a:	20 ed       	ldi	r18, 0xD0	; 208
+    2f7c:	28 0f       	add	r18, r24
+    2f7e:	2a 30       	cpi	r18, 0x0A	; 10
+    2f80:	88 f4       	brcc	.+34     	; 0x2fa4 <vfprintf+0xc8>
+    2f82:	96 fe       	sbrs	r9, 6
+    2f84:	06 c0       	rjmp	.+12     	; 0x2f92 <vfprintf+0xb6>
+    2f86:	3a e0       	ldi	r19, 0x0A	; 10
+    2f88:	13 9f       	mul	r17, r19
+    2f8a:	20 0d       	add	r18, r0
+    2f8c:	11 24       	eor	r1, r1
+    2f8e:	12 2f       	mov	r17, r18
+    2f90:	19 c0       	rjmp	.+50     	; 0x2fc4 <vfprintf+0xe8>
+    2f92:	8a e0       	ldi	r24, 0x0A	; 10
+    2f94:	58 9e       	mul	r5, r24
+    2f96:	20 0d       	add	r18, r0
+    2f98:	11 24       	eor	r1, r1
+    2f9a:	52 2e       	mov	r5, r18
+    2f9c:	e9 2d       	mov	r30, r9
+    2f9e:	e0 62       	ori	r30, 0x20	; 32
+    2fa0:	9e 2e       	mov	r9, r30
+    2fa2:	10 c0       	rjmp	.+32     	; 0x2fc4 <vfprintf+0xe8>
+    2fa4:	8e 32       	cpi	r24, 0x2E	; 46
+    2fa6:	31 f4       	brne	.+12     	; 0x2fb4 <vfprintf+0xd8>
+    2fa8:	96 fc       	sbrc	r9, 6
+    2faa:	cc c2       	rjmp	.+1432   	; 0x3544 <vfprintf+0x668>
+    2fac:	f9 2d       	mov	r31, r9
+    2fae:	f0 64       	ori	r31, 0x40	; 64
+    2fb0:	9f 2e       	mov	r9, r31
+    2fb2:	08 c0       	rjmp	.+16     	; 0x2fc4 <vfprintf+0xe8>
+    2fb4:	8c 36       	cpi	r24, 0x6C	; 108
+    2fb6:	21 f4       	brne	.+8      	; 0x2fc0 <vfprintf+0xe4>
+    2fb8:	29 2d       	mov	r18, r9
+    2fba:	20 68       	ori	r18, 0x80	; 128
+    2fbc:	92 2e       	mov	r9, r18
+    2fbe:	02 c0       	rjmp	.+4      	; 0x2fc4 <vfprintf+0xe8>
+    2fc0:	88 36       	cpi	r24, 0x68	; 104
+    2fc2:	41 f4       	brne	.+16     	; 0x2fd4 <vfprintf+0xf8>
+    2fc4:	f1 01       	movw	r30, r2
+    2fc6:	93 fd       	sbrc	r25, 3
+    2fc8:	85 91       	lpm	r24, Z+
+    2fca:	93 ff       	sbrs	r25, 3
+    2fcc:	81 91       	ld	r24, Z+
+    2fce:	1f 01       	movw	r2, r30
+    2fd0:	81 11       	cpse	r24, r1
+    2fd2:	b3 cf       	rjmp	.-154    	; 0x2f3a <vfprintf+0x5e>
+    2fd4:	9b eb       	ldi	r25, 0xBB	; 187
+    2fd6:	98 0f       	add	r25, r24
+    2fd8:	93 30       	cpi	r25, 0x03	; 3
+    2fda:	20 f4       	brcc	.+8      	; 0x2fe4 <vfprintf+0x108>
+    2fdc:	99 2d       	mov	r25, r9
+    2fde:	90 61       	ori	r25, 0x10	; 16
+    2fe0:	80 5e       	subi	r24, 0xE0	; 224
+    2fe2:	07 c0       	rjmp	.+14     	; 0x2ff2 <vfprintf+0x116>
+    2fe4:	9b e9       	ldi	r25, 0x9B	; 155
+    2fe6:	98 0f       	add	r25, r24
+    2fe8:	93 30       	cpi	r25, 0x03	; 3
+    2fea:	08 f0       	brcs	.+2      	; 0x2fee <vfprintf+0x112>
+    2fec:	59 c1       	rjmp	.+690    	; 0x32a0 <vfprintf+0x3c4>
+    2fee:	99 2d       	mov	r25, r9
+    2ff0:	9f 7e       	andi	r25, 0xEF	; 239
+    2ff2:	96 ff       	sbrs	r25, 6
+    2ff4:	16 e0       	ldi	r17, 0x06	; 6
+    2ff6:	9f 73       	andi	r25, 0x3F	; 63
+    2ff8:	99 2e       	mov	r9, r25
+    2ffa:	85 36       	cpi	r24, 0x65	; 101
+    2ffc:	19 f4       	brne	.+6      	; 0x3004 <vfprintf+0x128>
+    2ffe:	90 64       	ori	r25, 0x40	; 64
+    3000:	99 2e       	mov	r9, r25
+    3002:	08 c0       	rjmp	.+16     	; 0x3014 <vfprintf+0x138>
+    3004:	86 36       	cpi	r24, 0x66	; 102
+    3006:	21 f4       	brne	.+8      	; 0x3010 <vfprintf+0x134>
+    3008:	39 2f       	mov	r19, r25
+    300a:	30 68       	ori	r19, 0x80	; 128
+    300c:	93 2e       	mov	r9, r19
+    300e:	02 c0       	rjmp	.+4      	; 0x3014 <vfprintf+0x138>
+    3010:	11 11       	cpse	r17, r1
+    3012:	11 50       	subi	r17, 0x01	; 1
+    3014:	97 fe       	sbrs	r9, 7
+    3016:	07 c0       	rjmp	.+14     	; 0x3026 <vfprintf+0x14a>
+    3018:	1c 33       	cpi	r17, 0x3C	; 60
+    301a:	50 f4       	brcc	.+20     	; 0x3030 <vfprintf+0x154>
+    301c:	44 24       	eor	r4, r4
+    301e:	43 94       	inc	r4
+    3020:	41 0e       	add	r4, r17
+    3022:	27 e0       	ldi	r18, 0x07	; 7
+    3024:	0b c0       	rjmp	.+22     	; 0x303c <vfprintf+0x160>
+    3026:	18 30       	cpi	r17, 0x08	; 8
+    3028:	38 f0       	brcs	.+14     	; 0x3038 <vfprintf+0x15c>
+    302a:	27 e0       	ldi	r18, 0x07	; 7
+    302c:	17 e0       	ldi	r17, 0x07	; 7
+    302e:	05 c0       	rjmp	.+10     	; 0x303a <vfprintf+0x15e>
+    3030:	27 e0       	ldi	r18, 0x07	; 7
+    3032:	9c e3       	ldi	r25, 0x3C	; 60
+    3034:	49 2e       	mov	r4, r25
+    3036:	02 c0       	rjmp	.+4      	; 0x303c <vfprintf+0x160>
+    3038:	21 2f       	mov	r18, r17
+    303a:	41 2c       	mov	r4, r1
+    303c:	56 01       	movw	r10, r12
+    303e:	84 e0       	ldi	r24, 0x04	; 4
+    3040:	a8 0e       	add	r10, r24
+    3042:	b1 1c       	adc	r11, r1
+    3044:	f6 01       	movw	r30, r12
+    3046:	60 81       	ld	r22, Z
+    3048:	71 81       	ldd	r23, Z+1	; 0x01
+    304a:	82 81       	ldd	r24, Z+2	; 0x02
+    304c:	93 81       	ldd	r25, Z+3	; 0x03
+    304e:	04 2d       	mov	r16, r4
+    3050:	a3 01       	movw	r20, r6
+    3052:	50 d4       	rcall	.+2208   	; 0x38f4 <__ftoa_engine>
+    3054:	6c 01       	movw	r12, r24
+    3056:	f9 81       	ldd	r31, Y+1	; 0x01
+    3058:	fc 87       	std	Y+12, r31	; 0x0c
+    305a:	f0 ff       	sbrs	r31, 0
+    305c:	02 c0       	rjmp	.+4      	; 0x3062 <vfprintf+0x186>
+    305e:	f3 ff       	sbrs	r31, 3
+    3060:	06 c0       	rjmp	.+12     	; 0x306e <vfprintf+0x192>
+    3062:	91 fc       	sbrc	r9, 1
+    3064:	06 c0       	rjmp	.+12     	; 0x3072 <vfprintf+0x196>
+    3066:	92 fe       	sbrs	r9, 2
+    3068:	06 c0       	rjmp	.+12     	; 0x3076 <vfprintf+0x19a>
+    306a:	00 e2       	ldi	r16, 0x20	; 32
+    306c:	05 c0       	rjmp	.+10     	; 0x3078 <vfprintf+0x19c>
+    306e:	0d e2       	ldi	r16, 0x2D	; 45
+    3070:	03 c0       	rjmp	.+6      	; 0x3078 <vfprintf+0x19c>
+    3072:	0b e2       	ldi	r16, 0x2B	; 43
+    3074:	01 c0       	rjmp	.+2      	; 0x3078 <vfprintf+0x19c>
+    3076:	00 e0       	ldi	r16, 0x00	; 0
+    3078:	8c 85       	ldd	r24, Y+12	; 0x0c
+    307a:	8c 70       	andi	r24, 0x0C	; 12
+    307c:	19 f0       	breq	.+6      	; 0x3084 <vfprintf+0x1a8>
+    307e:	01 11       	cpse	r16, r1
+    3080:	43 c2       	rjmp	.+1158   	; 0x3508 <vfprintf+0x62c>
+    3082:	80 c2       	rjmp	.+1280   	; 0x3584 <vfprintf+0x6a8>
+    3084:	97 fe       	sbrs	r9, 7
+    3086:	10 c0       	rjmp	.+32     	; 0x30a8 <vfprintf+0x1cc>
+    3088:	4c 0c       	add	r4, r12
+    308a:	fc 85       	ldd	r31, Y+12	; 0x0c
+    308c:	f4 ff       	sbrs	r31, 4
+    308e:	04 c0       	rjmp	.+8      	; 0x3098 <vfprintf+0x1bc>
+    3090:	8a 81       	ldd	r24, Y+2	; 0x02
+    3092:	81 33       	cpi	r24, 0x31	; 49
+    3094:	09 f4       	brne	.+2      	; 0x3098 <vfprintf+0x1bc>
+    3096:	4a 94       	dec	r4
+    3098:	14 14       	cp	r1, r4
+    309a:	74 f5       	brge	.+92     	; 0x30f8 <vfprintf+0x21c>
+    309c:	28 e0       	ldi	r18, 0x08	; 8
+    309e:	24 15       	cp	r18, r4
+    30a0:	78 f5       	brcc	.+94     	; 0x3100 <vfprintf+0x224>
+    30a2:	88 e0       	ldi	r24, 0x08	; 8
+    30a4:	48 2e       	mov	r4, r24
+    30a6:	2c c0       	rjmp	.+88     	; 0x3100 <vfprintf+0x224>
+    30a8:	96 fc       	sbrc	r9, 6
+    30aa:	2a c0       	rjmp	.+84     	; 0x3100 <vfprintf+0x224>
+    30ac:	81 2f       	mov	r24, r17
+    30ae:	90 e0       	ldi	r25, 0x00	; 0
+    30b0:	8c 15       	cp	r24, r12
+    30b2:	9d 05       	cpc	r25, r13
+    30b4:	9c f0       	brlt	.+38     	; 0x30dc <vfprintf+0x200>
+    30b6:	3c ef       	ldi	r19, 0xFC	; 252
+    30b8:	c3 16       	cp	r12, r19
+    30ba:	3f ef       	ldi	r19, 0xFF	; 255
+    30bc:	d3 06       	cpc	r13, r19
+    30be:	74 f0       	brlt	.+28     	; 0x30dc <vfprintf+0x200>
+    30c0:	89 2d       	mov	r24, r9
+    30c2:	80 68       	ori	r24, 0x80	; 128
+    30c4:	98 2e       	mov	r9, r24
+    30c6:	0a c0       	rjmp	.+20     	; 0x30dc <vfprintf+0x200>
+    30c8:	e2 e0       	ldi	r30, 0x02	; 2
+    30ca:	f0 e0       	ldi	r31, 0x00	; 0
+    30cc:	ec 0f       	add	r30, r28
+    30ce:	fd 1f       	adc	r31, r29
+    30d0:	e1 0f       	add	r30, r17
+    30d2:	f1 1d       	adc	r31, r1
+    30d4:	80 81       	ld	r24, Z
+    30d6:	80 33       	cpi	r24, 0x30	; 48
+    30d8:	19 f4       	brne	.+6      	; 0x30e0 <vfprintf+0x204>
+    30da:	11 50       	subi	r17, 0x01	; 1
+    30dc:	11 11       	cpse	r17, r1
+    30de:	f4 cf       	rjmp	.-24     	; 0x30c8 <vfprintf+0x1ec>
+    30e0:	97 fe       	sbrs	r9, 7
+    30e2:	0e c0       	rjmp	.+28     	; 0x3100 <vfprintf+0x224>
+    30e4:	44 24       	eor	r4, r4
+    30e6:	43 94       	inc	r4
+    30e8:	41 0e       	add	r4, r17
+    30ea:	81 2f       	mov	r24, r17
+    30ec:	90 e0       	ldi	r25, 0x00	; 0
+    30ee:	c8 16       	cp	r12, r24
+    30f0:	d9 06       	cpc	r13, r25
+    30f2:	2c f4       	brge	.+10     	; 0x30fe <vfprintf+0x222>
+    30f4:	1c 19       	sub	r17, r12
+    30f6:	04 c0       	rjmp	.+8      	; 0x3100 <vfprintf+0x224>
+    30f8:	44 24       	eor	r4, r4
+    30fa:	43 94       	inc	r4
+    30fc:	01 c0       	rjmp	.+2      	; 0x3100 <vfprintf+0x224>
+    30fe:	10 e0       	ldi	r17, 0x00	; 0
+    3100:	97 fe       	sbrs	r9, 7
+    3102:	06 c0       	rjmp	.+12     	; 0x3110 <vfprintf+0x234>
+    3104:	1c 14       	cp	r1, r12
+    3106:	1d 04       	cpc	r1, r13
+    3108:	34 f4       	brge	.+12     	; 0x3116 <vfprintf+0x23a>
+    310a:	c6 01       	movw	r24, r12
+    310c:	01 96       	adiw	r24, 0x01	; 1
+    310e:	05 c0       	rjmp	.+10     	; 0x311a <vfprintf+0x23e>
+    3110:	85 e0       	ldi	r24, 0x05	; 5
+    3112:	90 e0       	ldi	r25, 0x00	; 0
+    3114:	02 c0       	rjmp	.+4      	; 0x311a <vfprintf+0x23e>
+    3116:	81 e0       	ldi	r24, 0x01	; 1
+    3118:	90 e0       	ldi	r25, 0x00	; 0
+    311a:	01 11       	cpse	r16, r1
+    311c:	01 96       	adiw	r24, 0x01	; 1
+    311e:	11 23       	and	r17, r17
+    3120:	31 f0       	breq	.+12     	; 0x312e <vfprintf+0x252>
+    3122:	21 2f       	mov	r18, r17
+    3124:	30 e0       	ldi	r19, 0x00	; 0
+    3126:	2f 5f       	subi	r18, 0xFF	; 255
+    3128:	3f 4f       	sbci	r19, 0xFF	; 255
+    312a:	82 0f       	add	r24, r18
+    312c:	93 1f       	adc	r25, r19
+    312e:	25 2d       	mov	r18, r5
+    3130:	30 e0       	ldi	r19, 0x00	; 0
+    3132:	82 17       	cp	r24, r18
+    3134:	93 07       	cpc	r25, r19
+    3136:	14 f4       	brge	.+4      	; 0x313c <vfprintf+0x260>
+    3138:	58 1a       	sub	r5, r24
+    313a:	01 c0       	rjmp	.+2      	; 0x313e <vfprintf+0x262>
+    313c:	51 2c       	mov	r5, r1
+    313e:	89 2d       	mov	r24, r9
+    3140:	89 70       	andi	r24, 0x09	; 9
+    3142:	41 f4       	brne	.+16     	; 0x3154 <vfprintf+0x278>
+    3144:	55 20       	and	r5, r5
+    3146:	31 f0       	breq	.+12     	; 0x3154 <vfprintf+0x278>
+    3148:	b7 01       	movw	r22, r14
+    314a:	80 e2       	ldi	r24, 0x20	; 32
+    314c:	90 e0       	ldi	r25, 0x00	; 0
+    314e:	ee d4       	rcall	.+2524   	; 0x3b2c <fputc>
+    3150:	5a 94       	dec	r5
+    3152:	f8 cf       	rjmp	.-16     	; 0x3144 <vfprintf+0x268>
+    3154:	00 23       	and	r16, r16
+    3156:	21 f0       	breq	.+8      	; 0x3160 <vfprintf+0x284>
+    3158:	b7 01       	movw	r22, r14
+    315a:	80 2f       	mov	r24, r16
+    315c:	90 e0       	ldi	r25, 0x00	; 0
+    315e:	e6 d4       	rcall	.+2508   	; 0x3b2c <fputc>
+    3160:	93 fc       	sbrc	r9, 3
+    3162:	08 c0       	rjmp	.+16     	; 0x3174 <vfprintf+0x298>
+    3164:	55 20       	and	r5, r5
+    3166:	31 f0       	breq	.+12     	; 0x3174 <vfprintf+0x298>
+    3168:	b7 01       	movw	r22, r14
+    316a:	80 e3       	ldi	r24, 0x30	; 48
+    316c:	90 e0       	ldi	r25, 0x00	; 0
+    316e:	de d4       	rcall	.+2492   	; 0x3b2c <fputc>
+    3170:	5a 94       	dec	r5
+    3172:	f8 cf       	rjmp	.-16     	; 0x3164 <vfprintf+0x288>
+    3174:	97 fe       	sbrs	r9, 7
+    3176:	4a c0       	rjmp	.+148    	; 0x320c <vfprintf+0x330>
+    3178:	46 01       	movw	r8, r12
+    317a:	d7 fe       	sbrs	r13, 7
+    317c:	02 c0       	rjmp	.+4      	; 0x3182 <vfprintf+0x2a6>
+    317e:	81 2c       	mov	r8, r1
+    3180:	91 2c       	mov	r9, r1
+    3182:	c6 01       	movw	r24, r12
+    3184:	88 19       	sub	r24, r8
+    3186:	99 09       	sbc	r25, r9
+    3188:	f3 01       	movw	r30, r6
+    318a:	e8 0f       	add	r30, r24
+    318c:	f9 1f       	adc	r31, r25
+    318e:	fe 87       	std	Y+14, r31	; 0x0e
+    3190:	ed 87       	std	Y+13, r30	; 0x0d
+    3192:	96 01       	movw	r18, r12
+    3194:	24 19       	sub	r18, r4
+    3196:	31 09       	sbc	r19, r1
+    3198:	38 8b       	std	Y+16, r19	; 0x10
+    319a:	2f 87       	std	Y+15, r18	; 0x0f
+    319c:	01 2f       	mov	r16, r17
+    319e:	10 e0       	ldi	r17, 0x00	; 0
+    31a0:	11 95       	neg	r17
+    31a2:	01 95       	neg	r16
+    31a4:	11 09       	sbc	r17, r1
+    31a6:	3f ef       	ldi	r19, 0xFF	; 255
+    31a8:	83 16       	cp	r8, r19
+    31aa:	93 06       	cpc	r9, r19
+    31ac:	21 f4       	brne	.+8      	; 0x31b6 <vfprintf+0x2da>
+    31ae:	b7 01       	movw	r22, r14
+    31b0:	8e e2       	ldi	r24, 0x2E	; 46
+    31b2:	90 e0       	ldi	r25, 0x00	; 0
+    31b4:	bb d4       	rcall	.+2422   	; 0x3b2c <fputc>
+    31b6:	c8 14       	cp	r12, r8
+    31b8:	d9 04       	cpc	r13, r9
+    31ba:	4c f0       	brlt	.+18     	; 0x31ce <vfprintf+0x2f2>
+    31bc:	8f 85       	ldd	r24, Y+15	; 0x0f
+    31be:	98 89       	ldd	r25, Y+16	; 0x10
+    31c0:	88 15       	cp	r24, r8
+    31c2:	99 05       	cpc	r25, r9
+    31c4:	24 f4       	brge	.+8      	; 0x31ce <vfprintf+0x2f2>
+    31c6:	ed 85       	ldd	r30, Y+13	; 0x0d
+    31c8:	fe 85       	ldd	r31, Y+14	; 0x0e
+    31ca:	81 81       	ldd	r24, Z+1	; 0x01
+    31cc:	01 c0       	rjmp	.+2      	; 0x31d0 <vfprintf+0x2f4>
+    31ce:	80 e3       	ldi	r24, 0x30	; 48
+    31d0:	f1 e0       	ldi	r31, 0x01	; 1
+    31d2:	8f 1a       	sub	r8, r31
+    31d4:	91 08       	sbc	r9, r1
+    31d6:	2d 85       	ldd	r18, Y+13	; 0x0d
+    31d8:	3e 85       	ldd	r19, Y+14	; 0x0e
+    31da:	2f 5f       	subi	r18, 0xFF	; 255
+    31dc:	3f 4f       	sbci	r19, 0xFF	; 255
+    31de:	3e 87       	std	Y+14, r19	; 0x0e
+    31e0:	2d 87       	std	Y+13, r18	; 0x0d
+    31e2:	80 16       	cp	r8, r16
+    31e4:	91 06       	cpc	r9, r17
+    31e6:	24 f0       	brlt	.+8      	; 0x31f0 <vfprintf+0x314>
+    31e8:	b7 01       	movw	r22, r14
+    31ea:	90 e0       	ldi	r25, 0x00	; 0
+    31ec:	9f d4       	rcall	.+2366   	; 0x3b2c <fputc>
+    31ee:	db cf       	rjmp	.-74     	; 0x31a6 <vfprintf+0x2ca>
+    31f0:	c8 14       	cp	r12, r8
+    31f2:	d9 04       	cpc	r13, r9
+    31f4:	41 f4       	brne	.+16     	; 0x3206 <vfprintf+0x32a>
+    31f6:	9a 81       	ldd	r25, Y+2	; 0x02
+    31f8:	96 33       	cpi	r25, 0x36	; 54
+    31fa:	20 f4       	brcc	.+8      	; 0x3204 <vfprintf+0x328>
+    31fc:	95 33       	cpi	r25, 0x35	; 53
+    31fe:	19 f4       	brne	.+6      	; 0x3206 <vfprintf+0x32a>
+    3200:	3c 85       	ldd	r19, Y+12	; 0x0c
+    3202:	34 ff       	sbrs	r19, 4
+    3204:	81 e3       	ldi	r24, 0x31	; 49
+    3206:	b7 01       	movw	r22, r14
+    3208:	90 e0       	ldi	r25, 0x00	; 0
+    320a:	48 c0       	rjmp	.+144    	; 0x329c <vfprintf+0x3c0>
+    320c:	8a 81       	ldd	r24, Y+2	; 0x02
+    320e:	81 33       	cpi	r24, 0x31	; 49
+    3210:	19 f0       	breq	.+6      	; 0x3218 <vfprintf+0x33c>
+    3212:	9c 85       	ldd	r25, Y+12	; 0x0c
+    3214:	9f 7e       	andi	r25, 0xEF	; 239
+    3216:	9c 87       	std	Y+12, r25	; 0x0c
+    3218:	b7 01       	movw	r22, r14
+    321a:	90 e0       	ldi	r25, 0x00	; 0
+    321c:	87 d4       	rcall	.+2318   	; 0x3b2c <fputc>
+    321e:	11 11       	cpse	r17, r1
+    3220:	05 c0       	rjmp	.+10     	; 0x322c <vfprintf+0x350>
+    3222:	94 fc       	sbrc	r9, 4
+    3224:	16 c0       	rjmp	.+44     	; 0x3252 <vfprintf+0x376>
+    3226:	85 e6       	ldi	r24, 0x65	; 101
+    3228:	90 e0       	ldi	r25, 0x00	; 0
+    322a:	15 c0       	rjmp	.+42     	; 0x3256 <vfprintf+0x37a>
+    322c:	b7 01       	movw	r22, r14
+    322e:	8e e2       	ldi	r24, 0x2E	; 46
+    3230:	90 e0       	ldi	r25, 0x00	; 0
+    3232:	7c d4       	rcall	.+2296   	; 0x3b2c <fputc>
+    3234:	1e 5f       	subi	r17, 0xFE	; 254
+    3236:	82 e0       	ldi	r24, 0x02	; 2
+    3238:	01 e0       	ldi	r16, 0x01	; 1
+    323a:	08 0f       	add	r16, r24
+    323c:	f3 01       	movw	r30, r6
+    323e:	e8 0f       	add	r30, r24
+    3240:	f1 1d       	adc	r31, r1
+    3242:	80 81       	ld	r24, Z
+    3244:	b7 01       	movw	r22, r14
+    3246:	90 e0       	ldi	r25, 0x00	; 0
+    3248:	71 d4       	rcall	.+2274   	; 0x3b2c <fputc>
+    324a:	80 2f       	mov	r24, r16
+    324c:	01 13       	cpse	r16, r17
+    324e:	f4 cf       	rjmp	.-24     	; 0x3238 <vfprintf+0x35c>
+    3250:	e8 cf       	rjmp	.-48     	; 0x3222 <vfprintf+0x346>
+    3252:	85 e4       	ldi	r24, 0x45	; 69
+    3254:	90 e0       	ldi	r25, 0x00	; 0
+    3256:	b7 01       	movw	r22, r14
+    3258:	69 d4       	rcall	.+2258   	; 0x3b2c <fputc>
+    325a:	d7 fc       	sbrc	r13, 7
+    325c:	06 c0       	rjmp	.+12     	; 0x326a <vfprintf+0x38e>
+    325e:	c1 14       	cp	r12, r1
+    3260:	d1 04       	cpc	r13, r1
+    3262:	41 f4       	brne	.+16     	; 0x3274 <vfprintf+0x398>
+    3264:	ec 85       	ldd	r30, Y+12	; 0x0c
+    3266:	e4 ff       	sbrs	r30, 4
+    3268:	05 c0       	rjmp	.+10     	; 0x3274 <vfprintf+0x398>
+    326a:	d1 94       	neg	r13
+    326c:	c1 94       	neg	r12
+    326e:	d1 08       	sbc	r13, r1
+    3270:	8d e2       	ldi	r24, 0x2D	; 45
+    3272:	01 c0       	rjmp	.+2      	; 0x3276 <vfprintf+0x39a>
+    3274:	8b e2       	ldi	r24, 0x2B	; 43
+    3276:	b7 01       	movw	r22, r14
+    3278:	90 e0       	ldi	r25, 0x00	; 0
+    327a:	58 d4       	rcall	.+2224   	; 0x3b2c <fputc>
+    327c:	80 e3       	ldi	r24, 0x30	; 48
+    327e:	2a e0       	ldi	r18, 0x0A	; 10
+    3280:	c2 16       	cp	r12, r18
+    3282:	d1 04       	cpc	r13, r1
+    3284:	2c f0       	brlt	.+10     	; 0x3290 <vfprintf+0x3b4>
+    3286:	8f 5f       	subi	r24, 0xFF	; 255
+    3288:	fa e0       	ldi	r31, 0x0A	; 10
+    328a:	cf 1a       	sub	r12, r31
+    328c:	d1 08       	sbc	r13, r1
+    328e:	f7 cf       	rjmp	.-18     	; 0x327e <vfprintf+0x3a2>
+    3290:	b7 01       	movw	r22, r14
+    3292:	90 e0       	ldi	r25, 0x00	; 0
+    3294:	4b d4       	rcall	.+2198   	; 0x3b2c <fputc>
+    3296:	b7 01       	movw	r22, r14
+    3298:	c6 01       	movw	r24, r12
+    329a:	c0 96       	adiw	r24, 0x30	; 48
+    329c:	47 d4       	rcall	.+2190   	; 0x3b2c <fputc>
+    329e:	49 c1       	rjmp	.+658    	; 0x3532 <vfprintf+0x656>
+    32a0:	83 36       	cpi	r24, 0x63	; 99
+    32a2:	31 f0       	breq	.+12     	; 0x32b0 <vfprintf+0x3d4>
+    32a4:	83 37       	cpi	r24, 0x73	; 115
+    32a6:	79 f0       	breq	.+30     	; 0x32c6 <vfprintf+0x3ea>
+    32a8:	83 35       	cpi	r24, 0x53	; 83
+    32aa:	09 f0       	breq	.+2      	; 0x32ae <vfprintf+0x3d2>
+    32ac:	52 c0       	rjmp	.+164    	; 0x3352 <vfprintf+0x476>
+    32ae:	1f c0       	rjmp	.+62     	; 0x32ee <vfprintf+0x412>
+    32b0:	56 01       	movw	r10, r12
+    32b2:	32 e0       	ldi	r19, 0x02	; 2
+    32b4:	a3 0e       	add	r10, r19
+    32b6:	b1 1c       	adc	r11, r1
+    32b8:	f6 01       	movw	r30, r12
+    32ba:	80 81       	ld	r24, Z
+    32bc:	89 83       	std	Y+1, r24	; 0x01
+    32be:	01 e0       	ldi	r16, 0x01	; 1
+    32c0:	10 e0       	ldi	r17, 0x00	; 0
+    32c2:	63 01       	movw	r12, r6
+    32c4:	11 c0       	rjmp	.+34     	; 0x32e8 <vfprintf+0x40c>
+    32c6:	56 01       	movw	r10, r12
+    32c8:	f2 e0       	ldi	r31, 0x02	; 2
+    32ca:	af 0e       	add	r10, r31
+    32cc:	b1 1c       	adc	r11, r1
+    32ce:	f6 01       	movw	r30, r12
+    32d0:	c0 80       	ld	r12, Z
+    32d2:	d1 80       	ldd	r13, Z+1	; 0x01
+    32d4:	96 fe       	sbrs	r9, 6
+    32d6:	03 c0       	rjmp	.+6      	; 0x32de <vfprintf+0x402>
+    32d8:	61 2f       	mov	r22, r17
+    32da:	70 e0       	ldi	r23, 0x00	; 0
+    32dc:	02 c0       	rjmp	.+4      	; 0x32e2 <vfprintf+0x406>
+    32de:	6f ef       	ldi	r22, 0xFF	; 255
+    32e0:	7f ef       	ldi	r23, 0xFF	; 255
+    32e2:	c6 01       	movw	r24, r12
+    32e4:	09 d4       	rcall	.+2066   	; 0x3af8 <strnlen>
+    32e6:	8c 01       	movw	r16, r24
+    32e8:	f9 2d       	mov	r31, r9
+    32ea:	ff 77       	andi	r31, 0x7F	; 127
+    32ec:	13 c0       	rjmp	.+38     	; 0x3314 <vfprintf+0x438>
+    32ee:	56 01       	movw	r10, r12
+    32f0:	22 e0       	ldi	r18, 0x02	; 2
+    32f2:	a2 0e       	add	r10, r18
+    32f4:	b1 1c       	adc	r11, r1
+    32f6:	f6 01       	movw	r30, r12
+    32f8:	c0 80       	ld	r12, Z
+    32fa:	d1 80       	ldd	r13, Z+1	; 0x01
+    32fc:	96 fe       	sbrs	r9, 6
+    32fe:	03 c0       	rjmp	.+6      	; 0x3306 <vfprintf+0x42a>
+    3300:	61 2f       	mov	r22, r17
+    3302:	70 e0       	ldi	r23, 0x00	; 0
+    3304:	02 c0       	rjmp	.+4      	; 0x330a <vfprintf+0x42e>
+    3306:	6f ef       	ldi	r22, 0xFF	; 255
+    3308:	7f ef       	ldi	r23, 0xFF	; 255
+    330a:	c6 01       	movw	r24, r12
+    330c:	cb d3       	rcall	.+1942   	; 0x3aa4 <strnlen_P>
+    330e:	8c 01       	movw	r16, r24
+    3310:	f9 2d       	mov	r31, r9
+    3312:	f0 68       	ori	r31, 0x80	; 128
+    3314:	9f 2e       	mov	r9, r31
+    3316:	f3 fd       	sbrc	r31, 3
+    3318:	18 c0       	rjmp	.+48     	; 0x334a <vfprintf+0x46e>
+    331a:	85 2d       	mov	r24, r5
+    331c:	90 e0       	ldi	r25, 0x00	; 0
+    331e:	08 17       	cp	r16, r24
+    3320:	19 07       	cpc	r17, r25
+    3322:	98 f4       	brcc	.+38     	; 0x334a <vfprintf+0x46e>
+    3324:	b7 01       	movw	r22, r14
+    3326:	80 e2       	ldi	r24, 0x20	; 32
+    3328:	90 e0       	ldi	r25, 0x00	; 0
+    332a:	00 d4       	rcall	.+2048   	; 0x3b2c <fputc>
+    332c:	5a 94       	dec	r5
+    332e:	f5 cf       	rjmp	.-22     	; 0x331a <vfprintf+0x43e>
+    3330:	f6 01       	movw	r30, r12
+    3332:	97 fc       	sbrc	r9, 7
+    3334:	85 91       	lpm	r24, Z+
+    3336:	97 fe       	sbrs	r9, 7
+    3338:	81 91       	ld	r24, Z+
+    333a:	6f 01       	movw	r12, r30
+    333c:	b7 01       	movw	r22, r14
+    333e:	90 e0       	ldi	r25, 0x00	; 0
+    3340:	f5 d3       	rcall	.+2026   	; 0x3b2c <fputc>
+    3342:	51 10       	cpse	r5, r1
+    3344:	5a 94       	dec	r5
+    3346:	01 50       	subi	r16, 0x01	; 1
+    3348:	11 09       	sbc	r17, r1
+    334a:	01 15       	cp	r16, r1
+    334c:	11 05       	cpc	r17, r1
+    334e:	81 f7       	brne	.-32     	; 0x3330 <vfprintf+0x454>
+    3350:	f0 c0       	rjmp	.+480    	; 0x3532 <vfprintf+0x656>
+    3352:	84 36       	cpi	r24, 0x64	; 100
+    3354:	11 f0       	breq	.+4      	; 0x335a <vfprintf+0x47e>
+    3356:	89 36       	cpi	r24, 0x69	; 105
+    3358:	59 f5       	brne	.+86     	; 0x33b0 <vfprintf+0x4d4>
+    335a:	56 01       	movw	r10, r12
+    335c:	97 fe       	sbrs	r9, 7
+    335e:	09 c0       	rjmp	.+18     	; 0x3372 <vfprintf+0x496>
+    3360:	24 e0       	ldi	r18, 0x04	; 4
+    3362:	a2 0e       	add	r10, r18
+    3364:	b1 1c       	adc	r11, r1
+    3366:	f6 01       	movw	r30, r12
+    3368:	60 81       	ld	r22, Z
+    336a:	71 81       	ldd	r23, Z+1	; 0x01
+    336c:	82 81       	ldd	r24, Z+2	; 0x02
+    336e:	93 81       	ldd	r25, Z+3	; 0x03
+    3370:	0a c0       	rjmp	.+20     	; 0x3386 <vfprintf+0x4aa>
+    3372:	f2 e0       	ldi	r31, 0x02	; 2
+    3374:	af 0e       	add	r10, r31
+    3376:	b1 1c       	adc	r11, r1
+    3378:	f6 01       	movw	r30, r12
+    337a:	60 81       	ld	r22, Z
+    337c:	71 81       	ldd	r23, Z+1	; 0x01
+    337e:	07 2e       	mov	r0, r23
+    3380:	00 0c       	add	r0, r0
+    3382:	88 0b       	sbc	r24, r24
+    3384:	99 0b       	sbc	r25, r25
+    3386:	f9 2d       	mov	r31, r9
+    3388:	ff 76       	andi	r31, 0x6F	; 111
+    338a:	9f 2e       	mov	r9, r31
+    338c:	97 ff       	sbrs	r25, 7
+    338e:	09 c0       	rjmp	.+18     	; 0x33a2 <vfprintf+0x4c6>
+    3390:	90 95       	com	r25
+    3392:	80 95       	com	r24
+    3394:	70 95       	com	r23
+    3396:	61 95       	neg	r22
+    3398:	7f 4f       	sbci	r23, 0xFF	; 255
+    339a:	8f 4f       	sbci	r24, 0xFF	; 255
+    339c:	9f 4f       	sbci	r25, 0xFF	; 255
+    339e:	f0 68       	ori	r31, 0x80	; 128
+    33a0:	9f 2e       	mov	r9, r31
+    33a2:	2a e0       	ldi	r18, 0x0A	; 10
+    33a4:	30 e0       	ldi	r19, 0x00	; 0
+    33a6:	a3 01       	movw	r20, r6
+    33a8:	2f d4       	rcall	.+2142   	; 0x3c08 <__ultoa_invert>
+    33aa:	c8 2e       	mov	r12, r24
+    33ac:	c6 18       	sub	r12, r6
+    33ae:	3e c0       	rjmp	.+124    	; 0x342c <vfprintf+0x550>
+    33b0:	09 2d       	mov	r16, r9
+    33b2:	85 37       	cpi	r24, 0x75	; 117
+    33b4:	21 f4       	brne	.+8      	; 0x33be <vfprintf+0x4e2>
+    33b6:	0f 7e       	andi	r16, 0xEF	; 239
+    33b8:	2a e0       	ldi	r18, 0x0A	; 10
+    33ba:	30 e0       	ldi	r19, 0x00	; 0
+    33bc:	1d c0       	rjmp	.+58     	; 0x33f8 <vfprintf+0x51c>
+    33be:	09 7f       	andi	r16, 0xF9	; 249
+    33c0:	8f 36       	cpi	r24, 0x6F	; 111
+    33c2:	91 f0       	breq	.+36     	; 0x33e8 <vfprintf+0x50c>
+    33c4:	18 f4       	brcc	.+6      	; 0x33cc <vfprintf+0x4f0>
+    33c6:	88 35       	cpi	r24, 0x58	; 88
+    33c8:	59 f0       	breq	.+22     	; 0x33e0 <vfprintf+0x504>
+    33ca:	bc c0       	rjmp	.+376    	; 0x3544 <vfprintf+0x668>
+    33cc:	80 37       	cpi	r24, 0x70	; 112
+    33ce:	19 f0       	breq	.+6      	; 0x33d6 <vfprintf+0x4fa>
+    33d0:	88 37       	cpi	r24, 0x78	; 120
+    33d2:	11 f0       	breq	.+4      	; 0x33d8 <vfprintf+0x4fc>
+    33d4:	b7 c0       	rjmp	.+366    	; 0x3544 <vfprintf+0x668>
+    33d6:	00 61       	ori	r16, 0x10	; 16
+    33d8:	04 ff       	sbrs	r16, 4
+    33da:	09 c0       	rjmp	.+18     	; 0x33ee <vfprintf+0x512>
+    33dc:	04 60       	ori	r16, 0x04	; 4
+    33de:	07 c0       	rjmp	.+14     	; 0x33ee <vfprintf+0x512>
+    33e0:	94 fe       	sbrs	r9, 4
+    33e2:	08 c0       	rjmp	.+16     	; 0x33f4 <vfprintf+0x518>
+    33e4:	06 60       	ori	r16, 0x06	; 6
+    33e6:	06 c0       	rjmp	.+12     	; 0x33f4 <vfprintf+0x518>
+    33e8:	28 e0       	ldi	r18, 0x08	; 8
+    33ea:	30 e0       	ldi	r19, 0x00	; 0
+    33ec:	05 c0       	rjmp	.+10     	; 0x33f8 <vfprintf+0x51c>
+    33ee:	20 e1       	ldi	r18, 0x10	; 16
+    33f0:	30 e0       	ldi	r19, 0x00	; 0
+    33f2:	02 c0       	rjmp	.+4      	; 0x33f8 <vfprintf+0x51c>
+    33f4:	20 e1       	ldi	r18, 0x10	; 16
+    33f6:	32 e0       	ldi	r19, 0x02	; 2
+    33f8:	56 01       	movw	r10, r12
+    33fa:	07 ff       	sbrs	r16, 7
+    33fc:	09 c0       	rjmp	.+18     	; 0x3410 <vfprintf+0x534>
+    33fe:	84 e0       	ldi	r24, 0x04	; 4
+    3400:	a8 0e       	add	r10, r24
+    3402:	b1 1c       	adc	r11, r1
+    3404:	f6 01       	movw	r30, r12
+    3406:	60 81       	ld	r22, Z
+    3408:	71 81       	ldd	r23, Z+1	; 0x01
+    340a:	82 81       	ldd	r24, Z+2	; 0x02
+    340c:	93 81       	ldd	r25, Z+3	; 0x03
+    340e:	08 c0       	rjmp	.+16     	; 0x3420 <vfprintf+0x544>
+    3410:	f2 e0       	ldi	r31, 0x02	; 2
+    3412:	af 0e       	add	r10, r31
+    3414:	b1 1c       	adc	r11, r1
+    3416:	f6 01       	movw	r30, r12
+    3418:	60 81       	ld	r22, Z
+    341a:	71 81       	ldd	r23, Z+1	; 0x01
+    341c:	80 e0       	ldi	r24, 0x00	; 0
+    341e:	90 e0       	ldi	r25, 0x00	; 0
+    3420:	a3 01       	movw	r20, r6
+    3422:	f2 d3       	rcall	.+2020   	; 0x3c08 <__ultoa_invert>
+    3424:	c8 2e       	mov	r12, r24
+    3426:	c6 18       	sub	r12, r6
+    3428:	0f 77       	andi	r16, 0x7F	; 127
+    342a:	90 2e       	mov	r9, r16
+    342c:	96 fe       	sbrs	r9, 6
+    342e:	0b c0       	rjmp	.+22     	; 0x3446 <vfprintf+0x56a>
+    3430:	09 2d       	mov	r16, r9
+    3432:	0e 7f       	andi	r16, 0xFE	; 254
+    3434:	c1 16       	cp	r12, r17
+    3436:	50 f4       	brcc	.+20     	; 0x344c <vfprintf+0x570>
+    3438:	94 fe       	sbrs	r9, 4
+    343a:	0a c0       	rjmp	.+20     	; 0x3450 <vfprintf+0x574>
+    343c:	92 fc       	sbrc	r9, 2
+    343e:	08 c0       	rjmp	.+16     	; 0x3450 <vfprintf+0x574>
+    3440:	09 2d       	mov	r16, r9
+    3442:	0e 7e       	andi	r16, 0xEE	; 238
+    3444:	05 c0       	rjmp	.+10     	; 0x3450 <vfprintf+0x574>
+    3446:	dc 2c       	mov	r13, r12
+    3448:	09 2d       	mov	r16, r9
+    344a:	03 c0       	rjmp	.+6      	; 0x3452 <vfprintf+0x576>
+    344c:	dc 2c       	mov	r13, r12
+    344e:	01 c0       	rjmp	.+2      	; 0x3452 <vfprintf+0x576>
+    3450:	d1 2e       	mov	r13, r17
+    3452:	04 ff       	sbrs	r16, 4
+    3454:	0d c0       	rjmp	.+26     	; 0x3470 <vfprintf+0x594>
+    3456:	fe 01       	movw	r30, r28
+    3458:	ec 0d       	add	r30, r12
+    345a:	f1 1d       	adc	r31, r1
+    345c:	80 81       	ld	r24, Z
+    345e:	80 33       	cpi	r24, 0x30	; 48
+    3460:	11 f4       	brne	.+4      	; 0x3466 <vfprintf+0x58a>
+    3462:	09 7e       	andi	r16, 0xE9	; 233
+    3464:	09 c0       	rjmp	.+18     	; 0x3478 <vfprintf+0x59c>
+    3466:	02 ff       	sbrs	r16, 2
+    3468:	06 c0       	rjmp	.+12     	; 0x3476 <vfprintf+0x59a>
+    346a:	d3 94       	inc	r13
+    346c:	d3 94       	inc	r13
+    346e:	04 c0       	rjmp	.+8      	; 0x3478 <vfprintf+0x59c>
+    3470:	80 2f       	mov	r24, r16
+    3472:	86 78       	andi	r24, 0x86	; 134
+    3474:	09 f0       	breq	.+2      	; 0x3478 <vfprintf+0x59c>
+    3476:	d3 94       	inc	r13
+    3478:	03 fd       	sbrc	r16, 3
+    347a:	10 c0       	rjmp	.+32     	; 0x349c <vfprintf+0x5c0>
+    347c:	00 ff       	sbrs	r16, 0
+    347e:	06 c0       	rjmp	.+12     	; 0x348c <vfprintf+0x5b0>
+    3480:	1c 2d       	mov	r17, r12
+    3482:	d5 14       	cp	r13, r5
+    3484:	78 f4       	brcc	.+30     	; 0x34a4 <vfprintf+0x5c8>
+    3486:	15 0d       	add	r17, r5
+    3488:	1d 19       	sub	r17, r13
+    348a:	0c c0       	rjmp	.+24     	; 0x34a4 <vfprintf+0x5c8>
+    348c:	d5 14       	cp	r13, r5
+    348e:	50 f4       	brcc	.+20     	; 0x34a4 <vfprintf+0x5c8>
+    3490:	b7 01       	movw	r22, r14
+    3492:	80 e2       	ldi	r24, 0x20	; 32
+    3494:	90 e0       	ldi	r25, 0x00	; 0
+    3496:	4a d3       	rcall	.+1684   	; 0x3b2c <fputc>
+    3498:	d3 94       	inc	r13
+    349a:	f8 cf       	rjmp	.-16     	; 0x348c <vfprintf+0x5b0>
+    349c:	d5 14       	cp	r13, r5
+    349e:	10 f4       	brcc	.+4      	; 0x34a4 <vfprintf+0x5c8>
+    34a0:	5d 18       	sub	r5, r13
+    34a2:	01 c0       	rjmp	.+2      	; 0x34a6 <vfprintf+0x5ca>
+    34a4:	51 2c       	mov	r5, r1
+    34a6:	04 ff       	sbrs	r16, 4
+    34a8:	0f c0       	rjmp	.+30     	; 0x34c8 <vfprintf+0x5ec>
+    34aa:	b7 01       	movw	r22, r14
+    34ac:	80 e3       	ldi	r24, 0x30	; 48
+    34ae:	90 e0       	ldi	r25, 0x00	; 0
+    34b0:	3d d3       	rcall	.+1658   	; 0x3b2c <fputc>
+    34b2:	02 ff       	sbrs	r16, 2
+    34b4:	16 c0       	rjmp	.+44     	; 0x34e2 <vfprintf+0x606>
+    34b6:	01 fd       	sbrc	r16, 1
+    34b8:	03 c0       	rjmp	.+6      	; 0x34c0 <vfprintf+0x5e4>
+    34ba:	88 e7       	ldi	r24, 0x78	; 120
+    34bc:	90 e0       	ldi	r25, 0x00	; 0
+    34be:	02 c0       	rjmp	.+4      	; 0x34c4 <vfprintf+0x5e8>
+    34c0:	88 e5       	ldi	r24, 0x58	; 88
+    34c2:	90 e0       	ldi	r25, 0x00	; 0
+    34c4:	b7 01       	movw	r22, r14
+    34c6:	0c c0       	rjmp	.+24     	; 0x34e0 <vfprintf+0x604>
+    34c8:	80 2f       	mov	r24, r16
+    34ca:	86 78       	andi	r24, 0x86	; 134
+    34cc:	51 f0       	breq	.+20     	; 0x34e2 <vfprintf+0x606>
+    34ce:	01 ff       	sbrs	r16, 1
+    34d0:	02 c0       	rjmp	.+4      	; 0x34d6 <vfprintf+0x5fa>
+    34d2:	8b e2       	ldi	r24, 0x2B	; 43
+    34d4:	01 c0       	rjmp	.+2      	; 0x34d8 <vfprintf+0x5fc>
+    34d6:	80 e2       	ldi	r24, 0x20	; 32
+    34d8:	07 fd       	sbrc	r16, 7
+    34da:	8d e2       	ldi	r24, 0x2D	; 45
+    34dc:	b7 01       	movw	r22, r14
+    34de:	90 e0       	ldi	r25, 0x00	; 0
+    34e0:	25 d3       	rcall	.+1610   	; 0x3b2c <fputc>
+    34e2:	c1 16       	cp	r12, r17
+    34e4:	30 f4       	brcc	.+12     	; 0x34f2 <vfprintf+0x616>
+    34e6:	b7 01       	movw	r22, r14
+    34e8:	80 e3       	ldi	r24, 0x30	; 48
+    34ea:	90 e0       	ldi	r25, 0x00	; 0
+    34ec:	1f d3       	rcall	.+1598   	; 0x3b2c <fputc>
+    34ee:	11 50       	subi	r17, 0x01	; 1
+    34f0:	f8 cf       	rjmp	.-16     	; 0x34e2 <vfprintf+0x606>
+    34f2:	ca 94       	dec	r12
+    34f4:	f3 01       	movw	r30, r6
+    34f6:	ec 0d       	add	r30, r12
+    34f8:	f1 1d       	adc	r31, r1
+    34fa:	80 81       	ld	r24, Z
+    34fc:	b7 01       	movw	r22, r14
+    34fe:	90 e0       	ldi	r25, 0x00	; 0
+    3500:	15 d3       	rcall	.+1578   	; 0x3b2c <fputc>
+    3502:	c1 10       	cpse	r12, r1
+    3504:	f6 cf       	rjmp	.-20     	; 0x34f2 <vfprintf+0x616>
+    3506:	15 c0       	rjmp	.+42     	; 0x3532 <vfprintf+0x656>
+    3508:	f4 e0       	ldi	r31, 0x04	; 4
+    350a:	f5 15       	cp	r31, r5
+    350c:	50 f5       	brcc	.+84     	; 0x3562 <vfprintf+0x686>
+    350e:	84 e0       	ldi	r24, 0x04	; 4
+    3510:	58 1a       	sub	r5, r24
+    3512:	93 fe       	sbrs	r9, 3
+    3514:	1e c0       	rjmp	.+60     	; 0x3552 <vfprintf+0x676>
+    3516:	01 11       	cpse	r16, r1
+    3518:	25 c0       	rjmp	.+74     	; 0x3564 <vfprintf+0x688>
+    351a:	2c 85       	ldd	r18, Y+12	; 0x0c
+    351c:	23 ff       	sbrs	r18, 3
+    351e:	27 c0       	rjmp	.+78     	; 0x356e <vfprintf+0x692>
+    3520:	00 e9       	ldi	r16, 0x90	; 144
+    3522:	10 e0       	ldi	r17, 0x00	; 0
+    3524:	39 2d       	mov	r19, r9
+    3526:	30 71       	andi	r19, 0x10	; 16
+    3528:	93 2e       	mov	r9, r19
+    352a:	f8 01       	movw	r30, r16
+    352c:	84 91       	lpm	r24, Z
+    352e:	81 11       	cpse	r24, r1
+    3530:	21 c0       	rjmp	.+66     	; 0x3574 <vfprintf+0x698>
+    3532:	55 20       	and	r5, r5
+    3534:	09 f4       	brne	.+2      	; 0x3538 <vfprintf+0x65c>
+    3536:	fc cc       	rjmp	.-1544   	; 0x2f30 <vfprintf+0x54>
+    3538:	b7 01       	movw	r22, r14
+    353a:	80 e2       	ldi	r24, 0x20	; 32
+    353c:	90 e0       	ldi	r25, 0x00	; 0
+    353e:	f6 d2       	rcall	.+1516   	; 0x3b2c <fputc>
+    3540:	5a 94       	dec	r5
+    3542:	f7 cf       	rjmp	.-18     	; 0x3532 <vfprintf+0x656>
+    3544:	f7 01       	movw	r30, r14
+    3546:	86 81       	ldd	r24, Z+6	; 0x06
+    3548:	97 81       	ldd	r25, Z+7	; 0x07
+    354a:	23 c0       	rjmp	.+70     	; 0x3592 <vfprintf+0x6b6>
+    354c:	8f ef       	ldi	r24, 0xFF	; 255
+    354e:	9f ef       	ldi	r25, 0xFF	; 255
+    3550:	20 c0       	rjmp	.+64     	; 0x3592 <vfprintf+0x6b6>
+    3552:	b7 01       	movw	r22, r14
+    3554:	80 e2       	ldi	r24, 0x20	; 32
+    3556:	90 e0       	ldi	r25, 0x00	; 0
+    3558:	e9 d2       	rcall	.+1490   	; 0x3b2c <fputc>
+    355a:	5a 94       	dec	r5
+    355c:	51 10       	cpse	r5, r1
+    355e:	f9 cf       	rjmp	.-14     	; 0x3552 <vfprintf+0x676>
+    3560:	da cf       	rjmp	.-76     	; 0x3516 <vfprintf+0x63a>
+    3562:	51 2c       	mov	r5, r1
+    3564:	b7 01       	movw	r22, r14
+    3566:	80 2f       	mov	r24, r16
+    3568:	90 e0       	ldi	r25, 0x00	; 0
+    356a:	e0 d2       	rcall	.+1472   	; 0x3b2c <fputc>
+    356c:	d6 cf       	rjmp	.-84     	; 0x351a <vfprintf+0x63e>
+    356e:	04 e9       	ldi	r16, 0x94	; 148
+    3570:	10 e0       	ldi	r17, 0x00	; 0
+    3572:	d8 cf       	rjmp	.-80     	; 0x3524 <vfprintf+0x648>
+    3574:	91 10       	cpse	r9, r1
+    3576:	80 52       	subi	r24, 0x20	; 32
+    3578:	b7 01       	movw	r22, r14
+    357a:	90 e0       	ldi	r25, 0x00	; 0
+    357c:	d7 d2       	rcall	.+1454   	; 0x3b2c <fputc>
+    357e:	0f 5f       	subi	r16, 0xFF	; 255
+    3580:	1f 4f       	sbci	r17, 0xFF	; 255
+    3582:	d3 cf       	rjmp	.-90     	; 0x352a <vfprintf+0x64e>
+    3584:	23 e0       	ldi	r18, 0x03	; 3
+    3586:	25 15       	cp	r18, r5
+    3588:	10 f4       	brcc	.+4      	; 0x358e <vfprintf+0x6b2>
+    358a:	83 e0       	ldi	r24, 0x03	; 3
+    358c:	c1 cf       	rjmp	.-126    	; 0x3510 <vfprintf+0x634>
+    358e:	51 2c       	mov	r5, r1
+    3590:	c4 cf       	rjmp	.-120    	; 0x351a <vfprintf+0x63e>
+    3592:	60 96       	adiw	r28, 0x10	; 16
+    3594:	e2 e1       	ldi	r30, 0x12	; 18
+    3596:	44 c0       	rjmp	.+136    	; 0x3620 <__epilogue_restores__>
+
+00003598 <__divmodhi4>:
+    3598:	97 fb       	bst	r25, 7
+    359a:	07 2e       	mov	r0, r23
+    359c:	16 f4       	brtc	.+4      	; 0x35a2 <__divmodhi4+0xa>
+    359e:	00 94       	com	r0
+    35a0:	06 d0       	rcall	.+12     	; 0x35ae <__divmodhi4_neg1>
+    35a2:	77 fd       	sbrc	r23, 7
+    35a4:	08 d0       	rcall	.+16     	; 0x35b6 <__divmodhi4_neg2>
+    35a6:	57 d0       	rcall	.+174    	; 0x3656 <__udivmodhi4>
+    35a8:	07 fc       	sbrc	r0, 7
+    35aa:	05 d0       	rcall	.+10     	; 0x35b6 <__divmodhi4_neg2>
+    35ac:	3e f4       	brtc	.+14     	; 0x35bc <__divmodhi4_exit>
+
+000035ae <__divmodhi4_neg1>:
+    35ae:	90 95       	com	r25
+    35b0:	81 95       	neg	r24
+    35b2:	9f 4f       	sbci	r25, 0xFF	; 255
+    35b4:	08 95       	ret
+
+000035b6 <__divmodhi4_neg2>:
+    35b6:	70 95       	com	r23
+    35b8:	61 95       	neg	r22
+    35ba:	7f 4f       	sbci	r23, 0xFF	; 255
+
+000035bc <__divmodhi4_exit>:
+    35bc:	08 95       	ret
+
+000035be <__tablejump2__>:
+    35be:	ee 0f       	add	r30, r30
+    35c0:	ff 1f       	adc	r31, r31
+    35c2:	05 90       	lpm	r0, Z+
+    35c4:	f4 91       	lpm	r31, Z
+    35c6:	e0 2d       	mov	r30, r0
+    35c8:	09 94       	ijmp
+
+000035ca <__umulhisi3>:
+    35ca:	a2 9f       	mul	r26, r18
+    35cc:	b0 01       	movw	r22, r0
+    35ce:	b3 9f       	mul	r27, r19
+    35d0:	c0 01       	movw	r24, r0
+    35d2:	a3 9f       	mul	r26, r19
+    35d4:	70 0d       	add	r23, r0
+    35d6:	81 1d       	adc	r24, r1
+    35d8:	11 24       	eor	r1, r1
+    35da:	91 1d       	adc	r25, r1
+    35dc:	b2 9f       	mul	r27, r18
+    35de:	70 0d       	add	r23, r0
+    35e0:	81 1d       	adc	r24, r1
+    35e2:	11 24       	eor	r1, r1
+    35e4:	91 1d       	adc	r25, r1
+    35e6:	08 95       	ret
+
+000035e8 <__prologue_saves__>:
+    35e8:	2f 92       	push	r2
+    35ea:	3f 92       	push	r3
+    35ec:	4f 92       	push	r4
+    35ee:	5f 92       	push	r5
+    35f0:	6f 92       	push	r6
+    35f2:	7f 92       	push	r7
+    35f4:	8f 92       	push	r8
+    35f6:	9f 92       	push	r9
+    35f8:	af 92       	push	r10
+    35fa:	bf 92       	push	r11
+    35fc:	cf 92       	push	r12
+    35fe:	df 92       	push	r13
+    3600:	ef 92       	push	r14
+    3602:	ff 92       	push	r15
+    3604:	0f 93       	push	r16
+    3606:	1f 93       	push	r17
+    3608:	cf 93       	push	r28
+    360a:	df 93       	push	r29
+    360c:	cd b7       	in	r28, 0x3d	; 61
+    360e:	de b7       	in	r29, 0x3e	; 62
+    3610:	ca 1b       	sub	r28, r26
+    3612:	db 0b       	sbc	r29, r27
+    3614:	0f b6       	in	r0, 0x3f	; 63
+    3616:	f8 94       	cli
+    3618:	de bf       	out	0x3e, r29	; 62
+    361a:	0f be       	out	0x3f, r0	; 63
+    361c:	cd bf       	out	0x3d, r28	; 61
+    361e:	09 94       	ijmp
+
+00003620 <__epilogue_restores__>:
+    3620:	2a 88       	ldd	r2, Y+18	; 0x12
+    3622:	39 88       	ldd	r3, Y+17	; 0x11
+    3624:	48 88       	ldd	r4, Y+16	; 0x10
+    3626:	5f 84       	ldd	r5, Y+15	; 0x0f
+    3628:	6e 84       	ldd	r6, Y+14	; 0x0e
+    362a:	7d 84       	ldd	r7, Y+13	; 0x0d
+    362c:	8c 84       	ldd	r8, Y+12	; 0x0c
+    362e:	9b 84       	ldd	r9, Y+11	; 0x0b
+    3630:	aa 84       	ldd	r10, Y+10	; 0x0a
+    3632:	b9 84       	ldd	r11, Y+9	; 0x09
+    3634:	c8 84       	ldd	r12, Y+8	; 0x08
+    3636:	df 80       	ldd	r13, Y+7	; 0x07
+    3638:	ee 80       	ldd	r14, Y+6	; 0x06
+    363a:	fd 80       	ldd	r15, Y+5	; 0x05
+    363c:	0c 81       	ldd	r16, Y+4	; 0x04
+    363e:	1b 81       	ldd	r17, Y+3	; 0x03
+    3640:	aa 81       	ldd	r26, Y+2	; 0x02
+    3642:	b9 81       	ldd	r27, Y+1	; 0x01
+    3644:	ce 0f       	add	r28, r30
+    3646:	d1 1d       	adc	r29, r1
+    3648:	0f b6       	in	r0, 0x3f	; 63
+    364a:	f8 94       	cli
+    364c:	de bf       	out	0x3e, r29	; 62
+    364e:	0f be       	out	0x3f, r0	; 63
+    3650:	cd bf       	out	0x3d, r28	; 61
+    3652:	ed 01       	movw	r28, r26
+    3654:	08 95       	ret
+
+00003656 <__udivmodhi4>:
+    3656:	aa 1b       	sub	r26, r26
+    3658:	bb 1b       	sub	r27, r27
+    365a:	51 e1       	ldi	r21, 0x11	; 17
+    365c:	07 c0       	rjmp	.+14     	; 0x366c <__udivmodhi4_ep>
+
+0000365e <__udivmodhi4_loop>:
+    365e:	aa 1f       	adc	r26, r26
+    3660:	bb 1f       	adc	r27, r27
+    3662:	a6 17       	cp	r26, r22
+    3664:	b7 07       	cpc	r27, r23
+    3666:	10 f0       	brcs	.+4      	; 0x366c <__udivmodhi4_ep>
+    3668:	a6 1b       	sub	r26, r22
+    366a:	b7 0b       	sbc	r27, r23
+
+0000366c <__udivmodhi4_ep>:
+    366c:	88 1f       	adc	r24, r24
+    366e:	99 1f       	adc	r25, r25
+    3670:	5a 95       	dec	r21
+    3672:	a9 f7       	brne	.-22     	; 0x365e <__udivmodhi4_loop>
+    3674:	80 95       	com	r24
+    3676:	90 95       	com	r25
+    3678:	bc 01       	movw	r22, r24
+    367a:	cd 01       	movw	r24, r26
+    367c:	08 95       	ret
+
+0000367e <calloc>:
+    367e:	0f 93       	push	r16
+    3680:	1f 93       	push	r17
+    3682:	cf 93       	push	r28
+    3684:	df 93       	push	r29
+    3686:	86 9f       	mul	r24, r22
+    3688:	80 01       	movw	r16, r0
+    368a:	87 9f       	mul	r24, r23
+    368c:	10 0d       	add	r17, r0
+    368e:	96 9f       	mul	r25, r22
+    3690:	10 0d       	add	r17, r0
+    3692:	11 24       	eor	r1, r1
+    3694:	c8 01       	movw	r24, r16
+    3696:	0d d0       	rcall	.+26     	; 0x36b2 <malloc>
+    3698:	ec 01       	movw	r28, r24
+    369a:	00 97       	sbiw	r24, 0x00	; 0
+    369c:	21 f0       	breq	.+8      	; 0x36a6 <calloc+0x28>
+    369e:	a8 01       	movw	r20, r16
+    36a0:	60 e0       	ldi	r22, 0x00	; 0
+    36a2:	70 e0       	ldi	r23, 0x00	; 0
+    36a4:	13 d2       	rcall	.+1062   	; 0x3acc <memset>
+    36a6:	ce 01       	movw	r24, r28
+    36a8:	df 91       	pop	r29
+    36aa:	cf 91       	pop	r28
+    36ac:	1f 91       	pop	r17
+    36ae:	0f 91       	pop	r16
+    36b0:	08 95       	ret
+
+000036b2 <malloc>:
+    36b2:	0f 93       	push	r16
+    36b4:	1f 93       	push	r17
+    36b6:	cf 93       	push	r28
+    36b8:	df 93       	push	r29
+    36ba:	82 30       	cpi	r24, 0x02	; 2
+    36bc:	91 05       	cpc	r25, r1
+    36be:	10 f4       	brcc	.+4      	; 0x36c4 <malloc+0x12>
+    36c0:	82 e0       	ldi	r24, 0x02	; 2
+    36c2:	90 e0       	ldi	r25, 0x00	; 0
+    36c4:	e0 91 aa 06 	lds	r30, 0x06AA	; 0x8006aa <__flp>
+    36c8:	f0 91 ab 06 	lds	r31, 0x06AB	; 0x8006ab <__flp+0x1>
+    36cc:	20 e0       	ldi	r18, 0x00	; 0
+    36ce:	30 e0       	ldi	r19, 0x00	; 0
+    36d0:	a0 e0       	ldi	r26, 0x00	; 0
+    36d2:	b0 e0       	ldi	r27, 0x00	; 0
+    36d4:	30 97       	sbiw	r30, 0x00	; 0
+    36d6:	19 f1       	breq	.+70     	; 0x371e <malloc+0x6c>
+    36d8:	40 81       	ld	r20, Z
+    36da:	51 81       	ldd	r21, Z+1	; 0x01
+    36dc:	02 81       	ldd	r16, Z+2	; 0x02
+    36de:	13 81       	ldd	r17, Z+3	; 0x03
+    36e0:	48 17       	cp	r20, r24
+    36e2:	59 07       	cpc	r21, r25
+    36e4:	c8 f0       	brcs	.+50     	; 0x3718 <malloc+0x66>
+    36e6:	84 17       	cp	r24, r20
+    36e8:	95 07       	cpc	r25, r21
+    36ea:	69 f4       	brne	.+26     	; 0x3706 <malloc+0x54>
+    36ec:	10 97       	sbiw	r26, 0x00	; 0
+    36ee:	31 f0       	breq	.+12     	; 0x36fc <malloc+0x4a>
+    36f0:	12 96       	adiw	r26, 0x02	; 2
+    36f2:	0c 93       	st	X, r16
+    36f4:	12 97       	sbiw	r26, 0x02	; 2
+    36f6:	13 96       	adiw	r26, 0x03	; 3
+    36f8:	1c 93       	st	X, r17
+    36fa:	27 c0       	rjmp	.+78     	; 0x374a <malloc+0x98>
+    36fc:	00 93 aa 06 	sts	0x06AA, r16	; 0x8006aa <__flp>
+    3700:	10 93 ab 06 	sts	0x06AB, r17	; 0x8006ab <__flp+0x1>
+    3704:	22 c0       	rjmp	.+68     	; 0x374a <malloc+0x98>
+    3706:	21 15       	cp	r18, r1
+    3708:	31 05       	cpc	r19, r1
+    370a:	19 f0       	breq	.+6      	; 0x3712 <malloc+0x60>
+    370c:	42 17       	cp	r20, r18
+    370e:	53 07       	cpc	r21, r19
+    3710:	18 f4       	brcc	.+6      	; 0x3718 <malloc+0x66>
+    3712:	9a 01       	movw	r18, r20
+    3714:	bd 01       	movw	r22, r26
+    3716:	ef 01       	movw	r28, r30
+    3718:	df 01       	movw	r26, r30
+    371a:	f8 01       	movw	r30, r16
+    371c:	db cf       	rjmp	.-74     	; 0x36d4 <malloc+0x22>
+    371e:	21 15       	cp	r18, r1
+    3720:	31 05       	cpc	r19, r1
+    3722:	f9 f0       	breq	.+62     	; 0x3762 <malloc+0xb0>
+    3724:	28 1b       	sub	r18, r24
+    3726:	39 0b       	sbc	r19, r25
+    3728:	24 30       	cpi	r18, 0x04	; 4
+    372a:	31 05       	cpc	r19, r1
+    372c:	80 f4       	brcc	.+32     	; 0x374e <malloc+0x9c>
+    372e:	8a 81       	ldd	r24, Y+2	; 0x02
+    3730:	9b 81       	ldd	r25, Y+3	; 0x03
+    3732:	61 15       	cp	r22, r1
+    3734:	71 05       	cpc	r23, r1
+    3736:	21 f0       	breq	.+8      	; 0x3740 <malloc+0x8e>
+    3738:	fb 01       	movw	r30, r22
+    373a:	93 83       	std	Z+3, r25	; 0x03
+    373c:	82 83       	std	Z+2, r24	; 0x02
+    373e:	04 c0       	rjmp	.+8      	; 0x3748 <malloc+0x96>
+    3740:	90 93 ab 06 	sts	0x06AB, r25	; 0x8006ab <__flp+0x1>
+    3744:	80 93 aa 06 	sts	0x06AA, r24	; 0x8006aa <__flp>
+    3748:	fe 01       	movw	r30, r28
+    374a:	32 96       	adiw	r30, 0x02	; 2
+    374c:	44 c0       	rjmp	.+136    	; 0x37d6 <malloc+0x124>
+    374e:	fe 01       	movw	r30, r28
+    3750:	e2 0f       	add	r30, r18
+    3752:	f3 1f       	adc	r31, r19
+    3754:	81 93       	st	Z+, r24
+    3756:	91 93       	st	Z+, r25
+    3758:	22 50       	subi	r18, 0x02	; 2
+    375a:	31 09       	sbc	r19, r1
+    375c:	39 83       	std	Y+1, r19	; 0x01
+    375e:	28 83       	st	Y, r18
+    3760:	3a c0       	rjmp	.+116    	; 0x37d6 <malloc+0x124>
+    3762:	20 91 a8 06 	lds	r18, 0x06A8	; 0x8006a8 <__brkval>
+    3766:	30 91 a9 06 	lds	r19, 0x06A9	; 0x8006a9 <__brkval+0x1>
+    376a:	23 2b       	or	r18, r19
+    376c:	41 f4       	brne	.+16     	; 0x377e <malloc+0xcc>
+    376e:	20 91 02 01 	lds	r18, 0x0102	; 0x800102 <__malloc_heap_start>
+    3772:	30 91 03 01 	lds	r19, 0x0103	; 0x800103 <__malloc_heap_start+0x1>
+    3776:	30 93 a9 06 	sts	0x06A9, r19	; 0x8006a9 <__brkval+0x1>
+    377a:	20 93 a8 06 	sts	0x06A8, r18	; 0x8006a8 <__brkval>
+    377e:	20 91 00 01 	lds	r18, 0x0100	; 0x800100 <__data_start>
+    3782:	30 91 01 01 	lds	r19, 0x0101	; 0x800101 <__data_start+0x1>
+    3786:	21 15       	cp	r18, r1
+    3788:	31 05       	cpc	r19, r1
+    378a:	41 f4       	brne	.+16     	; 0x379c <malloc+0xea>
+    378c:	2d b7       	in	r18, 0x3d	; 61
+    378e:	3e b7       	in	r19, 0x3e	; 62
+    3790:	40 91 04 01 	lds	r20, 0x0104	; 0x800104 <__malloc_margin>
+    3794:	50 91 05 01 	lds	r21, 0x0105	; 0x800105 <__malloc_margin+0x1>
+    3798:	24 1b       	sub	r18, r20
+    379a:	35 0b       	sbc	r19, r21
+    379c:	e0 91 a8 06 	lds	r30, 0x06A8	; 0x8006a8 <__brkval>
+    37a0:	f0 91 a9 06 	lds	r31, 0x06A9	; 0x8006a9 <__brkval+0x1>
+    37a4:	e2 17       	cp	r30, r18
+    37a6:	f3 07       	cpc	r31, r19
+    37a8:	a0 f4       	brcc	.+40     	; 0x37d2 <malloc+0x120>
+    37aa:	2e 1b       	sub	r18, r30
+    37ac:	3f 0b       	sbc	r19, r31
+    37ae:	28 17       	cp	r18, r24
+    37b0:	39 07       	cpc	r19, r25
+    37b2:	78 f0       	brcs	.+30     	; 0x37d2 <malloc+0x120>
+    37b4:	ac 01       	movw	r20, r24
+    37b6:	4e 5f       	subi	r20, 0xFE	; 254
+    37b8:	5f 4f       	sbci	r21, 0xFF	; 255
+    37ba:	24 17       	cp	r18, r20
+    37bc:	35 07       	cpc	r19, r21
+    37be:	48 f0       	brcs	.+18     	; 0x37d2 <malloc+0x120>
+    37c0:	4e 0f       	add	r20, r30
+    37c2:	5f 1f       	adc	r21, r31
+    37c4:	50 93 a9 06 	sts	0x06A9, r21	; 0x8006a9 <__brkval+0x1>
+    37c8:	40 93 a8 06 	sts	0x06A8, r20	; 0x8006a8 <__brkval>
+    37cc:	81 93       	st	Z+, r24
+    37ce:	91 93       	st	Z+, r25
+    37d0:	02 c0       	rjmp	.+4      	; 0x37d6 <malloc+0x124>
+    37d2:	e0 e0       	ldi	r30, 0x00	; 0
+    37d4:	f0 e0       	ldi	r31, 0x00	; 0
+    37d6:	cf 01       	movw	r24, r30
+    37d8:	df 91       	pop	r29
+    37da:	cf 91       	pop	r28
+    37dc:	1f 91       	pop	r17
+    37de:	0f 91       	pop	r16
+    37e0:	08 95       	ret
+
+000037e2 <free>:
+    37e2:	cf 93       	push	r28
+    37e4:	df 93       	push	r29
+    37e6:	00 97       	sbiw	r24, 0x00	; 0
+    37e8:	09 f4       	brne	.+2      	; 0x37ec <free+0xa>
+    37ea:	81 c0       	rjmp	.+258    	; 0x38ee <free+0x10c>
+    37ec:	fc 01       	movw	r30, r24
+    37ee:	32 97       	sbiw	r30, 0x02	; 2
+    37f0:	13 82       	std	Z+3, r1	; 0x03
+    37f2:	12 82       	std	Z+2, r1	; 0x02
+    37f4:	a0 91 aa 06 	lds	r26, 0x06AA	; 0x8006aa <__flp>
+    37f8:	b0 91 ab 06 	lds	r27, 0x06AB	; 0x8006ab <__flp+0x1>
+    37fc:	10 97       	sbiw	r26, 0x00	; 0
+    37fe:	81 f4       	brne	.+32     	; 0x3820 <free+0x3e>
+    3800:	20 81       	ld	r18, Z
+    3802:	31 81       	ldd	r19, Z+1	; 0x01
+    3804:	82 0f       	add	r24, r18
+    3806:	93 1f       	adc	r25, r19
+    3808:	20 91 a8 06 	lds	r18, 0x06A8	; 0x8006a8 <__brkval>
+    380c:	30 91 a9 06 	lds	r19, 0x06A9	; 0x8006a9 <__brkval+0x1>
+    3810:	28 17       	cp	r18, r24
+    3812:	39 07       	cpc	r19, r25
+    3814:	51 f5       	brne	.+84     	; 0x386a <free+0x88>
+    3816:	f0 93 a9 06 	sts	0x06A9, r31	; 0x8006a9 <__brkval+0x1>
+    381a:	e0 93 a8 06 	sts	0x06A8, r30	; 0x8006a8 <__brkval>
+    381e:	67 c0       	rjmp	.+206    	; 0x38ee <free+0x10c>
+    3820:	ed 01       	movw	r28, r26
+    3822:	20 e0       	ldi	r18, 0x00	; 0
+    3824:	30 e0       	ldi	r19, 0x00	; 0
+    3826:	ce 17       	cp	r28, r30
+    3828:	df 07       	cpc	r29, r31
+    382a:	40 f4       	brcc	.+16     	; 0x383c <free+0x5a>
+    382c:	4a 81       	ldd	r20, Y+2	; 0x02
+    382e:	5b 81       	ldd	r21, Y+3	; 0x03
+    3830:	9e 01       	movw	r18, r28
+    3832:	41 15       	cp	r20, r1
+    3834:	51 05       	cpc	r21, r1
+    3836:	f1 f0       	breq	.+60     	; 0x3874 <free+0x92>
+    3838:	ea 01       	movw	r28, r20
+    383a:	f5 cf       	rjmp	.-22     	; 0x3826 <free+0x44>
+    383c:	d3 83       	std	Z+3, r29	; 0x03
+    383e:	c2 83       	std	Z+2, r28	; 0x02
+    3840:	40 81       	ld	r20, Z
+    3842:	51 81       	ldd	r21, Z+1	; 0x01
+    3844:	84 0f       	add	r24, r20
+    3846:	95 1f       	adc	r25, r21
+    3848:	c8 17       	cp	r28, r24
+    384a:	d9 07       	cpc	r29, r25
+    384c:	59 f4       	brne	.+22     	; 0x3864 <free+0x82>
+    384e:	88 81       	ld	r24, Y
+    3850:	99 81       	ldd	r25, Y+1	; 0x01
+    3852:	84 0f       	add	r24, r20
+    3854:	95 1f       	adc	r25, r21
+    3856:	02 96       	adiw	r24, 0x02	; 2
+    3858:	91 83       	std	Z+1, r25	; 0x01
+    385a:	80 83       	st	Z, r24
+    385c:	8a 81       	ldd	r24, Y+2	; 0x02
+    385e:	9b 81       	ldd	r25, Y+3	; 0x03
+    3860:	93 83       	std	Z+3, r25	; 0x03
+    3862:	82 83       	std	Z+2, r24	; 0x02
+    3864:	21 15       	cp	r18, r1
+    3866:	31 05       	cpc	r19, r1
+    3868:	29 f4       	brne	.+10     	; 0x3874 <free+0x92>
+    386a:	f0 93 ab 06 	sts	0x06AB, r31	; 0x8006ab <__flp+0x1>
+    386e:	e0 93 aa 06 	sts	0x06AA, r30	; 0x8006aa <__flp>
+    3872:	3d c0       	rjmp	.+122    	; 0x38ee <free+0x10c>
+    3874:	e9 01       	movw	r28, r18
+    3876:	fb 83       	std	Y+3, r31	; 0x03
+    3878:	ea 83       	std	Y+2, r30	; 0x02
+    387a:	49 91       	ld	r20, Y+
+    387c:	59 91       	ld	r21, Y+
+    387e:	c4 0f       	add	r28, r20
+    3880:	d5 1f       	adc	r29, r21
+    3882:	ec 17       	cp	r30, r28
+    3884:	fd 07       	cpc	r31, r29
+    3886:	61 f4       	brne	.+24     	; 0x38a0 <free+0xbe>
+    3888:	80 81       	ld	r24, Z
+    388a:	91 81       	ldd	r25, Z+1	; 0x01
+    388c:	84 0f       	add	r24, r20
+    388e:	95 1f       	adc	r25, r21
+    3890:	02 96       	adiw	r24, 0x02	; 2
+    3892:	e9 01       	movw	r28, r18
+    3894:	99 83       	std	Y+1, r25	; 0x01
+    3896:	88 83       	st	Y, r24
+    3898:	82 81       	ldd	r24, Z+2	; 0x02
+    389a:	93 81       	ldd	r25, Z+3	; 0x03
+    389c:	9b 83       	std	Y+3, r25	; 0x03
+    389e:	8a 83       	std	Y+2, r24	; 0x02
+    38a0:	e0 e0       	ldi	r30, 0x00	; 0
+    38a2:	f0 e0       	ldi	r31, 0x00	; 0
+    38a4:	12 96       	adiw	r26, 0x02	; 2
+    38a6:	8d 91       	ld	r24, X+
+    38a8:	9c 91       	ld	r25, X
+    38aa:	13 97       	sbiw	r26, 0x03	; 3
+    38ac:	00 97       	sbiw	r24, 0x00	; 0
+    38ae:	19 f0       	breq	.+6      	; 0x38b6 <free+0xd4>
+    38b0:	fd 01       	movw	r30, r26
+    38b2:	dc 01       	movw	r26, r24
+    38b4:	f7 cf       	rjmp	.-18     	; 0x38a4 <free+0xc2>
+    38b6:	8d 91       	ld	r24, X+
+    38b8:	9c 91       	ld	r25, X
+    38ba:	11 97       	sbiw	r26, 0x01	; 1
+    38bc:	9d 01       	movw	r18, r26
+    38be:	2e 5f       	subi	r18, 0xFE	; 254
+    38c0:	3f 4f       	sbci	r19, 0xFF	; 255
+    38c2:	82 0f       	add	r24, r18
+    38c4:	93 1f       	adc	r25, r19
+    38c6:	20 91 a8 06 	lds	r18, 0x06A8	; 0x8006a8 <__brkval>
+    38ca:	30 91 a9 06 	lds	r19, 0x06A9	; 0x8006a9 <__brkval+0x1>
+    38ce:	28 17       	cp	r18, r24
+    38d0:	39 07       	cpc	r19, r25
+    38d2:	69 f4       	brne	.+26     	; 0x38ee <free+0x10c>
+    38d4:	30 97       	sbiw	r30, 0x00	; 0
+    38d6:	29 f4       	brne	.+10     	; 0x38e2 <free+0x100>
+    38d8:	10 92 ab 06 	sts	0x06AB, r1	; 0x8006ab <__flp+0x1>
+    38dc:	10 92 aa 06 	sts	0x06AA, r1	; 0x8006aa <__flp>
+    38e0:	02 c0       	rjmp	.+4      	; 0x38e6 <free+0x104>
+    38e2:	13 82       	std	Z+3, r1	; 0x03
+    38e4:	12 82       	std	Z+2, r1	; 0x02
+    38e6:	b0 93 a9 06 	sts	0x06A9, r27	; 0x8006a9 <__brkval+0x1>
+    38ea:	a0 93 a8 06 	sts	0x06A8, r26	; 0x8006a8 <__brkval>
+    38ee:	df 91       	pop	r29
+    38f0:	cf 91       	pop	r28
+    38f2:	08 95       	ret
+
+000038f4 <__ftoa_engine>:
+    38f4:	28 30       	cpi	r18, 0x08	; 8
+    38f6:	08 f0       	brcs	.+2      	; 0x38fa <__ftoa_engine+0x6>
+    38f8:	27 e0       	ldi	r18, 0x07	; 7
+    38fa:	33 27       	eor	r19, r19
+    38fc:	da 01       	movw	r26, r20
+    38fe:	99 0f       	add	r25, r25
+    3900:	31 1d       	adc	r19, r1
+    3902:	87 fd       	sbrc	r24, 7
+    3904:	91 60       	ori	r25, 0x01	; 1
+    3906:	00 96       	adiw	r24, 0x00	; 0
+    3908:	61 05       	cpc	r22, r1
+    390a:	71 05       	cpc	r23, r1
+    390c:	39 f4       	brne	.+14     	; 0x391c <__ftoa_engine+0x28>
+    390e:	32 60       	ori	r19, 0x02	; 2
+    3910:	2e 5f       	subi	r18, 0xFE	; 254
+    3912:	3d 93       	st	X+, r19
+    3914:	30 e3       	ldi	r19, 0x30	; 48
+    3916:	2a 95       	dec	r18
+    3918:	e1 f7       	brne	.-8      	; 0x3912 <__ftoa_engine+0x1e>
+    391a:	08 95       	ret
+    391c:	9f 3f       	cpi	r25, 0xFF	; 255
+    391e:	30 f0       	brcs	.+12     	; 0x392c <__ftoa_engine+0x38>
+    3920:	80 38       	cpi	r24, 0x80	; 128
+    3922:	71 05       	cpc	r23, r1
+    3924:	61 05       	cpc	r22, r1
+    3926:	09 f0       	breq	.+2      	; 0x392a <__ftoa_engine+0x36>
+    3928:	3c 5f       	subi	r19, 0xFC	; 252
+    392a:	3c 5f       	subi	r19, 0xFC	; 252
+    392c:	3d 93       	st	X+, r19
+    392e:	91 30       	cpi	r25, 0x01	; 1
+    3930:	08 f0       	brcs	.+2      	; 0x3934 <__ftoa_engine+0x40>
+    3932:	80 68       	ori	r24, 0x80	; 128
+    3934:	91 1d       	adc	r25, r1
+    3936:	df 93       	push	r29
+    3938:	cf 93       	push	r28
+    393a:	1f 93       	push	r17
+    393c:	0f 93       	push	r16
+    393e:	ff 92       	push	r15
+    3940:	ef 92       	push	r14
+    3942:	19 2f       	mov	r17, r25
+    3944:	98 7f       	andi	r25, 0xF8	; 248
+    3946:	96 95       	lsr	r25
+    3948:	e9 2f       	mov	r30, r25
+    394a:	96 95       	lsr	r25
+    394c:	96 95       	lsr	r25
+    394e:	e9 0f       	add	r30, r25
+    3950:	ff 27       	eor	r31, r31
+    3952:	ee 50       	subi	r30, 0x0E	; 14
+    3954:	ff 4f       	sbci	r31, 0xFF	; 255
+    3956:	99 27       	eor	r25, r25
+    3958:	33 27       	eor	r19, r19
+    395a:	ee 24       	eor	r14, r14
+    395c:	ff 24       	eor	r15, r15
+    395e:	a7 01       	movw	r20, r14
+    3960:	e7 01       	movw	r28, r14
+    3962:	05 90       	lpm	r0, Z+
+    3964:	08 94       	sec
+    3966:	07 94       	ror	r0
+    3968:	28 f4       	brcc	.+10     	; 0x3974 <__ftoa_engine+0x80>
+    396a:	36 0f       	add	r19, r22
+    396c:	e7 1e       	adc	r14, r23
+    396e:	f8 1e       	adc	r15, r24
+    3970:	49 1f       	adc	r20, r25
+    3972:	51 1d       	adc	r21, r1
+    3974:	66 0f       	add	r22, r22
+    3976:	77 1f       	adc	r23, r23
+    3978:	88 1f       	adc	r24, r24
+    397a:	99 1f       	adc	r25, r25
+    397c:	06 94       	lsr	r0
+    397e:	a1 f7       	brne	.-24     	; 0x3968 <__ftoa_engine+0x74>
+    3980:	05 90       	lpm	r0, Z+
+    3982:	07 94       	ror	r0
+    3984:	28 f4       	brcc	.+10     	; 0x3990 <__ftoa_engine+0x9c>
+    3986:	e7 0e       	add	r14, r23
+    3988:	f8 1e       	adc	r15, r24
+    398a:	49 1f       	adc	r20, r25
+    398c:	56 1f       	adc	r21, r22
+    398e:	c1 1d       	adc	r28, r1
+    3990:	77 0f       	add	r23, r23
+    3992:	88 1f       	adc	r24, r24
+    3994:	99 1f       	adc	r25, r25
+    3996:	66 1f       	adc	r22, r22
+    3998:	06 94       	lsr	r0
+    399a:	a1 f7       	brne	.-24     	; 0x3984 <__ftoa_engine+0x90>
+    399c:	05 90       	lpm	r0, Z+
+    399e:	07 94       	ror	r0
+    39a0:	28 f4       	brcc	.+10     	; 0x39ac <__ftoa_engine+0xb8>
+    39a2:	f8 0e       	add	r15, r24
+    39a4:	49 1f       	adc	r20, r25
+    39a6:	56 1f       	adc	r21, r22
+    39a8:	c7 1f       	adc	r28, r23
+    39aa:	d1 1d       	adc	r29, r1
+    39ac:	88 0f       	add	r24, r24
+    39ae:	99 1f       	adc	r25, r25
+    39b0:	66 1f       	adc	r22, r22
+    39b2:	77 1f       	adc	r23, r23
+    39b4:	06 94       	lsr	r0
+    39b6:	a1 f7       	brne	.-24     	; 0x39a0 <__ftoa_engine+0xac>
+    39b8:	05 90       	lpm	r0, Z+
+    39ba:	07 94       	ror	r0
+    39bc:	20 f4       	brcc	.+8      	; 0x39c6 <__ftoa_engine+0xd2>
+    39be:	49 0f       	add	r20, r25
+    39c0:	56 1f       	adc	r21, r22
+    39c2:	c7 1f       	adc	r28, r23
+    39c4:	d8 1f       	adc	r29, r24
+    39c6:	99 0f       	add	r25, r25
+    39c8:	66 1f       	adc	r22, r22
+    39ca:	77 1f       	adc	r23, r23
+    39cc:	88 1f       	adc	r24, r24
+    39ce:	06 94       	lsr	r0
+    39d0:	a9 f7       	brne	.-22     	; 0x39bc <__ftoa_engine+0xc8>
+    39d2:	84 91       	lpm	r24, Z
+    39d4:	10 95       	com	r17
+    39d6:	17 70       	andi	r17, 0x07	; 7
+    39d8:	41 f0       	breq	.+16     	; 0x39ea <__ftoa_engine+0xf6>
+    39da:	d6 95       	lsr	r29
+    39dc:	c7 95       	ror	r28
+    39de:	57 95       	ror	r21
+    39e0:	47 95       	ror	r20
+    39e2:	f7 94       	ror	r15
+    39e4:	e7 94       	ror	r14
+    39e6:	1a 95       	dec	r17
+    39e8:	c1 f7       	brne	.-16     	; 0x39da <__ftoa_engine+0xe6>
+    39ea:	e8 e9       	ldi	r30, 0x98	; 152
+    39ec:	f0 e0       	ldi	r31, 0x00	; 0
+    39ee:	68 94       	set
+    39f0:	15 90       	lpm	r1, Z+
+    39f2:	15 91       	lpm	r17, Z+
+    39f4:	35 91       	lpm	r19, Z+
+    39f6:	65 91       	lpm	r22, Z+
+    39f8:	95 91       	lpm	r25, Z+
+    39fa:	05 90       	lpm	r0, Z+
+    39fc:	7f e2       	ldi	r23, 0x2F	; 47
+    39fe:	73 95       	inc	r23
+    3a00:	e1 18       	sub	r14, r1
+    3a02:	f1 0a       	sbc	r15, r17
+    3a04:	43 0b       	sbc	r20, r19
+    3a06:	56 0b       	sbc	r21, r22
+    3a08:	c9 0b       	sbc	r28, r25
+    3a0a:	d0 09       	sbc	r29, r0
+    3a0c:	c0 f7       	brcc	.-16     	; 0x39fe <__ftoa_engine+0x10a>
+    3a0e:	e1 0c       	add	r14, r1
+    3a10:	f1 1e       	adc	r15, r17
+    3a12:	43 1f       	adc	r20, r19
+    3a14:	56 1f       	adc	r21, r22
+    3a16:	c9 1f       	adc	r28, r25
+    3a18:	d0 1d       	adc	r29, r0
+    3a1a:	7e f4       	brtc	.+30     	; 0x3a3a <__ftoa_engine+0x146>
+    3a1c:	70 33       	cpi	r23, 0x30	; 48
+    3a1e:	11 f4       	brne	.+4      	; 0x3a24 <__ftoa_engine+0x130>
+    3a20:	8a 95       	dec	r24
+    3a22:	e6 cf       	rjmp	.-52     	; 0x39f0 <__ftoa_engine+0xfc>
+    3a24:	e8 94       	clt
+    3a26:	01 50       	subi	r16, 0x01	; 1
+    3a28:	30 f0       	brcs	.+12     	; 0x3a36 <__ftoa_engine+0x142>
+    3a2a:	08 0f       	add	r16, r24
+    3a2c:	0a f4       	brpl	.+2      	; 0x3a30 <__ftoa_engine+0x13c>
+    3a2e:	00 27       	eor	r16, r16
+    3a30:	02 17       	cp	r16, r18
+    3a32:	08 f4       	brcc	.+2      	; 0x3a36 <__ftoa_engine+0x142>
+    3a34:	20 2f       	mov	r18, r16
+    3a36:	23 95       	inc	r18
+    3a38:	02 2f       	mov	r16, r18
+    3a3a:	7a 33       	cpi	r23, 0x3A	; 58
+    3a3c:	28 f0       	brcs	.+10     	; 0x3a48 <__ftoa_engine+0x154>
+    3a3e:	79 e3       	ldi	r23, 0x39	; 57
+    3a40:	7d 93       	st	X+, r23
+    3a42:	2a 95       	dec	r18
+    3a44:	e9 f7       	brne	.-6      	; 0x3a40 <__ftoa_engine+0x14c>
+    3a46:	10 c0       	rjmp	.+32     	; 0x3a68 <__ftoa_engine+0x174>
+    3a48:	7d 93       	st	X+, r23
+    3a4a:	2a 95       	dec	r18
+    3a4c:	89 f6       	brne	.-94     	; 0x39f0 <__ftoa_engine+0xfc>
+    3a4e:	06 94       	lsr	r0
+    3a50:	97 95       	ror	r25
+    3a52:	67 95       	ror	r22
+    3a54:	37 95       	ror	r19
+    3a56:	17 95       	ror	r17
+    3a58:	17 94       	ror	r1
+    3a5a:	e1 18       	sub	r14, r1
+    3a5c:	f1 0a       	sbc	r15, r17
+    3a5e:	43 0b       	sbc	r20, r19
+    3a60:	56 0b       	sbc	r21, r22
+    3a62:	c9 0b       	sbc	r28, r25
+    3a64:	d0 09       	sbc	r29, r0
+    3a66:	98 f0       	brcs	.+38     	; 0x3a8e <__ftoa_engine+0x19a>
+    3a68:	23 95       	inc	r18
+    3a6a:	7e 91       	ld	r23, -X
+    3a6c:	73 95       	inc	r23
+    3a6e:	7a 33       	cpi	r23, 0x3A	; 58
+    3a70:	08 f0       	brcs	.+2      	; 0x3a74 <__ftoa_engine+0x180>
+    3a72:	70 e3       	ldi	r23, 0x30	; 48
+    3a74:	7c 93       	st	X, r23
+    3a76:	20 13       	cpse	r18, r16
+    3a78:	b8 f7       	brcc	.-18     	; 0x3a68 <__ftoa_engine+0x174>
+    3a7a:	7e 91       	ld	r23, -X
+    3a7c:	70 61       	ori	r23, 0x10	; 16
+    3a7e:	7d 93       	st	X+, r23
+    3a80:	30 f0       	brcs	.+12     	; 0x3a8e <__ftoa_engine+0x19a>
+    3a82:	83 95       	inc	r24
+    3a84:	71 e3       	ldi	r23, 0x31	; 49
+    3a86:	7d 93       	st	X+, r23
+    3a88:	70 e3       	ldi	r23, 0x30	; 48
+    3a8a:	2a 95       	dec	r18
+    3a8c:	e1 f7       	brne	.-8      	; 0x3a86 <__ftoa_engine+0x192>
+    3a8e:	11 24       	eor	r1, r1
+    3a90:	ef 90       	pop	r14
+    3a92:	ff 90       	pop	r15
+    3a94:	0f 91       	pop	r16
+    3a96:	1f 91       	pop	r17
+    3a98:	cf 91       	pop	r28
+    3a9a:	df 91       	pop	r29
+    3a9c:	99 27       	eor	r25, r25
+    3a9e:	87 fd       	sbrc	r24, 7
+    3aa0:	90 95       	com	r25
+    3aa2:	08 95       	ret
+
+00003aa4 <strnlen_P>:
+    3aa4:	fc 01       	movw	r30, r24
+    3aa6:	05 90       	lpm	r0, Z+
+    3aa8:	61 50       	subi	r22, 0x01	; 1
+    3aaa:	70 40       	sbci	r23, 0x00	; 0
+    3aac:	01 10       	cpse	r0, r1
+    3aae:	d8 f7       	brcc	.-10     	; 0x3aa6 <strnlen_P+0x2>
+    3ab0:	80 95       	com	r24
+    3ab2:	90 95       	com	r25
+    3ab4:	8e 0f       	add	r24, r30
+    3ab6:	9f 1f       	adc	r25, r31
+    3ab8:	08 95       	ret
+
+00003aba <memcpy>:
+    3aba:	fb 01       	movw	r30, r22
+    3abc:	dc 01       	movw	r26, r24
+    3abe:	02 c0       	rjmp	.+4      	; 0x3ac4 <memcpy+0xa>
+    3ac0:	01 90       	ld	r0, Z+
+    3ac2:	0d 92       	st	X+, r0
+    3ac4:	41 50       	subi	r20, 0x01	; 1
+    3ac6:	50 40       	sbci	r21, 0x00	; 0
+    3ac8:	d8 f7       	brcc	.-10     	; 0x3ac0 <memcpy+0x6>
+    3aca:	08 95       	ret
+
+00003acc <memset>:
+    3acc:	dc 01       	movw	r26, r24
+    3ace:	01 c0       	rjmp	.+2      	; 0x3ad2 <memset+0x6>
+    3ad0:	6d 93       	st	X+, r22
+    3ad2:	41 50       	subi	r20, 0x01	; 1
+    3ad4:	50 40       	sbci	r21, 0x00	; 0
+    3ad6:	e0 f7       	brcc	.-8      	; 0x3ad0 <memset+0x4>
+    3ad8:	08 95       	ret
+
+00003ada <strncpy>:
+    3ada:	fb 01       	movw	r30, r22
+    3adc:	dc 01       	movw	r26, r24
+    3ade:	41 50       	subi	r20, 0x01	; 1
+    3ae0:	50 40       	sbci	r21, 0x00	; 0
+    3ae2:	48 f0       	brcs	.+18     	; 0x3af6 <strncpy+0x1c>
+    3ae4:	01 90       	ld	r0, Z+
+    3ae6:	0d 92       	st	X+, r0
+    3ae8:	00 20       	and	r0, r0
+    3aea:	c9 f7       	brne	.-14     	; 0x3ade <strncpy+0x4>
+    3aec:	01 c0       	rjmp	.+2      	; 0x3af0 <strncpy+0x16>
+    3aee:	1d 92       	st	X+, r1
+    3af0:	41 50       	subi	r20, 0x01	; 1
+    3af2:	50 40       	sbci	r21, 0x00	; 0
+    3af4:	e0 f7       	brcc	.-8      	; 0x3aee <strncpy+0x14>
+    3af6:	08 95       	ret
+
+00003af8 <strnlen>:
+    3af8:	fc 01       	movw	r30, r24
+    3afa:	61 50       	subi	r22, 0x01	; 1
+    3afc:	70 40       	sbci	r23, 0x00	; 0
+    3afe:	01 90       	ld	r0, Z+
+    3b00:	01 10       	cpse	r0, r1
+    3b02:	d8 f7       	brcc	.-10     	; 0x3afa <strnlen+0x2>
+    3b04:	80 95       	com	r24
+    3b06:	90 95       	com	r25
+    3b08:	8e 0f       	add	r24, r30
+    3b0a:	9f 1f       	adc	r25, r31
+    3b0c:	08 95       	ret
+
+00003b0e <fprintf>:
+    3b0e:	a0 e0       	ldi	r26, 0x00	; 0
+    3b10:	b0 e0       	ldi	r27, 0x00	; 0
+    3b12:	ec e8       	ldi	r30, 0x8C	; 140
+    3b14:	fd e1       	ldi	r31, 0x1D	; 29
+    3b16:	78 cd       	rjmp	.-1296   	; 0x3608 <__prologue_saves__+0x20>
+    3b18:	ae 01       	movw	r20, r28
+    3b1a:	47 5f       	subi	r20, 0xF7	; 247
+    3b1c:	5f 4f       	sbci	r21, 0xFF	; 255
+    3b1e:	6f 81       	ldd	r22, Y+7	; 0x07
+    3b20:	78 85       	ldd	r23, Y+8	; 0x08
+    3b22:	8d 81       	ldd	r24, Y+5	; 0x05
+    3b24:	9e 81       	ldd	r25, Y+6	; 0x06
+    3b26:	da d9       	rcall	.-3148   	; 0x2edc <vfprintf>
+    3b28:	e2 e0       	ldi	r30, 0x02	; 2
+    3b2a:	8a cd       	rjmp	.-1260   	; 0x3640 <__epilogue_restores__+0x20>
+
+00003b2c <fputc>:
+    3b2c:	0f 93       	push	r16
+    3b2e:	1f 93       	push	r17
+    3b30:	cf 93       	push	r28
+    3b32:	df 93       	push	r29
+    3b34:	fb 01       	movw	r30, r22
+    3b36:	23 81       	ldd	r18, Z+3	; 0x03
+    3b38:	21 fd       	sbrc	r18, 1
+    3b3a:	03 c0       	rjmp	.+6      	; 0x3b42 <fputc+0x16>
+    3b3c:	8f ef       	ldi	r24, 0xFF	; 255
+    3b3e:	9f ef       	ldi	r25, 0xFF	; 255
+    3b40:	2c c0       	rjmp	.+88     	; 0x3b9a <fputc+0x6e>
+    3b42:	22 ff       	sbrs	r18, 2
+    3b44:	16 c0       	rjmp	.+44     	; 0x3b72 <fputc+0x46>
+    3b46:	46 81       	ldd	r20, Z+6	; 0x06
+    3b48:	57 81       	ldd	r21, Z+7	; 0x07
+    3b4a:	24 81       	ldd	r18, Z+4	; 0x04
+    3b4c:	35 81       	ldd	r19, Z+5	; 0x05
+    3b4e:	42 17       	cp	r20, r18
+    3b50:	53 07       	cpc	r21, r19
+    3b52:	44 f4       	brge	.+16     	; 0x3b64 <fputc+0x38>
+    3b54:	a0 81       	ld	r26, Z
+    3b56:	b1 81       	ldd	r27, Z+1	; 0x01
+    3b58:	9d 01       	movw	r18, r26
+    3b5a:	2f 5f       	subi	r18, 0xFF	; 255
+    3b5c:	3f 4f       	sbci	r19, 0xFF	; 255
+    3b5e:	31 83       	std	Z+1, r19	; 0x01
+    3b60:	20 83       	st	Z, r18
+    3b62:	8c 93       	st	X, r24
+    3b64:	26 81       	ldd	r18, Z+6	; 0x06
+    3b66:	37 81       	ldd	r19, Z+7	; 0x07
+    3b68:	2f 5f       	subi	r18, 0xFF	; 255
+    3b6a:	3f 4f       	sbci	r19, 0xFF	; 255
+    3b6c:	37 83       	std	Z+7, r19	; 0x07
+    3b6e:	26 83       	std	Z+6, r18	; 0x06
+    3b70:	14 c0       	rjmp	.+40     	; 0x3b9a <fputc+0x6e>
+    3b72:	8b 01       	movw	r16, r22
+    3b74:	ec 01       	movw	r28, r24
+    3b76:	fb 01       	movw	r30, r22
+    3b78:	00 84       	ldd	r0, Z+8	; 0x08
+    3b7a:	f1 85       	ldd	r31, Z+9	; 0x09
+    3b7c:	e0 2d       	mov	r30, r0
+    3b7e:	09 95       	icall
+    3b80:	89 2b       	or	r24, r25
+    3b82:	e1 f6       	brne	.-72     	; 0x3b3c <fputc+0x10>
+    3b84:	d8 01       	movw	r26, r16
+    3b86:	16 96       	adiw	r26, 0x06	; 6
+    3b88:	8d 91       	ld	r24, X+
+    3b8a:	9c 91       	ld	r25, X
+    3b8c:	17 97       	sbiw	r26, 0x07	; 7
+    3b8e:	01 96       	adiw	r24, 0x01	; 1
+    3b90:	17 96       	adiw	r26, 0x07	; 7
+    3b92:	9c 93       	st	X, r25
+    3b94:	8e 93       	st	-X, r24
+    3b96:	16 97       	sbiw	r26, 0x06	; 6
+    3b98:	ce 01       	movw	r24, r28
+    3b9a:	df 91       	pop	r29
+    3b9c:	cf 91       	pop	r28
+    3b9e:	1f 91       	pop	r17
+    3ba0:	0f 91       	pop	r16
+    3ba2:	08 95       	ret
+
+00003ba4 <fwrite>:
+    3ba4:	a0 e0       	ldi	r26, 0x00	; 0
+    3ba6:	b0 e0       	ldi	r27, 0x00	; 0
+    3ba8:	e7 ed       	ldi	r30, 0xD7	; 215
+    3baa:	fd e1       	ldi	r31, 0x1D	; 29
+    3bac:	23 cd       	rjmp	.-1466   	; 0x35f4 <__prologue_saves__+0xc>
+    3bae:	5b 01       	movw	r10, r22
+    3bb0:	4a 01       	movw	r8, r20
+    3bb2:	79 01       	movw	r14, r18
+    3bb4:	d9 01       	movw	r26, r18
+    3bb6:	13 96       	adiw	r26, 0x03	; 3
+    3bb8:	2c 91       	ld	r18, X
+    3bba:	21 ff       	sbrs	r18, 1
+    3bbc:	1d c0       	rjmp	.+58     	; 0x3bf8 <fwrite+0x54>
+    3bbe:	c0 e0       	ldi	r28, 0x00	; 0
+    3bc0:	d0 e0       	ldi	r29, 0x00	; 0
+    3bc2:	c8 15       	cp	r28, r8
+    3bc4:	d9 05       	cpc	r29, r9
+    3bc6:	d9 f0       	breq	.+54     	; 0x3bfe <fwrite+0x5a>
+    3bc8:	8c 01       	movw	r16, r24
+    3bca:	6c 01       	movw	r12, r24
+    3bcc:	ca 0c       	add	r12, r10
+    3bce:	db 1c       	adc	r13, r11
+    3bd0:	c8 01       	movw	r24, r16
+    3bd2:	0c 15       	cp	r16, r12
+    3bd4:	1d 05       	cpc	r17, r13
+    3bd6:	71 f0       	breq	.+28     	; 0x3bf4 <fwrite+0x50>
+    3bd8:	0f 5f       	subi	r16, 0xFF	; 255
+    3bda:	1f 4f       	sbci	r17, 0xFF	; 255
+    3bdc:	d7 01       	movw	r26, r14
+    3bde:	18 96       	adiw	r26, 0x08	; 8
+    3be0:	ed 91       	ld	r30, X+
+    3be2:	fc 91       	ld	r31, X
+    3be4:	19 97       	sbiw	r26, 0x09	; 9
+    3be6:	b7 01       	movw	r22, r14
+    3be8:	dc 01       	movw	r26, r24
+    3bea:	8c 91       	ld	r24, X
+    3bec:	09 95       	icall
+    3bee:	89 2b       	or	r24, r25
+    3bf0:	79 f3       	breq	.-34     	; 0x3bd0 <fwrite+0x2c>
+    3bf2:	05 c0       	rjmp	.+10     	; 0x3bfe <fwrite+0x5a>
+    3bf4:	21 96       	adiw	r28, 0x01	; 1
+    3bf6:	e5 cf       	rjmp	.-54     	; 0x3bc2 <fwrite+0x1e>
+    3bf8:	80 e0       	ldi	r24, 0x00	; 0
+    3bfa:	90 e0       	ldi	r25, 0x00	; 0
+    3bfc:	01 c0       	rjmp	.+2      	; 0x3c00 <fwrite+0x5c>
+    3bfe:	ce 01       	movw	r24, r28
+    3c00:	cd b7       	in	r28, 0x3d	; 61
+    3c02:	de b7       	in	r29, 0x3e	; 62
+    3c04:	ec e0       	ldi	r30, 0x0C	; 12
+    3c06:	12 cd       	rjmp	.-1500   	; 0x362c <__epilogue_restores__+0xc>
+
+00003c08 <__ultoa_invert>:
+    3c08:	fa 01       	movw	r30, r20
+    3c0a:	aa 27       	eor	r26, r26
+    3c0c:	28 30       	cpi	r18, 0x08	; 8
+    3c0e:	51 f1       	breq	.+84     	; 0x3c64 <__ultoa_invert+0x5c>
+    3c10:	20 31       	cpi	r18, 0x10	; 16
+    3c12:	81 f1       	breq	.+96     	; 0x3c74 <__ultoa_invert+0x6c>
+    3c14:	e8 94       	clt
+    3c16:	6f 93       	push	r22
+    3c18:	6e 7f       	andi	r22, 0xFE	; 254
+    3c1a:	6e 5f       	subi	r22, 0xFE	; 254
+    3c1c:	7f 4f       	sbci	r23, 0xFF	; 255
+    3c1e:	8f 4f       	sbci	r24, 0xFF	; 255
+    3c20:	9f 4f       	sbci	r25, 0xFF	; 255
+    3c22:	af 4f       	sbci	r26, 0xFF	; 255
+    3c24:	b1 e0       	ldi	r27, 0x01	; 1
+    3c26:	3e d0       	rcall	.+124    	; 0x3ca4 <__ultoa_invert+0x9c>
+    3c28:	b4 e0       	ldi	r27, 0x04	; 4
+    3c2a:	3c d0       	rcall	.+120    	; 0x3ca4 <__ultoa_invert+0x9c>
+    3c2c:	67 0f       	add	r22, r23
+    3c2e:	78 1f       	adc	r23, r24
+    3c30:	89 1f       	adc	r24, r25
+    3c32:	9a 1f       	adc	r25, r26
+    3c34:	a1 1d       	adc	r26, r1
+    3c36:	68 0f       	add	r22, r24
+    3c38:	79 1f       	adc	r23, r25
+    3c3a:	8a 1f       	adc	r24, r26
+    3c3c:	91 1d       	adc	r25, r1
+    3c3e:	a1 1d       	adc	r26, r1
+    3c40:	6a 0f       	add	r22, r26
+    3c42:	71 1d       	adc	r23, r1
+    3c44:	81 1d       	adc	r24, r1
+    3c46:	91 1d       	adc	r25, r1
+    3c48:	a1 1d       	adc	r26, r1
+    3c4a:	20 d0       	rcall	.+64     	; 0x3c8c <__ultoa_invert+0x84>
+    3c4c:	09 f4       	brne	.+2      	; 0x3c50 <__ultoa_invert+0x48>
+    3c4e:	68 94       	set
+    3c50:	3f 91       	pop	r19
+    3c52:	2a e0       	ldi	r18, 0x0A	; 10
+    3c54:	26 9f       	mul	r18, r22
+    3c56:	11 24       	eor	r1, r1
+    3c58:	30 19       	sub	r19, r0
+    3c5a:	30 5d       	subi	r19, 0xD0	; 208
+    3c5c:	31 93       	st	Z+, r19
+    3c5e:	de f6       	brtc	.-74     	; 0x3c16 <__ultoa_invert+0xe>
+    3c60:	cf 01       	movw	r24, r30
+    3c62:	08 95       	ret
+    3c64:	46 2f       	mov	r20, r22
+    3c66:	47 70       	andi	r20, 0x07	; 7
+    3c68:	40 5d       	subi	r20, 0xD0	; 208
+    3c6a:	41 93       	st	Z+, r20
+    3c6c:	b3 e0       	ldi	r27, 0x03	; 3
+    3c6e:	0f d0       	rcall	.+30     	; 0x3c8e <__ultoa_invert+0x86>
+    3c70:	c9 f7       	brne	.-14     	; 0x3c64 <__ultoa_invert+0x5c>
+    3c72:	f6 cf       	rjmp	.-20     	; 0x3c60 <__ultoa_invert+0x58>
+    3c74:	46 2f       	mov	r20, r22
+    3c76:	4f 70       	andi	r20, 0x0F	; 15
+    3c78:	40 5d       	subi	r20, 0xD0	; 208
+    3c7a:	4a 33       	cpi	r20, 0x3A	; 58
+    3c7c:	18 f0       	brcs	.+6      	; 0x3c84 <__ultoa_invert+0x7c>
+    3c7e:	49 5d       	subi	r20, 0xD9	; 217
+    3c80:	31 fd       	sbrc	r19, 1
+    3c82:	40 52       	subi	r20, 0x20	; 32
+    3c84:	41 93       	st	Z+, r20
+    3c86:	02 d0       	rcall	.+4      	; 0x3c8c <__ultoa_invert+0x84>
+    3c88:	a9 f7       	brne	.-22     	; 0x3c74 <__ultoa_invert+0x6c>
+    3c8a:	ea cf       	rjmp	.-44     	; 0x3c60 <__ultoa_invert+0x58>
+    3c8c:	b4 e0       	ldi	r27, 0x04	; 4
+    3c8e:	a6 95       	lsr	r26
+    3c90:	97 95       	ror	r25
+    3c92:	87 95       	ror	r24
+    3c94:	77 95       	ror	r23
+    3c96:	67 95       	ror	r22
+    3c98:	ba 95       	dec	r27
+    3c9a:	c9 f7       	brne	.-14     	; 0x3c8e <__ultoa_invert+0x86>
+    3c9c:	00 97       	sbiw	r24, 0x00	; 0
+    3c9e:	61 05       	cpc	r22, r1
+    3ca0:	71 05       	cpc	r23, r1
+    3ca2:	08 95       	ret
+    3ca4:	9b 01       	movw	r18, r22
+    3ca6:	ac 01       	movw	r20, r24
+    3ca8:	0a 2e       	mov	r0, r26
+    3caa:	06 94       	lsr	r0
+    3cac:	57 95       	ror	r21
+    3cae:	47 95       	ror	r20
+    3cb0:	37 95       	ror	r19
+    3cb2:	27 95       	ror	r18
+    3cb4:	ba 95       	dec	r27
+    3cb6:	c9 f7       	brne	.-14     	; 0x3caa <__ultoa_invert+0xa2>
+    3cb8:	62 0f       	add	r22, r18
+    3cba:	73 1f       	adc	r23, r19
+    3cbc:	84 1f       	adc	r24, r20
+    3cbe:	95 1f       	adc	r25, r21
+    3cc0:	a0 1d       	adc	r26, r0
+    3cc2:	08 95       	ret
+
+00003cc4 <_exit>:
+    3cc4:	f8 94       	cli
+
+00003cc6 <__stop_program>:
+    3cc6:	ff cf       	rjmp	.-2      	; 0x3cc6 <__stop_program>

+ 1119 - 0
heater3/Debug/heater3.map

@@ -0,0 +1,1119 @@
+Archive member included to satisfy reference by file (symbol)
+
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o)
+                              heater3.o (__subsf3)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(cmpsf2.o)
+                              heater3.o (__ltsf2)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3.o)
+                              heater3.o (__divsf3)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
+                              heater3.o (__fixsfsi)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+                              heater3.o (__fixunssfsi)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+                              heater3.o (__floatunsisf)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(cmpsf2.o) (__fp_cmp)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_inf)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_nan)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscA)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscB)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_round.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_round)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_split3)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_zero)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(gesf2.o)
+                              heater3.o (__gesf2)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+                              heater3.o (__mulsf3)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+                              (vfprintf)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+                              heater3.o (__divmodhi4)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+                              C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o (exit)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+                              heater3.o (__tablejump2__)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+                              heater3.o (__do_copy_data)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+                              heater3.o (__do_clear_bss)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+                              heater3.o (__umulhisi3)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__prologue_saves__)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__epilogue_restores__)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o) (__udivmodhi4)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o)
+                              heater3.o (calloc)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o) (malloc)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__ftoa_engine)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (strnlen_P)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memcpy.o)
+                              heater3.o (memcpy)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memset.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o) (memset)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o)
+                              heater3.o (strncpy)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (strnlen)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fprintf.o)
+                              heater3.o (fprintf)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (fputc)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fwrite.o)
+                              heater3.o (fwrite)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+                              heater3.o (__iob)
+c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+                              c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__ultoa_invert)
+
+Allocating common symbols
+Common symbol       size              file
+
+rxbuf               0x28              heater3.o
+heater              0x26              heater3.o
+preset              0xa0              heater3.o
+fifo0               0x204             heater3.o
+__brkval            0x2               c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+rxdata              0xa4              heater3.o
+opamp               0x1a              heater3.o
+__flp               0x2               c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+__iob               0x6               c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+
+Discarded input sections
+
+ .data          0x00000000        0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ .bss           0x00000000        0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ .text          0x00000000        0x0 heater3.o
+ .data          0x00000000        0x0 heater3.o
+ .bss           0x00000000        0x0 heater3.o
+ .text          0x00000000        0x0 lcd-twi.o
+ .data          0x00000000        0x0 lcd-twi.o
+ .bss           0x00000000        0x0 lcd-twi.o
+ .text          0x00000000        0x0 potentiometers.o
+ .data          0x00000000        0x0 potentiometers.o
+ .bss           0x00000000        0x0 potentiometers.o
+ .text.SetOpampGain
+                0x00000000       0x52 potentiometers.o
+ .text.SetOpampShift
+                0x00000000       0x50 potentiometers.o
+ .text.RestoreGainShift
+                0x00000000       0x30 potentiometers.o
+ .text          0x00000000        0x0 saveload.o
+ .data          0x00000000        0x0 saveload.o
+ .bss           0x00000000        0x0 saveload.o
+ .text          0x00000000        0x0 tools.o
+ .data          0x00000000        0x0 tools.o
+ .bss           0x00000000        0x0 tools.o
+ .text.UInt8ToFloat
+                0x00000000       0x66 tools.o
+ .text.FloatToUInt8
+                0x00000000       0x6c tools.o
+ .debug_info    0x00000000      0x10c tools.o
+ .debug_abbrev  0x00000000       0x83 tools.o
+ .debug_loc     0x00000000      0x224 tools.o
+ .debug_aranges
+                0x00000000       0x28 tools.o
+ .debug_ranges  0x00000000       0x18 tools.o
+ .debug_line    0x00000000       0xca tools.o
+ .debug_str     0x00000000      0x1b5 tools.o
+ .comment       0x00000000       0x31 tools.o
+ .debug_frame   0x00000000       0x7c tools.o
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(cmpsf2.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(cmpsf2.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(cmpsf2.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_round.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_round.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_round.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(gesf2.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(gesf2.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(gesf2.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text.libgcc   0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memcpy.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memcpy.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memcpy.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memset.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memset.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memset.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fprintf.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fprintf.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fprintf.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+ .text          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+ .data          0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+ .bss           0x00000000        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+text             0x00000000         0x00020000         xr
+data             0x00800060         0x0000ffa0         rw !x
+eeprom           0x00810000         0x00010000         rw !x
+fuse             0x00820000         0x00000003         rw !x
+lock             0x00830000         0x00000400         rw !x
+signature        0x00840000         0x00000400         rw !x
+user_signatures  0x00850000         0x00000400         rw !x
+*default*        0x00000000         0xffffffff
+
+Linker script and memory map
+
+Address of section .data set to 0x800100
+LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+LOAD heater3.o
+LOAD lcd-twi.o
+LOAD potentiometers.o
+LOAD saveload.o
+LOAD tools.o
+START GROUP
+LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a
+END GROUP
+LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a
+START GROUP
+LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a
+LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a
+LOAD c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a
+LOAD C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5\libatmega644pa.a
+END GROUP
+                0x00020000                __TEXT_REGION_LENGTH__ = DEFINED (__TEXT_REGION_LENGTH__)?__TEXT_REGION_LENGTH__:0x20000
+                0x0000ffa0                __DATA_REGION_LENGTH__ = DEFINED (__DATA_REGION_LENGTH__)?__DATA_REGION_LENGTH__:0xffa0
+                0x00010000                __EEPROM_REGION_LENGTH__ = DEFINED (__EEPROM_REGION_LENGTH__)?__EEPROM_REGION_LENGTH__:0x10000
+                [0x00000003]                __FUSE_REGION_LENGTH__ = DEFINED (__FUSE_REGION_LENGTH__)?__FUSE_REGION_LENGTH__:0x400
+                0x00000400                __LOCK_REGION_LENGTH__ = DEFINED (__LOCK_REGION_LENGTH__)?__LOCK_REGION_LENGTH__:0x400
+                0x00000400                __SIGNATURE_REGION_LENGTH__ = DEFINED (__SIGNATURE_REGION_LENGTH__)?__SIGNATURE_REGION_LENGTH__:0x400
+                0x00000400                __USER_SIGNATURE_REGION_LENGTH__ = DEFINED (__USER_SIGNATURE_REGION_LENGTH__)?__USER_SIGNATURE_REGION_LENGTH__:0x400
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text           0x00000000     0x3cc8
+ *(.vectors)
+ .vectors       0x00000000       0x7c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+                0x00000000                __vector_default
+                0x00000000                __vectors
+ *(.vectors)
+ *(.progmem.gcc*)
+ .progmem.gcc_sw_table.ProcessCommand
+                0x0000007c       0x14 heater3.o
+                0x00000090                . = ALIGN (0x2)
+                0x00000090                __trampolines_start = .
+ *(.trampolines)
+ .trampolines   0x00000090        0x0 linker stubs
+ *(.trampolines*)
+                0x00000090                __trampolines_end = .
+ *libprintf_flt.a:*(.progmem.data)
+ .progmem.data  0x00000090        0x8 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ *libc.a:*(.progmem.data)
+ .progmem.data  0x00000098       0xfa c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ *(.progmem*)
+                0x00000192                . = ALIGN (0x2)
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+                0x00000192                __ctors_start = .
+ *(.ctors)
+                0x00000192                __ctors_end = .
+                0x00000192                __dtors_start = .
+ *(.dtors)
+                0x00000192                __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0         0x00000192        0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+                0x00000192                __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2         0x00000192        0xc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ .init4         0x0000019e       0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_copy_data.o)
+                0x0000019e                __do_copy_data
+ .init4         0x000001b4       0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_clear_bss.o)
+                0x000001b4                __do_clear_bss
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9         0x000001c4        0x8 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ *(.init9)
+ *(.text)
+ .text          0x000001cc        0x2 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+                0x000001cc                __vector_22
+                0x000001cc                __vector_28
+                0x000001cc                __vector_24
+                0x000001cc                __vector_12
+                0x000001cc                __bad_interrupt
+                0x000001cc                __vector_6
+                0x000001cc                __vector_3
+                0x000001cc                __vector_23
+                0x000001cc                __vector_30
+                0x000001cc                __vector_25
+                0x000001cc                __vector_11
+                0x000001cc                __vector_17
+                0x000001cc                __vector_19
+                0x000001cc                __vector_27
+                0x000001cc                __vector_5
+                0x000001cc                __vector_4
+                0x000001cc                __vector_9
+                0x000001cc                __vector_15
+                0x000001cc                __vector_29
+                0x000001cc                __vector_8
+                0x000001cc                __vector_26
+                0x000001cc                __vector_14
+                0x000001cc                __vector_10
+                0x000001cc                __vector_18
+                0x000001ce                . = ALIGN (0x2)
+ *(.text.*)
+ .text.uart_putchar
+                0x000001ce       0x48 heater3.o
+                0x000001ce                uart_putchar
+ .text.lcd_putchar
+                0x00000216       0x18 heater3.o
+                0x00000216                lcd_putchar
+ .text.SwitchHeating.part.0
+                0x0000022e       0x4a heater3.o
+ .text.__vector_7
+                0x00000278       0x36 heater3.o
+                0x00000278                __vector_7
+ .text.__vector_1
+                0x000002ae       0x5e heater3.o
+                0x000002ae                __vector_1
+ .text.__vector_2
+                0x0000030c       0x5e heater3.o
+                0x0000030c                __vector_2
+ .text.__vector_20
+                0x0000036a       0x3a heater3.o
+                0x0000036a                __vector_20
+ .text.__vector_21
+                0x000003a4       0x66 heater3.o
+                0x000003a4                __vector_21
+ .text.__vector_16
+                0x0000040a       0x1e heater3.o
+                0x0000040a                __vector_16
+ .text.__vector_13
+                0x00000428       0x1e heater3.o
+                0x00000428                __vector_13
+ .text.init     0x00000446       0xb0 heater3.o
+                0x00000446                init
+ .text.MAX_ReadData
+                0x000004f6      0x12a heater3.o
+                0x000004f6                MAX_ReadData
+ .text.CalculateTemp
+                0x00000620      0x174 heater3.o
+                0x00000620                CalculateTemp
+ .text.TMeasure
+                0x00000794       0x84 heater3.o
+                0x00000794                TMeasure
+ .text.CurrMeasure
+                0x00000818       0x6e heater3.o
+                0x00000818                CurrMeasure
+ .text.TransmitPresets
+                0x00000886      0x17a heater3.o
+                0x00000886                TransmitPresets
+ .text.Transmit
+                0x00000a00      0x138 heater3.o
+                0x00000a00                Transmit
+ .text.ResetMCU
+                0x00000b38        0xe heater3.o
+                0x00000b38                ResetMCU
+ .text.SwitchHeating
+                0x00000b46       0x52 heater3.o
+                0x00000b46                SwitchHeating
+ .text.VoltageMeasure
+                0x00000b98       0xae heater3.o
+                0x00000b98                VoltageMeasure
+ .text.CircuitDetect
+                0x00000c46      0x156 heater3.o
+                0x00000c46                CircuitDetect
+ .text.AutoCalibration
+                0x00000d9c      0xa6e heater3.o
+                0x00000d9c                AutoCalibration
+ .text.ProcessCommand
+                0x0000180a      0x1b2 heater3.o
+                0x0000180a                ProcessCommand
+ .text.UARTDataAvail
+                0x000019bc       0xe4 heater3.o
+                0x000019bc                UARTDataAvail
+ .text.ManualCalibration
+                0x00001aa0      0x166 heater3.o
+                0x00001aa0                ManualCalibration
+ .text.LoadingScreen
+                0x00001c06       0x8e heater3.o
+                0x00001c06                LoadingScreen
+ .text.startup.main
+                0x00001c94      0x81e heater3.o
+                0x00001c94                main
+ .text.I2C_SendByte
+                0x000024b2       0x5a lcd-twi.o
+                0x000024b2                I2C_SendByte
+ .text.LCD_SendData
+                0x0000250c       0x36 lcd-twi.o
+                0x0000250c                LCD_SendData
+ .text.LCD_SendCmd
+                0x00002542       0x4a lcd-twi.o
+                0x00002542                LCD_SendCmd
+ .text.LCD_SetPos
+                0x0000258c       0x10 lcd-twi.o
+                0x0000258c                LCD_SetPos
+ .text.LoadSymbols
+                0x0000259c       0x5a lcd-twi.o
+                0x0000259c                LoadSymbols
+ .text.LCD_Init
+                0x000025f6       0x4c lcd-twi.o
+                0x000025f6                LCD_Init
+ .text.POT_SendData
+                0x00002642       0x22 potentiometers.o
+                0x00002642                POT_SendData
+ .text.SetDriveVoltage
+                0x00002664       0x3e potentiometers.o
+                0x00002664                SetDriveVoltage
+ .text.SetInputRange
+                0x000026a2      0x124 potentiometers.o
+                0x000026a2                SetInputRange
+ .text.SetGainData
+                0x000027c6       0x5e potentiometers.o
+                0x000027c6                SetGainData
+ .text.SetShiftData
+                0x00002824       0x5c potentiometers.o
+                0x00002824                SetShiftData
+ .text.SetDriveData
+                0x00002880       0x3e potentiometers.o
+                0x00002880                SetDriveData
+ .text.SwitchDrive
+                0x000028be       0x22 potentiometers.o
+                0x000028be                SwitchDrive
+ .text.LoadPrefs
+                0x000028e0       0x54 saveload.o
+                0x000028e0                LoadPrefs
+ .text.SavePrefs
+                0x00002934       0x48 saveload.o
+                0x00002934                SavePrefs
+ .text.LoadPreset
+                0x0000297c       0x86 saveload.o
+                0x0000297c                LoadPreset
+ .text.SavePreset
+                0x00002a02       0xa4 saveload.o
+                0x00002a02                SavePreset
+ .text.avr-libc.fplib
+                0x00002aa6        0xa c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3.o)
+                0x00002aa6                __subsf3
+                0x00002aa8                __addsf3
+ .text.avr-libc.fplib
+                0x00002ab0       0xc0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+                0x00002aca                __addsf3x
+ .text.avr-libc.fplib
+                0x00002b70        0x8 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(cmpsf2.o)
+                0x00002b70                __nesf2
+                0x00002b70                __eqsf2
+                0x00002b70                __cmpsf2
+                0x00002b70                __ltsf2
+                0x00002b70                __lesf2
+ .text.avr-libc.fplib
+                0x00002b78        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3.o)
+                0x00002b78                __divsf3
+ .text.avr-libc.fplib
+                0x00002b7c       0xcc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+                0x00002b92                __divsf3x
+                0x00002b96                __divsf3_pse
+ .text.avr-libc.fplib
+                0x00002c48        0xa c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
+                0x00002c48                __fixsfsi
+ .text.avr-libc.fplib
+                0x00002c52       0x58 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+                0x00002c52                __fixunssfsi
+ .text.avr-libc.fplib
+                0x00002caa       0x7a c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+                0x00002caa                __floatunsisf
+                0x00002cae                __floatsisf
+ .text.avr-libc.fplib
+                0x00002d24       0x48 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
+                0x00002d24                __fp_cmp
+ .text.avr-libc.fplib
+                0x00002d6c        0xc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+                0x00002d6c                __fp_inf
+ .text.avr-libc.fplib
+                0x00002d78        0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+                0x00002d78                __fp_nan
+ .text.avr-libc.fplib
+                0x00002d7e        0xe c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+                0x00002d7e                __fp_pscA
+ .text.avr-libc.fplib
+                0x00002d8c        0xe c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+                0x00002d8c                __fp_pscB
+ .text.avr-libc.fplib
+                0x00002d9a       0x22 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_round.o)
+                0x00002d9a                __fp_round
+ .text.avr-libc.fplib
+                0x00002dbc       0x44 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+                0x00002dbc                __fp_split3
+                0x00002dcc                __fp_splitA
+ .text.avr-libc.fplib
+                0x00002e00        0xe c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+                0x00002e00                __fp_zero
+                0x00002e02                __fp_szero
+ .text.avr-libc.fplib
+                0x00002e0e        0x8 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(gesf2.o)
+                0x00002e0e                __gesf2
+                0x00002e0e                __gtsf2
+ .text.avr-libc.fplib
+                0x00002e16        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+                0x00002e16                __mulsf3
+ .text.avr-libc.fplib
+                0x00002e1a       0xc2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+                0x00002e2e                __mulsf3x
+                0x00002e32                __mulsf3_pse
+ .text.avr-libc
+                0x00002edc      0x6bc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+                0x00002edc                vfprintf
+ .text.libgcc.div
+                0x00003598       0x26 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_divmodhi4.o)
+                0x00003598                _div
+                0x00003598                __divmodhi4
+ .text.libgcc   0x000035be        0xc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_tablejump2.o)
+                0x000035be                __tablejump2__
+ .text.libgcc.mul
+                0x000035ca       0x1e c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_umulhisi3.o)
+                0x000035ca                __umulhisi3
+ .text.libgcc.prologue
+                0x000035e8       0x38 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_prologue.o)
+                0x000035e8                __prologue_saves__
+ .text.libgcc.prologue
+                0x00003620       0x36 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_epilogue.o)
+                0x00003620                __epilogue_restores__
+ .text.libgcc.div
+                0x00003656       0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_udivmodhi4.o)
+                0x00003656                __udivmodhi4
+ .text.avr-libc
+                0x0000367e       0x34 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o)
+                0x0000367e                calloc
+ .text.avr-libc
+                0x000036b2      0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+                0x000036b2                malloc
+                0x000037e2                free
+ .text.avr-libc
+                0x000038f4      0x1b0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+                0x000038f4                __ftoa_engine
+ .text.avr-libc
+                0x00003aa4       0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+                0x00003aa4                strnlen_P
+ .text.avr-libc
+                0x00003aba       0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memcpy.o)
+                0x00003aba                memcpy
+ .text.avr-libc
+                0x00003acc        0xe c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(memset.o)
+                0x00003acc                memset
+ .text.avr-libc
+                0x00003ada       0x1e c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strncpy.o)
+                0x00003ada                strncpy
+ .text.avr-libc
+                0x00003af8       0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(strnlen.o)
+                0x00003af8                strnlen
+ .text.avr-libc
+                0x00003b0e       0x1e c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fprintf.o)
+                0x00003b0e                fprintf
+ .text.avr-libc
+                0x00003b2c       0x78 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o)
+                0x00003b2c                fputc
+ .text.avr-libc
+                0x00003ba4       0x64 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fwrite.o)
+                0x00003ba4                fwrite
+ .text.avr-libc
+                0x00003c08       0xbc c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+                0x00003c08                __ultoa_invert
+                0x00003cc4                . = ALIGN (0x2)
+ *(.fini9)
+ .fini9         0x00003cc4        0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+                0x00003cc4                _exit
+                0x00003cc4                exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0         0x00003cc4        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avr5\libgcc.a(_exit.o)
+ *(.fini0)
+                0x00003cc8                _etext = .
+
+.data           0x00800100      0x1f2 load address 0x00003cc8
+                0x00800100                PROVIDE (__data_start, .)
+ *(.data)
+ .data          0x00800100        0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+                0x00800100                __malloc_heap_end
+                0x00800102                __malloc_heap_start
+                0x00800104                __malloc_margin
+ *(.data*)
+ .data.uart_stdout
+                0x00800106        0xe heater3.o
+ .data.lcd_stdout
+                0x00800114        0xe heater3.o
+ .data.cal_tmin
+                0x00800122        0x1 heater3.o
+                0x00800122                cal_tmin
+ .data.cal_tmax
+                0x00800123        0x1 heater3.o
+                0x00800123                cal_tmax
+ .data.lcd_stdout.2452
+                0x00800124        0xe saveload.o
+ *(.gnu.linkonce.d*)
+ *(.rodata)
+ *(.rodata*)
+ .rodata.str1.1
+                0x00800132      0x131 heater3.o
+                                0x13e (size before relaxing)
+ .rodata.cyrillic
+                0x00800263       0x40 heater3.o
+                0x00800263                cyrillic
+ .rodata.symbols
+                0x008002a3       0x40 lcd-twi.o
+                0x008002a3                symbols
+ .rodata.str1.1
+                0x008002e3        0xe saveload.o
+ *(.gnu.linkonce.r*)
+                0x008002f2                . = ALIGN (0x2)
+ *fill*         0x008002f1        0x1 
+                0x008002f2                _edata = .
+                0x008002f2                PROVIDE (__data_end, .)
+
+.bss            0x008002f2      0x3c0
+                0x008002f2                PROVIDE (__bss_start, .)
+ *(.bss)
+ *(.bss*)
+ .bss.rxcnt.2584
+                0x008002f2        0x1 heater3.o
+ .bss.txrequest
+                0x008002f3        0x1 heater3.o
+                0x008002f3                txrequest
+ .bss.tick2     0x008002f4        0x1 heater3.o
+                0x008002f4                tick2
+ .bss.tick1     0x008002f5        0x1 heater3.o
+                0x008002f5                tick1
+ .bss.count     0x008002f6        0x1 heater3.o
+                0x008002f6                count
+ .bss.btn_act   0x008002f7        0x1 heater3.o
+                0x008002f7                btn_act
+ *(COMMON)
+ COMMON         0x008002f8      0x3b0 heater3.o
+                0x008002f8                rxbuf
+                0x00800320                heater
+                0x00800346                preset
+                0x008003e6                fifo0
+                0x008005ea                rxdata
+                0x0080068e                opamp
+ COMMON         0x008006a8        0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+                0x008006a8                __brkval
+                0x008006aa                __flp
+ COMMON         0x008006ac        0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+                0x008006ac                __iob
+                0x008006b2                PROVIDE (__bss_end, .)
+                0x00003cc8                __data_load_start = LOADADDR (.data)
+                0x00003eba                __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit         0x008006b2        0x0
+                [!provide]                PROVIDE (__noinit_start, .)
+ *(.noinit*)
+                [!provide]                PROVIDE (__noinit_end, .)
+                0x008006b2                _end = .
+                0x008006b2                PROVIDE (__heap_start, .)
+
+.eeprom         0x00810000        0x0
+ *(.eeprom*)
+                0x00810000                __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.user_signatures
+ *(.user_signatures*)
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment        0x00000000       0x5c
+ *(.comment)
+ .comment       0x00000000       0x30 heater3.o
+                                 0x31 (size before relaxing)
+ .comment       0x00000030       0x31 lcd-twi.o
+ .comment       0x00000030       0x31 potentiometers.o
+ .comment       0x00000030       0x31 saveload.o
+ .comment       0x00000030       0x2c c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+                                 0x2d (size before relaxing)
+ .comment       0x0000005c       0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(calloc.o)
+ .comment       0x0000005c       0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(malloc.o)
+ .comment       0x0000005c       0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fprintf.o)
+ .comment       0x0000005c       0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .comment       0x0000005c       0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .comment       0x0000005c       0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5\libc.a(iob.o)
+
+.note.gnu.avr.deviceinfo
+                0x00000000       0x40
+ .note.gnu.avr.deviceinfo
+                0x00000000       0x40 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+
+.note.gnu.build-id
+ *(.note.gnu.build-id)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges  0x00000000      0x1d8
+ *(.debug_aranges)
+ .debug_aranges
+                0x00000000       0xf0 heater3.o
+ .debug_aranges
+                0x000000f0       0x48 lcd-twi.o
+ .debug_aranges
+                0x00000138       0x68 potentiometers.o
+ .debug_aranges
+                0x000001a0       0x38 saveload.o
+
+.debug_pubnames
+ *(.debug_pubnames)
+
+.debug_info     0x00000000     0x3ef3
+ *(.debug_info .gnu.linkonce.wi.*)
+ .debug_info    0x00000000      0x6cc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ .debug_info    0x000006cc     0x25e2 heater3.o
+ .debug_info    0x00002cae      0x53d lcd-twi.o
+ .debug_info    0x000031eb      0x6eb potentiometers.o
+ .debug_info    0x000038d6      0x61d saveload.o
+
+.debug_abbrev   0x00000000     0x1218
+ *(.debug_abbrev)
+ .debug_abbrev  0x00000000      0x66e C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ .debug_abbrev  0x0000066e      0x588 heater3.o
+ .debug_abbrev  0x00000bf6      0x1d3 lcd-twi.o
+ .debug_abbrev  0x00000dc9      0x246 potentiometers.o
+ .debug_abbrev  0x0000100f      0x209 saveload.o
+
+.debug_line     0x00000000     0x1e26
+ *(.debug_line .debug_line.* .debug_line_end)
+ .debug_line    0x00000000      0x151 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ .debug_line    0x00000151     0x14fb heater3.o
+ .debug_line    0x0000164c      0x2c3 lcd-twi.o
+ .debug_line    0x0000190f      0x276 potentiometers.o
+ .debug_line    0x00001b85      0x2a1 saveload.o
+
+.debug_frame    0x00000000      0x734
+ *(.debug_frame)
+ .debug_frame   0x00000000      0x460 heater3.o
+ .debug_frame   0x00000460       0xb8 lcd-twi.o
+ .debug_frame   0x00000518      0x18c potentiometers.o
+ .debug_frame   0x000006a4       0x90 saveload.o
+
+.debug_str      0x00000000      0xb2d
+ *(.debug_str)
+ .debug_str     0x00000000      0x252 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/gcc/dev/atmega644pa/avr5/crtatmega644pa.o
+ .debug_str     0x00000252      0x7e9 heater3.o
+                                0x859 (size before relaxing)
+ .debug_str     0x00000a3b       0x30 lcd-twi.o
+                                0x226 (size before relaxing)
+ .debug_str     0x00000a6b       0xa6 potentiometers.o
+                                0x387 (size before relaxing)
+ .debug_str     0x00000b11       0x1c saveload.o
+                                0x382 (size before relaxing)
+
+.debug_loc      0x00000000     0x349c
+ *(.debug_loc)
+ .debug_loc     0x00000000     0x26c9 heater3.o
+ .debug_loc     0x000026c9      0x380 lcd-twi.o
+ .debug_loc     0x00002a49      0x82c potentiometers.o
+ .debug_loc     0x00003275      0x227 saveload.o
+
+.debug_macinfo
+ *(.debug_macinfo)
+
+.debug_weaknames
+ *(.debug_weaknames)
+
+.debug_funcnames
+ *(.debug_funcnames)
+
+.debug_typenames
+ *(.debug_typenames)
+
+.debug_varnames
+ *(.debug_varnames)
+
+.debug_pubtypes
+ *(.debug_pubtypes)
+
+.debug_ranges   0x00000000      0x230
+ *(.debug_ranges)
+ .debug_ranges  0x00000000      0x160 heater3.o
+ .debug_ranges  0x00000160       0x38 lcd-twi.o
+ .debug_ranges  0x00000198       0x58 potentiometers.o
+ .debug_ranges  0x000001f0       0x40 saveload.o
+
+.debug_macro
+ *(.debug_macro)
+OUTPUT(heater3.elf elf32-avr)
+LOAD linker stubs

BIN
heater3/Debug/heater3.o


+ 1007 - 0
heater3/Debug/heater3.srec

@@ -0,0 +1,1007 @@
+S00F0000686561746572332E7372656369
+S1130000C8C0000054C1000081C10000DFC000006E
+S1130010DDC00000DBC00000D9C000002DC100001D
+S1130020D5C00000D3C00000D1C00000CFC0000084
+S1130030CDC00000F9C10000C9C00000C7C0000065
+S1130040E4C10000C3C00000C1C00000BFC0000084
+S11300508CC10000A7C10000B9C00000B7C00000F7
+S1130060B5C00000B3C00000B1C00000AFC00000C4
+S1130070ADC00000ABC00000A9C00000670C680C54
+S11300806D0C200C810C970CBE0CCC0C2E0C400C6F
+S11300906E616E00696E660000407A10F35A00A02B
+S11300A0724E18090010A5D4E80000E8764817003D
+S11300B000E40B54020000CA9A3B000000E1F5057D
+S11300C0000080969800000040420F000000A086C7
+S11300D001000000102700000000E80300000000F9
+S11300E06400000000000A0000000000010000009D
+S11300F000002C76D888DC674F0823DFC1DFAE59B7
+S1130100E1B1B796E5E3E453C63AE651997696E849
+S1130110E6C28426EB898C9B62ED407C6FFCEFBCCD
+S11301209C9F40F2BAA56FA5F490055A2AF75C93F8
+S11301306B6CF9676DC11BFCE0E40D47FEF520E62E
+S1130140B500D0ED902E0300943577050080841E11
+S1130150080000204E0A000000C80C333333330F6C
+S1130160986E12831141EF8D2114893BE65516CF09
+S1130170FEE6DB18D1844B381BF77C1D901DA4BB15
+S1130180E424203284725E228100C9F124ECA1E5CA
+S11301903D2711241FBECFEFD0E1DEBFCDBF12E05B
+S11301A0A0E0B1E0E8ECFCE302C005900D92A23FB0
+S11301B0B107D9F726E0A2EFB2E001C01D92A23B3D
+S11301C0B207E1F70E944A0E0C94621E19CFF8940C
+S11301D02091E8053091E9054091E6055091E70545
+S11301E0B901641B750BAB014115524081F0F90153
+S11301F0F170EA51FC4F80832F5F3F4F3093E90544
+S11302002093E8058091C10080628093C1007894B6
+S113021080E090E00895803C28F0E82FF0E0ED5570
+S1130220FE4F80810E94861280E090E0089568B1BC
+S1130230482F417050E0FA01369621E030E0D901B0
+S113024002C0AA0FBB1FEA95E2F79A2F9095962356
+S113025098B998B14E5F5F4F01C0220F4A95EAF7F3
+S1130260292B28B9B3E18B9FF0011124E05EFC4FE8
+S113027080818460808308951F920F920FB60F923D
+S113028011248F9381E08093F70289B182958F7056
+S1130290806F803F31F4F89480916000886180938E
+S11302A060008F910F900FBE0F901F9018951F92B2
+S11302B00F920FB60F9211248F93AF93BF93EF93C6
+S11302C0FF93F89488B1806C88B988B1837F88B92A
+S11302D04498A3E3B3E08C918B7F8C93E0E2F3E04A
+S11302E080818B7F80838C918D7F8C9380818D7FA7
+S11302F08083808188608083FF91EF91BF91AF916B
+S11303008F910F900FBE0F901F9018951F920F9210
+S11303100FB60F9211248F93AF93BF93EF93FF9374
+S1130320F89488B1806C88B988B1837F88B944987F
+S1130330E3E3F3E080818B7F8083A0E2B3E08C91E0
+S11303408B7F8C9380818D7F80838C918D7F8C9328
+S1130350808188608083FF91EF91BF91AF918F91ED
+S11303600F900FBE0F901F9018951F920F920FB60B
+S11303700F9211248F93EF93FF938091F6028F5F76
+S11303808093F602E091F602F0E08091C600E95015
+S1130390FD4F8083FF91EF918F910F900FBE0F90CF
+S11303A01F9018951F920F920FB60F9211242F933E
+S11303B03F938F939F93EF93FF938091E6059091E2
+S11303C0E7052091E8053091E90582179307B9F014
+S11303D0FC01F170EA51FC4F20812093C600019684
+S11303E09093E7058093E605FF91EF919F918F919C
+S11303F03F912F910F900FBE0F901F9018958091F1
+S1130400C1008F7D8093C100EFCF1F920F920FB672
+S11304100F9211248F9381E08093F5028F910F90B6
+S11304200FBE0F901F9018951F920F920FB60F9248
+S113043011248F9381E08093F4028F910F900FBE6B
+S11304400F901F90189584B7877F84BFE0E6F0E093
+S11304508081886180831082E9E6F0E080818A608F
+S113046080838DB383608DBB88B1806D88B987B17B
+S11304708C6D87B9599A519A1092C50086E280937F
+S1130480C40082E08093C00098E99093C10096E094
+S11304909093C20094B1976B94B995B1906B95B950
+S11304A090E59CBD94E09093B8009093BC0084BD0B
+S11304B090E897BD95E095BD80936E009DE0909384
+S11304C0810020E034E030938900209388008093F9
+S11304D06F00ECE7F0E08081806C808383E8809398
+S11304E07A008FEF80937E0088E08093680080EF2D
+S11304F08093730008950F931F93CF93DF9300D0DD
+S113050000D0CDB7DEB785B1887F866085B92C98D9
+S1130510FE0135969E012F5F3F4F9FEF9EBD0DB4A8
+S113052007FEFDCF8EB58293E217F307B9F72C9A35
+S11305300A8100933603009323031981612F629586
+S11305406F7070E080E090E00E94571620E030E089
+S113055048EC50E40E940B1720E030E048E452E4F9
+S11305600E94071787FD03C00F5F00932303812FA9
+S1130570817011FB992790F9892BD9F58091340367
+S1130580817F8093340380912103817F80932103B1
+S11305908B81482F42954F709C81592F5295507FE3
+S11305A0252F242B392F32953F7048E03427A90199
+S11305B05850509338034093370350932503409386
+S11305C0240386958695837049E1849FC001112494
+S11305D0C29734F02F5F37403093380320933703AA
+S11305E00F900F900F900F90DF91CF911F910F916B
+S11305F008951770110F80913403817F812B8093AC
+S1130600340380912103817F182B109321031092CE
+S11306103803109237031092250310922403E0CF7D
+S11306202F923F924F925F926F927F928F929F92FE
+S1130630AF92BF92CF92DF92EF92FF920F931F93EC
+S1130640CF93DF93262F30E040E5649FF00111241F
+S1130650EA5BFC4F028913890817190780F1E25BF2
+S1130660FF4F4081518184179507A8F486E990E0F3
+S1130670DF91CF911F910F91FF90EF90DF90CF907A
+S1130680BF90AF909F908F907F906F905F904F90AE
+S11306903F902F90089540E5649FF0011124E45A9F
+S11306A0FC4FC0E003C0008111813496801791078C
+S11306B048F4CF5FC031B9F78FEF9FEFD9CF80E017
+S11306C090E0D6CF1C01D0E07E0181E0E81AF10869
+S11306D084E1829F6001839FD00C1124EC0CFD1CEB
+S11306E0F701EE0FFF1FEE0FFF1FEA5AFC4F608168
+S11306F0718180E090E00E9455164B015C01F70186
+S1130700EE0FFF1FEE0FFF1FEA5BFC4F6289738938
+S113071080E090E00E9455162B013C01CC0DDD1DBC
+S1130720CC0FDD1FCC0FDD1FCA5ADC4F68817981E5
+S113073080E090E00E945516A50194010E94531593
+S11307406B017C01B10180E090E00E945516A30189
+S113075092010E9453159B01AC01C701B6010E948E
+S11307600B176B017C01B80180E090E00E945516E4
+S1130770A30192010E9453159B01AC01C701B6016C
+S11307800E94BC15A50194010E9454150E942416D0
+S1130790CB016ECFCF93DF93E82F80917C00982F0D
+S11307A0987F8E2F8170892B80937C008BE291E05F
+S11307B00197F1F700C000003AE040E050E080917A
+S11307C07A00806480937A0080917A0084FFFCCF61
+S11307D0809178002091790090E0922B480F591F66
+S11307E0315069F79A01ADECBCEC0E94E51A96957C
+S11307F08795969587959695879523E1E29FE001E5
+S11308001124C05EDC4F998788876E2F09DF9F8390
+S11308108E83DF91CF910895CF93C82F80917C0070
+S11308209C2F91709E5F887F892B80937C008BE244
+S113083091E00197F1F700C0000080917A00806494
+S113084080937A0080917A0084FFFCCF60917800D5
+S11308508091790070E0782B80E090E00E9455163A
+S11308602AE939E949E150E40E940B170E9429164C
+S113087023E1C29FF0011124E05EFC4F7787668775
+S1130880CB01CF910895F8948091E8059091E90502
+S11308902091E6053091E705AC01421B530B9A0108
+S11308A02115324081F0FC01F170EA51FC4F25E53D
+S11308B0208301969093E9058093E8058091C10017
+S11308C080628093C1007894F8948091E8059091B7
+S11308D0E9052091E6053091E705BC01621B730B25
+S11308E09B012115324081F0FC01F170EA51FC4F6B
+S11308F025E4208301969093E9058093E80580918F
+S1130900C10080628093C1007894F8948091E805D6
+S11309109091E9052091E6053091E705FC01E21B81
+S1130920F30B9F012115324081F0FC01F170EA5173
+S1130930FC4F25E8208301969093E9058093E80510
+S11309408091C10080628093C1007894ADE3B0E0EF
+S11309505FE19D012D50310932BD21BDF89A40B5AA
+S1130960F8948091E8059091E9056091E60570910D
+S1130970E705FC01E61BF70BBF016115724079F036
+S1130980FC01F170EA51FC4F408301969093E90514
+S11309908093E8058091C10080628093C1007894BF
+S11309A0540F2F5F3F4F2A173B07B1F6D901A05BC5
+S11309B0BF4FAD3048E0B40761F6F8948091E80584
+S11309C09091E9052091E6053091E705BC01621B91
+S11309D0730B9B012115324079F0FC01F170EA514F
+S11309E0FC4F508301969093E9058093E80580912C
+S11309F0C10080628093C10078941092F30208953C
+S1130A000F931F93CF93DF9364EA70E081E090E04B
+S1130A100E943F1BEC0185E588838091F3028A8361
+S1130A20833009F47EC008F47AC0853009F46FC0BD
+S1130A30863051F480EA8983E6E4F3E0DE0113961C
+S1130A4001900D928A95E1F750E080E090E08E01EC
+S1130A500D551F4FFE01E80FF91F4081F894809156
+S1130A60E8059091E9052091E6053091E705BC0180
+S1130A70621B730B9B012115324081F09C01317084
+S1130A802A513C4FD9014C9301969093E9058093E8
+S1130A90E8058091C10080628093C1007894D801F8
+S1130AA04C918081480F4C935F5F298130E02E5F29
+S1130AB03F4F852F90E02817390764F6F89480910A
+S1130AC0E8059091E9052091E6053091E705FC01E0
+S1130AD0E21BF30B9F012115324079F0FC01F17008
+S1130AE0EA51FC4F408301969093E9058093E80511
+S1130AF08091C10080628093C10078941092F302C7
+S1130B00CE01DF91CF911F910F910C94F11BBBDEAD
+S1130B10CE01DF91CF911F910F910C94F11B19829B
+S1130B2093CF86E28983E0E2F3E0DE01139601903D
+S1130B300D928A95E1F788CFF894809160008861DE
+S1130B4080936000FFCF611126C098B1482F417097
+S1130B5050E0BA016A5F7F4F21E030E0F90102C042
+S1130B60EE0FFF1F6A95E2F7BF01692B68B998B1D0
+S1130B704E5F5F4F01C0220F4A95EAF72095292363
+S1130B8028B993E1899FF0011124E05EFC4F808134
+S1130B908B7F808308954BCBCF92DF92EF92FF92AD
+S1130BA0CF93DF9390917C00987F282F2170922B14
+S1130BB090937C00EBE2F1E03197F1F700C0000084
+S1130BC090917A00906490937A0090917A0094FFC7
+S1130BD0FCCF6091780090917900C82FD0E070E04C
+S1130BE0792B80E090E00E9455162AE037ED43E22D
+S1130BF05BE30E940B176B017C012DE02C9FC0016D
+S1130C002D9F900D1124EC01C257D94F2AE43CE0EA
+S1130C1042E45FE369817A818B819C810E940B1796
+S1130C209B01AC01C701B6010E94BC152D813E8118
+S1130C304F8158850E945415DF91CF91FF90EF901A
+S1130C40DF90CF9008957F928F929F92AF92BF9240
+S1130C50CF92DF92EF92FF920F931F93CF93DF9384
+S1130C60C82FE82EF12C83E1C89FF0011124E05E27
+S1130C70FC4F7088C188D28840E050E0BA018C2FC4
+S1130C800E94321300E010E020E430E440E050E041
+S1130C90BA018C2F0E9451138C2F7EDF4B015C0113
+S1130CA020E030E040E450E40E94071718160CF4EA
+S1130CB06FC02DEC3CEC4CE45DE3C501B4010E9433
+S1130CC007171816A4F1D4E014E0672D8C2F0E94A6
+S1130CD0E3136C2D8C2F0E9412146D2D8C2F0E9407
+S1130CE0401483E18E9DF0018F9DF00D1124E05E90
+S1130CF0FC4F9D2F9295990F990F907C80818F7353
+S1130D00892B8083D695D69581818E7FD82BD183EC
+S1130D10812FDF91CF911F910F91FF90EF90DF9082
+S1130D20CF90BF90AF909F908F907F90089520E0D8
+S1130D3030E040EC5FE3C501B4010E94B815181619
+S1130D4014F26FEF8C2F0E94401461E08C2F0E94EC
+S1130D505F1487EB9BE00197F1F700C000008C2F34
+S1130D601BDF4B015C016D2D8C2F0E94401460E051
+S1130D708C2F0E945F142DEC3CEC4CE45EE3C50127
+S1130D80B4010E94B81587FF06C0D2E012E09DCFDF
+S1130D90D0E010E09ACFD3E013E097CF2F923F92A8
+S1130DA04F925F926F927F928F929F92AF92BF9277
+S1130DB0CF92DF92EF92FF920F931F93CF93DF9323
+S1130DC0CDB7DEB764970FB6F894DEBF0FBECDBFC4
+S1130DD0382E91DB832D37DF232D30E03A872987A6
+S1130DE033E1339EF0011124E05EFC4F8081982FA3
+S1130DF0929596959695937081818170880F880F4E
+S1130E00892B823041F18081982F92959695969501
+S1130E10937081818170880F880F892B8330D9F07A
+S1130E2080E090E064960FB6F894DEBF0FBECDBFAD
+S1130E30DF91CF911F910F91FF90EF90DF90CF90B2
+S1130E40BF90AF909F908F907F906F905F904F90E6
+S1130E503F902F90089583E169857A85869FA0014C
+S1130E60879F500D11245A834983FA01EF5DFC4F8B
+S1130E70808186958770A1F681E00E94A11200E02E
+S1130E8010E020E430E440E050E0BA01832D0E94F9
+S1130E90511340E050E0BA01832D0E9432138FE6D3
+S1130EA097E10197F1F700C00000C984DA849FEF4D
+S1130EB0C91AD90AA981BA81A05EBC4FBE83AD8389
+S1130EC07D01B6E0EB0EF11CAD80BE80E2E0AE0E1B
+S1130ED0B11C62E3862E61E0962E0D811E810C5FAB
+S1130EE01F4F78E4672E71E0772E05DB60E080E029
+S1130EF00E94C612D70111968C9111978F938C91F1
+S1130F008F93F50180811F928F93DF92CF929F92EE
+S1130F108F9224E131E03F932F930E94871D61E07B
+S1130F2080E00E94C612D80111968C9111978F937C
+S1130F308C918F937F926F92E4E1F1E0FF93EF93B2
+S1130F400E94871DD8014D905C908091220190E011
+S1130F500FB6F894DEBF0FBECDBF841595052CF2F5
+S1130F60832D1ADE2AE037ED43E25DE30E94541537
+S1130F706D877E87888B9A8B69837B878B83292EE9
+S1130F80AD81BE818C91982F92959695969593708C
+S1130F9011968C918170880F880F892B1F82823063
+S1130FA009F4F4C0832D43D98091230190E0019684
+S1130FB043E1E985FA854E9F90014F9F300D11243E
+S1130FC0A901405E5C4F5E834D83DA0114964D9116
+S1130FD05C911597841795070CF425C1E12CF12C2D
+S1130FE04D815E815C8B4B8B4A015EE0850E911CCA
+S1130FF0B9016F5D7C4F7E836D83CB88DC8874E0A0
+S1131000C70ED11C8DE0A985BA858A9F80018B9F6C
+S1131010100D11240956194F4BE7A42E41E0B42EAC
+S113102054E1652E51E0752E83C065DAAB89BC8925
+S11310308C91982F929596959695937011968C9184
+S11310408170880F880F892B09F4E7C0EB89FC892C
+S11310508081982F92959695969593708181817051
+S1131060880F880F892B843009F4D7C0AD81BE81E5
+S11310708C918695877009F0D0C0BFEFEB1AFB0AFC
+S1131080EDE2EE16E1E0FE0668F0D6018D919C914A
+S11310909C0124193509253031050CF47CC32C013D
+S11310A0E12CF12C60E080E00E94C612F8018381FB
+S11310B08F9382818F9381818F9380818F931F92ED
+S11310C01F921F921F922F92FB81FF932B852F93C8
+S11310D039813F93BF92AF927F926F920E94871D96
+S11310E061E080E00E94C612D60111968C9111979E
+S11310F08F938C918F93F40181818F9380818F934F
+S113110022E931E03F932F937F926F920E94871DD3
+S11311108091230190E001960FB6F894DEBF0FBED4
+S1131120CDBFD6012D913C91821793070CF47BC05F
+S1131130832D72DB853C994008F072CEEB89FC89E3
+S11311408081982F92959695969593708181817060
+S1131150880F880F892B823009F067CFD4018D91D5
+S11311609C918D3DB5E09B0708F047C0883E9340B5
+S113117008F05BCFEF81EF5FEF836E2F832D0E942A
+S1131180401461E0832D0E945F144FCF83E12985D1
+S11311903A85829FF001839FF00D1124E25DFC4F9C
+S11311A0FE83ED8310E001C0122F612F832D0E9476
+S11311B0401461E0832D0E945F14832D38D887EB9F
+S11311C09BE00197F1F700C00000832D25DB60E070
+S11311D0832DB9DC60E0832D0E945F1421E0210F90
+S11311E0AD81BE818D919C91883E9340E8F21F832E
+S11311F061E0832D0E945F14D5CEEF81E150EF832F
+S11312006E2F832D0E94401461E0832D0E945F1491
+S1131210D4018D919C91AACF3D84832D0E94BE144C
+S11312208FEF9FEFFFCD60E0832D8DDC60E0832D99
+S11312300E945F14EFE6F7E13197F1F700C0000078
+S1131240832DAADC962E872E782E692E2AE037ED80
+S113125043E25CE3D401F3016B2F7A2F8F2F9E2F8F
+S11312600E940717181684F42AE037ED43E25CE382
+S1131270D401F3016B2F7A2F8F2F9E2F0E945315C9
+S1131280962E872E782E692E5D854E8598898A89BB
+S1131290052F142F292F382FF401C3014F2F582D58
+S11312A0692F762D832D0E945113B0912301BD83A4
+S11312B0E0912201EF83BE1708F4A1C223E1E9857E
+S11312C0FA852E9FC0012F9F900D11249C01205E52
+S11312D03C4F38872F8389010C5F1F4F790138E019
+S11312E0E30EF11CA4EACA2EA1E0DA2EB8EB4B2ED1
+S11312F0B1E05B2E24E12E9FA0012F9F500D1124FD
+S11313005F874E87BC016F5D7C4F798B688B3D8610
+S1131310372C722C262C6B847D81A72EB12CD801FE
+S11313208D919C918A159B05E4F1E5D860E080E0FD
+S11313300E94C612D70111968C9111978F938C91AC
+S11313408F937F92BB81BF936F92E981EF93DF927A
+S1131350CF9224E131E03F932F930E94871D61E0F7
+S113136080E00E94C612D80111968C9111978F9338
+S11313708C918F932F923F928F929F925F924F9274
+S1131380E4E1F1E0FF93EF930E94871D0FB6F89418
+S1131390DEBF0FBECDBFD8018D919C918A159B05F0
+S11313A024F68D85F7D98DECBD81B89F812D11244C
+S11313B0869586958695EE85FF85E80FF11DCF010C
+S11313C0EE0FFF1FEE0FFF1FEA5AFC4FB182A082FF
+S11313D0880F991F880F991FFC01EA5BFC4FD70106
+S11313E08D919C91938B828BEF81F8858081982FCE
+S11313F0929596959695937081818170880F880F48
+S1131400892B09F409CF8081982F9295969596950A
+S1131410937081818170880F880F892B843009F43F
+S1131420FBCEA889B9898C918695877009F0F4CE92
+S1131430BD81BA50BD8380912201B81708F06CCFEA
+S11314408F833D84209023018DEC289E212D11242F
+S1131450269526952695EF81E89F812D1124869562
+S11314608695869510E00DEC94E149855A85949F04
+S11314707001959FF00C1124B701680F711DAB0129
+S1131480440F551F440F551FDA01A85ABC4FBA83A5
+S1131490A983FA01EA5AFC4FFC83EB83C701820F4C
+S11314A0911D9C01220F331F220F331FA901485A9B
+S11314B05C4F5E834D83B9016A5A7C4F7C876B878E
+S11314C02D863E861701109F812D112486958695C1
+S11314D08695D101A80FB11DB98BA88BFD01EE0F24
+S11314E0FF1FEE0FFF1FEA5AFC4F812F90E09183FC
+S11314F08083E981FA816081718180E090E00E94BB
+S113150055166B017C01AB81BC816D917C9180E0AF
+S113151090E00E9455164B015C01E889F989EE0FB1
+S1131520FF1FEE0FFF1FEA5BFC4FF98BE88BAD81C9
+S1131530BE816D917C9180E090E00E945516A701D8
+S113154096010E9453152B013C01612F70E080E04D
+S113155090E00E945516A50194010E9453159B0129
+S1131560AC01C301B2010E940B172B013C01EB85B6
+S1131570FC856081718180E090E00E945516A50190
+S113158094010E9453159B01AC01C301B2010E9456
+S1131590BC15A70196010E9454150E942916A8891A
+S11315A0B98953967C936E935297165FBF811B172C
+S11315B008F489CF2D843E841AE0120D103A08F005
+S11315C0B4C08DEC289E912D1124969596959695F0
+S11315D0BF81B89F812D11248695869586950DEC43
+S11315E024E1E985FA852E9F70012F9FF00C1124C8
+S11315F09701280F311DA901440F551F440F551F92
+S1131600BA01685A7C4F7A836983DA01AA5ABC4FBB
+S1131610BC83AB83F701E90FF11D9F01220F331F38
+S1131620220F331FA901485A5C4F5E834D83B901D1
+S11316306A5A7C4F7C876B873F821701109F812DEC
+S11316401124869586958695D101A80FB11DBF8773
+S1131650AE87FD01EE0FFF1FEE0FFF1FEA5AFC4F8E
+S1131660812F90E091838083E981FA816081718187
+S113167080E090E00E9455166B017C01AB81BC8137
+S11316806D917C9180E090E00E9455164B015C01C5
+S1131690EE85FF85EE0FFF1FEE0FFF1FEA5BFC4F89
+S11316A0FF87EE87AD81BE816D917C9180E090E0F3
+S11316B00E945516A70196010E9453152B013C0167
+S11316C0612F70E080E090E00E945516A50194011E
+S11316D00E9453159B01AC01C301B2010E940B1778
+S11316E02B013C01EB85FC856081718180E090E0F9
+S11316F00E945516A50194010E9453159B01AC014B
+S1131700C301B2010E94BC15A70196010E945415A1
+S11317100E942916AE85BF8553967C936E9352978B
+S1131720165F103A08F48ACF3F8020E5E985FA85F0
+S11317302E9FC0012F9F900D1124895B9C4FDC01CB
+S11317402C91222309F454C080E529853A85829F8F
+S1131750F001839FF00D1124EA5BFC4F83E1829F2B
+S1131760D001839FB00D1124A05EBC4F12968C91C2
+S11317701297808350968C915097858751968C91BF
+S11317805197868752968C918787832D0E940115E5
+S113179081E0D7D645CB60E0832DD5D960E0832D99
+S11317A00E945F1460E080E0F1D624E131E040E182
+S11317B050E061E070E089E591E00E94D21D61E0B3
+S11317C080E0E4D624E131E040E150E061E070E003
+S11317D08AE691E00E94D21D832D0E94BE141092CD
+S11317E0F7028091F7028823E1F38FEF9FEF1ACB82
+S11317F04CE050E06CEC71E00E946D1DA5CFBF8100
+S11318002D80BB2309F4D8CE1FCECF93DF93C09194
+S1131810EC05CC1FCC27CC1F8091EC058F778093EF
+S1131820EC0581E08093F302E091EC058E2F90E0CB
+S11318308A30910580F4FC01E25CFF4F0C94DF1ABE
+S11318408091ED0593E1C99FE0011124C05EDC4F56
+S113185090E09B878A87DF91CF91089583E1C89FA9
+S1131860E0011124C05EDC4F888182958370823050
+S113187091F79091ED05888190FB82F98883EBCFF5
+S11318808091ED05837093E1C99FF0011124E05E1E
+S1131890FC4F982F9295907F80818F7C892B808339
+S11318A08091EE05809322018091EF0580932301BE
+S11318B0808182958370823009F47CC08081829516
+S11318C08370813041F68C2FDF91CF9167CA34D970
+S11318D08091ED058093F302BECF9091ED0583E1F5
+S11318E0C89FF0011124E05EFC4F808190FB81F9D8
+S11318F0808360E08C2F27D960E08C2FDF91CF911B
+S1131900DEC78091ED0593E1C99FF0011124E05EEB
+S1131910FC4F808B8091EE05818B6091ED058C2FBF
+S113192052D76091EE058C2FDF91CF917BC78C2F1E
+S113193090E02091ED0533E1389FF001399FF00DDF
+S11319401124E05EFC4F228B2DE0289FE001299FAB
+S1131950D00D1124C257D94F6091320370E080E05A
+S113196090E00E9455162BE734E14EEC51E40E94BE
+S1131970BC1569877A878B879C876DCF8091ED052D
+S113198093E1C99FF0011124E05EFC4F82838C2F08
+S1131990F5D7DF91CF91CEC74091EB0550E06DEEC6
+S11319A075E086E493E00E945D1D8C2FDF91CF915A
+S11319B00C9401158C2FDF91CF9172C0DF92EF92BE
+S11319C0FF920F931F93CF93DF930091F6020023AE
+S11319D009F45EC0015010E00F5F1F4FC0E0D0E07B
+S11319E082E0E82EDD24D39493E0F92E17C08130F1
+S11319F008F43FC0823031F59093EC0580918D0658
+S1131A00980F90938D06F092F2028091F602815025
+S1131A108093F6022196C017D107D1F1FE01E85058
+S1131A20FD4F90818091F202813009F7943668F578
+S1131A309093EB0580918D06980F90938D06E0921C
+S1131A40F202E3CF2091EB05482F50E030E02E5F07
+S1131A503F4F24173507A4F0FA01E951FA4F938355
+S1131A6020918D06920F90938D068F5F8093F202E2
+S1131A70CCCF953551F690938D06D092F202C5CF16
+S1131A8080918D06981301C0C0DE1092F202BDCF82
+S1131A90DF91CF911F910F91FF90EF90DF90089508
+S1131AA0EF92FF920F931F93CF93DF93C82F81E0A0
+S1131AB048D560E080E06AD524E131E040E150E0BF
+S1131AC061E070E084ED91E00E94D21DEC2EF12CD7
+S1131AD023E1C29F80011124F801E05EFC4F808164
+S1131AE0982F929596959695937081818170880F21
+S1131AF0880F892BD0E0823009F45EC083E18E9D8B
+S1131B0080018F9D100D1124005E1C4FF80180810F
+S1131B10829583708230A9F58091F602811146C0C6
+S1131B208091F30281113FC0F801808182FF33C0AC
+S1131B308081982F92959695969593708181817066
+S1131B40880F880F892B823099F18C2F0E941701FE
+S1131B5087EB9BE00197F1F700C000008C2F0E94F7
+S1131B600C04813D974090F2D1506D2F8C2F88D674
+S1131B7061E08C2FA4D6F801808182958370823035
+S1131B8059F280818B7F8083DF91CF911F910F91D8
+S1131B90FF90EF90089560E08C2F0E94A30560E011
+S1131BA08C2F8DD6B3CF0E940005BECF07DFB8CFF0
+S1131BB061E08C2F84D6C9CF8F01025F1F4F01C013
+S1131BC0D22F6D2F8C2F5CD661E08C2F78D68C2F82
+S1131BD00E94170187EB9BE00197F1F700C000001A
+S1131BE08C2F0E940C0460E08C2F0E94A30560E0FF
+S1131BF08C2F65D621E02D0FF80180819181883EDC
+S1131C009340F0F27BCFFF920F931F93CF93DF9318
+S1131C108FE59AEE0197F1F700C0000060E080E0E4
+S1131C20B5D48FEF73D461E08FE0B0D48FEF6ED46E
+S1131C3010E0C1E0DFEF0FE08FEDF82E89B182955F
+S1131C408F70806F8F3FE9F08FE59AEE0197F1F77F
+S1131C5000C0000060E08C2F99D48D2F57D461E030
+S1131C60802F8C1B93D48D2F51D4CF5FC03131F78B
+S1131C70DF251F5FC0E089B182958F70806F8F3F31
+S1131C8019F7123008F381E0DF91CF911F910F9182
+S1131C90FF9057C4CF93DF9300D000D0CDB7DEB709
+S1131CA061E070E083E090E00E943F1B4C0186E21B
+S1131CB0E0E2F3E0DF011D928A95E9F78AE1EEE8BC
+S1131CC0F6E0DF011D928A95E9F780EAE6E4F3E0A5
+S1131CD0DF011D928A95E9F7809120038E7F80931E
+S1131CE020038091330381608093330381E08093E8
+S1131CF09B0689E190E090933E0380933D0390938B
+S1131D002B0380932A0386E091E09093AF0680939F
+S1131D10AE060E9423026FD476DFE2D580E02ED691
+S1131D2081E02CD680E00E94230681E00E942306F5
+S1131D3078940E94000511E01B8277E0272E72E060
+S1131D40372EB981BC838091F60281119EC08091A7
+S1131D50F302811166C08091200383FD68C08091E5
+S1131D60330383FD64C08091F502811190C080919A
+S1131D70F402882341F01092F402113009F42DC1C9
+S1131D80133009F42AC28091F7028823E1F28FE527
+S1131D909AEE0197F1F700C000001092F70289B1A2
+S1131DA082958F7080958F70942D9295907F982B4B
+S1131DB0882309F4D7C09C8160FA90F950FA91F90C
+S1131DC070FA92F997709983902F990F990F990F40
+S1131DD0A981A92BAC83A2FDDFC0113009F0B3CFD8
+S1131DE0823009F4D9C208F4C6C2833009F4ECC2C3
+S1131DF0843009F0E4C2D4018C9190E0019663E050
+S1131E0070E00E94CC1AF4018083882309F4EEC2A6
+S1131E10D40111961C9284E0482E512C66246394BC
+S1131E2092CF0E9400058091200383FF98CF60E049
+S1131E3080E0ACD324E131E040E150E061E070E0C7
+S1131E4085EE91E00E94D21D61E080E09FD324E101
+S1131E5031E044E050E061E070E086EF91E00E9400
+S1131E60D21D80E053D324E131E04BE050E061E047
+S1131E7070E08BEF91E00E94D21D89B182958F7042
+S1131E80806F873FD1F70E949C0598DD60CF109248
+S1131E90F5020E947B02E12CF12CDE2C8E2D0E9497
+S1131EA00C04853C994058F023E12E9DF0012F9DB0
+S1131EB0F00D1124E05EFC4F80818D7F808360E013
+S1131EC08D2D0E94A30560E08D2DF9D487EB9BE056
+S1131ED00197F1F700C000008D2D0E9423068D2D7F
+S1131EE00E94CA0393E19E9DF0019F9DF00D112471
+S1131EF0E05EFC4F8081982F92959695969593700D
+S1131F0081818170880F880F892B61F480818D7F96
+S1131F108083AFEFEA1AFA0AB2E0EB16F10409F093
+S1131F20BCCF25CF8081982F9295969596959370E6
+S1131F3081818170880F880F892B8430D1F1808151
+S1131F4081FF08C086819781228533858217930794
+S1131F5008F474C160E08D2DB2D460E08D2D0E9430
+S1131F60A305D7CFBC8160FAB0F950FAB1F970FA81
+S1131F70B2F9000F000F000FB770B02BBC83B2FD95
+S1131F8026C0907F903809F474C100E0712C552468
+S1131F905394612C11E0D7CE843009F45BC108F46A
+S1131FA037C1883009F0CFCE81E0CBD2412C10E08C
+S1131FB0CACE808181FFD1CF8481958122853385EA
+S1131FC08217930750F68D2D0E941701A2CF00E0CF
+S1131FD0712C55245394612CB6CE60E080E0D6D2A7
+S1131FE0EB81AE2EB12CF3E1FA9D6001FB9DD00C88
+S1131FF011249601205E3C4F3A832983D90112961D
+S11320008C911F928F93C50101969F938F933F925A
+S11320102F9254E1E52E51E0F52EFF92EF920E94AB
+S1132020871DF601EF5DFC4F8081869587700FB6A2
+S1132030F894DEBF0FBECDBF09F0F5C0A981BA8107
+S113204015968C9115978F9314968C918F93EBE33F
+S1132050F2E0FF93EF93FF92EF920E94871D0F909F
+S11320600F900F900F900F900F9033E13A9DF00175
+S11320703B9DF00D1124E05EFC4F8081982F9295DA
+S113208096959695937081818170880F880F892B1E
+S1132090823009F451C108F0D5C0882309F4E6C0A0
+S11320A0813011F487E032D261E080E06FD2A3E1A5
+S11320B0AA9DC001AB9D900D1124FC01E05EFC4F74
+S11320C07F0183858F9382858F932DE132E03F9347
+S11320D02F9344E1C42E41E0D42EDF92CF920E948C
+S11320E0871DD7018C91982F92959695969593700C
+S11320F011968C9111978170880F880F892B0F90FE
+S11321000F900F900F900F900F9009F4CBC08C910B
+S1132110982F929596959695937011968C918170BF
+S1132120880F880F892B813009F4BCC0F7018081A6
+S1132130982F929596959695937081818170880FCA
+S1132140880F892B843009F4FAC0F70187818F93B3
+S113215086818F9328E332E03F932F93DF92CF92CF
+S11321600E94871D0F900F900F900F900F900F906B
+S113217093E19A9DF0019B9DF00D1124E05EFC4FCC
+S1132180808181FF9DC0808182FF97C089EDBED18F
+S1132190D4018C91813009F496C0823009F4B0C026
+S11321A0FC8160FAF0F950FAF1F970FAF2F9F7707B
+S11321B0802F880F880F880FF82BFC838F2F857052
+S11321C0813009F0E0CD0F5F0F710C3009F0DBCDE9
+S11321D08093F70277247394D6CD60E080E0D6D163
+S11321E024E131E040E150E061E070E081E492E01C
+S11321F00E94D21D61E080E0C9D124E131E040E1D8
+S113220050E061E070E082E592E00E94D21DBBCD17
+S11322108150823008F097CD81E08093F702015E0F
+S11322200F71712C90CD24E131E044E050E061E085
+S113223070E088E192E00E94D21D17CF61E08D2DFD
+S11322403ED3C1CE833079F0843009F02DCF84E0C1
+S11322505DD12ACFD4011C928B810E94CE0600E06E
+S1132260712C612C70CD83E051D11ECF86E04ED10C
+S11322701BCFB3E12B81B29FF0011124E05EFC4F30
+S1132280808181FB992790F981E08927908180FBE7
+S113229091F9908360E0822F12D360E08B810E94D9
+S11322A0A30573CE24E131E047E050E061E070E043
+S11322B087E292E00E94D21D5BCF8AED27D168CFDE
+S11322C08DE224D165CF11968C911197982F93703C
+S11322D091F4893208F081C061E083E057D124E1B0
+S11322E031E043E050E061E070E086E691E00E9476
+S11322F0D21DF40181818F5FD40111968C9350CF4C
+S1132300F4018181982F937099F4893208F06AC09E
+S113231060E084E03BD124E131E042E050E061E060
+S113232070E087E691E00E94D21DD40111968C9151
+S11323308F5FF401818334CF85E0E8D0B5CE668524
+S1132340778580E090E0B1D420E030E04AE754E4BF
+S113235013D49F938F937F936F932FE232E03F9335
+S11323602F93DF92CF920E94871D0FB6F894DEBFA1
+S11323700FBECDBFFDCE813011F5F40111838081F4
+S11323808130B1F1823009F464C044244394512C67
+S1132390662463941B82D7CCD40111961C931197A5
+S11323A08C91813009F43DC0823009F468C062E048
+S11323B0462E512C66246394E1E0EB83C4CC482E72
+S11323C0512C66246394BFCC81E0BBD093E0492EAA
+S11323D0512C6624639413E0B6CC1C9211961C9283
+S11323E0A9D27ACF10821182A5D292CFA3D210CDD6
+S11323F023E13B81239FF0011124E05EFC4F8285A1
+S1132400938521E030E0009711F420E030E0821B56
+S1132410930B9387828744244394512C66246394BA
+S113242092CCB3E12B81B29FF0011124E05EFC4F0A
+S11324308285938521E030E086399105A9F1820FE8
+S1132440931F9387828732E0432E512C6624639432
+S11324507ACC83E19B81899FF0011124E05EFC4FDB
+S1132460828191E0811101C090E0891B82838B817C
+S113247085D244244394512C6624639464CC33E180
+S11324808B81389FF0011124E05EFC4F828191E042
+S1132490883169F0890F82838B8170D222E0422EC9
+S11324A0512C662463944FCC20E030E0C8CF90E0F8
+S11324B0F1CFF8949091BC00906A9093BC009091F5
+S11324C0BC0097FFFCCF9EE49093BB009091BC00AE
+S11324D09F7D9093BC009091BC0090689093BC0049
+S11324E09091BC0097FFFCCF8093BB008091BC000F
+S11324F080688093BC008091BC0087FFFCCF8091F2
+S1132500BC0080698093BC0078940895CF93DF93D6
+S1132510C82FD82FD07F8D2F8560CBDF8D2F816082
+S1132520C8DF80E1C89FE00111248C2F8560C1DFE2
+S11325308C2F8160BEDF80E18A95F1F7DF91CF9126
+S11325400895CF93DF93C82FD82FD07F8D2F846029
+S1132550B0DF8D2FAEDF20E1C29FC0011124846063
+S1132560A8DF8C2F8295807FA4DFC13031F098E200
+S11325709A95F1F7DF91CF9108958FE496E401974E
+S1132580F1F700C00000DF91CF91089561708F7062
+S113259090E4699F800D11248068D3CFCF92DF929D
+S11325A0FF920F931F93CF93DF9384EAC82E82E0A8
+S11325B0D82EF12CD0E08F2D8064C3DF8601C8E0D3
+S11325C003C0F801D1918F018D2FA0DFC150C9F74D
+S11325D0F8E0FF0E80E4F81631F0F601D781F8E058
+S11325E0CF0ED11CE8CFDF91CF911F910F91FF90B7
+S11325F0DF90CF900895CF9380E05BDF2FEB84EDE5
+S113260091E0215080409040E1F700C00000C5E017
+S113261084E04FDF80E04DDFC150D1F728EC2A95EC
+S1132620F1F784E246DF80E244DF8AE28ADF88E071
+S113263088DF81E086DF86E084DF8CE082DFCF9173
+S1132640ADCF95B1987F6770692B65B92C9891E1EE
+S11326509EBD0DB407FEFDCF8EBD0DB407FEFDCFAC
+S11326602C9A0895CF92DF92EF92FF92CF93DF934B
+S11326706A017B01C82FC1702BE734E14EEC51E4B1
+S1132680C701B601C8D3E5D2D62F64E06C0F8D2FF5
+S1132690D8DF8D2FDF91CF91FF90EF90DF90CF9017
+S11326A008958F929F92AF92BF92CF92DF92EF9252
+S11326B0FF920F931F93CF93DF93E82F4A015B019F
+S11326C0C901B801CE2ED12C2E2F2170C22FCC0FD0
+S11326D0A5019401E8D19B01AC0163E373E383E5B5
+S11326E090E44AD222E03BE247E051E494D322E76B
+S11326F03AE84EE051E4D7D1ACD2D62F61E06C0F6A
+S11327008D2F9FDF83E18C9D80018D9D100D112401
+S1132710005E1C4FF801D08B2AE43CE042E45FE306
+S1132720C501B40178D320E030E04FE753E473D31C
+S113273025E33EE542E050E41FD28BD2D62F6C2F26
+S11327408D2F7FDFF801D18B2DE02C9DC0012D9DB5
+S1132750900D11249C012257394F7901608970E052
+S113276080E090E0A2D222E73AE84EE051E49CD126
+S113277022E03BE247E051E4FFD1F7016183728339
+S1132780838394836D2F70E080E090E08ED225E304
+S11327903EE542E050E43FD320E030E04FE753E42D
+S11327A0EBD1F7016583768387839087DF91CF919F
+S11327B01F910F91FF90EF90DF90CF90BF90AF905B
+S11327C09F908F9008951F93CF93DF93C82F162F58
+S11327D0682F6170660F6F5F812F33DF83E1C89FBD
+S11327E0F0011124E05EFC4F108B8DE0C89FE001E6
+S11327F01124C257D94F612F70E080E090E055D288
+S113280022E73AE84EE051E44FD122E03BE247E0D0
+S113281051E4B2D169837A838B839C83DF91CF9116
+S11328201F9108951F93CF93DF93C82F162F682FFE
+S11328306170660F812F05DF83E1C89FF0011124C9
+S1132840E05EFC4F118B8DE0C89FE0011124C2575C
+S1132850D94F612F70E080E090E027D225E33EE578
+S113286042E050E4D8D220E030E04FE753E484D192
+S11328706D837E838F839887DF91CF911F91089515
+S1132880CF93DF9393E1899FF0011124E05EFC4F25
+S1132890628B9DE0899FE0011124C257D94F70E0FB
+S11328A080E090E002D22BE734E14EEC51E464D1B5
+S11328B069877A878B879C87DF91CF910895962FBC
+S11328C0682F61706C5F23E1829FF0011124E05E48
+S11328D0FC4F892F81709289899F802D1124B1CE5C
+S11328E021E080E090E092BD81BDF89A823081F0D1
+S11328F08330C1F030B5813091F03093220324301D
+S1132900C1F001962F5F92BD81BDF89A823081F7A4
+S113291040B550E050932B0340932A03F2CF3093F9
+S11329203503EFCF80B590E090933E0380933D0351
+S113293008950895F89480E090E092BD81BD8230BE
+S1132940C9F0833099F0813069F02091220320BDD1
+S1132950FA9AF99AF999FECF01968430910569F7AC
+S1132960789408952091350320BDF2CF20913D0342
+S113297020BDEECF20912A0320BDEACF0F931F93F1
+S1132980CF93DF93C82F20E5829FF0011124EA5BE7
+S1132990FC4F80E090E04C2F50E063E1C69FD001F3
+S11329A01124AE5DBC4F2C91BC01D0E52D9F600D70
+S11329B0711D11249B01205D3F4F32BD21BDF89A4A
+S11329C020B5219301968035910569F780E5849FB0
+S11329D08001859F100D11240A5B1C4FF801658549
+S11329E08C2FF1DEF80166858C2F1CDFF8016785DA
+S11329F08C2F46DF60E08C2FDF91CF911F910F91D8
+S1132A005ECFCF92DF92EF92FF920F931F93CF93FB
+S1132A10DF93082FF89481E094DD60E080E0B6DD78
+S1132A2024E231E04DE050E061E070E083EE92E0BA
+S1132A300E94D21D61E080E0A9DD20E5029F8001B3
+S1132A4011240A5B1C4FC0E0D0E0680185E0E82E49
+S1132A50F12CF60180819E0140E5849F200D311DFB
+S1132A601124C901C09692BD81BDF80181918F01E5
+S1132A70219680BDFA9AF99AF999FECFCE01B70151
+S1132A808BD5892B69F0C035D10519F77894DF917E
+S1132A90CF911F910F91FF90EF90DF90CF90089509
+S1132AA08FEF34DDF0CF5058BB27AA270ED075C165
+S1132AB066D130F06BD120F031F49F3F11F41EF455
+S1132AC05BC10EF4E095E7FB51C1E92F77D180F3A8
+S1132AD0BA17620773078407950718F071F49EF517
+S1132AE08FC10EF4E0950B2EBA2FA02D0B01B90166
+S1132AF090010C01CA01A0011124FF27591B99F070
+S1132B00593F50F4503E68F11A16F040A22F232F7B
+S1132B10342F4427585FF3CF469537952795A795CB
+S1132B20F0405395C9F77EF41F16BA0B620B730B72
+S1132B30840BBAF09150A1F0FF0FBB1F661F771FE3
+S1132B40881FC2F70EC0BA0F621F731F841F48F498
+S1132B50879577956795B795F7959E3F08F0B3CF1E
+S1132B609395880F08F09927EE0F97958795089508
+S1132B70D9D008F481E008950CD00FC107D140F0FA
+S1132B80FED030F021F45F3F19F0F0C0511139C18B
+S1132B90F3C014D198F39923C9F35523B1F3951BCA
+S1132BA0550BBB27AA2762177307840738F09F5F6A
+S1132BB05F4F220F331F441FAA1FA9F333D00E2ED9
+S1132BC03AF0E0E830D091505040E695001CCAF746
+S1132BD029D0FE2F27D0660F771F881FBB1F26170B
+S1132BE037074807AB07B0E809F0BB0B802DBF01DE
+S1132BF0FF2793585F4F2AF09E3F510568F0B6C0F7
+S1132C0000C15F3FECF3983EDCF3869577956795BA
+S1132C10B795F7959F5FC9F7880F911D969587958E
+S1132C2097F90895E1E0660F771F881FBB1F6217AD
+S1132C3073078407BA0720F0621B730B840BBA0B6B
+S1132C40EE1F88F7E095089504D06894B111D9C0B7
+S1132C500895BCD088F09F5790F0B92F9927B751A9
+S1132C60A0F0D1F0660F771F881F991F1AF0BA954C
+S1132C70C9F712C0B13081F0C3D0B1E00895C0C02B
+S1132C80672F782F8827B85F39F0B93FCCF3869542
+S1132C9077956795B395D9F73EF49095809570959F
+S1132CA061957F4F8F4F9F4F0895E89409C097FB1C
+S1132CB03EF490958095709561957F4F8F4F9F4F0F
+S1132CC09923A9F0F92F96E9BB279395F695879553
+S1132CD077956795B795F111F8CFFAF4BB0F11F416
+S1132CE060FF1BC06F5F7F4F8F4F9F4F16C08823BD
+S1132CF011F096E911C0772321F09EE8872F762FF3
+S1132D0005C0662371F096E8862F70E060E02AF033
+S1132D109A95660F771F881FDAF7880F969587951F
+S1132D2097F90895990F0008550FAA0BE0E8FEEFF4
+S1132D3016161706E807F907C0F012161306E4077B
+S1132D40F50798F0621B730B840B950B39F40A2674
+S1132D5061F0232B242B252B21F408950A2609F452
+S1132D60A140A6958FEF811D811D089597F99F6756
+S1132D7080E870E060E008959FEF80EC08950024FF
+S1132D800A941616170618060906089500240A94CC
+S1132D9012161306140605060895092E0394000C52
+S1132DA011F4882352F0BB0F40F4BF2B11F460FFE1
+S1132DB004C06F5F7F4F8F4F9F4F089557FD90580A
+S1132DC0440F551F59F05F3F71F04795880F97FBEB
+S1132DD0991F61F09F3F79F08795089512161306A5
+S1132DE01406551FF2CF4695F1DF08C016161706D4
+S1132DF01806991FF1CF8695710561050894089509
+S1132E00E894BB2766277727CB0197F908958ADFD3
+S1132E1008F48FEF08950BD0C0CFB1DF28F0B6DFF0
+S1132E2018F0952309F0A2CFA7CF1124EACFC6DF6B
+S1132E30A0F3959FD1F3950F50E0551F629FF001C9
+S1132E40729FBB27F00DB11D639FAA27F00DB11D22
+S1132E50AA1F649F6627B00DA11D661F829F2227AB
+S1132E60B00DA11D621F739FB00DA11D621F839F32
+S1132E70A00D611D221F749F3327A00D611D231F08
+S1132E80849F600D211D822F762F6A2F11249F5756
+S1132E9050408AF0E1F088234AF0EE0FFF1FBB1F79
+S1132EA0661F771F881F91505040A9F79E3F510518
+S1132EB070F05CCFA6CF5F3FECF3983EDCF38695D1
+S1132EC077956795B795F795E7959F5FC1F7FE2BC3
+S1132ED0880F911D9695879597F90895A0E1B0E024
+S1132EE0E3E7F7E181C37C011B016A01FC0117825E
+S1132EF01682838181FF2AC39E012F5F3F4F3901D0
+S1132F00F7019381F10193FD859193FF81911F0155
+S1132F10882309F417C3853239F493FD859193FF0F
+S1132F2081911F01853231F4B70190E0FFD556013C
+S1132F306501E6CF10E0512C912CFFE1F915D8F092
+S1132F408B3279F038F4803279F08332A1F4F92DA0
+S1132F50F0612EC08D3261F0803369F4292D216037
+S1132F602DC0392D3260932E892D8460982E2AC06D
+S1132F70E92DE86015C097FC2DC020ED280F2A30FC
+S1132F8088F496FE06C03AE0139F200D1124122FF8
+S1132F9019C08AE0589E200D1124522EE92DE062BA
+S1132FA09E2E10C08E3231F496FCCCC2F92DF06402
+S1132FB09F2E08C08C3621F4292D2068922E02C041
+S1132FC0883641F4F10193FD859193FF81911F01AE
+S1132FD08111B3CF9BEB980F933020F4992D90611E
+S1132FE0805E07C09BE9980F933008F059C1992D72
+S1132FF09F7E96FF16E09F73992E853619F4906490
+S1133000992E08C0863621F4392F3068932E02C0D9
+S11330101111115097FE07C01C3350F444244394FB
+S1133020410E27E00BC0183038F027E017E005C048
+S113303027E09CE3492E02C0212F412C560184E055
+S1133040A80EB11CF6016081718182819381042DE7
+S1133050A30150D46C01F981FC87F0FF02C0F3FF97
+S113306006C091FC06C092FE06C000E205C00DE257
+S113307003C00BE201C000E08C858C7019F00111D3
+S113308043C280C297FE10C04C0CFC85F4FF04C000
+S11330908A81813309F44A94141474F528E02415C0
+S11330A078F588E0482E2CC096FC2AC0812F90E049
+S11330B08C159D059CF03CEFC3163FEFD30674F0CE
+S11330C0892D8068982E0AC0E2E0F0E0EC0FFD1F25
+S11330D0E10FF11D8081803319F411501111F4CFE7
+S11330E097FE0EC044244394410E812F90E0C816ED
+S11330F0D9062CF41C1904C04424439401C010E0E4
+S113310097FE06C01C141D0434F4C601019605C0C4
+S113311085E090E002C081E090E001110196112366
+S113312031F0212F30E02F5F3F4F820F931F252D69
+S113313030E08217930714F4581A01C0512C892DDA
+S1133140897041F4552031F0B70180E290E0EED46B
+S11331505A94F8CF002321F0B701802F90E0E6D4F1
+S113316093FC08C0552031F0B70180E390E0DED431
+S11331705A94F8CF97FE4AC04601D7FE02C0812C6C
+S1133180912CC60188199909F301E80FF91FFE87EC
+S1133190ED87960124193109388B2F87012F10E010
+S11331A01195019511093FEF8316930621F4B70198
+S11331B08EE290E0BBD4C814D9044CF08F85988972
+S11331C08815990524F4ED85FE85818101C080E38D
+S11331D0F1E08F1A91082D853E852F5F3F4F3E8782
+S11331E02D878016910624F0B70190E09FD4DBCFA1
+S11331F0C814D90441F49A81963320F4953319F410
+S11332003C8534FF81E3B70190E048C08A81813373
+S113321019F09C859F7E9C87B70190E087D411119B
+S113322005C094FC16C085E690E015C0B7018EE297
+S113323090E07CD41E5F82E001E0080FF301E80F08
+S1133240F11D8081B70190E071D4802F0113F4CF78
+S1133250E8CF85E490E0B70169D4D7FC06C0C11477
+S1133260D10441F4EC85E4FF05C0D194C194D108A4
+S11332708DE201C08BE2B70190E058D480E32AE0EC
+S1133280C216D1042CF08F5FFAE0CF1AD108F7CF21
+S1133290B70190E04BD4B701C601C09647D449C1E9
+S11332A0833631F0833779F0833509F052C01FC07B
+S11332B0560132E0A30EB11CF6018081898301E03E
+S11332C010E0630111C05601F2E0AF0EB11CF6012B
+S11332D0C080D18096FE03C0612F70E002C06FEF02
+S11332E07FEFC60109D48C01F92DFF7713C0560175
+S11332F022E0A20EB11CF601C080D18096FE03C06C
+S1133300612F70E002C06FEF7FEFC601CBD38C0159
+S1133310F92DF0689F2EF3FD18C0852D90E0081755
+S1133320190798F4B70180E290E000D45A94F5CFDD
+S1133330F60197FC859197FE81916F01B70190E0AA
+S1133340F5D351105A94015011090115110581F753
+S1133350F0C0843611F0893659F5560197FE09C03C
+S113336024E0A20EB11CF6016081718182819381F7
+S11333700AC0F2E0AF0EB11CF60160817181072E24
+S1133380000C880B990BF92DFF769F2E97FF09C02F
+S113339090958095709561957F4F8F4F9F4FF06802
+S11333A09F2E2AE030E0A3012FD4C82EC6183EC0B9
+S11333B0092D853721F40F7E2AE030E01DC0097FF6
+S11333C08F3691F018F4883559F0BCC0803719F065
+S11333D0883711F0B7C0006104FF09C0046007C05A
+S11333E094FE08C0066006C028E030E005C020E175
+S11333F030E002C020E132E0560107FF09C084E05A
+S1133400A80EB11CF601608171818281938108C08C
+S1133410F2E0AF0EB11CF6016081718180E090E0B2
+S1133420A301F2D3C82EC6180F77902E96FE0BC0B8
+S1133430092D0E7FC11650F494FE0AC092FC08C0F8
+S1133440092D0E7E05C0DC2C092D03C0DC2C01C027
+S1133450D12E04FF0DC0FE01EC0DF11D80818033DF
+S113346011F4097E09C002FF06C0D394D39404C0AA
+S1133470802F867809F0D39403FD10C000FF06C0A6
+S11334801C2DD51478F4150D1D190CC0D51450F449
+S1133490B70180E290E04AD3D394F8CFD51410F466
+S11334A05D1801C0512C04FF0FC0B70180E390E008
+S11334B03DD302FF16C001FD03C088E790E002C0BF
+S11334C088E590E0B7010CC0802F867851F001FFA9
+S11334D002C08BE201C080E207FD8DE2B70190E0FB
+S11334E025D3C11630F4B70180E390E01FD3115007
+S11334F0F8CFCA94F301EC0DF11D8081B70190E07F
+S113350015D3C110F6CF15C0F4E0F51550F584E0DD
+S1133510581A93FE1EC0011125C02C8523FF27C015
+S113352000E910E0392D3071932EF8018491811156
+S113353021C0552009F4FCCCB70180E290E0F6D21A
+S11335405A94F7CFF7018681978123C08FEF9FEFBD
+S113355020C0B70180E290E0E9D25A945110F9CF2B
+S1133560DACF512CB701802F90E0E0D2D6CF04E916
+S113357010E0D8CF91108052B70190E0D7D20F5FFE
+S11335801F4FD3CF23E0251510F483E0C1CF512C76
+S1133590C4CF6096E2E144C097FB072E16F4009472
+S11335A006D077FD08D057D007FC05D03EF490959F
+S11335B081959F4F0895709561957F4F0895EE0F03
+S11335C0FF1F0590F491E02D0994A29FB001B39FD1
+S11335D0C001A39F700D811D1124911DB29F700D18
+S11335E0811D1124911D08952F923F924F925F9255
+S11335F06F927F928F929F92AF92BF92CF92DF92FF
+S1133600EF92FF920F931F93CF93DF93CDB7DEB763
+S1133610CA1BDB0B0FB6F894DEBF0FBECDBF0994F7
+S11336202A88398848885F846E847D848C849B844E
+S1133630AA84B984C884DF80EE80FD800C811B815C
+S1133640AA81B981CE0FD11D0FB6F894DEBF0FBE8B
+S1133650CDBFED010895AA1BBB1B51E107C0AA1FF2
+S1133660BB1FA617B70710F0A61BB70B881F991F1F
+S11336705A95A9F780959095BC01CD0108950F93B3
+S11336801F93CF93DF93869F8001879F100D969F92
+S1133690100D1124C8010DD0EC01009721F0A801F0
+S11336A060E070E013D2CE01DF91CF911F910F91B2
+S11336B008950F931F93CF93DF938230910510F4F5
+S11336C082E090E0E091AA06F091AB0620E030E0C1
+S11336D0A0E0B0E0309719F140815181028113815B
+S11336E048175907C8F08417950769F4109731F003
+S11336F012960C93129713961C9327C00093AA0654
+S11337001093AB0622C02115310519F04217530757
+S113371018F49A01BD01EF01DF01F801DBCF211597
+S11337203105F9F0281B390B2430310580F48A81E6
+S11337309B816115710521F0FB019383828304C091
+S11337409093AB068093AA06FE01329644C0FE0114
+S1133750E20FF31F81939193225031093983288317
+S11337603AC02091A8063091A906232B41F4209158
+S11337700201309103013093A9062093A8062091F9
+S11337800001309101012115310541F42DB73EB7F7
+S11337904091040150910501241B350BE091A806CA
+S11337A0F091A906E217F307A0F42E1B3F0B28178C
+S11337B0390778F0AC014E5F5F4F2417350748F0A6
+S11337C04E0F5F1F5093A9064093A80681939193CF
+S11337D002C0E0E0F0E0CF01DF91CF911F910F91A3
+S11337E00895CF93DF93009709F481C0FC013297C9
+S11337F013821282A091AA06B091AB06109781F4AD
+S113380020813181820F931F2091A8063091A9064F
+S11338102817390751F5F093A906E093A80667C065
+S1133820ED0120E030E0CE17DF0740F44A815B81F0
+S11338309E0141155105F1F0EA01F5CFD383C2830E
+S113384040815181840F951FC817D90759F4888185
+S11338509981840F951F0296918380838A819B812D
+S1133860938382832115310529F4F093AB06E09309
+S1133870AA063DC0E901FB83EA8349915991C40F2B
+S1133880D51FEC17FD0761F480819181840F951F8A
+S11338900296E90199838883828193819B838A8339
+S11338A0E0E0F0E012968D919C911397009719F047
+S11338B0FD01DC01F7CF8D919C9111979D012E5F45
+S11338C03F4F820F931F2091A8063091A906281715
+S11338D0390769F4309729F41092AB061092AA06BE
+S11338E002C013821282B093A906A093A806DF91A6
+S11338F0CF910895283008F027E03327DA01990F93
+S1133900311D87FD916000966105710539F43260BF
+S11339102E5F3D9330E32A95E1F708959F3F30F001
+S113392080387105610509F03C5F3C5F3D9391303F
+S113393008F08068911DDF93CF931F930F93FF923C
+S1133940EF92192F987F9695E92F96959695E90F02
+S1133950FF27EE50FF4F99273327EE24FF24A701BA
+S1133960E70105900894079428F4360FE71EF81E23
+S1133970491F511D660F771F881F991F0694A1F7D1
+S11339800590079428F4E70EF81E491F561FC11D21
+S1133990770F881F991F661F0694A1F70590079457
+S11339A028F4F80E491F561FC71FD11D880F991FF1
+S11339B0661F771F0694A1F70590079420F4490F1A
+S11339C0561FC71FD81F990F661F771F881F06949D
+S11339D0A9F784911095177041F0D695C79557951E
+S11339E04795F794E7941A95C1F7E8E9F0E06894ED
+S11339F01590159135916591959105907FE2739598
+S1133A00E118F10A430B560BC90BD009C0F7E10CBE
+S1133A10F11E431F561FC91FD01D7EF4703311F4CD
+S1133A208A95E6CFE894015030F0080F0AF4002795
+S1133A30021708F4202F2395022F7A3328F079E314
+S1133A407D932A95E9F710C07D932A9589F606940B
+S1133A5097956795379517951794E118F10A430BD5
+S1133A60560BC90BD00998F023957E9173957A3340
+S1133A7008F070E37C932013B8F77E9170617D9316
+S1133A8030F0839571E37D9370E32A95E1F7112477
+S1133A90EF90FF900F911F91CF91DF91992787FDB0
+S1133AA090950895FC010590615070400110D8F77D
+S1133AB0809590958E0F9F1F0895FB01DC0102C035
+S1133AC001900D9241505040D8F70895DC0101C097
+S1133AD06D9341505040E0F70895FB01DC014150E3
+S1133AE0504048F001900D920020C9F701C01D928A
+S1133AF041505040E0F70895FC016150704001903E
+S1133B000110D8F7809590958E0F9F1F0895A0E01F
+S1133B10B0E0ECE8FDE178CDAE01475F5F4F6F8127
+S1133B2078858D819E81DAD9E2E08ACD0F931F9347
+S1133B30CF93DF93FB01238121FD03C08FEF9FEF20
+S1133B402CC022FF16C0468157812481358142173B
+S1133B50530744F4A081B1819D012F5F3F4F31830E
+S1133B6020838C93268137812F5F3F4F37832683B1
+S1133B7014C08B01EC01FB010084F185E02D099553
+S1133B80892BE1F6D80116968D919C911797019691
+S1133B9017969C938E931697CE01DF91CF911F9128
+S1133BA00F910895A0E0B0E0E7EDFDE123CD5B01C6
+S1133BB04A017901D90113962C9121FF1DC0C0E05F
+S1133BC0D0E0C815D905D9F08C016C01CA0CDB1CF6
+S1133BD0C8010C151D0571F00F5F1F4FD701189612
+S1133BE0ED91FC911997B701DC018C910995892B12
+S1133BF079F305C02196E5CF80E090E001C0CE01C5
+S1133C00CDB7DEB7ECE012CDFA01AA27283051F186
+S1133C10203181F1E8946F936E7F6E5F7F4F8F4FF9
+S1133C209F4FAF4FB1E03ED0B4E03CD0670F781F58
+S1133C30891F9A1FA11D680F791F8A1F911DA11D3D
+S1133C406A0F711D811D911DA11D20D009F4689476
+S1133C503F912AE0269F11243019305D3193DEF61E
+S1133C60CF010895462F4770405D4193B3E00FD0D4
+S1133C70C9F7F6CF462F4F70405D4A3318F0495DBF
+S1133C8031FD4052419302D0A9F7EACFB4E0A695A2
+S1133C909795879577956795BA95C9F700976105C4
+S1133CA0710508959B01AC010A2E0694579547951A
+S1133CB037952795BA95C9F7620F731F841F951F0F
+S10B3CC0A01D0895F894FFCF44
+S1133CC80000B20620000000000200000000E70027
+S1133CD80000000000000002000000000B010000CA
+S1133CE80000288200000002000000000B01000010
+S1133CF800004B252E31752050252E327520546D29
+S1133D083D252E3375202D0043414C49422E205425
+S1133D18633D252E3375202D00CDE5E4EEF1F2E068
+S1133D28F2EEF7EDFBE920202000F2E5EFEBEEE2FE
+S1133D38EEE920EAEEEDF2E0EAF2002530342E3224
+S1133D48662D2530342E326620473D2530342E32F8
+S1133D586600493D252E34756D412054633D252E5A
+S1133D683375200056483D2530342E326620446D84
+S1133D783D252E3375202D00564C3D2530342E32EA
+S1133D88662054633D252E3375202D004445464155
+S1133D98554C5400D0D3D7CD2E20CAC0CBC8C1D0DF
+S1133DA8CEC2CAC000C7C0D9C8D2C020CFCE20D284
+S1133DB8CECAD3212100CDC0C62E0020C4CBDF201B
+S1133DC8D1C1D0CED1C0004B252E31752023252E4C
+S1133DD83275202054EF3D002D2D2D200054F33D45
+S1133DE8252E3375012000CED2CACBDED72E00494A
+S1133DF83D25342E32664100D2ED3D252E33640133
+S1133E0800D3CACD2D322030392E30392E323031FC
+S1133E183900CDE0E3E0E5E220C0EBE5EAF1E0EDCE
+S1133E28E4F00041A042A1E045A3A4A5A64BA74DF8
+S1133E38484FA8504354A9AA58E1ABACE2ADAE62CE
+S1133E48AFB0B161B2B3B4E365B6B7B8B9BABBBC85
+S1133E58BD6FBE7063BF79E478E5C0C1E6C2C3C470
+S1133E68C5C6C7000E1F1F1F0E0000081408000057
+S1133E7800000000040A111111111104041F040A9E
+S1133E88111F04040E0A0A0A0A0E04030A080B0A7C
+S1133E98081B0208080402010808080808040402A8
+S1133EA80F0A08D1CED5D0C0CDC5CDC8C52E2E2E6B
+S1053EB8000004
+S9030000FC

+ 1 - 0
heater3/Debug/heater3_6_2.eep

@@ -0,0 +1 @@
+:00000001FF

BIN
heater3/Debug/heater3_6_2.elf


+ 406 - 0
heater3/Debug/heater3_6_2.hex

@@ -0,0 +1,406 @@
+:100000000C94BF000C9416010C9427010C94DC0096
+:100010000C94DC000C94DC000C94DC000C940301C8
+:100020000C94DC000C94DC000C94DC000C94DC00E0
+:100030000C94DC000C948D010C94DC000C94DC001E
+:100040000C94DC000C94DC000C94DC000C94DC00C0
+:100050000C9438010C94DC000C9461010C94DC00CD
+:100060000C9483010C94DC000C94DC000C94DC00F8
+:100070000C94DC000C94DC000C94DC006E616E00CF
+:10008000696E660000407A10F35A00A0724E18099B
+:100090000010A5D4E80000E87648170000E40B54EF
+:1000A000020000CA9A3B000000E1F50500008096BE
+:1000B0009800000040420F000000A08601000000F0
+:1000C000102700000000E8030000000064000000AA
+:1000D00000000A00000000000100000000002C7673
+:1000E000D888DC674F0823DFC1DFAE59E1B1B7968E
+:1000F000E5E3E453C63AE651997696E8E6C28426EB
+:10010000EB898C9B62ED407C6FFCEFBC9C9F40F2C6
+:10011000BAA56FA5F490055A2AF75C936B6CF96742
+:100120006DC11BFCE0E40D47FEF520E6B500D0ED07
+:10013000902E0300943577050080841E080000206F
+:100140004E0A000000C80C333333330F986E12830D
+:100150001141EF8D2114893BE65516CFFEE6DB18E1
+:10016000D1844B381BF77C1D901DA4BBE4242032A6
+:1001700084725E228100C9F124ECA1E53D2711249F
+:100180001FBECFEFD0E1DEBFCDBF11E0A0E0B1E0F8
+:10019000E4EFF8E102C005900D92A434B107D9F75D
+:1001A00021E0A4E4B1E001C01D92AA3DB207E1F74D
+:1001B0000E94D5020C94780C0C940000F894909155
+:1001C000C00095FF03C08093C60014C09091CB017E
+:1001D000292F30E04091CA01241B31092038310514
+:1001E00049F0E92FEF77F0E0E65BFE4F80839F5FF9
+:1001F0009093CB01789480E090E008950E947D0474
+:1002000080E090E008951F920F920FB60F92112494
+:100210008F9389B182958F70806F8095809349010B
+:100220008F910F900FBE0F901F9018951F920F92F5
+:100230000FB60F9211248F93469A429881E08093D3
+:1002400045018F910F900FBE0F901F9018951F9230
+:100250000F920FB60F9211248F93479A439881E023
+:10026000809346018F910F900FBE0F901F901895AD
+:100270001F920F920FB60F9211248F93EF93FF935B
+:100280008091C6008093480180914701811104C08C
+:1002900080914801853569F4E0914701F0E0809153
+:1002A0004801E453FE4F8083809147018F5F809324
+:1002B0004701FF91EF918F910F900FBE0F901F900C
+:1002C00018951F920F920FB60F9211248F93EF93F0
+:1002D000FF93E091CA018091CB01E81761F0EF77BD
+:1002E000F0E0E65BFE4F80818093C600EAECF1E02F
+:1002F00080818F5F8083FF91EF918F910F900FBE70
+:100300000F901F9018951F920F920FB60F92112405
+:100310000F900FBE0F901F9018951F920F920FB65F
+:100320000F9211248F9381E0809344018F910F905D
+:100330000FBE0F901F90189584B7877F84BFE0E6AB
+:10034000F0E08081886180831082E9E6F0E08081BE
+:100350008A6080838DB383608DBB88B1806C88B9DF
+:1003600087B18C6C87B9599A519A1092C50086E270
+:100370008093C40022E02093C00088ED8093C100E8
+:1003800086E08093C20084B1876B84B985B1806BAD
+:1003900085B980E58CBD84E08093B8008093BC0073
+:1003A0008DE08093810080E094E0909389008093B9
+:1003B000880020936F00ECE7F0E08081806C808300
+:1003C00084E880937A008FEF80937E0088E08093AA
+:1003D000680080EF809373007894089595B16770FA
+:1003E000987F692B65B92C9891E19EBD0DB407FEED
+:1003F000FDCF8EBD0DB407FEFDCF2C9A0895CF9290
+:10040000DF92EF92FF92CF936A017B01C82FC170F8
+:100410002BE734E14EEC51E4C701B6010E9484069B
+:100420000E94CA05F62E64E06C0F8F2D0E94EE012B
+:100430006F2D70E080E090E00E94F6052BE734E13C
+:100440004EEC51E40E946205CF91FF90EF90DF9057
+:10045000CF900895CF92DF92EF92FF92CF936A01EF
+:100460007B018170C82FCC0F22E03BE247E051E4D2
+:10047000C701B6010E94840622E73AE84EE051E443
+:100480000E94FD040E94CA05F62E61E06C0F8F2DBC
+:100490000E94EE016F2D70E080E090E00E94F60572
+:1004A00022E73AE84EE051E40E94FE0422E03BE2FB
+:1004B00047E051E40E946205CF91FF90EF90DF90FA
+:1004C000CF900895CF92DF92EF92FF92CF936A017F
+:1004D0007B01C82FC17020E030E04FE753E4C70133
+:1004E000B6010E94840625E33EE542E050E40E9406
+:1004F00062050E94CA05F62E6C2F660F8F2D0E9492
+:10050000EE016F2D70E080E090E00E94F60525E39B
+:100510003EE542E050E40E94840620E030E04FE7F0
+:1005200053E40E946205CF91FF90EF90DF90CF904F
+:100530000895CF92DF92EF92FF920F931F93CF9384
+:10054000DF93EC016A017B01C901B801A7019601A3
+:100550000E94FD049B01AC0163E373E383E590E437
+:100560000E946205AB01BC0188810E942A02698356
+:100570007A838B839C832AE43CE042E45FE3C701F7
+:10058000B6010E948406AB01BC0188810E94620210
+:100590006D837E838F839887DF91CF911F910F9119
+:1005A000FF90EF90DF90CF900895CF93DF93CDB77A
+:1005B000DEB76A970FB6F894DEBF0FBECDBF1982C3
+:1005C0001A861B861C861D8681E08E871F8A188EE0
+:1005D000198E1A8E8EE091E09093D7018093D60108
+:1005E0000E949C010E94CD048CE191E00E94ED0BE1
+:1005F00020E031E040E150E061E070E083E291E032
+:100600000E94B90B61E080E00E94C30420E031E069
+:1006100040E150E061E070E083E291E00E94B90BBC
+:1006200040E050E0BA0180E00E94FF0140E050E06D
+:10063000BA0181E00E94FF010AE919E929E13FE3DB
+:1006400043E353E363EB7EE3CE0101960E949902FC
+:1006500000E010E020E830E440E050E060E87FE3B4
+:10066000CE010E960E949902C12CD12C0F2EF5E4DA
+:10067000EF2EF1E0FF2EF02D06E411E00F2EFDEC41
+:10068000AF2EF1E0BF2EF02D0F2EF3ED2F2EF1E067
+:100690003F2EF02D0F2EFCE74F2E512CF02D0F2E5C
+:1006A000FAE76F2E712CF02D0F2EF8E78F2E912C7C
+:1006B000F02DF70180818130B1F460E080E00E948C
+:1006C000C30420E031E04FE050E061E070E084E3FB
+:1006D00091E00E94B90BF70110828FE295E7019734
+:1006E000F1F700C00000F80180818130B1F461E0D1
+:1006F00080E00E94C30420E031E04FE050E061E080
+:1007000070E084E391E00E94B90BF80110828FE25F
+:1007100095E70197F1F700C0000080914701823012
+:1007200059F4F5018081823539F4F894E0E6F0E07F
+:10073000808188618083FFCF809147018830A9F450
+:1007400010924701F5018081EEECF1E08081EFEC41
+:10075000F1E08081E0EDF1E08081E1EDF1E0808188
+:10076000E2EDF1E08081F1018081809144018823F4
+:10077000E9F110924401CC2061F1F4018081E9E7B4
+:10078000F0E08081F1E0DF1671F0DF1638F082E0F2
+:10079000D81671F093E0D91681F014C060E080E0C3
+:1007A0000E94C30481C061E080E00E94C3047CC059
+:1007B00060E089E00E94C30477C061E089E00E94A4
+:1007C000C30404C0D394E4E0DE120FC0C12CD12CCA
+:1007D0000DC0F2018081887F8D298083F3018081A3
+:1007E00080648083CC24C39401C0C12C80914901D2
+:1007F000823021F118F4813031F05BCF843041F147
+:100800008830E1F156CF98B180E4892788B998B152
+:1008100084E0892788B9469B07C040E050E0BA01D0
+:1008200080E00E94FF0107C04A855B856C857D855D
+:1008300080E00E94FF01109249013BCF88B18058AF
+:1008400088B998B188E0892788B91092490131CFD9
+:1008500020E030E040E05FE36A857B858C859D8504
+:100860000E94FD04AB01BC014A875B876C877D87D2
+:1008700080E00E94FF01109249011BCF20E030E090
+:1008800040E05FE36A857B858C859D850E94FE0440
+:10089000AB01BC014A875B876C877D8780E00E9443
+:1008A000FF011092490105CFD394C12C9FCFECEBEF
+:1008B000F0E09081906A908390819923ECF79EE418
+:1008C0009093BB00ECEBF0E090819F7D9083908152
+:1008D0009068908390819923ECF78093BB00ECEBB8
+:1008E000F0E080818068808380818823ECF7ECEBE6
+:1008F000F0E08081806980830895CF93DF93C82FD3
+:10090000D82FD07F8D2F85600E9457048D2F816056
+:100910000E94570480E1C89FE00111248C2F85605C
+:100920000E9457048C2F81600E94570480E18A95B1
+:10093000F1F7DF91CF910895CF93DF93C82FD82F90
+:10094000D07F8D2F84600E9457048D2F0E94570402
+:1009500020E1C29FC001112484600E9457048C2FA3
+:100960008295807F0E945704C13039F48FE496E469
+:100970000197F1F700C0000003C098E29A95F1F7E3
+:10098000DF91CF91089561708F7090E4699F800D21
+:10099000112480680E949C040895CF9380E00E94F7
+:1009A00057042FEB84ED91E0215080409040E1F717
+:1009B00000C00000C5E084E00E94570480E00E946F
+:1009C0005704C150C1F728EC2A95F1F784E20E9440
+:1009D000570480E20E9457048AE20E949C0488E047
+:1009E0000E949C0481E00E949C0486E00E949C047A
+:1009F0008CE00E949C04CF9108955058BB27AA27F1
+:100A00000ED048C139D130F03ED120F031F49F3FB3
+:100A100011F41EF42EC10EF4E095E7FB24C1E92F7A
+:100A20004AD180F3BA17620773078407950718F055
+:100A300071F49EF562C10EF4E0950B2EBA2FA02D35
+:100A40000B01B90190010C01CA01A0011124FF277B
+:100A5000591B99F0593F50F4503E68F11A16F04076
+:100A6000A22F232F342F4427585FF3CF4695379575
+:100A70002795A795F0405395C9F77EF41F16BA0B3A
+:100A8000620B730B840BBAF09150A1F0FF0FBB1FE8
+:100A9000661F771F881FC2F70EC0BA0F621F731F31
+:100AA000841F48F4879577956795B795F7959E3F8E
+:100AB00008F0B3CF9395880F08F09927EE0F97951C
+:100AC000879508950CD0E6C0DED040F0D5D030F048
+:100AD00021F45F3F19F0C7C0511110C1CAC0EBD05B
+:100AE00098F39923C9F35523B1F3951B550BBB27F5
+:100AF000AA2762177307840738F09F5F5F4F220FA2
+:100B0000331F441FAA1FA9F333D00E2E3AF0E0E89A
+:100B100030D091505040E695001CCAF729D0FE2FE6
+:100B200027D0660F771F881FBB1F26173707480778
+:100B3000AB07B0E809F0BB0B802DBF01FF2793582E
+:100B40005F4F2AF09E3F510568F08DC0D7C05F3FD0
+:100B5000ECF3983EDCF3869577956795B795F79516
+:100B60009F5FC9F7880F911D9695879597F908950E
+:100B7000E1E0660F771F881FBB1F621773078407AA
+:100B8000BA0720F0621B730B840BBA0BEE1F88F7B9
+:100B9000E095089598D088F09F5790F0B92F992745
+:100BA000B751A0F0D1F0660F771F881F991F1AF078
+:100BB000BA95C9F712C0B13081F09FD0B1E0089565
+:100BC0009CC0672F782F8827B85F39F0B93FCCF3E6
+:100BD000869577956795B395D9F73EF4909580956E
+:100BE000709561957F4F8F4F9F4F0895E89409C08E
+:100BF00097FB3EF490958095709561957F4F8F4F50
+:100C00009F4F9923A9F0F92F96E9BB279395F69565
+:100C1000879577956795B795F111F8CFFAF4BB0FE3
+:100C200011F460FF1BC06F5F7F4F8F4F9F4F16C047
+:100C3000882311F096E911C0772321F09EE8872FD1
+:100C4000762F05C0662371F096E8862F70E060E08D
+:100C50002AF09A95660F771F881FDAF7880F969506
+:100C6000879597F9089597F99F6780E870E060E0AD
+:100C700008959FEF80EC089500240A941616170635
+:100C800018060906089500240A941216130614067D
+:100C900005060895092E0394000C11F4882352F0E0
+:100CA000BB0F40F4BF2B11F460FF04C06F5F7F4F98
+:100CB0008F4F9F4F089557FD9058440F551F59F07F
+:100CC0005F3F71F04795880F97FB991F61F09F3F39
+:100CD00079F087950895121613061406551FF2CF62
+:100CE0004695F1DF08C0161617061806991FF1CFB2
+:100CF00086957105610508940895E894BB276627D9
+:100D00007727CB0197F908950BD0C4CFB5DF28F032
+:100D1000BADF18F0952309F0A6CFABCF1124EECFA0
+:100D2000CADFA0F3959FD1F3950F50E0551F629F46
+:100D3000F001729FBB27F00DB11D639FAA27F00D34
+:100D4000B11DAA1F649F6627B00DA11D661F829F5B
+:100D50002227B00DA11D621F739FB00DA11D621F40
+:100D6000839FA00D611D221F749F3327A00D611D5D
+:100D7000231F849F600D211D822F762F6A2F11243F
+:100D80009F5750408AF0E1F088234AF0EE0FFF1F92
+:100D9000BB1F661F771F881F91505040A9F79E3FC9
+:100DA000510570F060CFAACF5F3FECF3983EDCF3C3
+:100DB000869577956795B795F795E7959F5FC1F706
+:100DC000FE2B880F911D9695879597F90895A3E1BD
+:100DD000B0E0EDEEF6E00C94620A7C011B016A01C2
+:100DE000FC0117821682838181FF66C3BE016F5F9B
+:100DF0007F4F4B01F7019381F10193FD859193FFA3
+:100E000081911F01882309F453C3853239F493FD7E
+:100E1000859193FF81911F01853239F4B70190E0EC
+:100E20000E94870B56016501E5CF10E0512C20E0B0
+:100E30002032A0F48B3269F030F4803259F08332E2
+:100E400069F420612CC08D3239F0803339F421608F
+:100E500026C02260246023C0286021C027FD27C04F
+:100E600030ED380F3A3078F426FF06C0FAE01F9FC5
+:100E7000300D1124132F13C06AE0569E300D11243B
+:100E8000532E20620CC08E3221F426FD11C3206443
+:100E900006C08C3611F4206802C0883641F4F10196
+:100EA00093FD859193FF81911F018111C1CF9BEB30
+:100EB000980F933018F42061805E06C09BE9980F6C
+:100EC000933008F0AAC12F7E26FF16E02F73722EF2
+:100ED000853621F4F22FF0647F2E08C0863621F487
+:100EE000622F6068762E02C01111115077FE07C084
+:100EF0001C3348F444244394410E27E00BC01830BF
+:100F000030F4212F06C027E04CE3442E03C027E035
+:100F100017E0412C560174E0A70EB11CF601608168
+:100F2000718182819381042DA4010E94990A6C0130
+:100F3000098100FF02C003FF06C071FC07C072FCFC
+:100F400008C0612C08C03DE2632E05C02BE2622E72
+:100F500002C090E2692E802F8C7099F1662011F00A
+:100F600084E001C083E0851510F0512C0BC0581AA5
+:100F700073FC08C0B70180E290E00E94870B5A948E
+:100F8000C9F7F3CF662029F0B701862D90E00E94C3
+:100F9000870B03FD03C000E810E002C00CE710E07F
+:100FA000F72DF0717F2EF8018491882309F476C221
+:100FB00071108052B70190E00E94870B0F5F1F4FA6
+:100FC000F2CF77FE0FC04C0C04FF04C08A8181333E
+:100FD00009F44A94141474F5F8E0F41578F588E0EF
+:100FE000482E2CC076FC2AC0812F90E08C159D05E0
+:100FF0009CF06CEFC6166FEFD60674F0772D706814
+:10100000772E0AC0E2E0F0E0EC0FFD1FE10FF11DCA
+:101010008081803319F411501111F4CF77FE0EC086
+:1010200044244394410E812F90E0C816D9062CF435
+:101030001C1904C04424439401C010E077FE07C08B
+:101040001C141D043CF496012F5F3F4F05C025E0A2
+:1010500030E002C021E030E0662011F02F5F3F4F0A
+:10106000112331F0412F50E04F5F5F4F240F351FA8
+:10107000452D50E02417350714F4521A01C0512CA5
+:10108000872D897049F4552039F0B70180E290E04E
+:101090000E94870B5A94F7CF662029F0B701862D5E
+:1010A00090E00E94870B73FC09C0552039F0B7010E
+:1010B00080E390E00E94870B5A94F7CF77FE5FC0E1
+:1010C0009C2D8D2DD7FE02C090E080E0692E782EF9
+:1010D00040E050E0C601841991099D878C879601F4
+:1010E00026193709280D391D812F90E0EE27FF279B
+:1010F000E81BF90BFF87EE87FFEF6F167F0669F499
+:10110000B7018EE290E02B8B3A8B488B598B0E9473
+:10111000870B598948893A892B89C614D70454F01A
+:101120006C857D85661577052CF4F901E40FF51FB4
+:10113000818101C080E371E0671A71084F5F5F4FE2
+:10114000EE85FF856E167F066CF0B70190E02B8B65
+:101150003A8B488B598B0E94870B2B893A89488997
+:101160005989CACF6C147D0439F49A81963318F4E6
+:10117000953311F404FF81E3B70190E04BC08A81FD
+:10118000813309F00F7EB70190E00E94870B1111A7
+:1011900005C074FE18C085E490E017C0B7018EE268
+:1011A00090E00E94870B82E066246394680EF4014D
+:1011B000E80FF11D8081B70190E00E94870B11506C
+:1011C00041F3862DF1CF85E690E0B7010E94870BB1
+:1011D000D7FC05C0C114D10439F404FF05C0D19473
+:1011E000C194D1088DE201C08BE2B70190E00E946A
+:1011F000870B80E36AE0C616D1042CF08F5FFAE01B
+:10120000CF1AD108F7CFB70190E00E94870BB70142
+:10121000C601C0960E94870B41C1833631F08337E7
+:1012200079F0833509F058C021C0560172E0A70E4D
+:10123000B11CF6018081898301E010E0640114C0D3
+:101240005601F2E0AF0EB11CF601C080D18026FF3E
+:1012500003C0612F70E002C06FEF7FEFC6012B8BE0
+:101260000E947C0B8C012B892F7715C05601F2E070
+:10127000AF0EB11CF601C080D18026FF03C0612FE4
+:1012800070E002C06FEF7FEFC6012B8B0E94710BE5
+:101290008C012B892068722E23FD1AC0852D90E0C9
+:1012A00008171907A8F4B70180E290E00E94870BA5
+:1012B0005A94F4CFF60177FC859177FE81916F0106
+:1012C000B70190E00E94870B51105A940150110908
+:1012D0000115110579F7E2C0843611F0893651F510
+:1012E000560127FF09C0F4E0AF0EB11CF601608182
+:1012F0007181828193810AC0F2E0AF0EB11CF601C8
+:1013000060817181882777FD8095982F022F0F7655
+:1013100097FF08C090958095709561957F4F8F4F8E
+:101320009F4F00682AE030E0A4010E941A0CC82EEA
+:10133000C8183EC0022F853721F40F7E2AE030E026
+:101340001DC0097F8F3691F018F4883559F0B0C070
+:10135000803719F0883711F0ABC0006104FF09C075
+:10136000046007C024FF08C0066006C028E030E023
+:1013700005C020E130E002C020E132E0560107FF65
+:1013800009C0F4E0AF0EB11CF60160817181828169
+:10139000938108C0F2E0AF0EB11CF601608171814B
+:1013A00080E090E0A4010E941A0CC82EC8180F77A4
+:1013B00006FF0BC0202F2E7FC11650F404FF0AC079
+:1013C00002FD08C0202F2E7E05C0DC2C202F03C07C
+:1013D000DC2C01C0D12E24FF0DC0FE01EC0DF11D4F
+:1013E0008081803311F4297E09C022FF06C0D39486
+:1013F000D39404C0822F867809F0D39423FD13C0C0
+:1014000020FF06C01C2DD51418F4150D1D19D52C60
+:10141000D51468F4B70180E290E02B8B0E94870B13
+:10142000D3942B89F5CFD51410F45D1801C0512C3D
+:1014300024FF12C0B70180E390E02B8B0E94870B42
+:101440002B8922FF17C021FF03C088E590E002C06E
+:1014500088E790E0B7010CC0822F867859F021FD13
+:1014600002C080E201C08BE227FD8DE2B70190E06F
+:101470000E94870BC11638F4B70180E390E00E9408
+:10148000870B1150F7CFCA94F401EC0DF11D808148
+:10149000B70190E00E94870BC110F5CF552009F4E9
+:1014A000C2CCB70180E290E00E94870B5A94F6CF3D
+:1014B000F7018681978102C08FEF9FEF6396E2E18B
+:1014C0000C947E0A2F923F924F925F926F927F927E
+:1014D0008F929F92AF92BF92CF92DF92EF92FF9244
+:1014E0000F931F93CF93DF93CDB7DEB7CA1BDB0BF0
+:1014F0000FB6F894DEBF0FBECDBF09942A88398895
+:1015000048885F846E847D848C849B84AA84B9849B
+:10151000C884DF80EE80FD800C811B81AA81B981A7
+:10152000CE0FD11D0FB6F894DEBF0FBECDBFED01BB
+:101530000895283008F027E03327DA01990F311D8C
+:1015400087FD916000966105710539F432602E5F68
+:101550003D9330E32A95E1F708959F3F30F08038BE
+:101560007105610509F03C5F3C5F3D93913008F0E7
+:101570008068911DDF93CF931F930F93FF92EF929B
+:10158000192F987F9695E92F96959695E90FFF2745
+:10159000E252FF4F99273327EE24FF24A701E701EA
+:1015A00005900894079428F4360FE71EF81E491F8B
+:1015B000511D660F771F881F991F0694A1F705908C
+:1015C000079428F4E70EF81E491F561FC11D770F18
+:1015D000881F991F661F0694A1F70590079428F4A9
+:1015E000F80E491F561FC71FD11D880F991F661F70
+:1015F000771F0694A1F70590079420F4490F561F12
+:10160000C71FD81F990F661F771F881F0694A9F759
+:1016100084911095177041F0D695C79557954795C9
+:10162000F794E7941A95C1F7E4E8F0E06894159010
+:10163000159135916591959105907FE27395E1182B
+:10164000F10A430B560BC90BD009C0F7E10CF11E90
+:10165000431F561FC91FD01D7EF4703311F48A95A5
+:10166000E6CFE894015030F0080F0AF40027021783
+:1016700008F4202F2395022F7A3328F079E37D9305
+:101680002A95E9F710C07D932A9589F606949795D7
+:101690006795379517951794E118F10A430B560B88
+:1016A000C90BD00998F023957E9173957A3308F091
+:1016B00070E37C932013B8F77E9170617D9330F0D6
+:1016C000839571E37D9370E32A95E1F71124EF9000
+:1016D000FF900F911F91CF91DF91992787FD9095F2
+:1016E0000895FC010590615070400110D8F7809575
+:1016F00090958E0F9F1F0895FC01615070400190DE
+:101700000110D8F7809590958E0F9F1F08950F9325
+:101710001F93CF93DF93182F092FEB018B8181FD4E
+:1017200003C08FEF9FEF20C082FF10C04E815F810A
+:101730002C813D81421753077CF4E881F9819F0198
+:101740002F5F3F4F39832883108306C0E885F985D2
+:10175000812F0995892B29F72E813F812F5F3F4FDC
+:101760003F832E83812F902FDF91CF911F910F9177
+:101770000895A0E0B0E0EFEBFBE00C94680A6B0189
+:101780004A017901D90113962C9121FF1DC0C0E0B7
+:10179000D0E0C815D905D9F08C015C01AC0CBD1C9A
+:1017A000C8010A151B0571F00F5F1F4FD70118966E
+:1017B000ED91FC911997B701DC018C910995892B6A
+:1017C00079F305C02196E5CF80E090E001C0CE011D
+:1017D000CDB7DEB7ECE00C94840A0F931F93CF9340
+:1017E000DF93E091D601F091D701238121FF1BC047
+:1017F000EC0100E010E089916091D6017091D70171
+:10180000DB011896ED91FC911997882331F0099529
+:10181000892B89F30FEF1FEFEECF8AE00995892B13
+:1018200011F4C80102C08FEF9FEFDF91CF911F919C
+:101830000F910895FA01AA27283051F1203181F142
+:10184000E8946F936E7F6E5F7F4F8F4F9F4FAF4FC8
+:10185000B1E03ED0B4E03CD0670F781F891F9A1FDB
+:10186000A11D680F791F8A1F911DA11D6A0F711D8F
+:10187000811D911DA11D20D009F468943F912AE09B
+:10188000269F11243019305D3193DEF6CF01089583
+:10189000462F4770405D4193B3E00FD0C9F7F6CFB4
+:1018A000462F4F70405D4A3318F0495D31FD40527C
+:1018B000419302D0A9F7EACFB4E0A6959795879512
+:1018C00077956795BA95C9F70097610571050895F1
+:1018D0009B01AC010A2E069457954795379527959D
+:1018E000BA95C9F7620F731F841F951FA01D089535
+:0418F000F894FFCF9A
+:1018F4000000000200000000FE00000000000000E4
+:10190400000200000000DE000000000048454C4CCE
+:101914004F0D00FFFFFFFFFFFFFFFFFFFFFFFFFF74
+:10192400FFFFFF0020204F56455243555252454E6B
+:04193400542020001B
+:00000001FF

+ 3594 - 0
heater3/Debug/heater3_6_2.lss

@@ -0,0 +1,3594 @@
+
+heater3_6_2.elf:     file format elf32-avr
+
+Sections:
+Idx Name          Size      VMA       LMA       File off  Algn
+  0 .data         00000044  00800100  000018f4  00001988  2**0
+                  CONTENTS, ALLOC, LOAD, DATA
+  1 .text         000018f4  00000000  00000000  00000094  2**1
+                  CONTENTS, ALLOC, LOAD, READONLY, CODE
+  2 .bss          00000096  00800144  00800144  000019cc  2**0
+                  ALLOC
+  3 .comment      0000005c  00000000  00000000  000019cc  2**0
+                  CONTENTS, READONLY
+  4 .debug_aranges 000000e8  00000000  00000000  00001a28  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  5 .debug_info   000011b3  00000000  00000000  00001b10  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  6 .debug_abbrev 0000050b  00000000  00000000  00002cc3  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  7 .debug_line   00000508  00000000  00000000  000031ce  2**0
+                  CONTENTS, READONLY, DEBUGGING
+  8 .debug_frame  000002d8  00000000  00000000  000036d8  2**2
+                  CONTENTS, READONLY, DEBUGGING
+  9 .debug_str    000004d5  00000000  00000000  000039b0  2**0
+                  CONTENTS, READONLY, DEBUGGING
+ 10 .debug_loc    00000b53  00000000  00000000  00003e85  2**0
+                  CONTENTS, READONLY, DEBUGGING
+ 11 .debug_ranges 000000e0  00000000  00000000  000049d8  2**0
+                  CONTENTS, READONLY, DEBUGGING
+
+Disassembly of section .text:
+
+00000000 <__vectors>:
+       0:	0c 94 bf 00 	jmp	0x17e	; 0x17e <__ctors_end>
+       4:	0c 94 16 01 	jmp	0x22c	; 0x22c <__vector_1>
+       8:	0c 94 27 01 	jmp	0x24e	; 0x24e <__vector_2>
+       c:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      10:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      14:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      18:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      1c:	0c 94 03 01 	jmp	0x206	; 0x206 <__vector_7>
+      20:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      24:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      28:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      2c:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      30:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      34:	0c 94 8d 01 	jmp	0x31a	; 0x31a <__vector_13>
+      38:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      3c:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      40:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      44:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      48:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      4c:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      50:	0c 94 38 01 	jmp	0x270	; 0x270 <__vector_20>
+      54:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      58:	0c 94 61 01 	jmp	0x2c2	; 0x2c2 <__vector_22>
+      5c:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      60:	0c 94 83 01 	jmp	0x306	; 0x306 <__vector_24>
+      64:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      68:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      6c:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      70:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      74:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+      78:	0c 94 dc 00 	jmp	0x1b8	; 0x1b8 <__bad_interrupt>
+
+0000007c <__trampolines_end>:
+      7c:	6e 61       	ori	r22, 0x1E	; 30
+      7e:	6e 00       	.word	0x006e	; ????
+
+00000080 <__c.2159>:
+      80:	69 6e 66 00 00 40 7a 10 f3 5a 00 a0 72 4e 18 09     inf..@z..Z..rN..
+      90:	00 10 a5 d4 e8 00 00 e8 76 48 17 00 00 e4 0b 54     ........vH.....T
+      a0:	02 00 00 ca 9a 3b 00 00 00 e1 f5 05 00 00 80 96     .....;..........
+      b0:	98 00 00 00 40 42 0f 00 00 00 a0 86 01 00 00 00     ....@B..........
+      c0:	10 27 00 00 00 00 e8 03 00 00 00 00 64 00 00 00     .'..........d...
+      d0:	00 00 0a 00 00 00 00 00 01 00 00 00 00 00 2c 76     ..............,v
+      e0:	d8 88 dc 67 4f 08 23 df c1 df ae 59 e1 b1 b7 96     ...gO.#....Y....
+      f0:	e5 e3 e4 53 c6 3a e6 51 99 76 96 e8 e6 c2 84 26     ...S.:.Q.v.....&
+     100:	eb 89 8c 9b 62 ed 40 7c 6f fc ef bc 9c 9f 40 f2     ....b.@|o.....@.
+     110:	ba a5 6f a5 f4 90 05 5a 2a f7 5c 93 6b 6c f9 67     ..o....Z*.\.kl.g
+     120:	6d c1 1b fc e0 e4 0d 47 fe f5 20 e6 b5 00 d0 ed     m......G.. .....
+     130:	90 2e 03 00 94 35 77 05 00 80 84 1e 08 00 00 20     .....5w........ 
+     140:	4e 0a 00 00 00 c8 0c 33 33 33 33 0f 98 6e 12 83     N......3333..n..
+     150:	11 41 ef 8d 21 14 89 3b e6 55 16 cf fe e6 db 18     .A..!..;.U......
+     160:	d1 84 4b 38 1b f7 7c 1d 90 1d a4 bb e4 24 20 32     ..K8..|......$ 2
+     170:	84 72 5e 22 81 00 c9 f1 24 ec a1 e5 3d 27           .r^"....$...='
+
+0000017e <__ctors_end>:
+     17e:	11 24       	eor	r1, r1
+     180:	1f be       	out	0x3f, r1	; 63
+     182:	cf ef       	ldi	r28, 0xFF	; 255
+     184:	d0 e1       	ldi	r29, 0x10	; 16
+     186:	de bf       	out	0x3e, r29	; 62
+     188:	cd bf       	out	0x3d, r28	; 61
+
+0000018a <__do_copy_data>:
+     18a:	11 e0       	ldi	r17, 0x01	; 1
+     18c:	a0 e0       	ldi	r26, 0x00	; 0
+     18e:	b1 e0       	ldi	r27, 0x01	; 1
+     190:	e4 ef       	ldi	r30, 0xF4	; 244
+     192:	f8 e1       	ldi	r31, 0x18	; 24
+     194:	02 c0       	rjmp	.+4      	; 0x19a <__do_copy_data+0x10>
+     196:	05 90       	lpm	r0, Z+
+     198:	0d 92       	st	X+, r0
+     19a:	a4 34       	cpi	r26, 0x44	; 68
+     19c:	b1 07       	cpc	r27, r17
+     19e:	d9 f7       	brne	.-10     	; 0x196 <__do_copy_data+0xc>
+
+000001a0 <__do_clear_bss>:
+     1a0:	21 e0       	ldi	r18, 0x01	; 1
+     1a2:	a4 e4       	ldi	r26, 0x44	; 68
+     1a4:	b1 e0       	ldi	r27, 0x01	; 1
+     1a6:	01 c0       	rjmp	.+2      	; 0x1aa <.do_clear_bss_start>
+
+000001a8 <.do_clear_bss_loop>:
+     1a8:	1d 92       	st	X+, r1
+
+000001aa <.do_clear_bss_start>:
+     1aa:	aa 3d       	cpi	r26, 0xDA	; 218
+     1ac:	b2 07       	cpc	r27, r18
+     1ae:	e1 f7       	brne	.-8      	; 0x1a8 <.do_clear_bss_loop>
+     1b0:	0e 94 d5 02 	call	0x5aa	; 0x5aa <main>
+     1b4:	0c 94 78 0c 	jmp	0x18f0	; 0x18f0 <_exit>
+
+000001b8 <__bad_interrupt>:
+     1b8:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>
+
+000001bc <uart_putchar>:
+	return 0;
+}
+
+static int uart_putchar(char c, FILE *stream)
+{
+	cli();
+     1bc:	f8 94       	cli
+	if(UCSR0A & (1 << UDRIE0))
+     1be:	90 91 c0 00 	lds	r25, 0x00C0
+     1c2:	95 ff       	sbrs	r25, 5
+     1c4:	03 c0       	rjmp	.+6      	; 0x1cc <uart_putchar+0x10>
+	{
+		UDR0 = c;
+     1c6:	80 93 c6 00 	sts	0x00C6, r24
+     1ca:	14 c0       	rjmp	.+40     	; 0x1f4 <uart_putchar+0x38>
+	}
+	else
+	{
+		if(!FIFO_IS_FULL(fifo0))
+     1cc:	90 91 cb 01 	lds	r25, 0x01CB
+     1d0:	29 2f       	mov	r18, r25
+     1d2:	30 e0       	ldi	r19, 0x00	; 0
+     1d4:	40 91 ca 01 	lds	r20, 0x01CA
+     1d8:	24 1b       	sub	r18, r20
+     1da:	31 09       	sbc	r19, r1
+     1dc:	20 38       	cpi	r18, 0x80	; 128
+     1de:	31 05       	cpc	r19, r1
+     1e0:	49 f0       	breq	.+18     	; 0x1f4 <uart_putchar+0x38>
+		{
+			FIFO_PUSH(fifo0, c);
+     1e2:	e9 2f       	mov	r30, r25
+     1e4:	ef 77       	andi	r30, 0x7F	; 127
+     1e6:	f0 e0       	ldi	r31, 0x00	; 0
+     1e8:	e6 5b       	subi	r30, 0xB6	; 182
+     1ea:	fe 4f       	sbci	r31, 0xFE	; 254
+     1ec:	80 83       	st	Z, r24
+     1ee:	9f 5f       	subi	r25, 0xFF	; 255
+     1f0:	90 93 cb 01 	sts	0x01CB, r25
+		}
+	}
+	sei();
+     1f4:	78 94       	sei
+	return 0;
+}
+     1f6:	80 e0       	ldi	r24, 0x00	; 0
+     1f8:	90 e0       	ldi	r25, 0x00	; 0
+     1fa:	08 95       	ret
+
+000001fc <lcd_putchar>:
+	return(data);
+}
+
+static int lcd_putchar(char c, FILE *stream)
+{
+	LCD_SendData(c);
+     1fc:	0e 94 7d 04 	call	0x8fa	; 0x8fa <LCD_SendData>
+	return 0;
+}
+     200:	80 e0       	ldi	r24, 0x00	; 0
+     202:	90 e0       	ldi	r25, 0x00	; 0
+     204:	08 95       	ret
+
+00000206 <__vector_7>:
+volatile uint8_t tick = 0;
+
+FIFO(128) fifo0;
+
+ISR(PCINT3_vect)
+{
+     206:	1f 92       	push	r1
+     208:	0f 92       	push	r0
+     20a:	0f b6       	in	r0, 0x3f	; 63
+     20c:	0f 92       	push	r0
+     20e:	11 24       	eor	r1, r1
+     210:	8f 93       	push	r24
+	//PCICR &= ~(1 << PCIE3);
+	btn_pressed = ~((BTNPIN >> 4) | 0xF0);
+     212:	89 b1       	in	r24, 0x09	; 9
+     214:	82 95       	swap	r24
+     216:	8f 70       	andi	r24, 0x0F	; 15
+     218:	80 6f       	ori	r24, 0xF0	; 240
+     21a:	80 95       	com	r24
+     21c:	80 93 49 01 	sts	0x0149, r24
+}
+     220:	8f 91       	pop	r24
+     222:	0f 90       	pop	r0
+     224:	0f be       	out	0x3f, r0	; 63
+     226:	0f 90       	pop	r0
+     228:	1f 90       	pop	r1
+     22a:	18 95       	reti
+
+0000022c <__vector_1>:
+
+ISR(INT0_vect) /*OVERCURRENT PROTECTION 1*/
+{
+     22c:	1f 92       	push	r1
+     22e:	0f 92       	push	r0
+     230:	0f b6       	in	r0, 0x3f	; 63
+     232:	0f 92       	push	r0
+     234:	11 24       	eor	r1, r1
+     236:	8f 93       	push	r24
+	GATEPORT |= (1 << GATE1);
+     238:	46 9a       	sbi	0x08, 6	; 8
+	LEDPORT &= ~(1 << LED1);
+     23a:	42 98       	cbi	0x08, 2	; 8
+	ocp_ch[0] = 1;
+     23c:	81 e0       	ldi	r24, 0x01	; 1
+     23e:	80 93 45 01 	sts	0x0145, r24
+}
+     242:	8f 91       	pop	r24
+     244:	0f 90       	pop	r0
+     246:	0f be       	out	0x3f, r0	; 63
+     248:	0f 90       	pop	r0
+     24a:	1f 90       	pop	r1
+     24c:	18 95       	reti
+
+0000024e <__vector_2>:
+
+ISR(INT1_vect) /*OVERCURRENT PROTECTION 2*/
+{
+     24e:	1f 92       	push	r1
+     250:	0f 92       	push	r0
+     252:	0f b6       	in	r0, 0x3f	; 63
+     254:	0f 92       	push	r0
+     256:	11 24       	eor	r1, r1
+     258:	8f 93       	push	r24
+	GATEPORT |= (1 << GATE2);
+     25a:	47 9a       	sbi	0x08, 7	; 8
+	LEDPORT &= ~(1 << LED2);
+     25c:	43 98       	cbi	0x08, 3	; 8
+	ocp_ch[1] = 1;
+     25e:	81 e0       	ldi	r24, 0x01	; 1
+     260:	80 93 46 01 	sts	0x0146, r24
+}
+     264:	8f 91       	pop	r24
+     266:	0f 90       	pop	r0
+     268:	0f be       	out	0x3f, r0	; 63
+     26a:	0f 90       	pop	r0
+     26c:	1f 90       	pop	r1
+     26e:	18 95       	reti
+
+00000270 <__vector_20>:
+
+ISR(USART0_RX_vect)
+{
+     270:	1f 92       	push	r1
+     272:	0f 92       	push	r0
+     274:	0f b6       	in	r0, 0x3f	; 63
+     276:	0f 92       	push	r0
+     278:	11 24       	eor	r1, r1
+     27a:	8f 93       	push	r24
+     27c:	ef 93       	push	r30
+     27e:	ff 93       	push	r31
+	rxbyte = UDR0;
+     280:	80 91 c6 00 	lds	r24, 0x00C6
+     284:	80 93 48 01 	sts	0x0148, r24
+	if(rxcounter || (rxbyte == 0x55))
+     288:	80 91 47 01 	lds	r24, 0x0147
+     28c:	81 11       	cpse	r24, r1
+     28e:	04 c0       	rjmp	.+8      	; 0x298 <__vector_20+0x28>
+     290:	80 91 48 01 	lds	r24, 0x0148
+     294:	85 35       	cpi	r24, 0x55	; 85
+     296:	69 f4       	brne	.+26     	; 0x2b2 <__vector_20+0x42>
+	{
+		rxbuffer[rxcounter] = rxbyte;
+     298:	e0 91 47 01 	lds	r30, 0x0147
+     29c:	f0 e0       	ldi	r31, 0x00	; 0
+     29e:	80 91 48 01 	lds	r24, 0x0148
+     2a2:	e4 53       	subi	r30, 0x34	; 52
+     2a4:	fe 4f       	sbci	r31, 0xFE	; 254
+     2a6:	80 83       	st	Z, r24
+		rxcounter++;
+     2a8:	80 91 47 01 	lds	r24, 0x0147
+     2ac:	8f 5f       	subi	r24, 0xFF	; 255
+     2ae:	80 93 47 01 	sts	0x0147, r24
+	}
+}
+     2b2:	ff 91       	pop	r31
+     2b4:	ef 91       	pop	r30
+     2b6:	8f 91       	pop	r24
+     2b8:	0f 90       	pop	r0
+     2ba:	0f be       	out	0x3f, r0	; 63
+     2bc:	0f 90       	pop	r0
+     2be:	1f 90       	pop	r1
+     2c0:	18 95       	reti
+
+000002c2 <__vector_22>:
+
+ISR(USART0_TX_vect)
+{
+     2c2:	1f 92       	push	r1
+     2c4:	0f 92       	push	r0
+     2c6:	0f b6       	in	r0, 0x3f	; 63
+     2c8:	0f 92       	push	r0
+     2ca:	11 24       	eor	r1, r1
+     2cc:	8f 93       	push	r24
+     2ce:	ef 93       	push	r30
+     2d0:	ff 93       	push	r31
+	if(!FIFO_IS_EMPTY(fifo0))
+     2d2:	e0 91 ca 01 	lds	r30, 0x01CA
+     2d6:	80 91 cb 01 	lds	r24, 0x01CB
+     2da:	e8 17       	cp	r30, r24
+     2dc:	61 f0       	breq	.+24     	; 0x2f6 <__vector_22+0x34>
+	{
+		UDR0 = FIFO_FRONT(fifo0);
+     2de:	ef 77       	andi	r30, 0x7F	; 127
+     2e0:	f0 e0       	ldi	r31, 0x00	; 0
+     2e2:	e6 5b       	subi	r30, 0xB6	; 182
+     2e4:	fe 4f       	sbci	r31, 0xFE	; 254
+     2e6:	80 81       	ld	r24, Z
+     2e8:	80 93 c6 00 	sts	0x00C6, r24
+		FIFO_POP(fifo0);
+     2ec:	ea ec       	ldi	r30, 0xCA	; 202
+     2ee:	f1 e0       	ldi	r31, 0x01	; 1
+     2f0:	80 81       	ld	r24, Z
+     2f2:	8f 5f       	subi	r24, 0xFF	; 255
+     2f4:	80 83       	st	Z, r24
+	}
+}
+     2f6:	ff 91       	pop	r31
+     2f8:	ef 91       	pop	r30
+     2fa:	8f 91       	pop	r24
+     2fc:	0f 90       	pop	r0
+     2fe:	0f be       	out	0x3f, r0	; 63
+     300:	0f 90       	pop	r0
+     302:	1f 90       	pop	r1
+     304:	18 95       	reti
+
+00000306 <__vector_24>:
+
+ISR(ADC_vect)
+{
+     306:	1f 92       	push	r1
+     308:	0f 92       	push	r0
+     30a:	0f b6       	in	r0, 0x3f	; 63
+     30c:	0f 92       	push	r0
+     30e:	11 24       	eor	r1, r1
+	
+}
+     310:	0f 90       	pop	r0
+     312:	0f be       	out	0x3f, r0	; 63
+     314:	0f 90       	pop	r0
+     316:	1f 90       	pop	r1
+     318:	18 95       	reti
+
+0000031a <__vector_13>:
+
+ISR(TIMER1_COMPA_vect)
+{
+     31a:	1f 92       	push	r1
+     31c:	0f 92       	push	r0
+     31e:	0f b6       	in	r0, 0x3f	; 63
+     320:	0f 92       	push	r0
+     322:	11 24       	eor	r1, r1
+     324:	8f 93       	push	r24
+	tick = 1;
+     326:	81 e0       	ldi	r24, 0x01	; 1
+     328:	80 93 44 01 	sts	0x0144, r24
+}
+     32c:	8f 91       	pop	r24
+     32e:	0f 90       	pop	r0
+     330:	0f be       	out	0x3f, r0	; 63
+     332:	0f 90       	pop	r0
+     334:	1f 90       	pop	r1
+     336:	18 95       	reti
+
+00000338 <init>:
+
+void init()
+{
+	/* Watchdog clear*/
+	MCUSR &= ~(1 << WDRF);
+     338:	84 b7       	in	r24, 0x34	; 52
+     33a:	87 7f       	andi	r24, 0xF7	; 247
+     33c:	84 bf       	out	0x34, r24	; 52
+	WDTCSR |= (1 << WDCE) | (1 << WDE);
+     33e:	e0 e6       	ldi	r30, 0x60	; 96
+     340:	f0 e0       	ldi	r31, 0x00	; 0
+     342:	80 81       	ld	r24, Z
+     344:	88 61       	ori	r24, 0x18	; 24
+     346:	80 83       	st	Z, r24
+	WDTCSR = 0x00;
+     348:	10 82       	st	Z, r1
+	
+	/* INT0 & INT1 Initialization*/
+	EICRA |= (1 << ISC01) | (1 << ISC11);
+     34a:	e9 e6       	ldi	r30, 0x69	; 105
+     34c:	f0 e0       	ldi	r31, 0x00	; 0
+     34e:	80 81       	ld	r24, Z
+     350:	8a 60       	ori	r24, 0x0A	; 10
+     352:	80 83       	st	Z, r24
+	EIMSK |= (1 << INT0) | (1 << INT1);
+     354:	8d b3       	in	r24, 0x1d	; 29
+     356:	83 60       	ori	r24, 0x03	; 3
+     358:	8d bb       	out	0x1d, r24	; 29
+	
+	/* GPIO Initialization */
+	PORTC |= (1 << GATE1) | (1 << GATE2);
+     35a:	88 b1       	in	r24, 0x08	; 8
+     35c:	80 6c       	ori	r24, 0xC0	; 192
+     35e:	88 b9       	out	0x08, r24	; 8
+	DDRC  |= (1 << LED1) | (1 << LED2) | (1 << GATE1) | (1 << GATE2);
+     360:	87 b1       	in	r24, 0x07	; 7
+     362:	8c 6c       	ori	r24, 0xCC	; 204
+     364:	87 b9       	out	0x07, r24	; 7
+	
+	/* UART Initialization */
+	TXD_PORT |= (1 << TXD_BIT);
+     366:	59 9a       	sbi	0x0b, 1	; 11
+	TXD_DDR |= (1 << TXD_BIT);
+     368:	51 9a       	sbi	0x0a, 1	; 10
+	UBRR0H = 0;
+     36a:	10 92 c5 00 	sts	0x00C5, r1
+	UBRR0L = 38;
+     36e:	86 e2       	ldi	r24, 0x26	; 38
+     370:	80 93 c4 00 	sts	0x00C4, r24
+	UCSR0A = (1 << U2X0);
+     374:	22 e0       	ldi	r18, 0x02	; 2
+     376:	20 93 c0 00 	sts	0x00C0, r18
+	UCSR0B = (1 << RXCIE0) | (1 << TXCIE0) | (1 << RXEN0) | (1 << TXEN0);
+     37a:	88 ed       	ldi	r24, 0xD8	; 216
+     37c:	80 93 c1 00 	sts	0x00C1, r24
+	UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
+     380:	86 e0       	ldi	r24, 0x06	; 6
+     382:	80 93 c2 00 	sts	0x00C2, r24
+	
+	/* SPI Initialization */
+	DDRB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT) | (7 << PORTB0);
+     386:	84 b1       	in	r24, 0x04	; 4
+     388:	87 6b       	ori	r24, 0xB7	; 183
+     38a:	84 b9       	out	0x04, r24	; 4
+	PORTB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT);
+     38c:	85 b1       	in	r24, 0x05	; 5
+     38e:	80 6b       	ori	r24, 0xB0	; 176
+     390:	85 b9       	out	0x05, r24	; 5
+	SPCR = (1 << SPE) | (1 << MSTR);
+     392:	80 e5       	ldi	r24, 0x50	; 80
+     394:	8c bd       	out	0x2c, r24	; 44
+	
+	/* TWI Initialization */
+	TWBR = (uint8_t)(((F_CPU / TWI_FREQ) - 16) / 2);
+     396:	84 e0       	ldi	r24, 0x04	; 4
+     398:	80 93 b8 00 	sts	0x00B8, r24
+	TWCR = (1 << TWEN);
+     39c:	80 93 bc 00 	sts	0x00BC, r24
+	
+	/* Timer1 Initialization */
+	TCCR1B = (1 << CS12) | (1 << CS10) | (1 << WGM12);
+     3a0:	8d e0       	ldi	r24, 0x0D	; 13
+     3a2:	80 93 81 00 	sts	0x0081, r24
+	OCR1A = 0x400;
+     3a6:	80 e0       	ldi	r24, 0x00	; 0
+     3a8:	94 e0       	ldi	r25, 0x04	; 4
+     3aa:	90 93 89 00 	sts	0x0089, r25
+     3ae:	80 93 88 00 	sts	0x0088, r24
+	TIMSK1 = (1 << OCIE1A);
+     3b2:	20 93 6f 00 	sts	0x006F, r18
+
+	/* ADC Initialization */
+	ADMUX |= (1 << REFS0) | (1 << REFS1);
+     3b6:	ec e7       	ldi	r30, 0x7C	; 124
+     3b8:	f0 e0       	ldi	r31, 0x00	; 0
+     3ba:	80 81       	ld	r24, Z
+     3bc:	80 6c       	ori	r24, 0xC0	; 192
+     3be:	80 83       	st	Z, r24
+	ADCSRA = (1 << ADEN) | (1 << ADPS2);
+     3c0:	84 e8       	ldi	r24, 0x84	; 132
+     3c2:	80 93 7a 00 	sts	0x007A, r24
+	DIDR0 = 0xFF;
+     3c6:	8f ef       	ldi	r24, 0xFF	; 255
+     3c8:	80 93 7e 00 	sts	0x007E, r24
+	
+	PCICR = (1 << PCIE3);
+     3cc:	88 e0       	ldi	r24, 0x08	; 8
+     3ce:	80 93 68 00 	sts	0x0068, r24
+	PCMSK3 = 0xF0;
+     3d2:	80 ef       	ldi	r24, 0xF0	; 240
+     3d4:	80 93 73 00 	sts	0x0073, r24
+	sei();
+     3d8:	78 94       	sei
+     3da:	08 95       	ret
+
+000003dc <POT_SendData>:
+}
+
+void POT_SendData(uint8_t data, potnum_t potnum)
+{
+	PORTB = (PORTB & 0xF8) | (potnum & 0x07);
+     3dc:	95 b1       	in	r25, 0x05	; 5
+     3de:	67 70       	andi	r22, 0x07	; 7
+     3e0:	98 7f       	andi	r25, 0xF8	; 248
+     3e2:	69 2b       	or	r22, r25
+     3e4:	65 b9       	out	0x05, r22	; 5
+	PORTB &= ~(1 << SS_BIT);
+     3e6:	2c 98       	cbi	0x05, 4	; 5
+	SPDR = 0x11;
+     3e8:	91 e1       	ldi	r25, 0x11	; 17
+     3ea:	9e bd       	out	0x2e, r25	; 46
+	while(!(SPSR & (1 <<SPIF)));
+     3ec:	0d b4       	in	r0, 0x2d	; 45
+     3ee:	07 fe       	sbrs	r0, 7
+     3f0:	fd cf       	rjmp	.-6      	; 0x3ec <POT_SendData+0x10>
+	SPDR = data;
+     3f2:	8e bd       	out	0x2e, r24	; 46
+	while(!(SPSR & (1 <<SPIF)));
+     3f4:	0d b4       	in	r0, 0x2d	; 45
+     3f6:	07 fe       	sbrs	r0, 7
+     3f8:	fd cf       	rjmp	.-6      	; 0x3f4 <POT_SendData+0x18>
+	PORTB |= (1 << SS_BIT);
+     3fa:	2c 9a       	sbi	0x05, 4	; 5
+     3fc:	08 95       	ret
+
+000003fe <SetGateVoltage>:
+}
+
+float SetGateVoltage(uint8_t gatenum, float voltage)
+{
+     3fe:	cf 92       	push	r12
+     400:	df 92       	push	r13
+     402:	ef 92       	push	r14
+     404:	ff 92       	push	r15
+     406:	cf 93       	push	r28
+     408:	6a 01       	movw	r12, r20
+     40a:	7b 01       	movw	r14, r22
+	/* OpAmp Gain is 3, potentiometer voltage range 0 ~ 3.3 */
+	/* voltage / ((3.3 / 255) * 3) = voltage * 25.76 */
+	uint8_t potval;
+	gatenum = POT_DRIVE1 + (gatenum & 0x01);
+     40c:	c8 2f       	mov	r28, r24
+     40e:	c1 70       	andi	r28, 0x01	; 1
+	potval = (uint8_t)(voltage * 25.76);
+     410:	2b e7       	ldi	r18, 0x7B	; 123
+     412:	34 e1       	ldi	r19, 0x14	; 20
+     414:	4e ec       	ldi	r20, 0xCE	; 206
+     416:	51 e4       	ldi	r21, 0x41	; 65
+     418:	c7 01       	movw	r24, r14
+     41a:	b6 01       	movw	r22, r12
+     41c:	0e 94 84 06 	call	0xd08	; 0xd08 <__mulsf3>
+     420:	0e 94 ca 05 	call	0xb94	; 0xb94 <__fixunssfsi>
+     424:	f6 2e       	mov	r15, r22
+float SetGateVoltage(uint8_t gatenum, float voltage)
+{
+	/* OpAmp Gain is 3, potentiometer voltage range 0 ~ 3.3 */
+	/* voltage / ((3.3 / 255) * 3) = voltage * 25.76 */
+	uint8_t potval;
+	gatenum = POT_DRIVE1 + (gatenum & 0x01);
+     426:	64 e0       	ldi	r22, 0x04	; 4
+     428:	6c 0f       	add	r22, r28
+	potval = (uint8_t)(voltage * 25.76);
+	POT_SendData(potval, gatenum);
+     42a:	8f 2d       	mov	r24, r15
+     42c:	0e 94 ee 01 	call	0x3dc	; 0x3dc <POT_SendData>
+	return ((float)potval / 25.76);
+     430:	6f 2d       	mov	r22, r15
+     432:	70 e0       	ldi	r23, 0x00	; 0
+     434:	80 e0       	ldi	r24, 0x00	; 0
+     436:	90 e0       	ldi	r25, 0x00	; 0
+     438:	0e 94 f6 05 	call	0xbec	; 0xbec <__floatunsisf>
+     43c:	2b e7       	ldi	r18, 0x7B	; 123
+     43e:	34 e1       	ldi	r19, 0x14	; 20
+     440:	4e ec       	ldi	r20, 0xCE	; 206
+     442:	51 e4       	ldi	r21, 0x41	; 65
+     444:	0e 94 62 05 	call	0xac4	; 0xac4 <__divsf3>
+}
+     448:	cf 91       	pop	r28
+     44a:	ff 90       	pop	r15
+     44c:	ef 90       	pop	r14
+     44e:	df 90       	pop	r13
+     450:	cf 90       	pop	r12
+     452:	08 95       	ret
+
+00000454 <SetOpampGain>:
+
+float SetOpampGain(uint8_t opampnum, float gain)
+{
+     454:	cf 92       	push	r12
+     456:	df 92       	push	r13
+     458:	ef 92       	push	r14
+     45a:	ff 92       	push	r15
+     45c:	cf 93       	push	r28
+     45e:	6a 01       	movw	r12, r20
+     460:	7b 01       	movw	r14, r22
+	uint8_t potval;
+	opampnum = ((opampnum & 0x01) * 2) + 1;
+     462:	81 70       	andi	r24, 0x01	; 1
+     464:	c8 2f       	mov	r28, r24
+     466:	cc 0f       	add	r28, r28
+	potval = (uint8_t)((8.448 * gain) - 8.9088);
+     468:	22 e0       	ldi	r18, 0x02	; 2
+     46a:	3b e2       	ldi	r19, 0x2B	; 43
+     46c:	47 e0       	ldi	r20, 0x07	; 7
+     46e:	51 e4       	ldi	r21, 0x41	; 65
+     470:	c7 01       	movw	r24, r14
+     472:	b6 01       	movw	r22, r12
+     474:	0e 94 84 06 	call	0xd08	; 0xd08 <__mulsf3>
+     478:	22 e7       	ldi	r18, 0x72	; 114
+     47a:	3a e8       	ldi	r19, 0x8A	; 138
+     47c:	4e e0       	ldi	r20, 0x0E	; 14
+     47e:	51 e4       	ldi	r21, 0x41	; 65
+     480:	0e 94 fd 04 	call	0x9fa	; 0x9fa <__subsf3>
+     484:	0e 94 ca 05 	call	0xb94	; 0xb94 <__fixunssfsi>
+     488:	f6 2e       	mov	r15, r22
+}
+
+float SetOpampGain(uint8_t opampnum, float gain)
+{
+	uint8_t potval;
+	opampnum = ((opampnum & 0x01) * 2) + 1;
+     48a:	61 e0       	ldi	r22, 0x01	; 1
+     48c:	6c 0f       	add	r22, r28
+	potval = (uint8_t)((8.448 * gain) - 8.9088);
+	POT_SendData(potval, opampnum);
+     48e:	8f 2d       	mov	r24, r15
+     490:	0e 94 ee 01 	call	0x3dc	; 0x3dc <POT_SendData>
+	return (((float)potval + 8.9088) / 8.448);
+     494:	6f 2d       	mov	r22, r15
+     496:	70 e0       	ldi	r23, 0x00	; 0
+     498:	80 e0       	ldi	r24, 0x00	; 0
+     49a:	90 e0       	ldi	r25, 0x00	; 0
+     49c:	0e 94 f6 05 	call	0xbec	; 0xbec <__floatunsisf>
+     4a0:	22 e7       	ldi	r18, 0x72	; 114
+     4a2:	3a e8       	ldi	r19, 0x8A	; 138
+     4a4:	4e e0       	ldi	r20, 0x0E	; 14
+     4a6:	51 e4       	ldi	r21, 0x41	; 65
+     4a8:	0e 94 fe 04 	call	0x9fc	; 0x9fc <__addsf3>
+     4ac:	22 e0       	ldi	r18, 0x02	; 2
+     4ae:	3b e2       	ldi	r19, 0x2B	; 43
+     4b0:	47 e0       	ldi	r20, 0x07	; 7
+     4b2:	51 e4       	ldi	r21, 0x41	; 65
+     4b4:	0e 94 62 05 	call	0xac4	; 0xac4 <__divsf3>
+}
+     4b8:	cf 91       	pop	r28
+     4ba:	ff 90       	pop	r15
+     4bc:	ef 90       	pop	r14
+     4be:	df 90       	pop	r13
+     4c0:	cf 90       	pop	r12
+     4c2:	08 95       	ret
+
+000004c4 <SetOpampShift>:
+
+float SetOpampShift(uint8_t opampnum, float shift)
+{
+     4c4:	cf 92       	push	r12
+     4c6:	df 92       	push	r13
+     4c8:	ef 92       	push	r14
+     4ca:	ff 92       	push	r15
+     4cc:	cf 93       	push	r28
+     4ce:	6a 01       	movw	r12, r20
+     4d0:	7b 01       	movw	r14, r22
+	uint8_t potval;
+	opampnum = (opampnum & 0x01) * 2;
+     4d2:	c8 2f       	mov	r28, r24
+     4d4:	c1 70       	andi	r28, 0x01	; 1
+	potval = (uint8_t)((shift * 255.0) / 2.037);
+     4d6:	20 e0       	ldi	r18, 0x00	; 0
+     4d8:	30 e0       	ldi	r19, 0x00	; 0
+     4da:	4f e7       	ldi	r20, 0x7F	; 127
+     4dc:	53 e4       	ldi	r21, 0x43	; 67
+     4de:	c7 01       	movw	r24, r14
+     4e0:	b6 01       	movw	r22, r12
+     4e2:	0e 94 84 06 	call	0xd08	; 0xd08 <__mulsf3>
+     4e6:	25 e3       	ldi	r18, 0x35	; 53
+     4e8:	3e e5       	ldi	r19, 0x5E	; 94
+     4ea:	42 e0       	ldi	r20, 0x02	; 2
+     4ec:	50 e4       	ldi	r21, 0x40	; 64
+     4ee:	0e 94 62 05 	call	0xac4	; 0xac4 <__divsf3>
+     4f2:	0e 94 ca 05 	call	0xb94	; 0xb94 <__fixunssfsi>
+     4f6:	f6 2e       	mov	r15, r22
+}
+
+float SetOpampShift(uint8_t opampnum, float shift)
+{
+	uint8_t potval;
+	opampnum = (opampnum & 0x01) * 2;
+     4f8:	6c 2f       	mov	r22, r28
+     4fa:	66 0f       	add	r22, r22
+	potval = (uint8_t)((shift * 255.0) / 2.037);
+	POT_SendData(potval, opampnum);
+     4fc:	8f 2d       	mov	r24, r15
+     4fe:	0e 94 ee 01 	call	0x3dc	; 0x3dc <POT_SendData>
+	return (((float)potval * 2.037) / 255.0);
+     502:	6f 2d       	mov	r22, r15
+     504:	70 e0       	ldi	r23, 0x00	; 0
+     506:	80 e0       	ldi	r24, 0x00	; 0
+     508:	90 e0       	ldi	r25, 0x00	; 0
+     50a:	0e 94 f6 05 	call	0xbec	; 0xbec <__floatunsisf>
+     50e:	25 e3       	ldi	r18, 0x35	; 53
+     510:	3e e5       	ldi	r19, 0x5E	; 94
+     512:	42 e0       	ldi	r20, 0x02	; 2
+     514:	50 e4       	ldi	r21, 0x40	; 64
+     516:	0e 94 84 06 	call	0xd08	; 0xd08 <__mulsf3>
+     51a:	20 e0       	ldi	r18, 0x00	; 0
+     51c:	30 e0       	ldi	r19, 0x00	; 0
+     51e:	4f e7       	ldi	r20, 0x7F	; 127
+     520:	53 e4       	ldi	r21, 0x43	; 67
+     522:	0e 94 62 05 	call	0xac4	; 0xac4 <__divsf3>
+}
+     526:	cf 91       	pop	r28
+     528:	ff 90       	pop	r15
+     52a:	ef 90       	pop	r14
+     52c:	df 90       	pop	r13
+     52e:	cf 90       	pop	r12
+     530:	08 95       	ret
+
+00000532 <SetInputRange>:
+
+void SetInputRange(opamp_t *op, float vlow, float vhigh)
+{
+     532:	cf 92       	push	r12
+     534:	df 92       	push	r13
+     536:	ef 92       	push	r14
+     538:	ff 92       	push	r15
+     53a:	0f 93       	push	r16
+     53c:	1f 93       	push	r17
+     53e:	cf 93       	push	r28
+     540:	df 93       	push	r29
+     542:	ec 01       	movw	r28, r24
+     544:	6a 01       	movw	r12, r20
+     546:	7b 01       	movw	r14, r22
+     548:	c9 01       	movw	r24, r18
+     54a:	b8 01       	movw	r22, r16
+	op->gain = SetOpampGain(op->ch, (3.3 / (vhigh - vlow)));
+     54c:	a7 01       	movw	r20, r14
+     54e:	96 01       	movw	r18, r12
+     550:	0e 94 fd 04 	call	0x9fa	; 0x9fa <__subsf3>
+     554:	9b 01       	movw	r18, r22
+     556:	ac 01       	movw	r20, r24
+     558:	63 e3       	ldi	r22, 0x33	; 51
+     55a:	73 e3       	ldi	r23, 0x33	; 51
+     55c:	83 e5       	ldi	r24, 0x53	; 83
+     55e:	90 e4       	ldi	r25, 0x40	; 64
+     560:	0e 94 62 05 	call	0xac4	; 0xac4 <__divsf3>
+     564:	ab 01       	movw	r20, r22
+     566:	bc 01       	movw	r22, r24
+     568:	88 81       	ld	r24, Y
+     56a:	0e 94 2a 02 	call	0x454	; 0x454 <SetOpampGain>
+     56e:	69 83       	std	Y+1, r22	; 0x01
+     570:	7a 83       	std	Y+2, r23	; 0x02
+     572:	8b 83       	std	Y+3, r24	; 0x03
+     574:	9c 83       	std	Y+4, r25	; 0x04
+	op->shift = SetOpampShift(op->ch, (0.758 * vlow));
+     576:	2a e4       	ldi	r18, 0x4A	; 74
+     578:	3c e0       	ldi	r19, 0x0C	; 12
+     57a:	42 e4       	ldi	r20, 0x42	; 66
+     57c:	5f e3       	ldi	r21, 0x3F	; 63
+     57e:	c7 01       	movw	r24, r14
+     580:	b6 01       	movw	r22, r12
+     582:	0e 94 84 06 	call	0xd08	; 0xd08 <__mulsf3>
+     586:	ab 01       	movw	r20, r22
+     588:	bc 01       	movw	r22, r24
+     58a:	88 81       	ld	r24, Y
+     58c:	0e 94 62 02 	call	0x4c4	; 0x4c4 <SetOpampShift>
+     590:	6d 83       	std	Y+5, r22	; 0x05
+     592:	7e 83       	std	Y+6, r23	; 0x06
+     594:	8f 83       	std	Y+7, r24	; 0x07
+     596:	98 87       	std	Y+8, r25	; 0x08
+}
+     598:	df 91       	pop	r29
+     59a:	cf 91       	pop	r28
+     59c:	1f 91       	pop	r17
+     59e:	0f 91       	pop	r16
+     5a0:	ff 90       	pop	r15
+     5a2:	ef 90       	pop	r14
+     5a4:	df 90       	pop	r13
+     5a6:	cf 90       	pop	r12
+     5a8:	08 95       	ret
+
+000005aa <main>:
+			break;
+	}*/
+}
+
+int main()
+{
+     5aa:	cf 93       	push	r28
+     5ac:	df 93       	push	r29
+     5ae:	cd b7       	in	r28, 0x3d	; 61
+     5b0:	de b7       	in	r29, 0x3e	; 62
+     5b2:	6a 97       	sbiw	r28, 0x1a	; 26
+     5b4:	0f b6       	in	r0, 0x3f	; 63
+     5b6:	f8 94       	cli
+     5b8:	de bf       	out	0x3e, r29	; 62
+     5ba:	0f be       	out	0x3f, r0	; 63
+     5bc:	cd bf       	out	0x3d, r28	; 61
+		heater_ch[i].tmeas_raw = 0;
+		heater_ch[i].tset = 0;
+		heater_ch[i].tset_raw = 0;
+		heater_ch[i].current = 0;
+		heater_ch[i].checksum = 0;
+		opamp_ch[i].ch = i;
+     5be:	19 82       	std	Y+1, r1	; 0x01
+		opamp_ch[i].drive = 0;
+     5c0:	1a 86       	std	Y+10, r1	; 0x0a
+     5c2:	1b 86       	std	Y+11, r1	; 0x0b
+     5c4:	1c 86       	std	Y+12, r1	; 0x0c
+     5c6:	1d 86       	std	Y+13, r1	; 0x0d
+		heater_ch[i].tmeas_raw = 0;
+		heater_ch[i].tset = 0;
+		heater_ch[i].tset_raw = 0;
+		heater_ch[i].current = 0;
+		heater_ch[i].checksum = 0;
+		opamp_ch[i].ch = i;
+     5c8:	81 e0       	ldi	r24, 0x01	; 1
+     5ca:	8e 87       	std	Y+14, r24	; 0x0e
+		opamp_ch[i].drive = 0;
+     5cc:	1f 8a       	std	Y+23, r1	; 0x17
+     5ce:	18 8e       	std	Y+24, r1	; 0x18
+     5d0:	19 8e       	std	Y+25, r1	; 0x19
+     5d2:	1a 8e       	std	Y+26, r1	; 0x1a
+	}
+	
+	static FILE lcd_stdout = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
+	static FILE uart_stdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
+	stdout = &uart_stdout;
+     5d4:	8e e0       	ldi	r24, 0x0E	; 14
+     5d6:	91 e0       	ldi	r25, 0x01	; 1
+     5d8:	90 93 d7 01 	sts	0x01D7, r25
+     5dc:	80 93 d6 01 	sts	0x01D6, r24
+	
+	init();
+     5e0:	0e 94 9c 01 	call	0x338	; 0x338 <init>
+	LCD_Init();
+     5e4:	0e 94 cd 04 	call	0x99a	; 0x99a <LCD_Init>
+
+	printf("HELLO\r\n");
+     5e8:	8c e1       	ldi	r24, 0x1C	; 28
+     5ea:	91 e0       	ldi	r25, 0x01	; 1
+     5ec:	0e 94 ed 0b 	call	0x17da	; 0x17da <puts>
+	fprintf(&lcd_stdout, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
+     5f0:	20 e0       	ldi	r18, 0x00	; 0
+     5f2:	31 e0       	ldi	r19, 0x01	; 1
+     5f4:	40 e1       	ldi	r20, 0x10	; 16
+     5f6:	50 e0       	ldi	r21, 0x00	; 0
+     5f8:	61 e0       	ldi	r22, 0x01	; 1
+     5fa:	70 e0       	ldi	r23, 0x00	; 0
+     5fc:	83 e2       	ldi	r24, 0x23	; 35
+     5fe:	91 e0       	ldi	r25, 0x01	; 1
+     600:	0e 94 b9 0b 	call	0x1772	; 0x1772 <fwrite>
+	LCD_SetPos(0, 1);
+     604:	61 e0       	ldi	r22, 0x01	; 1
+     606:	80 e0       	ldi	r24, 0x00	; 0
+     608:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+	fprintf(&lcd_stdout, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF");
+     60c:	20 e0       	ldi	r18, 0x00	; 0
+     60e:	31 e0       	ldi	r19, 0x01	; 1
+     610:	40 e1       	ldi	r20, 0x10	; 16
+     612:	50 e0       	ldi	r21, 0x00	; 0
+     614:	61 e0       	ldi	r22, 0x01	; 1
+     616:	70 e0       	ldi	r23, 0x00	; 0
+     618:	83 e2       	ldi	r24, 0x23	; 35
+     61a:	91 e0       	ldi	r25, 0x01	; 1
+     61c:	0e 94 b9 0b 	call	0x1772	; 0x1772 <fwrite>
+
+	SetGateVoltage(0, 0.0);
+     620:	40 e0       	ldi	r20, 0x00	; 0
+     622:	50 e0       	ldi	r21, 0x00	; 0
+     624:	ba 01       	movw	r22, r20
+     626:	80 e0       	ldi	r24, 0x00	; 0
+     628:	0e 94 ff 01 	call	0x3fe	; 0x3fe <SetGateVoltage>
+	SetGateVoltage(1, 0.0);
+     62c:	40 e0       	ldi	r20, 0x00	; 0
+     62e:	50 e0       	ldi	r21, 0x00	; 0
+     630:	ba 01       	movw	r22, r20
+     632:	81 e0       	ldi	r24, 0x01	; 1
+     634:	0e 94 ff 01 	call	0x3fe	; 0x3fe <SetGateVoltage>
+	
+	SetInputRange(&opamp_ch[0], 0.35, 0.6);
+     638:	0a e9       	ldi	r16, 0x9A	; 154
+     63a:	19 e9       	ldi	r17, 0x99	; 153
+     63c:	29 e1       	ldi	r18, 0x19	; 25
+     63e:	3f e3       	ldi	r19, 0x3F	; 63
+     640:	43 e3       	ldi	r20, 0x33	; 51
+     642:	53 e3       	ldi	r21, 0x33	; 51
+     644:	63 eb       	ldi	r22, 0xB3	; 179
+     646:	7e e3       	ldi	r23, 0x3E	; 62
+     648:	ce 01       	movw	r24, r28
+     64a:	01 96       	adiw	r24, 0x01	; 1
+     64c:	0e 94 99 02 	call	0x532	; 0x532 <SetInputRange>
+	SetInputRange(&opamp_ch[1], 1.0, 4.0);
+     650:	00 e0       	ldi	r16, 0x00	; 0
+     652:	10 e0       	ldi	r17, 0x00	; 0
+     654:	20 e8       	ldi	r18, 0x80	; 128
+     656:	30 e4       	ldi	r19, 0x40	; 64
+     658:	40 e0       	ldi	r20, 0x00	; 0
+     65a:	50 e0       	ldi	r21, 0x00	; 0
+     65c:	60 e8       	ldi	r22, 0x80	; 128
+     65e:	7f e3       	ldi	r23, 0x3F	; 63
+     660:	ce 01       	movw	r24, r28
+     662:	0e 96       	adiw	r24, 0x0e	; 14
+     664:	0e 94 99 02 	call	0x532	; 0x532 <SetInputRange>
+int main()
+{
+	uint16_t i = 0;
+	uint8_t adc_ch = 0;
+	uint16_t adc_data = 0;
+	uint8_t trig = 0;
+     668:	c1 2c       	mov	r12, r1
+}
+
+int main()
+{
+	uint16_t i = 0;
+	uint8_t adc_ch = 0;
+     66a:	d1 2c       	mov	r13, r1
+	//transmit(&packet_ch[0]);
+
+	i = 0;
+	while(1)
+    {
+		if(ocp_ch[0] == 1)
+     66c:	0f 2e       	mov	r0, r31
+     66e:	f5 e4       	ldi	r31, 0x45	; 69
+     670:	ef 2e       	mov	r14, r31
+     672:	f1 e0       	ldi	r31, 0x01	; 1
+     674:	ff 2e       	mov	r15, r31
+     676:	f0 2d       	mov	r31, r0
+			fprintf(&lcd_stdout, "  OVERCURRENT  ");
+			ocp_ch[0] = 0;
+			_delay_ms(10);
+		}
+		
+		if(ocp_ch[1] == 1)
+     678:	06 e4       	ldi	r16, 0x46	; 70
+     67a:	11 e0       	ldi	r17, 0x01	; 1
+			fprintf(&lcd_stdout, "  OVERCURRENT  ");
+			ocp_ch[1] = 0;
+			_delay_ms(10);
+		}
+		
+		if((rxcounter == 2) && (rxbuffer[1] == 'R'))
+     67c:	0f 2e       	mov	r0, r31
+     67e:	fd ec       	ldi	r31, 0xCD	; 205
+     680:	af 2e       	mov	r10, r31
+     682:	f1 e0       	ldi	r31, 0x01	; 1
+     684:	bf 2e       	mov	r11, r31
+     686:	f0 2d       	mov	r31, r0
+			for(i = 1; i < 7; i++)
+			{
+				temp += rxbuffer[i];
+			}
+			
+			if(temp == rxbuffer[7])
+     688:	0f 2e       	mov	r0, r31
+     68a:	f3 ed       	ldi	r31, 0xD3	; 211
+     68c:	2f 2e       	mov	r2, r31
+     68e:	f1 e0       	ldi	r31, 0x01	; 1
+     690:	3f 2e       	mov	r3, r31
+     692:	f0 2d       	mov	r31, r0
+			}
+			else
+			{
+				//PORTC |= (1 << GATE1);
+				//_delay_us(50);
+				ADMUX = (ADMUX & 0xF8) | adc_ch;
+     694:	0f 2e       	mov	r0, r31
+     696:	fc e7       	ldi	r31, 0x7C	; 124
+     698:	4f 2e       	mov	r4, r31
+     69a:	51 2c       	mov	r5, r1
+     69c:	f0 2d       	mov	r31, r0
+				ADCSRA |= (1 << ADSC);
+     69e:	0f 2e       	mov	r0, r31
+     6a0:	fa e7       	ldi	r31, 0x7A	; 122
+     6a2:	6f 2e       	mov	r6, r31
+     6a4:	71 2c       	mov	r7, r1
+     6a6:	f0 2d       	mov	r31, r0
+		if(tick)
+		{
+			tick = 0;
+			if(trig)
+			{
+				adc_data = ADCL;
+     6a8:	0f 2e       	mov	r0, r31
+     6aa:	f8 e7       	ldi	r31, 0x78	; 120
+     6ac:	8f 2e       	mov	r8, r31
+     6ae:	91 2c       	mov	r9, r1
+     6b0:	f0 2d       	mov	r31, r0
+	//transmit(&packet_ch[0]);
+
+	i = 0;
+	while(1)
+    {
+		if(ocp_ch[0] == 1)
+     6b2:	f7 01       	movw	r30, r14
+     6b4:	80 81       	ld	r24, Z
+     6b6:	81 30       	cpi	r24, 0x01	; 1
+     6b8:	b1 f4       	brne	.+44     	; 0x6e6 <main+0x13c>
+		{
+			LCD_SetPos(0, 0);
+     6ba:	60 e0       	ldi	r22, 0x00	; 0
+     6bc:	80 e0       	ldi	r24, 0x00	; 0
+     6be:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+			fprintf(&lcd_stdout, "  OVERCURRENT  ");
+     6c2:	20 e0       	ldi	r18, 0x00	; 0
+     6c4:	31 e0       	ldi	r19, 0x01	; 1
+     6c6:	4f e0       	ldi	r20, 0x0F	; 15
+     6c8:	50 e0       	ldi	r21, 0x00	; 0
+     6ca:	61 e0       	ldi	r22, 0x01	; 1
+     6cc:	70 e0       	ldi	r23, 0x00	; 0
+     6ce:	84 e3       	ldi	r24, 0x34	; 52
+     6d0:	91 e0       	ldi	r25, 0x01	; 1
+     6d2:	0e 94 b9 0b 	call	0x1772	; 0x1772 <fwrite>
+			ocp_ch[0] = 0;
+     6d6:	f7 01       	movw	r30, r14
+     6d8:	10 82       	st	Z, r1
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     6da:	8f e2       	ldi	r24, 0x2F	; 47
+     6dc:	95 e7       	ldi	r25, 0x75	; 117
+     6de:	01 97       	sbiw	r24, 0x01	; 1
+     6e0:	f1 f7       	brne	.-4      	; 0x6de <main+0x134>
+     6e2:	00 c0       	rjmp	.+0      	; 0x6e4 <main+0x13a>
+     6e4:	00 00       	nop
+			_delay_ms(10);
+		}
+		
+		if(ocp_ch[1] == 1)
+     6e6:	f8 01       	movw	r30, r16
+     6e8:	80 81       	ld	r24, Z
+     6ea:	81 30       	cpi	r24, 0x01	; 1
+     6ec:	b1 f4       	brne	.+44     	; 0x71a <main+0x170>
+		{
+			LCD_SetPos(0, 1);
+     6ee:	61 e0       	ldi	r22, 0x01	; 1
+     6f0:	80 e0       	ldi	r24, 0x00	; 0
+     6f2:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+			fprintf(&lcd_stdout, "  OVERCURRENT  ");
+     6f6:	20 e0       	ldi	r18, 0x00	; 0
+     6f8:	31 e0       	ldi	r19, 0x01	; 1
+     6fa:	4f e0       	ldi	r20, 0x0F	; 15
+     6fc:	50 e0       	ldi	r21, 0x00	; 0
+     6fe:	61 e0       	ldi	r22, 0x01	; 1
+     700:	70 e0       	ldi	r23, 0x00	; 0
+     702:	84 e3       	ldi	r24, 0x34	; 52
+     704:	91 e0       	ldi	r25, 0x01	; 1
+     706:	0e 94 b9 0b 	call	0x1772	; 0x1772 <fwrite>
+			ocp_ch[1] = 0;
+     70a:	f8 01       	movw	r30, r16
+     70c:	10 82       	st	Z, r1
+     70e:	8f e2       	ldi	r24, 0x2F	; 47
+     710:	95 e7       	ldi	r25, 0x75	; 117
+     712:	01 97       	sbiw	r24, 0x01	; 1
+     714:	f1 f7       	brne	.-4      	; 0x712 <main+0x168>
+     716:	00 c0       	rjmp	.+0      	; 0x718 <main+0x16e>
+     718:	00 00       	nop
+			_delay_ms(10);
+		}
+		
+		if((rxcounter == 2) && (rxbuffer[1] == 'R'))
+     71a:	80 91 47 01 	lds	r24, 0x0147
+     71e:	82 30       	cpi	r24, 0x02	; 2
+     720:	59 f4       	brne	.+22     	; 0x738 <main+0x18e>
+     722:	f5 01       	movw	r30, r10
+     724:	80 81       	ld	r24, Z
+     726:	82 35       	cpi	r24, 0x52	; 82
+     728:	39 f4       	brne	.+14     	; 0x738 <main+0x18e>
+		{
+			cli();
+     72a:	f8 94       	cli
+			WDTCSR |= (1 << WDCE) | (1 << WDE);
+     72c:	e0 e6       	ldi	r30, 0x60	; 96
+     72e:	f0 e0       	ldi	r31, 0x00	; 0
+     730:	80 81       	ld	r24, Z
+     732:	88 61       	ori	r24, 0x18	; 24
+     734:	80 83       	st	Z, r24
+     736:	ff cf       	rjmp	.-2      	; 0x736 <main+0x18c>
+			while(1);
+		}
+		
+		if(rxcounter == 8)
+     738:	80 91 47 01 	lds	r24, 0x0147
+     73c:	88 30       	cpi	r24, 0x08	; 8
+     73e:	a9 f4       	brne	.+42     	; 0x76a <main+0x1c0>
+		{
+			rxcounter = 0;
+     740:	10 92 47 01 	sts	0x0147, r1
+			uint8_t temp = 0;
+			for(i = 1; i < 7; i++)
+			{
+				temp += rxbuffer[i];
+     744:	f5 01       	movw	r30, r10
+     746:	80 81       	ld	r24, Z
+     748:	ee ec       	ldi	r30, 0xCE	; 206
+     74a:	f1 e0       	ldi	r31, 0x01	; 1
+     74c:	80 81       	ld	r24, Z
+     74e:	ef ec       	ldi	r30, 0xCF	; 207
+     750:	f1 e0       	ldi	r31, 0x01	; 1
+     752:	80 81       	ld	r24, Z
+     754:	e0 ed       	ldi	r30, 0xD0	; 208
+     756:	f1 e0       	ldi	r31, 0x01	; 1
+     758:	80 81       	ld	r24, Z
+     75a:	e1 ed       	ldi	r30, 0xD1	; 209
+     75c:	f1 e0       	ldi	r31, 0x01	; 1
+     75e:	80 81       	ld	r24, Z
+     760:	e2 ed       	ldi	r30, 0xD2	; 210
+     762:	f1 e0       	ldi	r31, 0x01	; 1
+     764:	80 81       	ld	r24, Z
+			}
+			
+			if(temp == rxbuffer[7])
+     766:	f1 01       	movw	r30, r2
+     768:	80 81       	ld	r24, Z
+			{
+				exec_cmd((rxdata_str*)rxbuffer);
+			}
+		}
+		
+		if(tick)
+     76a:	80 91 44 01 	lds	r24, 0x0144
+     76e:	88 23       	and	r24, r24
+     770:	e9 f1       	breq	.+122    	; 0x7ec <main+0x242>
+		{
+			tick = 0;
+     772:	10 92 44 01 	sts	0x0144, r1
+			if(trig)
+     776:	cc 20       	and	r12, r12
+     778:	61 f1       	breq	.+88     	; 0x7d2 <main+0x228>
+			{
+				adc_data = ADCL;
+     77a:	f4 01       	movw	r30, r8
+     77c:	80 81       	ld	r24, Z
+				adc_data |= ((uint16_t)ADCH) << 8;
+     77e:	e9 e7       	ldi	r30, 0x79	; 121
+     780:	f0 e0       	ldi	r31, 0x00	; 0
+     782:	80 81       	ld	r24, Z
+				
+				switch(adc_ch)
+     784:	f1 e0       	ldi	r31, 0x01	; 1
+     786:	df 16       	cp	r13, r31
+     788:	71 f0       	breq	.+28     	; 0x7a6 <main+0x1fc>
+     78a:	df 16       	cp	r13, r31
+     78c:	38 f0       	brcs	.+14     	; 0x79c <main+0x1f2>
+     78e:	82 e0       	ldi	r24, 0x02	; 2
+     790:	d8 16       	cp	r13, r24
+     792:	71 f0       	breq	.+28     	; 0x7b0 <main+0x206>
+     794:	93 e0       	ldi	r25, 0x03	; 3
+     796:	d9 16       	cp	r13, r25
+     798:	81 f0       	breq	.+32     	; 0x7ba <main+0x210>
+     79a:	14 c0       	rjmp	.+40     	; 0x7c4 <main+0x21a>
+				{
+					case ADC_MEAS1:
+					//heater_ch[0].tmeas_raw = adc_data;
+					temp = (((float)adc_data * 2.56) / (opamp_ch[0].gain * 775.434)) + (opamp_ch[0].shift / 0.758);
+					//temp = ((float)adc_data * 2.56) / 1023;
+					LCD_SetPos(0, 0);
+     79c:	60 e0       	ldi	r22, 0x00	; 0
+     79e:	80 e0       	ldi	r24, 0x00	; 0
+     7a0:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+					//fprintf(&lcd_stdout, "0 T:%.2f ", temp);
+					break;
+     7a4:	81 c0       	rjmp	.+258    	; 0x8a8 <main+0x2fe>
+					case ADC_MEAS2:
+					//heater_ch[1].tmeas_raw = adc_data;
+					temp = (((float)adc_data * 2.56) / (opamp_ch[1].gain * 775.434)) + (opamp_ch[1].shift / 0.758);
+					//temp = ((float)adc_data * 2.56) / 1023;
+					LCD_SetPos(0, 1);
+     7a6:	61 e0       	ldi	r22, 0x01	; 1
+     7a8:	80 e0       	ldi	r24, 0x00	; 0
+     7aa:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+					//fprintf(&lcd_stdout, "1 T:%.2f ", temp);
+					break;
+     7ae:	7c c0       	rjmp	.+248    	; 0x8a8 <main+0x2fe>
+					case ADC_CUR1:
+					heater_ch[0].current = adc_data * 2.56;
+					LCD_SetPos(9, 0);
+     7b0:	60 e0       	ldi	r22, 0x00	; 0
+     7b2:	89 e0       	ldi	r24, 0x09	; 9
+     7b4:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+					//fprintf(&lcd_stdout, "C:%.4d", heater_ch[0].current);
+					break;
+     7b8:	77 c0       	rjmp	.+238    	; 0x8a8 <main+0x2fe>
+					case ADC_CUR2:
+					heater_ch[1].current = adc_data * 2.56;
+					LCD_SetPos(9, 1);
+     7ba:	61 e0       	ldi	r22, 0x01	; 1
+     7bc:	89 e0       	ldi	r24, 0x09	; 9
+     7be:	0e 94 c3 04 	call	0x986	; 0x986 <LCD_SetPos>
+     7c2:	04 c0       	rjmp	.+8      	; 0x7cc <main+0x222>
+					//fprintf(&lcd_stdout, "C:%.4d", heater_ch[1].current);
+					break;
+				}
+				
+				if(++adc_ch == 0x04)
+     7c4:	d3 94       	inc	r13
+     7c6:	e4 e0       	ldi	r30, 0x04	; 4
+     7c8:	de 12       	cpse	r13, r30
+     7ca:	0f c0       	rjmp	.+30     	; 0x7ea <main+0x240>
+					adc_ch = 0;
+				
+				//PORTC &= ~(1 << GATE1);
+				trig = 0;
+     7cc:	c1 2c       	mov	r12, r1
+					//fprintf(&lcd_stdout, "C:%.4d", heater_ch[1].current);
+					break;
+				}
+				
+				if(++adc_ch == 0x04)
+					adc_ch = 0;
+     7ce:	d1 2c       	mov	r13, r1
+     7d0:	0d c0       	rjmp	.+26     	; 0x7ec <main+0x242>
+			}
+			else
+			{
+				//PORTC |= (1 << GATE1);
+				//_delay_us(50);
+				ADMUX = (ADMUX & 0xF8) | adc_ch;
+     7d2:	f2 01       	movw	r30, r4
+     7d4:	80 81       	ld	r24, Z
+     7d6:	88 7f       	andi	r24, 0xF8	; 248
+     7d8:	8d 29       	or	r24, r13
+     7da:	80 83       	st	Z, r24
+				ADCSRA |= (1 << ADSC);
+     7dc:	f3 01       	movw	r30, r6
+     7de:	80 81       	ld	r24, Z
+     7e0:	80 64       	ori	r24, 0x40	; 64
+     7e2:	80 83       	st	Z, r24
+				trig = 1;
+     7e4:	cc 24       	eor	r12, r12
+     7e6:	c3 94       	inc	r12
+     7e8:	01 c0       	rjmp	.+2      	; 0x7ec <main+0x242>
+				
+				if(++adc_ch == 0x04)
+					adc_ch = 0;
+				
+				//PORTC &= ~(1 << GATE1);
+				trig = 0;
+     7ea:	c1 2c       	mov	r12, r1
+			fprintf(&lcd_stdout, "\xD9");
+		else
+			fprintf(&lcd_stdout, " ");
+		//transmit(&packet_ch[1]);*/
+
+		switch(btn_pressed)
+     7ec:	80 91 49 01 	lds	r24, 0x0149
+     7f0:	82 30       	cpi	r24, 0x02	; 2
+     7f2:	21 f1       	breq	.+72     	; 0x83c <main+0x292>
+     7f4:	18 f4       	brcc	.+6      	; 0x7fc <main+0x252>
+     7f6:	81 30       	cpi	r24, 0x01	; 1
+     7f8:	31 f0       	breq	.+12     	; 0x806 <main+0x25c>
+     7fa:	5b cf       	rjmp	.-330    	; 0x6b2 <main+0x108>
+     7fc:	84 30       	cpi	r24, 0x04	; 4
+     7fe:	41 f1       	breq	.+80     	; 0x850 <main+0x2a6>
+     800:	88 30       	cpi	r24, 0x08	; 8
+     802:	e1 f1       	breq	.+120    	; 0x87c <main+0x2d2>
+     804:	56 cf       	rjmp	.-340    	; 0x6b2 <main+0x108>
+		{
+			case 0x01:
+				GATEPORT	^= (1 << GATE1);
+     806:	98 b1       	in	r25, 0x08	; 8
+     808:	80 e4       	ldi	r24, 0x40	; 64
+     80a:	89 27       	eor	r24, r25
+     80c:	88 b9       	out	0x08, r24	; 8
+				LEDPORT		^= (1 << LED1);
+     80e:	98 b1       	in	r25, 0x08	; 8
+     810:	84 e0       	ldi	r24, 0x04	; 4
+     812:	89 27       	eor	r24, r25
+     814:	88 b9       	out	0x08, r24	; 8
+				
+				if(GATEPORT & (1 << GATE1))
+     816:	46 9b       	sbis	0x08, 6	; 8
+     818:	07 c0       	rjmp	.+14     	; 0x828 <main+0x27e>
+					SetGateVoltage(0, 0);
+     81a:	40 e0       	ldi	r20, 0x00	; 0
+     81c:	50 e0       	ldi	r21, 0x00	; 0
+     81e:	ba 01       	movw	r22, r20
+     820:	80 e0       	ldi	r24, 0x00	; 0
+     822:	0e 94 ff 01 	call	0x3fe	; 0x3fe <SetGateVoltage>
+     826:	07 c0       	rjmp	.+14     	; 0x836 <main+0x28c>
+				else
+					SetGateVoltage(0, opamp_ch[0].drive);
+     828:	4a 85       	ldd	r20, Y+10	; 0x0a
+     82a:	5b 85       	ldd	r21, Y+11	; 0x0b
+     82c:	6c 85       	ldd	r22, Y+12	; 0x0c
+     82e:	7d 85       	ldd	r23, Y+13	; 0x0d
+     830:	80 e0       	ldi	r24, 0x00	; 0
+     832:	0e 94 ff 01 	call	0x3fe	; 0x3fe <SetGateVoltage>
+					
+				btn_pressed = 0;
+     836:	10 92 49 01 	sts	0x0149, r1
+				break;
+     83a:	3b cf       	rjmp	.-394    	; 0x6b2 <main+0x108>
+			case 0x02:
+				GATEPORT	^= (1 << GATE2);
+     83c:	88 b1       	in	r24, 0x08	; 8
+     83e:	80 58       	subi	r24, 0x80	; 128
+     840:	88 b9       	out	0x08, r24	; 8
+				LEDPORT		^= (1 << LED2);
+     842:	98 b1       	in	r25, 0x08	; 8
+     844:	88 e0       	ldi	r24, 0x08	; 8
+     846:	89 27       	eor	r24, r25
+     848:	88 b9       	out	0x08, r24	; 8
+				btn_pressed = 0;
+     84a:	10 92 49 01 	sts	0x0149, r1
+				break;
+     84e:	31 cf       	rjmp	.-414    	; 0x6b2 <main+0x108>
+			case 0x04:
+				opamp_ch[0].drive -= 0.5;
+     850:	20 e0       	ldi	r18, 0x00	; 0
+     852:	30 e0       	ldi	r19, 0x00	; 0
+     854:	40 e0       	ldi	r20, 0x00	; 0
+     856:	5f e3       	ldi	r21, 0x3F	; 63
+     858:	6a 85       	ldd	r22, Y+10	; 0x0a
+     85a:	7b 85       	ldd	r23, Y+11	; 0x0b
+     85c:	8c 85       	ldd	r24, Y+12	; 0x0c
+     85e:	9d 85       	ldd	r25, Y+13	; 0x0d
+     860:	0e 94 fd 04 	call	0x9fa	; 0x9fa <__subsf3>
+     864:	ab 01       	movw	r20, r22
+     866:	bc 01       	movw	r22, r24
+     868:	4a 87       	std	Y+10, r20	; 0x0a
+     86a:	5b 87       	std	Y+11, r21	; 0x0b
+     86c:	6c 87       	std	Y+12, r22	; 0x0c
+     86e:	7d 87       	std	Y+13, r23	; 0x0d
+				SetGateVoltage(0, opamp_ch[0].drive);
+     870:	80 e0       	ldi	r24, 0x00	; 0
+     872:	0e 94 ff 01 	call	0x3fe	; 0x3fe <SetGateVoltage>
+				btn_pressed = 0;
+     876:	10 92 49 01 	sts	0x0149, r1
+				break;
+     87a:	1b cf       	rjmp	.-458    	; 0x6b2 <main+0x108>
+			case 0x08:
+				opamp_ch[0].drive += 0.5;
+     87c:	20 e0       	ldi	r18, 0x00	; 0
+     87e:	30 e0       	ldi	r19, 0x00	; 0
+     880:	40 e0       	ldi	r20, 0x00	; 0
+     882:	5f e3       	ldi	r21, 0x3F	; 63
+     884:	6a 85       	ldd	r22, Y+10	; 0x0a
+     886:	7b 85       	ldd	r23, Y+11	; 0x0b
+     888:	8c 85       	ldd	r24, Y+12	; 0x0c
+     88a:	9d 85       	ldd	r25, Y+13	; 0x0d
+     88c:	0e 94 fe 04 	call	0x9fc	; 0x9fc <__addsf3>
+     890:	ab 01       	movw	r20, r22
+     892:	bc 01       	movw	r22, r24
+     894:	4a 87       	std	Y+10, r20	; 0x0a
+     896:	5b 87       	std	Y+11, r21	; 0x0b
+     898:	6c 87       	std	Y+12, r22	; 0x0c
+     89a:	7d 87       	std	Y+13, r23	; 0x0d
+				SetGateVoltage(0, opamp_ch[0].drive);				
+     89c:	80 e0       	ldi	r24, 0x00	; 0
+     89e:	0e 94 ff 01 	call	0x3fe	; 0x3fe <SetGateVoltage>
+				btn_pressed = 0;
+     8a2:	10 92 49 01 	sts	0x0149, r1
+				break;
+     8a6:	05 cf       	rjmp	.-502    	; 0x6b2 <main+0x108>
+					LCD_SetPos(9, 1);
+					//fprintf(&lcd_stdout, "C:%.4d", heater_ch[1].current);
+					break;
+				}
+				
+				if(++adc_ch == 0x04)
+     8a8:	d3 94       	inc	r13
+					adc_ch = 0;
+				
+				//PORTC &= ~(1 << GATE1);
+				trig = 0;
+     8aa:	c1 2c       	mov	r12, r1
+     8ac:	9f cf       	rjmp	.-194    	; 0x7ec <main+0x242>
+
+000008ae <I2C_SendByte>:
+#include "lcd-twi.h"
+
+void I2C_SendByte(uint8_t byte)
+{	
+	TWCR |= (1 << TWINT) | (1 << TWSTA);
+     8ae:	ec eb       	ldi	r30, 0xBC	; 188
+     8b0:	f0 e0       	ldi	r31, 0x00	; 0
+     8b2:	90 81       	ld	r25, Z
+     8b4:	90 6a       	ori	r25, 0xA0	; 160
+     8b6:	90 83       	st	Z, r25
+	while(!(TWCR & (1 << TWINT)));
+     8b8:	90 81       	ld	r25, Z
+     8ba:	99 23       	and	r25, r25
+     8bc:	ec f7       	brge	.-6      	; 0x8b8 <I2C_SendByte+0xa>
+	TWDR = LCDI2CADDR;
+     8be:	9e e4       	ldi	r25, 0x4E	; 78
+     8c0:	90 93 bb 00 	sts	0x00BB, r25
+	TWCR &= ~(1 << TWSTA);
+     8c4:	ec eb       	ldi	r30, 0xBC	; 188
+     8c6:	f0 e0       	ldi	r31, 0x00	; 0
+     8c8:	90 81       	ld	r25, Z
+     8ca:	9f 7d       	andi	r25, 0xDF	; 223
+     8cc:	90 83       	st	Z, r25
+	TWCR |= (1 << TWINT);
+     8ce:	90 81       	ld	r25, Z
+     8d0:	90 68       	ori	r25, 0x80	; 128
+     8d2:	90 83       	st	Z, r25
+	while(!(TWCR & (1 << TWINT)));
+     8d4:	90 81       	ld	r25, Z
+     8d6:	99 23       	and	r25, r25
+     8d8:	ec f7       	brge	.-6      	; 0x8d4 <I2C_SendByte+0x26>
+	TWDR = byte;
+     8da:	80 93 bb 00 	sts	0x00BB, r24
+	TWCR |= (1 << TWINT);
+     8de:	ec eb       	ldi	r30, 0xBC	; 188
+     8e0:	f0 e0       	ldi	r31, 0x00	; 0
+     8e2:	80 81       	ld	r24, Z
+     8e4:	80 68       	ori	r24, 0x80	; 128
+     8e6:	80 83       	st	Z, r24
+	while(!(TWCR & (1 << TWINT)));
+     8e8:	80 81       	ld	r24, Z
+     8ea:	88 23       	and	r24, r24
+     8ec:	ec f7       	brge	.-6      	; 0x8e8 <I2C_SendByte+0x3a>
+	TWCR |= (1 << TWINT) | (1 << TWSTO);
+     8ee:	ec eb       	ldi	r30, 0xBC	; 188
+     8f0:	f0 e0       	ldi	r31, 0x00	; 0
+     8f2:	80 81       	ld	r24, Z
+     8f4:	80 69       	ori	r24, 0x90	; 144
+     8f6:	80 83       	st	Z, r24
+     8f8:	08 95       	ret
+
+000008fa <LCD_SendData>:
+}
+
+void LCD_SendData(uint8_t data)
+{
+     8fa:	cf 93       	push	r28
+     8fc:	df 93       	push	r29
+     8fe:	c8 2f       	mov	r28, r24
+	I2C_SendByte((data & 0xF0) | LCD_RS | LCD_E);
+     900:	d8 2f       	mov	r29, r24
+     902:	d0 7f       	andi	r29, 0xF0	; 240
+     904:	8d 2f       	mov	r24, r29
+     906:	85 60       	ori	r24, 0x05	; 5
+     908:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte((data & 0xF0) | LCD_RS);
+     90c:	8d 2f       	mov	r24, r29
+     90e:	81 60       	ori	r24, 0x01	; 1
+     910:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte((data << 4) | LCD_RS | LCD_E);
+     914:	80 e1       	ldi	r24, 0x10	; 16
+     916:	c8 9f       	mul	r28, r24
+     918:	e0 01       	movw	r28, r0
+     91a:	11 24       	eor	r1, r1
+     91c:	8c 2f       	mov	r24, r28
+     91e:	85 60       	ori	r24, 0x05	; 5
+     920:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte((data << 4) | LCD_RS);
+     924:	8c 2f       	mov	r24, r28
+     926:	81 60       	ori	r24, 0x01	; 1
+     928:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     92c:	80 e1       	ldi	r24, 0x10	; 16
+     92e:	8a 95       	dec	r24
+     930:	f1 f7       	brne	.-4      	; 0x92e <LCD_SendData+0x34>
+	_delay_us(4);
+}
+     932:	df 91       	pop	r29
+     934:	cf 91       	pop	r28
+     936:	08 95       	ret
+
+00000938 <LCD_SendCmd>:
+
+void LCD_SendCmd(uint8_t cmd)
+{
+     938:	cf 93       	push	r28
+     93a:	df 93       	push	r29
+     93c:	c8 2f       	mov	r28, r24
+	I2C_SendByte(((cmd & 0xF0) & ~LCD_RS) | LCD_E);
+     93e:	d8 2f       	mov	r29, r24
+     940:	d0 7f       	andi	r29, 0xF0	; 240
+     942:	8d 2f       	mov	r24, r29
+     944:	84 60       	ori	r24, 0x04	; 4
+     946:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte((cmd & 0xF0) & ~LCD_RS);
+     94a:	8d 2f       	mov	r24, r29
+     94c:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte(((cmd << 4) & ~LCD_RS) | LCD_E);
+     950:	20 e1       	ldi	r18, 0x10	; 16
+     952:	c2 9f       	mul	r28, r18
+     954:	c0 01       	movw	r24, r0
+     956:	11 24       	eor	r1, r1
+     958:	84 60       	ori	r24, 0x04	; 4
+     95a:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte((cmd << 4) & ~LCD_RS);
+     95e:	8c 2f       	mov	r24, r28
+     960:	82 95       	swap	r24
+     962:	80 7f       	andi	r24, 0xF0	; 240
+     964:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+
+	if(cmd == LCD_CLR)
+     968:	c1 30       	cpi	r28, 0x01	; 1
+     96a:	39 f4       	brne	.+14     	; 0x97a <LCD_SendCmd+0x42>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     96c:	8f e4       	ldi	r24, 0x4F	; 79
+     96e:	96 e4       	ldi	r25, 0x46	; 70
+     970:	01 97       	sbiw	r24, 0x01	; 1
+     972:	f1 f7       	brne	.-4      	; 0x970 <LCD_SendCmd+0x38>
+     974:	00 c0       	rjmp	.+0      	; 0x976 <LCD_SendCmd+0x3e>
+     976:	00 00       	nop
+     978:	03 c0       	rjmp	.+6      	; 0x980 <LCD_SendCmd+0x48>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     97a:	98 e2       	ldi	r25, 0x28	; 40
+     97c:	9a 95       	dec	r25
+     97e:	f1 f7       	brne	.-4      	; 0x97c <LCD_SendCmd+0x44>
+	}
+	else
+	{
+		_delay_us(10);
+	}
+}
+     980:	df 91       	pop	r29
+     982:	cf 91       	pop	r28
+     984:	08 95       	ret
+
+00000986 <LCD_SetPos>:
+
+void LCD_SetPos(uint8_t x, uint8_t y)
+{
+	y = ((y & 0x01) * 0x40);
+     986:	61 70       	andi	r22, 0x01	; 1
+	x &= 0x0F;
+     988:	8f 70       	andi	r24, 0x0F	; 15
+	LCD_SendCmd(LCD_DDRAM | (x + y));
+     98a:	90 e4       	ldi	r25, 0x40	; 64
+     98c:	69 9f       	mul	r22, r25
+     98e:	80 0d       	add	r24, r0
+     990:	11 24       	eor	r1, r1
+     992:	80 68       	ori	r24, 0x80	; 128
+     994:	0e 94 9c 04 	call	0x938	; 0x938 <LCD_SendCmd>
+     998:	08 95       	ret
+
+0000099a <LCD_Init>:
+}
+
+void LCD_Init(void)
+{
+     99a:	cf 93       	push	r28
+	I2C_SendByte(0x00);
+     99c:	80 e0       	ldi	r24, 0x00	; 0
+     99e:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     9a2:	2f eb       	ldi	r18, 0xBF	; 191
+     9a4:	84 ed       	ldi	r24, 0xD4	; 212
+     9a6:	91 e0       	ldi	r25, 0x01	; 1
+     9a8:	21 50       	subi	r18, 0x01	; 1
+     9aa:	80 40       	sbci	r24, 0x00	; 0
+     9ac:	90 40       	sbci	r25, 0x00	; 0
+     9ae:	e1 f7       	brne	.-8      	; 0x9a8 <LCD_Init+0xe>
+     9b0:	00 c0       	rjmp	.+0      	; 0x9b2 <LCD_Init+0x18>
+     9b2:	00 00       	nop
+     9b4:	c5 e0       	ldi	r28, 0x05	; 5
+
+	_delay_ms(50);
+
+	for(uint8_t i = 0; i < 5; i++)
+	{
+		I2C_SendByte(0x00 | LCD_E);
+     9b6:	84 e0       	ldi	r24, 0x04	; 4
+     9b8:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+		I2C_SendByte(0x00 & ~LCD_E);
+     9bc:	80 e0       	ldi	r24, 0x00	; 0
+     9be:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+     9c2:	c1 50       	subi	r28, 0x01	; 1
+{
+	I2C_SendByte(0x00);
+
+	_delay_ms(50);
+
+	for(uint8_t i = 0; i < 5; i++)
+     9c4:	c1 f7       	brne	.-16     	; 0x9b6 <LCD_Init+0x1c>
+	#else
+		//round up by default
+		__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
+	#endif
+
+	__builtin_avr_delay_cycles(__ticks_dc);
+     9c6:	28 ec       	ldi	r18, 0xC8	; 200
+     9c8:	2a 95       	dec	r18
+     9ca:	f1 f7       	brne	.-4      	; 0x9c8 <LCD_Init+0x2e>
+		I2C_SendByte(0x00 | LCD_E);
+		I2C_SendByte(0x00 & ~LCD_E);
+	}
+	_delay_us(50);
+	
+	I2C_SendByte(LCD_WIDTH | LCD_E);
+     9cc:	84 e2       	ldi	r24, 0x24	; 36
+     9ce:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	I2C_SendByte(LCD_WIDTH & ~LCD_E);
+     9d2:	80 e2       	ldi	r24, 0x20	; 32
+     9d4:	0e 94 57 04 	call	0x8ae	; 0x8ae <I2C_SendByte>
+	LCD_SendCmd(LCD_WIDTH | LCD_WIDTH_N | LCD_WIDTH_FT1);
+     9d8:	8a e2       	ldi	r24, 0x2A	; 42
+     9da:	0e 94 9c 04 	call	0x938	; 0x938 <LCD_SendCmd>
+	LCD_SendCmd(LCD_ONOFF);
+     9de:	88 e0       	ldi	r24, 0x08	; 8
+     9e0:	0e 94 9c 04 	call	0x938	; 0x938 <LCD_SendCmd>
+	LCD_SendCmd(LCD_CLR);
+     9e4:	81 e0       	ldi	r24, 0x01	; 1
+     9e6:	0e 94 9c 04 	call	0x938	; 0x938 <LCD_SendCmd>
+	LCD_SendCmd(LCD_DIR | LCD_DIR_ID);
+     9ea:	86 e0       	ldi	r24, 0x06	; 6
+     9ec:	0e 94 9c 04 	call	0x938	; 0x938 <LCD_SendCmd>
+	LCD_SendCmd(LCD_ONOFF | LCD_ONOFF_D);
+     9f0:	8c e0       	ldi	r24, 0x0C	; 12
+     9f2:	0e 94 9c 04 	call	0x938	; 0x938 <LCD_SendCmd>
+}
+     9f6:	cf 91       	pop	r28
+     9f8:	08 95       	ret
+
+000009fa <__subsf3>:
+     9fa:	50 58       	subi	r21, 0x80	; 128
+
+000009fc <__addsf3>:
+     9fc:	bb 27       	eor	r27, r27
+     9fe:	aa 27       	eor	r26, r26
+     a00:	0e d0       	rcall	.+28     	; 0xa1e <__addsf3x>
+     a02:	48 c1       	rjmp	.+656    	; 0xc94 <__fp_round>
+     a04:	39 d1       	rcall	.+626    	; 0xc78 <__fp_pscA>
+     a06:	30 f0       	brcs	.+12     	; 0xa14 <__addsf3+0x18>
+     a08:	3e d1       	rcall	.+636    	; 0xc86 <__fp_pscB>
+     a0a:	20 f0       	brcs	.+8      	; 0xa14 <__addsf3+0x18>
+     a0c:	31 f4       	brne	.+12     	; 0xa1a <__addsf3+0x1e>
+     a0e:	9f 3f       	cpi	r25, 0xFF	; 255
+     a10:	11 f4       	brne	.+4      	; 0xa16 <__addsf3+0x1a>
+     a12:	1e f4       	brtc	.+6      	; 0xa1a <__addsf3+0x1e>
+     a14:	2e c1       	rjmp	.+604    	; 0xc72 <__fp_nan>
+     a16:	0e f4       	brtc	.+2      	; 0xa1a <__addsf3+0x1e>
+     a18:	e0 95       	com	r30
+     a1a:	e7 fb       	bst	r30, 7
+     a1c:	24 c1       	rjmp	.+584    	; 0xc66 <__fp_inf>
+
+00000a1e <__addsf3x>:
+     a1e:	e9 2f       	mov	r30, r25
+     a20:	4a d1       	rcall	.+660    	; 0xcb6 <__fp_split3>
+     a22:	80 f3       	brcs	.-32     	; 0xa04 <__addsf3+0x8>
+     a24:	ba 17       	cp	r27, r26
+     a26:	62 07       	cpc	r22, r18
+     a28:	73 07       	cpc	r23, r19
+     a2a:	84 07       	cpc	r24, r20
+     a2c:	95 07       	cpc	r25, r21
+     a2e:	18 f0       	brcs	.+6      	; 0xa36 <__addsf3x+0x18>
+     a30:	71 f4       	brne	.+28     	; 0xa4e <__addsf3x+0x30>
+     a32:	9e f5       	brtc	.+102    	; 0xa9a <__addsf3x+0x7c>
+     a34:	62 c1       	rjmp	.+708    	; 0xcfa <__fp_zero>
+     a36:	0e f4       	brtc	.+2      	; 0xa3a <__addsf3x+0x1c>
+     a38:	e0 95       	com	r30
+     a3a:	0b 2e       	mov	r0, r27
+     a3c:	ba 2f       	mov	r27, r26
+     a3e:	a0 2d       	mov	r26, r0
+     a40:	0b 01       	movw	r0, r22
+     a42:	b9 01       	movw	r22, r18
+     a44:	90 01       	movw	r18, r0
+     a46:	0c 01       	movw	r0, r24
+     a48:	ca 01       	movw	r24, r20
+     a4a:	a0 01       	movw	r20, r0
+     a4c:	11 24       	eor	r1, r1
+     a4e:	ff 27       	eor	r31, r31
+     a50:	59 1b       	sub	r21, r25
+     a52:	99 f0       	breq	.+38     	; 0xa7a <__addsf3x+0x5c>
+     a54:	59 3f       	cpi	r21, 0xF9	; 249
+     a56:	50 f4       	brcc	.+20     	; 0xa6c <__addsf3x+0x4e>
+     a58:	50 3e       	cpi	r21, 0xE0	; 224
+     a5a:	68 f1       	brcs	.+90     	; 0xab6 <__addsf3x+0x98>
+     a5c:	1a 16       	cp	r1, r26
+     a5e:	f0 40       	sbci	r31, 0x00	; 0
+     a60:	a2 2f       	mov	r26, r18
+     a62:	23 2f       	mov	r18, r19
+     a64:	34 2f       	mov	r19, r20
+     a66:	44 27       	eor	r20, r20
+     a68:	58 5f       	subi	r21, 0xF8	; 248
+     a6a:	f3 cf       	rjmp	.-26     	; 0xa52 <__addsf3x+0x34>
+     a6c:	46 95       	lsr	r20
+     a6e:	37 95       	ror	r19
+     a70:	27 95       	ror	r18
+     a72:	a7 95       	ror	r26
+     a74:	f0 40       	sbci	r31, 0x00	; 0
+     a76:	53 95       	inc	r21
+     a78:	c9 f7       	brne	.-14     	; 0xa6c <__addsf3x+0x4e>
+     a7a:	7e f4       	brtc	.+30     	; 0xa9a <__addsf3x+0x7c>
+     a7c:	1f 16       	cp	r1, r31
+     a7e:	ba 0b       	sbc	r27, r26
+     a80:	62 0b       	sbc	r22, r18
+     a82:	73 0b       	sbc	r23, r19
+     a84:	84 0b       	sbc	r24, r20
+     a86:	ba f0       	brmi	.+46     	; 0xab6 <__addsf3x+0x98>
+     a88:	91 50       	subi	r25, 0x01	; 1
+     a8a:	a1 f0       	breq	.+40     	; 0xab4 <__addsf3x+0x96>
+     a8c:	ff 0f       	add	r31, r31
+     a8e:	bb 1f       	adc	r27, r27
+     a90:	66 1f       	adc	r22, r22
+     a92:	77 1f       	adc	r23, r23
+     a94:	88 1f       	adc	r24, r24
+     a96:	c2 f7       	brpl	.-16     	; 0xa88 <__addsf3x+0x6a>
+     a98:	0e c0       	rjmp	.+28     	; 0xab6 <__addsf3x+0x98>
+     a9a:	ba 0f       	add	r27, r26
+     a9c:	62 1f       	adc	r22, r18
+     a9e:	73 1f       	adc	r23, r19
+     aa0:	84 1f       	adc	r24, r20
+     aa2:	48 f4       	brcc	.+18     	; 0xab6 <__addsf3x+0x98>
+     aa4:	87 95       	ror	r24
+     aa6:	77 95       	ror	r23
+     aa8:	67 95       	ror	r22
+     aaa:	b7 95       	ror	r27
+     aac:	f7 95       	ror	r31
+     aae:	9e 3f       	cpi	r25, 0xFE	; 254
+     ab0:	08 f0       	brcs	.+2      	; 0xab4 <__addsf3x+0x96>
+     ab2:	b3 cf       	rjmp	.-154    	; 0xa1a <__addsf3+0x1e>
+     ab4:	93 95       	inc	r25
+     ab6:	88 0f       	add	r24, r24
+     ab8:	08 f0       	brcs	.+2      	; 0xabc <__addsf3x+0x9e>
+     aba:	99 27       	eor	r25, r25
+     abc:	ee 0f       	add	r30, r30
+     abe:	97 95       	ror	r25
+     ac0:	87 95       	ror	r24
+     ac2:	08 95       	ret
+
+00000ac4 <__divsf3>:
+     ac4:	0c d0       	rcall	.+24     	; 0xade <__divsf3x>
+     ac6:	e6 c0       	rjmp	.+460    	; 0xc94 <__fp_round>
+     ac8:	de d0       	rcall	.+444    	; 0xc86 <__fp_pscB>
+     aca:	40 f0       	brcs	.+16     	; 0xadc <__divsf3+0x18>
+     acc:	d5 d0       	rcall	.+426    	; 0xc78 <__fp_pscA>
+     ace:	30 f0       	brcs	.+12     	; 0xadc <__divsf3+0x18>
+     ad0:	21 f4       	brne	.+8      	; 0xada <__divsf3+0x16>
+     ad2:	5f 3f       	cpi	r21, 0xFF	; 255
+     ad4:	19 f0       	breq	.+6      	; 0xadc <__divsf3+0x18>
+     ad6:	c7 c0       	rjmp	.+398    	; 0xc66 <__fp_inf>
+     ad8:	51 11       	cpse	r21, r1
+     ada:	10 c1       	rjmp	.+544    	; 0xcfc <__fp_szero>
+     adc:	ca c0       	rjmp	.+404    	; 0xc72 <__fp_nan>
+
+00000ade <__divsf3x>:
+     ade:	eb d0       	rcall	.+470    	; 0xcb6 <__fp_split3>
+     ae0:	98 f3       	brcs	.-26     	; 0xac8 <__divsf3+0x4>
+
+00000ae2 <__divsf3_pse>:
+     ae2:	99 23       	and	r25, r25
+     ae4:	c9 f3       	breq	.-14     	; 0xad8 <__divsf3+0x14>
+     ae6:	55 23       	and	r21, r21
+     ae8:	b1 f3       	breq	.-20     	; 0xad6 <__divsf3+0x12>
+     aea:	95 1b       	sub	r25, r21
+     aec:	55 0b       	sbc	r21, r21
+     aee:	bb 27       	eor	r27, r27
+     af0:	aa 27       	eor	r26, r26
+     af2:	62 17       	cp	r22, r18
+     af4:	73 07       	cpc	r23, r19
+     af6:	84 07       	cpc	r24, r20
+     af8:	38 f0       	brcs	.+14     	; 0xb08 <__divsf3_pse+0x26>
+     afa:	9f 5f       	subi	r25, 0xFF	; 255
+     afc:	5f 4f       	sbci	r21, 0xFF	; 255
+     afe:	22 0f       	add	r18, r18
+     b00:	33 1f       	adc	r19, r19
+     b02:	44 1f       	adc	r20, r20
+     b04:	aa 1f       	adc	r26, r26
+     b06:	a9 f3       	breq	.-22     	; 0xaf2 <__divsf3_pse+0x10>
+     b08:	33 d0       	rcall	.+102    	; 0xb70 <__divsf3_pse+0x8e>
+     b0a:	0e 2e       	mov	r0, r30
+     b0c:	3a f0       	brmi	.+14     	; 0xb1c <__divsf3_pse+0x3a>
+     b0e:	e0 e8       	ldi	r30, 0x80	; 128
+     b10:	30 d0       	rcall	.+96     	; 0xb72 <__divsf3_pse+0x90>
+     b12:	91 50       	subi	r25, 0x01	; 1
+     b14:	50 40       	sbci	r21, 0x00	; 0
+     b16:	e6 95       	lsr	r30
+     b18:	00 1c       	adc	r0, r0
+     b1a:	ca f7       	brpl	.-14     	; 0xb0e <__divsf3_pse+0x2c>
+     b1c:	29 d0       	rcall	.+82     	; 0xb70 <__divsf3_pse+0x8e>
+     b1e:	fe 2f       	mov	r31, r30
+     b20:	27 d0       	rcall	.+78     	; 0xb70 <__divsf3_pse+0x8e>
+     b22:	66 0f       	add	r22, r22
+     b24:	77 1f       	adc	r23, r23
+     b26:	88 1f       	adc	r24, r24
+     b28:	bb 1f       	adc	r27, r27
+     b2a:	26 17       	cp	r18, r22
+     b2c:	37 07       	cpc	r19, r23
+     b2e:	48 07       	cpc	r20, r24
+     b30:	ab 07       	cpc	r26, r27
+     b32:	b0 e8       	ldi	r27, 0x80	; 128
+     b34:	09 f0       	breq	.+2      	; 0xb38 <__divsf3_pse+0x56>
+     b36:	bb 0b       	sbc	r27, r27
+     b38:	80 2d       	mov	r24, r0
+     b3a:	bf 01       	movw	r22, r30
+     b3c:	ff 27       	eor	r31, r31
+     b3e:	93 58       	subi	r25, 0x83	; 131
+     b40:	5f 4f       	sbci	r21, 0xFF	; 255
+     b42:	2a f0       	brmi	.+10     	; 0xb4e <__divsf3_pse+0x6c>
+     b44:	9e 3f       	cpi	r25, 0xFE	; 254
+     b46:	51 05       	cpc	r21, r1
+     b48:	68 f0       	brcs	.+26     	; 0xb64 <__divsf3_pse+0x82>
+     b4a:	8d c0       	rjmp	.+282    	; 0xc66 <__fp_inf>
+     b4c:	d7 c0       	rjmp	.+430    	; 0xcfc <__fp_szero>
+     b4e:	5f 3f       	cpi	r21, 0xFF	; 255
+     b50:	ec f3       	brlt	.-6      	; 0xb4c <__divsf3_pse+0x6a>
+     b52:	98 3e       	cpi	r25, 0xE8	; 232
+     b54:	dc f3       	brlt	.-10     	; 0xb4c <__divsf3_pse+0x6a>
+     b56:	86 95       	lsr	r24
+     b58:	77 95       	ror	r23
+     b5a:	67 95       	ror	r22
+     b5c:	b7 95       	ror	r27
+     b5e:	f7 95       	ror	r31
+     b60:	9f 5f       	subi	r25, 0xFF	; 255
+     b62:	c9 f7       	brne	.-14     	; 0xb56 <__divsf3_pse+0x74>
+     b64:	88 0f       	add	r24, r24
+     b66:	91 1d       	adc	r25, r1
+     b68:	96 95       	lsr	r25
+     b6a:	87 95       	ror	r24
+     b6c:	97 f9       	bld	r25, 7
+     b6e:	08 95       	ret
+     b70:	e1 e0       	ldi	r30, 0x01	; 1
+     b72:	66 0f       	add	r22, r22
+     b74:	77 1f       	adc	r23, r23
+     b76:	88 1f       	adc	r24, r24
+     b78:	bb 1f       	adc	r27, r27
+     b7a:	62 17       	cp	r22, r18
+     b7c:	73 07       	cpc	r23, r19
+     b7e:	84 07       	cpc	r24, r20
+     b80:	ba 07       	cpc	r27, r26
+     b82:	20 f0       	brcs	.+8      	; 0xb8c <__divsf3_pse+0xaa>
+     b84:	62 1b       	sub	r22, r18
+     b86:	73 0b       	sbc	r23, r19
+     b88:	84 0b       	sbc	r24, r20
+     b8a:	ba 0b       	sbc	r27, r26
+     b8c:	ee 1f       	adc	r30, r30
+     b8e:	88 f7       	brcc	.-30     	; 0xb72 <__divsf3_pse+0x90>
+     b90:	e0 95       	com	r30
+     b92:	08 95       	ret
+
+00000b94 <__fixunssfsi>:
+     b94:	98 d0       	rcall	.+304    	; 0xcc6 <__fp_splitA>
+     b96:	88 f0       	brcs	.+34     	; 0xbba <__fixunssfsi+0x26>
+     b98:	9f 57       	subi	r25, 0x7F	; 127
+     b9a:	90 f0       	brcs	.+36     	; 0xbc0 <__fixunssfsi+0x2c>
+     b9c:	b9 2f       	mov	r27, r25
+     b9e:	99 27       	eor	r25, r25
+     ba0:	b7 51       	subi	r27, 0x17	; 23
+     ba2:	a0 f0       	brcs	.+40     	; 0xbcc <__fixunssfsi+0x38>
+     ba4:	d1 f0       	breq	.+52     	; 0xbda <__fixunssfsi+0x46>
+     ba6:	66 0f       	add	r22, r22
+     ba8:	77 1f       	adc	r23, r23
+     baa:	88 1f       	adc	r24, r24
+     bac:	99 1f       	adc	r25, r25
+     bae:	1a f0       	brmi	.+6      	; 0xbb6 <__fixunssfsi+0x22>
+     bb0:	ba 95       	dec	r27
+     bb2:	c9 f7       	brne	.-14     	; 0xba6 <__fixunssfsi+0x12>
+     bb4:	12 c0       	rjmp	.+36     	; 0xbda <__fixunssfsi+0x46>
+     bb6:	b1 30       	cpi	r27, 0x01	; 1
+     bb8:	81 f0       	breq	.+32     	; 0xbda <__fixunssfsi+0x46>
+     bba:	9f d0       	rcall	.+318    	; 0xcfa <__fp_zero>
+     bbc:	b1 e0       	ldi	r27, 0x01	; 1
+     bbe:	08 95       	ret
+     bc0:	9c c0       	rjmp	.+312    	; 0xcfa <__fp_zero>
+     bc2:	67 2f       	mov	r22, r23
+     bc4:	78 2f       	mov	r23, r24
+     bc6:	88 27       	eor	r24, r24
+     bc8:	b8 5f       	subi	r27, 0xF8	; 248
+     bca:	39 f0       	breq	.+14     	; 0xbda <__fixunssfsi+0x46>
+     bcc:	b9 3f       	cpi	r27, 0xF9	; 249
+     bce:	cc f3       	brlt	.-14     	; 0xbc2 <__fixunssfsi+0x2e>
+     bd0:	86 95       	lsr	r24
+     bd2:	77 95       	ror	r23
+     bd4:	67 95       	ror	r22
+     bd6:	b3 95       	inc	r27
+     bd8:	d9 f7       	brne	.-10     	; 0xbd0 <__fixunssfsi+0x3c>
+     bda:	3e f4       	brtc	.+14     	; 0xbea <__fixunssfsi+0x56>
+     bdc:	90 95       	com	r25
+     bde:	80 95       	com	r24
+     be0:	70 95       	com	r23
+     be2:	61 95       	neg	r22
+     be4:	7f 4f       	sbci	r23, 0xFF	; 255
+     be6:	8f 4f       	sbci	r24, 0xFF	; 255
+     be8:	9f 4f       	sbci	r25, 0xFF	; 255
+     bea:	08 95       	ret
+
+00000bec <__floatunsisf>:
+     bec:	e8 94       	clt
+     bee:	09 c0       	rjmp	.+18     	; 0xc02 <__floatsisf+0x12>
+
+00000bf0 <__floatsisf>:
+     bf0:	97 fb       	bst	r25, 7
+     bf2:	3e f4       	brtc	.+14     	; 0xc02 <__floatsisf+0x12>
+     bf4:	90 95       	com	r25
+     bf6:	80 95       	com	r24
+     bf8:	70 95       	com	r23
+     bfa:	61 95       	neg	r22
+     bfc:	7f 4f       	sbci	r23, 0xFF	; 255
+     bfe:	8f 4f       	sbci	r24, 0xFF	; 255
+     c00:	9f 4f       	sbci	r25, 0xFF	; 255
+     c02:	99 23       	and	r25, r25
+     c04:	a9 f0       	breq	.+42     	; 0xc30 <__floatsisf+0x40>
+     c06:	f9 2f       	mov	r31, r25
+     c08:	96 e9       	ldi	r25, 0x96	; 150
+     c0a:	bb 27       	eor	r27, r27
+     c0c:	93 95       	inc	r25
+     c0e:	f6 95       	lsr	r31
+     c10:	87 95       	ror	r24
+     c12:	77 95       	ror	r23
+     c14:	67 95       	ror	r22
+     c16:	b7 95       	ror	r27
+     c18:	f1 11       	cpse	r31, r1
+     c1a:	f8 cf       	rjmp	.-16     	; 0xc0c <__floatsisf+0x1c>
+     c1c:	fa f4       	brpl	.+62     	; 0xc5c <__floatsisf+0x6c>
+     c1e:	bb 0f       	add	r27, r27
+     c20:	11 f4       	brne	.+4      	; 0xc26 <__floatsisf+0x36>
+     c22:	60 ff       	sbrs	r22, 0
+     c24:	1b c0       	rjmp	.+54     	; 0xc5c <__floatsisf+0x6c>
+     c26:	6f 5f       	subi	r22, 0xFF	; 255
+     c28:	7f 4f       	sbci	r23, 0xFF	; 255
+     c2a:	8f 4f       	sbci	r24, 0xFF	; 255
+     c2c:	9f 4f       	sbci	r25, 0xFF	; 255
+     c2e:	16 c0       	rjmp	.+44     	; 0xc5c <__floatsisf+0x6c>
+     c30:	88 23       	and	r24, r24
+     c32:	11 f0       	breq	.+4      	; 0xc38 <__floatsisf+0x48>
+     c34:	96 e9       	ldi	r25, 0x96	; 150
+     c36:	11 c0       	rjmp	.+34     	; 0xc5a <__floatsisf+0x6a>
+     c38:	77 23       	and	r23, r23
+     c3a:	21 f0       	breq	.+8      	; 0xc44 <__floatsisf+0x54>
+     c3c:	9e e8       	ldi	r25, 0x8E	; 142
+     c3e:	87 2f       	mov	r24, r23
+     c40:	76 2f       	mov	r23, r22
+     c42:	05 c0       	rjmp	.+10     	; 0xc4e <__floatsisf+0x5e>
+     c44:	66 23       	and	r22, r22
+     c46:	71 f0       	breq	.+28     	; 0xc64 <__floatsisf+0x74>
+     c48:	96 e8       	ldi	r25, 0x86	; 134
+     c4a:	86 2f       	mov	r24, r22
+     c4c:	70 e0       	ldi	r23, 0x00	; 0
+     c4e:	60 e0       	ldi	r22, 0x00	; 0
+     c50:	2a f0       	brmi	.+10     	; 0xc5c <__floatsisf+0x6c>
+     c52:	9a 95       	dec	r25
+     c54:	66 0f       	add	r22, r22
+     c56:	77 1f       	adc	r23, r23
+     c58:	88 1f       	adc	r24, r24
+     c5a:	da f7       	brpl	.-10     	; 0xc52 <__floatsisf+0x62>
+     c5c:	88 0f       	add	r24, r24
+     c5e:	96 95       	lsr	r25
+     c60:	87 95       	ror	r24
+     c62:	97 f9       	bld	r25, 7
+     c64:	08 95       	ret
+
+00000c66 <__fp_inf>:
+     c66:	97 f9       	bld	r25, 7
+     c68:	9f 67       	ori	r25, 0x7F	; 127
+     c6a:	80 e8       	ldi	r24, 0x80	; 128
+     c6c:	70 e0       	ldi	r23, 0x00	; 0
+     c6e:	60 e0       	ldi	r22, 0x00	; 0
+     c70:	08 95       	ret
+
+00000c72 <__fp_nan>:
+     c72:	9f ef       	ldi	r25, 0xFF	; 255
+     c74:	80 ec       	ldi	r24, 0xC0	; 192
+     c76:	08 95       	ret
+
+00000c78 <__fp_pscA>:
+     c78:	00 24       	eor	r0, r0
+     c7a:	0a 94       	dec	r0
+     c7c:	16 16       	cp	r1, r22
+     c7e:	17 06       	cpc	r1, r23
+     c80:	18 06       	cpc	r1, r24
+     c82:	09 06       	cpc	r0, r25
+     c84:	08 95       	ret
+
+00000c86 <__fp_pscB>:
+     c86:	00 24       	eor	r0, r0
+     c88:	0a 94       	dec	r0
+     c8a:	12 16       	cp	r1, r18
+     c8c:	13 06       	cpc	r1, r19
+     c8e:	14 06       	cpc	r1, r20
+     c90:	05 06       	cpc	r0, r21
+     c92:	08 95       	ret
+
+00000c94 <__fp_round>:
+     c94:	09 2e       	mov	r0, r25
+     c96:	03 94       	inc	r0
+     c98:	00 0c       	add	r0, r0
+     c9a:	11 f4       	brne	.+4      	; 0xca0 <__fp_round+0xc>
+     c9c:	88 23       	and	r24, r24
+     c9e:	52 f0       	brmi	.+20     	; 0xcb4 <__fp_round+0x20>
+     ca0:	bb 0f       	add	r27, r27
+     ca2:	40 f4       	brcc	.+16     	; 0xcb4 <__fp_round+0x20>
+     ca4:	bf 2b       	or	r27, r31
+     ca6:	11 f4       	brne	.+4      	; 0xcac <__fp_round+0x18>
+     ca8:	60 ff       	sbrs	r22, 0
+     caa:	04 c0       	rjmp	.+8      	; 0xcb4 <__fp_round+0x20>
+     cac:	6f 5f       	subi	r22, 0xFF	; 255
+     cae:	7f 4f       	sbci	r23, 0xFF	; 255
+     cb0:	8f 4f       	sbci	r24, 0xFF	; 255
+     cb2:	9f 4f       	sbci	r25, 0xFF	; 255
+     cb4:	08 95       	ret
+
+00000cb6 <__fp_split3>:
+     cb6:	57 fd       	sbrc	r21, 7
+     cb8:	90 58       	subi	r25, 0x80	; 128
+     cba:	44 0f       	add	r20, r20
+     cbc:	55 1f       	adc	r21, r21
+     cbe:	59 f0       	breq	.+22     	; 0xcd6 <__fp_splitA+0x10>
+     cc0:	5f 3f       	cpi	r21, 0xFF	; 255
+     cc2:	71 f0       	breq	.+28     	; 0xce0 <__fp_splitA+0x1a>
+     cc4:	47 95       	ror	r20
+
+00000cc6 <__fp_splitA>:
+     cc6:	88 0f       	add	r24, r24
+     cc8:	97 fb       	bst	r25, 7
+     cca:	99 1f       	adc	r25, r25
+     ccc:	61 f0       	breq	.+24     	; 0xce6 <__fp_splitA+0x20>
+     cce:	9f 3f       	cpi	r25, 0xFF	; 255
+     cd0:	79 f0       	breq	.+30     	; 0xcf0 <__fp_splitA+0x2a>
+     cd2:	87 95       	ror	r24
+     cd4:	08 95       	ret
+     cd6:	12 16       	cp	r1, r18
+     cd8:	13 06       	cpc	r1, r19
+     cda:	14 06       	cpc	r1, r20
+     cdc:	55 1f       	adc	r21, r21
+     cde:	f2 cf       	rjmp	.-28     	; 0xcc4 <__fp_split3+0xe>
+     ce0:	46 95       	lsr	r20
+     ce2:	f1 df       	rcall	.-30     	; 0xcc6 <__fp_splitA>
+     ce4:	08 c0       	rjmp	.+16     	; 0xcf6 <__fp_splitA+0x30>
+     ce6:	16 16       	cp	r1, r22
+     ce8:	17 06       	cpc	r1, r23
+     cea:	18 06       	cpc	r1, r24
+     cec:	99 1f       	adc	r25, r25
+     cee:	f1 cf       	rjmp	.-30     	; 0xcd2 <__fp_splitA+0xc>
+     cf0:	86 95       	lsr	r24
+     cf2:	71 05       	cpc	r23, r1
+     cf4:	61 05       	cpc	r22, r1
+     cf6:	08 94       	sec
+     cf8:	08 95       	ret
+
+00000cfa <__fp_zero>:
+     cfa:	e8 94       	clt
+
+00000cfc <__fp_szero>:
+     cfc:	bb 27       	eor	r27, r27
+     cfe:	66 27       	eor	r22, r22
+     d00:	77 27       	eor	r23, r23
+     d02:	cb 01       	movw	r24, r22
+     d04:	97 f9       	bld	r25, 7
+     d06:	08 95       	ret
+
+00000d08 <__mulsf3>:
+     d08:	0b d0       	rcall	.+22     	; 0xd20 <__mulsf3x>
+     d0a:	c4 cf       	rjmp	.-120    	; 0xc94 <__fp_round>
+     d0c:	b5 df       	rcall	.-150    	; 0xc78 <__fp_pscA>
+     d0e:	28 f0       	brcs	.+10     	; 0xd1a <__mulsf3+0x12>
+     d10:	ba df       	rcall	.-140    	; 0xc86 <__fp_pscB>
+     d12:	18 f0       	brcs	.+6      	; 0xd1a <__mulsf3+0x12>
+     d14:	95 23       	and	r25, r21
+     d16:	09 f0       	breq	.+2      	; 0xd1a <__mulsf3+0x12>
+     d18:	a6 cf       	rjmp	.-180    	; 0xc66 <__fp_inf>
+     d1a:	ab cf       	rjmp	.-170    	; 0xc72 <__fp_nan>
+     d1c:	11 24       	eor	r1, r1
+     d1e:	ee cf       	rjmp	.-36     	; 0xcfc <__fp_szero>
+
+00000d20 <__mulsf3x>:
+     d20:	ca df       	rcall	.-108    	; 0xcb6 <__fp_split3>
+     d22:	a0 f3       	brcs	.-24     	; 0xd0c <__mulsf3+0x4>
+
+00000d24 <__mulsf3_pse>:
+     d24:	95 9f       	mul	r25, r21
+     d26:	d1 f3       	breq	.-12     	; 0xd1c <__mulsf3+0x14>
+     d28:	95 0f       	add	r25, r21
+     d2a:	50 e0       	ldi	r21, 0x00	; 0
+     d2c:	55 1f       	adc	r21, r21
+     d2e:	62 9f       	mul	r22, r18
+     d30:	f0 01       	movw	r30, r0
+     d32:	72 9f       	mul	r23, r18
+     d34:	bb 27       	eor	r27, r27
+     d36:	f0 0d       	add	r31, r0
+     d38:	b1 1d       	adc	r27, r1
+     d3a:	63 9f       	mul	r22, r19
+     d3c:	aa 27       	eor	r26, r26
+     d3e:	f0 0d       	add	r31, r0
+     d40:	b1 1d       	adc	r27, r1
+     d42:	aa 1f       	adc	r26, r26
+     d44:	64 9f       	mul	r22, r20
+     d46:	66 27       	eor	r22, r22
+     d48:	b0 0d       	add	r27, r0
+     d4a:	a1 1d       	adc	r26, r1
+     d4c:	66 1f       	adc	r22, r22
+     d4e:	82 9f       	mul	r24, r18
+     d50:	22 27       	eor	r18, r18
+     d52:	b0 0d       	add	r27, r0
+     d54:	a1 1d       	adc	r26, r1
+     d56:	62 1f       	adc	r22, r18
+     d58:	73 9f       	mul	r23, r19
+     d5a:	b0 0d       	add	r27, r0
+     d5c:	a1 1d       	adc	r26, r1
+     d5e:	62 1f       	adc	r22, r18
+     d60:	83 9f       	mul	r24, r19
+     d62:	a0 0d       	add	r26, r0
+     d64:	61 1d       	adc	r22, r1
+     d66:	22 1f       	adc	r18, r18
+     d68:	74 9f       	mul	r23, r20
+     d6a:	33 27       	eor	r19, r19
+     d6c:	a0 0d       	add	r26, r0
+     d6e:	61 1d       	adc	r22, r1
+     d70:	23 1f       	adc	r18, r19
+     d72:	84 9f       	mul	r24, r20
+     d74:	60 0d       	add	r22, r0
+     d76:	21 1d       	adc	r18, r1
+     d78:	82 2f       	mov	r24, r18
+     d7a:	76 2f       	mov	r23, r22
+     d7c:	6a 2f       	mov	r22, r26
+     d7e:	11 24       	eor	r1, r1
+     d80:	9f 57       	subi	r25, 0x7F	; 127
+     d82:	50 40       	sbci	r21, 0x00	; 0
+     d84:	8a f0       	brmi	.+34     	; 0xda8 <__mulsf3_pse+0x84>
+     d86:	e1 f0       	breq	.+56     	; 0xdc0 <__mulsf3_pse+0x9c>
+     d88:	88 23       	and	r24, r24
+     d8a:	4a f0       	brmi	.+18     	; 0xd9e <__mulsf3_pse+0x7a>
+     d8c:	ee 0f       	add	r30, r30
+     d8e:	ff 1f       	adc	r31, r31
+     d90:	bb 1f       	adc	r27, r27
+     d92:	66 1f       	adc	r22, r22
+     d94:	77 1f       	adc	r23, r23
+     d96:	88 1f       	adc	r24, r24
+     d98:	91 50       	subi	r25, 0x01	; 1
+     d9a:	50 40       	sbci	r21, 0x00	; 0
+     d9c:	a9 f7       	brne	.-22     	; 0xd88 <__mulsf3_pse+0x64>
+     d9e:	9e 3f       	cpi	r25, 0xFE	; 254
+     da0:	51 05       	cpc	r21, r1
+     da2:	70 f0       	brcs	.+28     	; 0xdc0 <__mulsf3_pse+0x9c>
+     da4:	60 cf       	rjmp	.-320    	; 0xc66 <__fp_inf>
+     da6:	aa cf       	rjmp	.-172    	; 0xcfc <__fp_szero>
+     da8:	5f 3f       	cpi	r21, 0xFF	; 255
+     daa:	ec f3       	brlt	.-6      	; 0xda6 <__mulsf3_pse+0x82>
+     dac:	98 3e       	cpi	r25, 0xE8	; 232
+     dae:	dc f3       	brlt	.-10     	; 0xda6 <__mulsf3_pse+0x82>
+     db0:	86 95       	lsr	r24
+     db2:	77 95       	ror	r23
+     db4:	67 95       	ror	r22
+     db6:	b7 95       	ror	r27
+     db8:	f7 95       	ror	r31
+     dba:	e7 95       	ror	r30
+     dbc:	9f 5f       	subi	r25, 0xFF	; 255
+     dbe:	c1 f7       	brne	.-16     	; 0xdb0 <__mulsf3_pse+0x8c>
+     dc0:	fe 2b       	or	r31, r30
+     dc2:	88 0f       	add	r24, r24
+     dc4:	91 1d       	adc	r25, r1
+     dc6:	96 95       	lsr	r25
+     dc8:	87 95       	ror	r24
+     dca:	97 f9       	bld	r25, 7
+     dcc:	08 95       	ret
+
+00000dce <vfprintf>:
+     dce:	a3 e1       	ldi	r26, 0x13	; 19
+     dd0:	b0 e0       	ldi	r27, 0x00	; 0
+     dd2:	ed ee       	ldi	r30, 0xED	; 237
+     dd4:	f6 e0       	ldi	r31, 0x06	; 6
+     dd6:	0c 94 62 0a 	jmp	0x14c4	; 0x14c4 <__prologue_saves__>
+     dda:	7c 01       	movw	r14, r24
+     ddc:	1b 01       	movw	r2, r22
+     dde:	6a 01       	movw	r12, r20
+     de0:	fc 01       	movw	r30, r24
+     de2:	17 82       	std	Z+7, r1	; 0x07
+     de4:	16 82       	std	Z+6, r1	; 0x06
+     de6:	83 81       	ldd	r24, Z+3	; 0x03
+     de8:	81 ff       	sbrs	r24, 1
+     dea:	66 c3       	rjmp	.+1740   	; 0x14b8 <__stack+0x3b9>
+     dec:	be 01       	movw	r22, r28
+     dee:	6f 5f       	subi	r22, 0xFF	; 255
+     df0:	7f 4f       	sbci	r23, 0xFF	; 255
+     df2:	4b 01       	movw	r8, r22
+     df4:	f7 01       	movw	r30, r14
+     df6:	93 81       	ldd	r25, Z+3	; 0x03
+     df8:	f1 01       	movw	r30, r2
+     dfa:	93 fd       	sbrc	r25, 3
+     dfc:	85 91       	lpm	r24, Z+
+     dfe:	93 ff       	sbrs	r25, 3
+     e00:	81 91       	ld	r24, Z+
+     e02:	1f 01       	movw	r2, r30
+     e04:	88 23       	and	r24, r24
+     e06:	09 f4       	brne	.+2      	; 0xe0a <vfprintf+0x3c>
+     e08:	53 c3       	rjmp	.+1702   	; 0x14b0 <__stack+0x3b1>
+     e0a:	85 32       	cpi	r24, 0x25	; 37
+     e0c:	39 f4       	brne	.+14     	; 0xe1c <vfprintf+0x4e>
+     e0e:	93 fd       	sbrc	r25, 3
+     e10:	85 91       	lpm	r24, Z+
+     e12:	93 ff       	sbrs	r25, 3
+     e14:	81 91       	ld	r24, Z+
+     e16:	1f 01       	movw	r2, r30
+     e18:	85 32       	cpi	r24, 0x25	; 37
+     e1a:	39 f4       	brne	.+14     	; 0xe2a <vfprintf+0x5c>
+     e1c:	b7 01       	movw	r22, r14
+     e1e:	90 e0       	ldi	r25, 0x00	; 0
+     e20:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+     e24:	56 01       	movw	r10, r12
+     e26:	65 01       	movw	r12, r10
+     e28:	e5 cf       	rjmp	.-54     	; 0xdf4 <vfprintf+0x26>
+     e2a:	10 e0       	ldi	r17, 0x00	; 0
+     e2c:	51 2c       	mov	r5, r1
+     e2e:	20 e0       	ldi	r18, 0x00	; 0
+     e30:	20 32       	cpi	r18, 0x20	; 32
+     e32:	a0 f4       	brcc	.+40     	; 0xe5c <vfprintf+0x8e>
+     e34:	8b 32       	cpi	r24, 0x2B	; 43
+     e36:	69 f0       	breq	.+26     	; 0xe52 <vfprintf+0x84>
+     e38:	30 f4       	brcc	.+12     	; 0xe46 <vfprintf+0x78>
+     e3a:	80 32       	cpi	r24, 0x20	; 32
+     e3c:	59 f0       	breq	.+22     	; 0xe54 <vfprintf+0x86>
+     e3e:	83 32       	cpi	r24, 0x23	; 35
+     e40:	69 f4       	brne	.+26     	; 0xe5c <vfprintf+0x8e>
+     e42:	20 61       	ori	r18, 0x10	; 16
+     e44:	2c c0       	rjmp	.+88     	; 0xe9e <vfprintf+0xd0>
+     e46:	8d 32       	cpi	r24, 0x2D	; 45
+     e48:	39 f0       	breq	.+14     	; 0xe58 <vfprintf+0x8a>
+     e4a:	80 33       	cpi	r24, 0x30	; 48
+     e4c:	39 f4       	brne	.+14     	; 0xe5c <vfprintf+0x8e>
+     e4e:	21 60       	ori	r18, 0x01	; 1
+     e50:	26 c0       	rjmp	.+76     	; 0xe9e <vfprintf+0xd0>
+     e52:	22 60       	ori	r18, 0x02	; 2
+     e54:	24 60       	ori	r18, 0x04	; 4
+     e56:	23 c0       	rjmp	.+70     	; 0xe9e <vfprintf+0xd0>
+     e58:	28 60       	ori	r18, 0x08	; 8
+     e5a:	21 c0       	rjmp	.+66     	; 0xe9e <vfprintf+0xd0>
+     e5c:	27 fd       	sbrc	r18, 7
+     e5e:	27 c0       	rjmp	.+78     	; 0xeae <vfprintf+0xe0>
+     e60:	30 ed       	ldi	r19, 0xD0	; 208
+     e62:	38 0f       	add	r19, r24
+     e64:	3a 30       	cpi	r19, 0x0A	; 10
+     e66:	78 f4       	brcc	.+30     	; 0xe86 <vfprintf+0xb8>
+     e68:	26 ff       	sbrs	r18, 6
+     e6a:	06 c0       	rjmp	.+12     	; 0xe78 <vfprintf+0xaa>
+     e6c:	fa e0       	ldi	r31, 0x0A	; 10
+     e6e:	1f 9f       	mul	r17, r31
+     e70:	30 0d       	add	r19, r0
+     e72:	11 24       	eor	r1, r1
+     e74:	13 2f       	mov	r17, r19
+     e76:	13 c0       	rjmp	.+38     	; 0xe9e <vfprintf+0xd0>
+     e78:	6a e0       	ldi	r22, 0x0A	; 10
+     e7a:	56 9e       	mul	r5, r22
+     e7c:	30 0d       	add	r19, r0
+     e7e:	11 24       	eor	r1, r1
+     e80:	53 2e       	mov	r5, r19
+     e82:	20 62       	ori	r18, 0x20	; 32
+     e84:	0c c0       	rjmp	.+24     	; 0xe9e <vfprintf+0xd0>
+     e86:	8e 32       	cpi	r24, 0x2E	; 46
+     e88:	21 f4       	brne	.+8      	; 0xe92 <vfprintf+0xc4>
+     e8a:	26 fd       	sbrc	r18, 6
+     e8c:	11 c3       	rjmp	.+1570   	; 0x14b0 <__stack+0x3b1>
+     e8e:	20 64       	ori	r18, 0x40	; 64
+     e90:	06 c0       	rjmp	.+12     	; 0xe9e <vfprintf+0xd0>
+     e92:	8c 36       	cpi	r24, 0x6C	; 108
+     e94:	11 f4       	brne	.+4      	; 0xe9a <vfprintf+0xcc>
+     e96:	20 68       	ori	r18, 0x80	; 128
+     e98:	02 c0       	rjmp	.+4      	; 0xe9e <vfprintf+0xd0>
+     e9a:	88 36       	cpi	r24, 0x68	; 104
+     e9c:	41 f4       	brne	.+16     	; 0xeae <vfprintf+0xe0>
+     e9e:	f1 01       	movw	r30, r2
+     ea0:	93 fd       	sbrc	r25, 3
+     ea2:	85 91       	lpm	r24, Z+
+     ea4:	93 ff       	sbrs	r25, 3
+     ea6:	81 91       	ld	r24, Z+
+     ea8:	1f 01       	movw	r2, r30
+     eaa:	81 11       	cpse	r24, r1
+     eac:	c1 cf       	rjmp	.-126    	; 0xe30 <vfprintf+0x62>
+     eae:	9b eb       	ldi	r25, 0xBB	; 187
+     eb0:	98 0f       	add	r25, r24
+     eb2:	93 30       	cpi	r25, 0x03	; 3
+     eb4:	18 f4       	brcc	.+6      	; 0xebc <vfprintf+0xee>
+     eb6:	20 61       	ori	r18, 0x10	; 16
+     eb8:	80 5e       	subi	r24, 0xE0	; 224
+     eba:	06 c0       	rjmp	.+12     	; 0xec8 <vfprintf+0xfa>
+     ebc:	9b e9       	ldi	r25, 0x9B	; 155
+     ebe:	98 0f       	add	r25, r24
+     ec0:	93 30       	cpi	r25, 0x03	; 3
+     ec2:	08 f0       	brcs	.+2      	; 0xec6 <vfprintf+0xf8>
+     ec4:	aa c1       	rjmp	.+852    	; 0x121a <__stack+0x11b>
+     ec6:	2f 7e       	andi	r18, 0xEF	; 239
+     ec8:	26 ff       	sbrs	r18, 6
+     eca:	16 e0       	ldi	r17, 0x06	; 6
+     ecc:	2f 73       	andi	r18, 0x3F	; 63
+     ece:	72 2e       	mov	r7, r18
+     ed0:	85 36       	cpi	r24, 0x65	; 101
+     ed2:	21 f4       	brne	.+8      	; 0xedc <vfprintf+0x10e>
+     ed4:	f2 2f       	mov	r31, r18
+     ed6:	f0 64       	ori	r31, 0x40	; 64
+     ed8:	7f 2e       	mov	r7, r31
+     eda:	08 c0       	rjmp	.+16     	; 0xeec <vfprintf+0x11e>
+     edc:	86 36       	cpi	r24, 0x66	; 102
+     ede:	21 f4       	brne	.+8      	; 0xee8 <vfprintf+0x11a>
+     ee0:	62 2f       	mov	r22, r18
+     ee2:	60 68       	ori	r22, 0x80	; 128
+     ee4:	76 2e       	mov	r7, r22
+     ee6:	02 c0       	rjmp	.+4      	; 0xeec <vfprintf+0x11e>
+     ee8:	11 11       	cpse	r17, r1
+     eea:	11 50       	subi	r17, 0x01	; 1
+     eec:	77 fe       	sbrs	r7, 7
+     eee:	07 c0       	rjmp	.+14     	; 0xefe <vfprintf+0x130>
+     ef0:	1c 33       	cpi	r17, 0x3C	; 60
+     ef2:	48 f4       	brcc	.+18     	; 0xf06 <vfprintf+0x138>
+     ef4:	44 24       	eor	r4, r4
+     ef6:	43 94       	inc	r4
+     ef8:	41 0e       	add	r4, r17
+     efa:	27 e0       	ldi	r18, 0x07	; 7
+     efc:	0b c0       	rjmp	.+22     	; 0xf14 <vfprintf+0x146>
+     efe:	18 30       	cpi	r17, 0x08	; 8
+     f00:	30 f4       	brcc	.+12     	; 0xf0e <vfprintf+0x140>
+     f02:	21 2f       	mov	r18, r17
+     f04:	06 c0       	rjmp	.+12     	; 0xf12 <vfprintf+0x144>
+     f06:	27 e0       	ldi	r18, 0x07	; 7
+     f08:	4c e3       	ldi	r20, 0x3C	; 60
+     f0a:	44 2e       	mov	r4, r20
+     f0c:	03 c0       	rjmp	.+6      	; 0xf14 <vfprintf+0x146>
+     f0e:	27 e0       	ldi	r18, 0x07	; 7
+     f10:	17 e0       	ldi	r17, 0x07	; 7
+     f12:	41 2c       	mov	r4, r1
+     f14:	56 01       	movw	r10, r12
+     f16:	74 e0       	ldi	r23, 0x04	; 4
+     f18:	a7 0e       	add	r10, r23
+     f1a:	b1 1c       	adc	r11, r1
+     f1c:	f6 01       	movw	r30, r12
+     f1e:	60 81       	ld	r22, Z
+     f20:	71 81       	ldd	r23, Z+1	; 0x01
+     f22:	82 81       	ldd	r24, Z+2	; 0x02
+     f24:	93 81       	ldd	r25, Z+3	; 0x03
+     f26:	04 2d       	mov	r16, r4
+     f28:	a4 01       	movw	r20, r8
+     f2a:	0e 94 99 0a 	call	0x1532	; 0x1532 <__ftoa_engine>
+     f2e:	6c 01       	movw	r12, r24
+     f30:	09 81       	ldd	r16, Y+1	; 0x01
+     f32:	00 ff       	sbrs	r16, 0
+     f34:	02 c0       	rjmp	.+4      	; 0xf3a <vfprintf+0x16c>
+     f36:	03 ff       	sbrs	r16, 3
+     f38:	06 c0       	rjmp	.+12     	; 0xf46 <vfprintf+0x178>
+     f3a:	71 fc       	sbrc	r7, 1
+     f3c:	07 c0       	rjmp	.+14     	; 0xf4c <vfprintf+0x17e>
+     f3e:	72 fc       	sbrc	r7, 2
+     f40:	08 c0       	rjmp	.+16     	; 0xf52 <vfprintf+0x184>
+     f42:	61 2c       	mov	r6, r1
+     f44:	08 c0       	rjmp	.+16     	; 0xf56 <vfprintf+0x188>
+     f46:	3d e2       	ldi	r19, 0x2D	; 45
+     f48:	63 2e       	mov	r6, r19
+     f4a:	05 c0       	rjmp	.+10     	; 0xf56 <vfprintf+0x188>
+     f4c:	2b e2       	ldi	r18, 0x2B	; 43
+     f4e:	62 2e       	mov	r6, r18
+     f50:	02 c0       	rjmp	.+4      	; 0xf56 <vfprintf+0x188>
+     f52:	90 e2       	ldi	r25, 0x20	; 32
+     f54:	69 2e       	mov	r6, r25
+     f56:	80 2f       	mov	r24, r16
+     f58:	8c 70       	andi	r24, 0x0C	; 12
+     f5a:	99 f1       	breq	.+102    	; 0xfc2 <vfprintf+0x1f4>
+     f5c:	66 20       	and	r6, r6
+     f5e:	11 f0       	breq	.+4      	; 0xf64 <vfprintf+0x196>
+     f60:	84 e0       	ldi	r24, 0x04	; 4
+     f62:	01 c0       	rjmp	.+2      	; 0xf66 <vfprintf+0x198>
+     f64:	83 e0       	ldi	r24, 0x03	; 3
+     f66:	85 15       	cp	r24, r5
+     f68:	10 f0       	brcs	.+4      	; 0xf6e <vfprintf+0x1a0>
+     f6a:	51 2c       	mov	r5, r1
+     f6c:	0b c0       	rjmp	.+22     	; 0xf84 <vfprintf+0x1b6>
+     f6e:	58 1a       	sub	r5, r24
+     f70:	73 fc       	sbrc	r7, 3
+     f72:	08 c0       	rjmp	.+16     	; 0xf84 <vfprintf+0x1b6>
+     f74:	b7 01       	movw	r22, r14
+     f76:	80 e2       	ldi	r24, 0x20	; 32
+     f78:	90 e0       	ldi	r25, 0x00	; 0
+     f7a:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+     f7e:	5a 94       	dec	r5
+     f80:	c9 f7       	brne	.-14     	; 0xf74 <vfprintf+0x1a6>
+     f82:	f3 cf       	rjmp	.-26     	; 0xf6a <vfprintf+0x19c>
+     f84:	66 20       	and	r6, r6
+     f86:	29 f0       	breq	.+10     	; 0xf92 <vfprintf+0x1c4>
+     f88:	b7 01       	movw	r22, r14
+     f8a:	86 2d       	mov	r24, r6
+     f8c:	90 e0       	ldi	r25, 0x00	; 0
+     f8e:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+     f92:	03 fd       	sbrc	r16, 3
+     f94:	03 c0       	rjmp	.+6      	; 0xf9c <vfprintf+0x1ce>
+     f96:	00 e8       	ldi	r16, 0x80	; 128
+     f98:	10 e0       	ldi	r17, 0x00	; 0
+     f9a:	02 c0       	rjmp	.+4      	; 0xfa0 <vfprintf+0x1d2>
+     f9c:	0c e7       	ldi	r16, 0x7C	; 124
+     f9e:	10 e0       	ldi	r17, 0x00	; 0
+     fa0:	f7 2d       	mov	r31, r7
+     fa2:	f0 71       	andi	r31, 0x10	; 16
+     fa4:	7f 2e       	mov	r7, r31
+     fa6:	f8 01       	movw	r30, r16
+     fa8:	84 91       	lpm	r24, Z
+     faa:	88 23       	and	r24, r24
+     fac:	09 f4       	brne	.+2      	; 0xfb0 <vfprintf+0x1e2>
+     fae:	76 c2       	rjmp	.+1260   	; 0x149c <__stack+0x39d>
+     fb0:	71 10       	cpse	r7, r1
+     fb2:	80 52       	subi	r24, 0x20	; 32
+     fb4:	b7 01       	movw	r22, r14
+     fb6:	90 e0       	ldi	r25, 0x00	; 0
+     fb8:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+     fbc:	0f 5f       	subi	r16, 0xFF	; 255
+     fbe:	1f 4f       	sbci	r17, 0xFF	; 255
+     fc0:	f2 cf       	rjmp	.-28     	; 0xfa6 <vfprintf+0x1d8>
+     fc2:	77 fe       	sbrs	r7, 7
+     fc4:	0f c0       	rjmp	.+30     	; 0xfe4 <vfprintf+0x216>
+     fc6:	4c 0c       	add	r4, r12
+     fc8:	04 ff       	sbrs	r16, 4
+     fca:	04 c0       	rjmp	.+8      	; 0xfd4 <vfprintf+0x206>
+     fcc:	8a 81       	ldd	r24, Y+2	; 0x02
+     fce:	81 33       	cpi	r24, 0x31	; 49
+     fd0:	09 f4       	brne	.+2      	; 0xfd4 <vfprintf+0x206>
+     fd2:	4a 94       	dec	r4
+     fd4:	14 14       	cp	r1, r4
+     fd6:	74 f5       	brge	.+92     	; 0x1034 <vfprintf+0x266>
+     fd8:	f8 e0       	ldi	r31, 0x08	; 8
+     fda:	f4 15       	cp	r31, r4
+     fdc:	78 f5       	brcc	.+94     	; 0x103c <vfprintf+0x26e>
+     fde:	88 e0       	ldi	r24, 0x08	; 8
+     fe0:	48 2e       	mov	r4, r24
+     fe2:	2c c0       	rjmp	.+88     	; 0x103c <vfprintf+0x26e>
+     fe4:	76 fc       	sbrc	r7, 6
+     fe6:	2a c0       	rjmp	.+84     	; 0x103c <vfprintf+0x26e>
+     fe8:	81 2f       	mov	r24, r17
+     fea:	90 e0       	ldi	r25, 0x00	; 0
+     fec:	8c 15       	cp	r24, r12
+     fee:	9d 05       	cpc	r25, r13
+     ff0:	9c f0       	brlt	.+38     	; 0x1018 <vfprintf+0x24a>
+     ff2:	6c ef       	ldi	r22, 0xFC	; 252
+     ff4:	c6 16       	cp	r12, r22
+     ff6:	6f ef       	ldi	r22, 0xFF	; 255
+     ff8:	d6 06       	cpc	r13, r22
+     ffa:	74 f0       	brlt	.+28     	; 0x1018 <vfprintf+0x24a>
+     ffc:	77 2d       	mov	r23, r7
+     ffe:	70 68       	ori	r23, 0x80	; 128
+    1000:	77 2e       	mov	r7, r23
+    1002:	0a c0       	rjmp	.+20     	; 0x1018 <vfprintf+0x24a>
+    1004:	e2 e0       	ldi	r30, 0x02	; 2
+    1006:	f0 e0       	ldi	r31, 0x00	; 0
+    1008:	ec 0f       	add	r30, r28
+    100a:	fd 1f       	adc	r31, r29
+    100c:	e1 0f       	add	r30, r17
+    100e:	f1 1d       	adc	r31, r1
+    1010:	80 81       	ld	r24, Z
+    1012:	80 33       	cpi	r24, 0x30	; 48
+    1014:	19 f4       	brne	.+6      	; 0x101c <vfprintf+0x24e>
+    1016:	11 50       	subi	r17, 0x01	; 1
+    1018:	11 11       	cpse	r17, r1
+    101a:	f4 cf       	rjmp	.-24     	; 0x1004 <vfprintf+0x236>
+    101c:	77 fe       	sbrs	r7, 7
+    101e:	0e c0       	rjmp	.+28     	; 0x103c <vfprintf+0x26e>
+    1020:	44 24       	eor	r4, r4
+    1022:	43 94       	inc	r4
+    1024:	41 0e       	add	r4, r17
+    1026:	81 2f       	mov	r24, r17
+    1028:	90 e0       	ldi	r25, 0x00	; 0
+    102a:	c8 16       	cp	r12, r24
+    102c:	d9 06       	cpc	r13, r25
+    102e:	2c f4       	brge	.+10     	; 0x103a <vfprintf+0x26c>
+    1030:	1c 19       	sub	r17, r12
+    1032:	04 c0       	rjmp	.+8      	; 0x103c <vfprintf+0x26e>
+    1034:	44 24       	eor	r4, r4
+    1036:	43 94       	inc	r4
+    1038:	01 c0       	rjmp	.+2      	; 0x103c <vfprintf+0x26e>
+    103a:	10 e0       	ldi	r17, 0x00	; 0
+    103c:	77 fe       	sbrs	r7, 7
+    103e:	07 c0       	rjmp	.+14     	; 0x104e <vfprintf+0x280>
+    1040:	1c 14       	cp	r1, r12
+    1042:	1d 04       	cpc	r1, r13
+    1044:	3c f4       	brge	.+14     	; 0x1054 <vfprintf+0x286>
+    1046:	96 01       	movw	r18, r12
+    1048:	2f 5f       	subi	r18, 0xFF	; 255
+    104a:	3f 4f       	sbci	r19, 0xFF	; 255
+    104c:	05 c0       	rjmp	.+10     	; 0x1058 <vfprintf+0x28a>
+    104e:	25 e0       	ldi	r18, 0x05	; 5
+    1050:	30 e0       	ldi	r19, 0x00	; 0
+    1052:	02 c0       	rjmp	.+4      	; 0x1058 <vfprintf+0x28a>
+    1054:	21 e0       	ldi	r18, 0x01	; 1
+    1056:	30 e0       	ldi	r19, 0x00	; 0
+    1058:	66 20       	and	r6, r6
+    105a:	11 f0       	breq	.+4      	; 0x1060 <vfprintf+0x292>
+    105c:	2f 5f       	subi	r18, 0xFF	; 255
+    105e:	3f 4f       	sbci	r19, 0xFF	; 255
+    1060:	11 23       	and	r17, r17
+    1062:	31 f0       	breq	.+12     	; 0x1070 <vfprintf+0x2a2>
+    1064:	41 2f       	mov	r20, r17
+    1066:	50 e0       	ldi	r21, 0x00	; 0
+    1068:	4f 5f       	subi	r20, 0xFF	; 255
+    106a:	5f 4f       	sbci	r21, 0xFF	; 255
+    106c:	24 0f       	add	r18, r20
+    106e:	35 1f       	adc	r19, r21
+    1070:	45 2d       	mov	r20, r5
+    1072:	50 e0       	ldi	r21, 0x00	; 0
+    1074:	24 17       	cp	r18, r20
+    1076:	35 07       	cpc	r19, r21
+    1078:	14 f4       	brge	.+4      	; 0x107e <vfprintf+0x2b0>
+    107a:	52 1a       	sub	r5, r18
+    107c:	01 c0       	rjmp	.+2      	; 0x1080 <vfprintf+0x2b2>
+    107e:	51 2c       	mov	r5, r1
+    1080:	87 2d       	mov	r24, r7
+    1082:	89 70       	andi	r24, 0x09	; 9
+    1084:	49 f4       	brne	.+18     	; 0x1098 <vfprintf+0x2ca>
+    1086:	55 20       	and	r5, r5
+    1088:	39 f0       	breq	.+14     	; 0x1098 <vfprintf+0x2ca>
+    108a:	b7 01       	movw	r22, r14
+    108c:	80 e2       	ldi	r24, 0x20	; 32
+    108e:	90 e0       	ldi	r25, 0x00	; 0
+    1090:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1094:	5a 94       	dec	r5
+    1096:	f7 cf       	rjmp	.-18     	; 0x1086 <vfprintf+0x2b8>
+    1098:	66 20       	and	r6, r6
+    109a:	29 f0       	breq	.+10     	; 0x10a6 <vfprintf+0x2d8>
+    109c:	b7 01       	movw	r22, r14
+    109e:	86 2d       	mov	r24, r6
+    10a0:	90 e0       	ldi	r25, 0x00	; 0
+    10a2:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    10a6:	73 fc       	sbrc	r7, 3
+    10a8:	09 c0       	rjmp	.+18     	; 0x10bc <vfprintf+0x2ee>
+    10aa:	55 20       	and	r5, r5
+    10ac:	39 f0       	breq	.+14     	; 0x10bc <vfprintf+0x2ee>
+    10ae:	b7 01       	movw	r22, r14
+    10b0:	80 e3       	ldi	r24, 0x30	; 48
+    10b2:	90 e0       	ldi	r25, 0x00	; 0
+    10b4:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    10b8:	5a 94       	dec	r5
+    10ba:	f7 cf       	rjmp	.-18     	; 0x10aa <vfprintf+0x2dc>
+    10bc:	77 fe       	sbrs	r7, 7
+    10be:	5f c0       	rjmp	.+190    	; 0x117e <__stack+0x7f>
+    10c0:	9c 2d       	mov	r25, r12
+    10c2:	8d 2d       	mov	r24, r13
+    10c4:	d7 fe       	sbrs	r13, 7
+    10c6:	02 c0       	rjmp	.+4      	; 0x10cc <vfprintf+0x2fe>
+    10c8:	90 e0       	ldi	r25, 0x00	; 0
+    10ca:	80 e0       	ldi	r24, 0x00	; 0
+    10cc:	69 2e       	mov	r6, r25
+    10ce:	78 2e       	mov	r7, r24
+    10d0:	40 e0       	ldi	r20, 0x00	; 0
+    10d2:	50 e0       	ldi	r21, 0x00	; 0
+    10d4:	c6 01       	movw	r24, r12
+    10d6:	84 19       	sub	r24, r4
+    10d8:	91 09       	sbc	r25, r1
+    10da:	9d 87       	std	Y+13, r25	; 0x0d
+    10dc:	8c 87       	std	Y+12, r24	; 0x0c
+    10de:	96 01       	movw	r18, r12
+    10e0:	26 19       	sub	r18, r6
+    10e2:	37 09       	sbc	r19, r7
+    10e4:	28 0d       	add	r18, r8
+    10e6:	39 1d       	adc	r19, r9
+    10e8:	81 2f       	mov	r24, r17
+    10ea:	90 e0       	ldi	r25, 0x00	; 0
+    10ec:	ee 27       	eor	r30, r30
+    10ee:	ff 27       	eor	r31, r31
+    10f0:	e8 1b       	sub	r30, r24
+    10f2:	f9 0b       	sbc	r31, r25
+    10f4:	ff 87       	std	Y+15, r31	; 0x0f
+    10f6:	ee 87       	std	Y+14, r30	; 0x0e
+    10f8:	ff ef       	ldi	r31, 0xFF	; 255
+    10fa:	6f 16       	cp	r6, r31
+    10fc:	7f 06       	cpc	r7, r31
+    10fe:	69 f4       	brne	.+26     	; 0x111a <__stack+0x1b>
+    1100:	b7 01       	movw	r22, r14
+    1102:	8e e2       	ldi	r24, 0x2E	; 46
+    1104:	90 e0       	ldi	r25, 0x00	; 0
+    1106:	2b 8b       	std	Y+19, r18	; 0x13
+    1108:	3a 8b       	std	Y+18, r19	; 0x12
+    110a:	48 8b       	std	Y+16, r20	; 0x10
+    110c:	59 8b       	std	Y+17, r21	; 0x11
+    110e:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1112:	59 89       	ldd	r21, Y+17	; 0x11
+    1114:	48 89       	ldd	r20, Y+16	; 0x10
+    1116:	3a 89       	ldd	r19, Y+18	; 0x12
+    1118:	2b 89       	ldd	r18, Y+19	; 0x13
+    111a:	c6 14       	cp	r12, r6
+    111c:	d7 04       	cpc	r13, r7
+    111e:	54 f0       	brlt	.+20     	; 0x1134 <__stack+0x35>
+    1120:	6c 85       	ldd	r22, Y+12	; 0x0c
+    1122:	7d 85       	ldd	r23, Y+13	; 0x0d
+    1124:	66 15       	cp	r22, r6
+    1126:	77 05       	cpc	r23, r7
+    1128:	2c f4       	brge	.+10     	; 0x1134 <__stack+0x35>
+    112a:	f9 01       	movw	r30, r18
+    112c:	e4 0f       	add	r30, r20
+    112e:	f5 1f       	adc	r31, r21
+    1130:	81 81       	ldd	r24, Z+1	; 0x01
+    1132:	01 c0       	rjmp	.+2      	; 0x1136 <__stack+0x37>
+    1134:	80 e3       	ldi	r24, 0x30	; 48
+    1136:	71 e0       	ldi	r23, 0x01	; 1
+    1138:	67 1a       	sub	r6, r23
+    113a:	71 08       	sbc	r7, r1
+    113c:	4f 5f       	subi	r20, 0xFF	; 255
+    113e:	5f 4f       	sbci	r21, 0xFF	; 255
+    1140:	ee 85       	ldd	r30, Y+14	; 0x0e
+    1142:	ff 85       	ldd	r31, Y+15	; 0x0f
+    1144:	6e 16       	cp	r6, r30
+    1146:	7f 06       	cpc	r7, r31
+    1148:	6c f0       	brlt	.+26     	; 0x1164 <__stack+0x65>
+    114a:	b7 01       	movw	r22, r14
+    114c:	90 e0       	ldi	r25, 0x00	; 0
+    114e:	2b 8b       	std	Y+19, r18	; 0x13
+    1150:	3a 8b       	std	Y+18, r19	; 0x12
+    1152:	48 8b       	std	Y+16, r20	; 0x10
+    1154:	59 8b       	std	Y+17, r21	; 0x11
+    1156:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    115a:	2b 89       	ldd	r18, Y+19	; 0x13
+    115c:	3a 89       	ldd	r19, Y+18	; 0x12
+    115e:	48 89       	ldd	r20, Y+16	; 0x10
+    1160:	59 89       	ldd	r21, Y+17	; 0x11
+    1162:	ca cf       	rjmp	.-108    	; 0x10f8 <vfprintf+0x32a>
+    1164:	6c 14       	cp	r6, r12
+    1166:	7d 04       	cpc	r7, r13
+    1168:	39 f4       	brne	.+14     	; 0x1178 <__stack+0x79>
+    116a:	9a 81       	ldd	r25, Y+2	; 0x02
+    116c:	96 33       	cpi	r25, 0x36	; 54
+    116e:	18 f4       	brcc	.+6      	; 0x1176 <__stack+0x77>
+    1170:	95 33       	cpi	r25, 0x35	; 53
+    1172:	11 f4       	brne	.+4      	; 0x1178 <__stack+0x79>
+    1174:	04 ff       	sbrs	r16, 4
+    1176:	81 e3       	ldi	r24, 0x31	; 49
+    1178:	b7 01       	movw	r22, r14
+    117a:	90 e0       	ldi	r25, 0x00	; 0
+    117c:	4b c0       	rjmp	.+150    	; 0x1214 <__stack+0x115>
+    117e:	8a 81       	ldd	r24, Y+2	; 0x02
+    1180:	81 33       	cpi	r24, 0x31	; 49
+    1182:	09 f0       	breq	.+2      	; 0x1186 <__stack+0x87>
+    1184:	0f 7e       	andi	r16, 0xEF	; 239
+    1186:	b7 01       	movw	r22, r14
+    1188:	90 e0       	ldi	r25, 0x00	; 0
+    118a:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    118e:	11 11       	cpse	r17, r1
+    1190:	05 c0       	rjmp	.+10     	; 0x119c <__stack+0x9d>
+    1192:	74 fe       	sbrs	r7, 4
+    1194:	18 c0       	rjmp	.+48     	; 0x11c6 <__stack+0xc7>
+    1196:	85 e4       	ldi	r24, 0x45	; 69
+    1198:	90 e0       	ldi	r25, 0x00	; 0
+    119a:	17 c0       	rjmp	.+46     	; 0x11ca <__stack+0xcb>
+    119c:	b7 01       	movw	r22, r14
+    119e:	8e e2       	ldi	r24, 0x2E	; 46
+    11a0:	90 e0       	ldi	r25, 0x00	; 0
+    11a2:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    11a6:	82 e0       	ldi	r24, 0x02	; 2
+    11a8:	66 24       	eor	r6, r6
+    11aa:	63 94       	inc	r6
+    11ac:	68 0e       	add	r6, r24
+    11ae:	f4 01       	movw	r30, r8
+    11b0:	e8 0f       	add	r30, r24
+    11b2:	f1 1d       	adc	r31, r1
+    11b4:	80 81       	ld	r24, Z
+    11b6:	b7 01       	movw	r22, r14
+    11b8:	90 e0       	ldi	r25, 0x00	; 0
+    11ba:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    11be:	11 50       	subi	r17, 0x01	; 1
+    11c0:	41 f3       	breq	.-48     	; 0x1192 <__stack+0x93>
+    11c2:	86 2d       	mov	r24, r6
+    11c4:	f1 cf       	rjmp	.-30     	; 0x11a8 <__stack+0xa9>
+    11c6:	85 e6       	ldi	r24, 0x65	; 101
+    11c8:	90 e0       	ldi	r25, 0x00	; 0
+    11ca:	b7 01       	movw	r22, r14
+    11cc:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    11d0:	d7 fc       	sbrc	r13, 7
+    11d2:	05 c0       	rjmp	.+10     	; 0x11de <__stack+0xdf>
+    11d4:	c1 14       	cp	r12, r1
+    11d6:	d1 04       	cpc	r13, r1
+    11d8:	39 f4       	brne	.+14     	; 0x11e8 <__stack+0xe9>
+    11da:	04 ff       	sbrs	r16, 4
+    11dc:	05 c0       	rjmp	.+10     	; 0x11e8 <__stack+0xe9>
+    11de:	d1 94       	neg	r13
+    11e0:	c1 94       	neg	r12
+    11e2:	d1 08       	sbc	r13, r1
+    11e4:	8d e2       	ldi	r24, 0x2D	; 45
+    11e6:	01 c0       	rjmp	.+2      	; 0x11ea <__stack+0xeb>
+    11e8:	8b e2       	ldi	r24, 0x2B	; 43
+    11ea:	b7 01       	movw	r22, r14
+    11ec:	90 e0       	ldi	r25, 0x00	; 0
+    11ee:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    11f2:	80 e3       	ldi	r24, 0x30	; 48
+    11f4:	6a e0       	ldi	r22, 0x0A	; 10
+    11f6:	c6 16       	cp	r12, r22
+    11f8:	d1 04       	cpc	r13, r1
+    11fa:	2c f0       	brlt	.+10     	; 0x1206 <__stack+0x107>
+    11fc:	8f 5f       	subi	r24, 0xFF	; 255
+    11fe:	fa e0       	ldi	r31, 0x0A	; 10
+    1200:	cf 1a       	sub	r12, r31
+    1202:	d1 08       	sbc	r13, r1
+    1204:	f7 cf       	rjmp	.-18     	; 0x11f4 <__stack+0xf5>
+    1206:	b7 01       	movw	r22, r14
+    1208:	90 e0       	ldi	r25, 0x00	; 0
+    120a:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    120e:	b7 01       	movw	r22, r14
+    1210:	c6 01       	movw	r24, r12
+    1212:	c0 96       	adiw	r24, 0x30	; 48
+    1214:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1218:	41 c1       	rjmp	.+642    	; 0x149c <__stack+0x39d>
+    121a:	83 36       	cpi	r24, 0x63	; 99
+    121c:	31 f0       	breq	.+12     	; 0x122a <__stack+0x12b>
+    121e:	83 37       	cpi	r24, 0x73	; 115
+    1220:	79 f0       	breq	.+30     	; 0x1240 <__stack+0x141>
+    1222:	83 35       	cpi	r24, 0x53	; 83
+    1224:	09 f0       	breq	.+2      	; 0x1228 <__stack+0x129>
+    1226:	58 c0       	rjmp	.+176    	; 0x12d8 <__stack+0x1d9>
+    1228:	21 c0       	rjmp	.+66     	; 0x126c <__stack+0x16d>
+    122a:	56 01       	movw	r10, r12
+    122c:	72 e0       	ldi	r23, 0x02	; 2
+    122e:	a7 0e       	add	r10, r23
+    1230:	b1 1c       	adc	r11, r1
+    1232:	f6 01       	movw	r30, r12
+    1234:	80 81       	ld	r24, Z
+    1236:	89 83       	std	Y+1, r24	; 0x01
+    1238:	01 e0       	ldi	r16, 0x01	; 1
+    123a:	10 e0       	ldi	r17, 0x00	; 0
+    123c:	64 01       	movw	r12, r8
+    123e:	14 c0       	rjmp	.+40     	; 0x1268 <__stack+0x169>
+    1240:	56 01       	movw	r10, r12
+    1242:	f2 e0       	ldi	r31, 0x02	; 2
+    1244:	af 0e       	add	r10, r31
+    1246:	b1 1c       	adc	r11, r1
+    1248:	f6 01       	movw	r30, r12
+    124a:	c0 80       	ld	r12, Z
+    124c:	d1 80       	ldd	r13, Z+1	; 0x01
+    124e:	26 ff       	sbrs	r18, 6
+    1250:	03 c0       	rjmp	.+6      	; 0x1258 <__stack+0x159>
+    1252:	61 2f       	mov	r22, r17
+    1254:	70 e0       	ldi	r23, 0x00	; 0
+    1256:	02 c0       	rjmp	.+4      	; 0x125c <__stack+0x15d>
+    1258:	6f ef       	ldi	r22, 0xFF	; 255
+    125a:	7f ef       	ldi	r23, 0xFF	; 255
+    125c:	c6 01       	movw	r24, r12
+    125e:	2b 8b       	std	Y+19, r18	; 0x13
+    1260:	0e 94 7c 0b 	call	0x16f8	; 0x16f8 <strnlen>
+    1264:	8c 01       	movw	r16, r24
+    1266:	2b 89       	ldd	r18, Y+19	; 0x13
+    1268:	2f 77       	andi	r18, 0x7F	; 127
+    126a:	15 c0       	rjmp	.+42     	; 0x1296 <__stack+0x197>
+    126c:	56 01       	movw	r10, r12
+    126e:	f2 e0       	ldi	r31, 0x02	; 2
+    1270:	af 0e       	add	r10, r31
+    1272:	b1 1c       	adc	r11, r1
+    1274:	f6 01       	movw	r30, r12
+    1276:	c0 80       	ld	r12, Z
+    1278:	d1 80       	ldd	r13, Z+1	; 0x01
+    127a:	26 ff       	sbrs	r18, 6
+    127c:	03 c0       	rjmp	.+6      	; 0x1284 <__stack+0x185>
+    127e:	61 2f       	mov	r22, r17
+    1280:	70 e0       	ldi	r23, 0x00	; 0
+    1282:	02 c0       	rjmp	.+4      	; 0x1288 <__stack+0x189>
+    1284:	6f ef       	ldi	r22, 0xFF	; 255
+    1286:	7f ef       	ldi	r23, 0xFF	; 255
+    1288:	c6 01       	movw	r24, r12
+    128a:	2b 8b       	std	Y+19, r18	; 0x13
+    128c:	0e 94 71 0b 	call	0x16e2	; 0x16e2 <strnlen_P>
+    1290:	8c 01       	movw	r16, r24
+    1292:	2b 89       	ldd	r18, Y+19	; 0x13
+    1294:	20 68       	ori	r18, 0x80	; 128
+    1296:	72 2e       	mov	r7, r18
+    1298:	23 fd       	sbrc	r18, 3
+    129a:	1a c0       	rjmp	.+52     	; 0x12d0 <__stack+0x1d1>
+    129c:	85 2d       	mov	r24, r5
+    129e:	90 e0       	ldi	r25, 0x00	; 0
+    12a0:	08 17       	cp	r16, r24
+    12a2:	19 07       	cpc	r17, r25
+    12a4:	a8 f4       	brcc	.+42     	; 0x12d0 <__stack+0x1d1>
+    12a6:	b7 01       	movw	r22, r14
+    12a8:	80 e2       	ldi	r24, 0x20	; 32
+    12aa:	90 e0       	ldi	r25, 0x00	; 0
+    12ac:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    12b0:	5a 94       	dec	r5
+    12b2:	f4 cf       	rjmp	.-24     	; 0x129c <__stack+0x19d>
+    12b4:	f6 01       	movw	r30, r12
+    12b6:	77 fc       	sbrc	r7, 7
+    12b8:	85 91       	lpm	r24, Z+
+    12ba:	77 fe       	sbrs	r7, 7
+    12bc:	81 91       	ld	r24, Z+
+    12be:	6f 01       	movw	r12, r30
+    12c0:	b7 01       	movw	r22, r14
+    12c2:	90 e0       	ldi	r25, 0x00	; 0
+    12c4:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    12c8:	51 10       	cpse	r5, r1
+    12ca:	5a 94       	dec	r5
+    12cc:	01 50       	subi	r16, 0x01	; 1
+    12ce:	11 09       	sbc	r17, r1
+    12d0:	01 15       	cp	r16, r1
+    12d2:	11 05       	cpc	r17, r1
+    12d4:	79 f7       	brne	.-34     	; 0x12b4 <__stack+0x1b5>
+    12d6:	e2 c0       	rjmp	.+452    	; 0x149c <__stack+0x39d>
+    12d8:	84 36       	cpi	r24, 0x64	; 100
+    12da:	11 f0       	breq	.+4      	; 0x12e0 <__stack+0x1e1>
+    12dc:	89 36       	cpi	r24, 0x69	; 105
+    12de:	51 f5       	brne	.+84     	; 0x1334 <__stack+0x235>
+    12e0:	56 01       	movw	r10, r12
+    12e2:	27 ff       	sbrs	r18, 7
+    12e4:	09 c0       	rjmp	.+18     	; 0x12f8 <__stack+0x1f9>
+    12e6:	f4 e0       	ldi	r31, 0x04	; 4
+    12e8:	af 0e       	add	r10, r31
+    12ea:	b1 1c       	adc	r11, r1
+    12ec:	f6 01       	movw	r30, r12
+    12ee:	60 81       	ld	r22, Z
+    12f0:	71 81       	ldd	r23, Z+1	; 0x01
+    12f2:	82 81       	ldd	r24, Z+2	; 0x02
+    12f4:	93 81       	ldd	r25, Z+3	; 0x03
+    12f6:	0a c0       	rjmp	.+20     	; 0x130c <__stack+0x20d>
+    12f8:	f2 e0       	ldi	r31, 0x02	; 2
+    12fa:	af 0e       	add	r10, r31
+    12fc:	b1 1c       	adc	r11, r1
+    12fe:	f6 01       	movw	r30, r12
+    1300:	60 81       	ld	r22, Z
+    1302:	71 81       	ldd	r23, Z+1	; 0x01
+    1304:	88 27       	eor	r24, r24
+    1306:	77 fd       	sbrc	r23, 7
+    1308:	80 95       	com	r24
+    130a:	98 2f       	mov	r25, r24
+    130c:	02 2f       	mov	r16, r18
+    130e:	0f 76       	andi	r16, 0x6F	; 111
+    1310:	97 ff       	sbrs	r25, 7
+    1312:	08 c0       	rjmp	.+16     	; 0x1324 <__stack+0x225>
+    1314:	90 95       	com	r25
+    1316:	80 95       	com	r24
+    1318:	70 95       	com	r23
+    131a:	61 95       	neg	r22
+    131c:	7f 4f       	sbci	r23, 0xFF	; 255
+    131e:	8f 4f       	sbci	r24, 0xFF	; 255
+    1320:	9f 4f       	sbci	r25, 0xFF	; 255
+    1322:	00 68       	ori	r16, 0x80	; 128
+    1324:	2a e0       	ldi	r18, 0x0A	; 10
+    1326:	30 e0       	ldi	r19, 0x00	; 0
+    1328:	a4 01       	movw	r20, r8
+    132a:	0e 94 1a 0c 	call	0x1834	; 0x1834 <__ultoa_invert>
+    132e:	c8 2e       	mov	r12, r24
+    1330:	c8 18       	sub	r12, r8
+    1332:	3e c0       	rjmp	.+124    	; 0x13b0 <__stack+0x2b1>
+    1334:	02 2f       	mov	r16, r18
+    1336:	85 37       	cpi	r24, 0x75	; 117
+    1338:	21 f4       	brne	.+8      	; 0x1342 <__stack+0x243>
+    133a:	0f 7e       	andi	r16, 0xEF	; 239
+    133c:	2a e0       	ldi	r18, 0x0A	; 10
+    133e:	30 e0       	ldi	r19, 0x00	; 0
+    1340:	1d c0       	rjmp	.+58     	; 0x137c <__stack+0x27d>
+    1342:	09 7f       	andi	r16, 0xF9	; 249
+    1344:	8f 36       	cpi	r24, 0x6F	; 111
+    1346:	91 f0       	breq	.+36     	; 0x136c <__stack+0x26d>
+    1348:	18 f4       	brcc	.+6      	; 0x1350 <__stack+0x251>
+    134a:	88 35       	cpi	r24, 0x58	; 88
+    134c:	59 f0       	breq	.+22     	; 0x1364 <__stack+0x265>
+    134e:	b0 c0       	rjmp	.+352    	; 0x14b0 <__stack+0x3b1>
+    1350:	80 37       	cpi	r24, 0x70	; 112
+    1352:	19 f0       	breq	.+6      	; 0x135a <__stack+0x25b>
+    1354:	88 37       	cpi	r24, 0x78	; 120
+    1356:	11 f0       	breq	.+4      	; 0x135c <__stack+0x25d>
+    1358:	ab c0       	rjmp	.+342    	; 0x14b0 <__stack+0x3b1>
+    135a:	00 61       	ori	r16, 0x10	; 16
+    135c:	04 ff       	sbrs	r16, 4
+    135e:	09 c0       	rjmp	.+18     	; 0x1372 <__stack+0x273>
+    1360:	04 60       	ori	r16, 0x04	; 4
+    1362:	07 c0       	rjmp	.+14     	; 0x1372 <__stack+0x273>
+    1364:	24 ff       	sbrs	r18, 4
+    1366:	08 c0       	rjmp	.+16     	; 0x1378 <__stack+0x279>
+    1368:	06 60       	ori	r16, 0x06	; 6
+    136a:	06 c0       	rjmp	.+12     	; 0x1378 <__stack+0x279>
+    136c:	28 e0       	ldi	r18, 0x08	; 8
+    136e:	30 e0       	ldi	r19, 0x00	; 0
+    1370:	05 c0       	rjmp	.+10     	; 0x137c <__stack+0x27d>
+    1372:	20 e1       	ldi	r18, 0x10	; 16
+    1374:	30 e0       	ldi	r19, 0x00	; 0
+    1376:	02 c0       	rjmp	.+4      	; 0x137c <__stack+0x27d>
+    1378:	20 e1       	ldi	r18, 0x10	; 16
+    137a:	32 e0       	ldi	r19, 0x02	; 2
+    137c:	56 01       	movw	r10, r12
+    137e:	07 ff       	sbrs	r16, 7
+    1380:	09 c0       	rjmp	.+18     	; 0x1394 <__stack+0x295>
+    1382:	f4 e0       	ldi	r31, 0x04	; 4
+    1384:	af 0e       	add	r10, r31
+    1386:	b1 1c       	adc	r11, r1
+    1388:	f6 01       	movw	r30, r12
+    138a:	60 81       	ld	r22, Z
+    138c:	71 81       	ldd	r23, Z+1	; 0x01
+    138e:	82 81       	ldd	r24, Z+2	; 0x02
+    1390:	93 81       	ldd	r25, Z+3	; 0x03
+    1392:	08 c0       	rjmp	.+16     	; 0x13a4 <__stack+0x2a5>
+    1394:	f2 e0       	ldi	r31, 0x02	; 2
+    1396:	af 0e       	add	r10, r31
+    1398:	b1 1c       	adc	r11, r1
+    139a:	f6 01       	movw	r30, r12
+    139c:	60 81       	ld	r22, Z
+    139e:	71 81       	ldd	r23, Z+1	; 0x01
+    13a0:	80 e0       	ldi	r24, 0x00	; 0
+    13a2:	90 e0       	ldi	r25, 0x00	; 0
+    13a4:	a4 01       	movw	r20, r8
+    13a6:	0e 94 1a 0c 	call	0x1834	; 0x1834 <__ultoa_invert>
+    13aa:	c8 2e       	mov	r12, r24
+    13ac:	c8 18       	sub	r12, r8
+    13ae:	0f 77       	andi	r16, 0x7F	; 127
+    13b0:	06 ff       	sbrs	r16, 6
+    13b2:	0b c0       	rjmp	.+22     	; 0x13ca <__stack+0x2cb>
+    13b4:	20 2f       	mov	r18, r16
+    13b6:	2e 7f       	andi	r18, 0xFE	; 254
+    13b8:	c1 16       	cp	r12, r17
+    13ba:	50 f4       	brcc	.+20     	; 0x13d0 <__stack+0x2d1>
+    13bc:	04 ff       	sbrs	r16, 4
+    13be:	0a c0       	rjmp	.+20     	; 0x13d4 <__stack+0x2d5>
+    13c0:	02 fd       	sbrc	r16, 2
+    13c2:	08 c0       	rjmp	.+16     	; 0x13d4 <__stack+0x2d5>
+    13c4:	20 2f       	mov	r18, r16
+    13c6:	2e 7e       	andi	r18, 0xEE	; 238
+    13c8:	05 c0       	rjmp	.+10     	; 0x13d4 <__stack+0x2d5>
+    13ca:	dc 2c       	mov	r13, r12
+    13cc:	20 2f       	mov	r18, r16
+    13ce:	03 c0       	rjmp	.+6      	; 0x13d6 <__stack+0x2d7>
+    13d0:	dc 2c       	mov	r13, r12
+    13d2:	01 c0       	rjmp	.+2      	; 0x13d6 <__stack+0x2d7>
+    13d4:	d1 2e       	mov	r13, r17
+    13d6:	24 ff       	sbrs	r18, 4
+    13d8:	0d c0       	rjmp	.+26     	; 0x13f4 <__stack+0x2f5>
+    13da:	fe 01       	movw	r30, r28
+    13dc:	ec 0d       	add	r30, r12
+    13de:	f1 1d       	adc	r31, r1
+    13e0:	80 81       	ld	r24, Z
+    13e2:	80 33       	cpi	r24, 0x30	; 48
+    13e4:	11 f4       	brne	.+4      	; 0x13ea <__stack+0x2eb>
+    13e6:	29 7e       	andi	r18, 0xE9	; 233
+    13e8:	09 c0       	rjmp	.+18     	; 0x13fc <__stack+0x2fd>
+    13ea:	22 ff       	sbrs	r18, 2
+    13ec:	06 c0       	rjmp	.+12     	; 0x13fa <__stack+0x2fb>
+    13ee:	d3 94       	inc	r13
+    13f0:	d3 94       	inc	r13
+    13f2:	04 c0       	rjmp	.+8      	; 0x13fc <__stack+0x2fd>
+    13f4:	82 2f       	mov	r24, r18
+    13f6:	86 78       	andi	r24, 0x86	; 134
+    13f8:	09 f0       	breq	.+2      	; 0x13fc <__stack+0x2fd>
+    13fa:	d3 94       	inc	r13
+    13fc:	23 fd       	sbrc	r18, 3
+    13fe:	13 c0       	rjmp	.+38     	; 0x1426 <__stack+0x327>
+    1400:	20 ff       	sbrs	r18, 0
+    1402:	06 c0       	rjmp	.+12     	; 0x1410 <__stack+0x311>
+    1404:	1c 2d       	mov	r17, r12
+    1406:	d5 14       	cp	r13, r5
+    1408:	18 f4       	brcc	.+6      	; 0x1410 <__stack+0x311>
+    140a:	15 0d       	add	r17, r5
+    140c:	1d 19       	sub	r17, r13
+    140e:	d5 2c       	mov	r13, r5
+    1410:	d5 14       	cp	r13, r5
+    1412:	68 f4       	brcc	.+26     	; 0x142e <__stack+0x32f>
+    1414:	b7 01       	movw	r22, r14
+    1416:	80 e2       	ldi	r24, 0x20	; 32
+    1418:	90 e0       	ldi	r25, 0x00	; 0
+    141a:	2b 8b       	std	Y+19, r18	; 0x13
+    141c:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1420:	d3 94       	inc	r13
+    1422:	2b 89       	ldd	r18, Y+19	; 0x13
+    1424:	f5 cf       	rjmp	.-22     	; 0x1410 <__stack+0x311>
+    1426:	d5 14       	cp	r13, r5
+    1428:	10 f4       	brcc	.+4      	; 0x142e <__stack+0x32f>
+    142a:	5d 18       	sub	r5, r13
+    142c:	01 c0       	rjmp	.+2      	; 0x1430 <__stack+0x331>
+    142e:	51 2c       	mov	r5, r1
+    1430:	24 ff       	sbrs	r18, 4
+    1432:	12 c0       	rjmp	.+36     	; 0x1458 <__stack+0x359>
+    1434:	b7 01       	movw	r22, r14
+    1436:	80 e3       	ldi	r24, 0x30	; 48
+    1438:	90 e0       	ldi	r25, 0x00	; 0
+    143a:	2b 8b       	std	Y+19, r18	; 0x13
+    143c:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1440:	2b 89       	ldd	r18, Y+19	; 0x13
+    1442:	22 ff       	sbrs	r18, 2
+    1444:	17 c0       	rjmp	.+46     	; 0x1474 <__stack+0x375>
+    1446:	21 ff       	sbrs	r18, 1
+    1448:	03 c0       	rjmp	.+6      	; 0x1450 <__stack+0x351>
+    144a:	88 e5       	ldi	r24, 0x58	; 88
+    144c:	90 e0       	ldi	r25, 0x00	; 0
+    144e:	02 c0       	rjmp	.+4      	; 0x1454 <__stack+0x355>
+    1450:	88 e7       	ldi	r24, 0x78	; 120
+    1452:	90 e0       	ldi	r25, 0x00	; 0
+    1454:	b7 01       	movw	r22, r14
+    1456:	0c c0       	rjmp	.+24     	; 0x1470 <__stack+0x371>
+    1458:	82 2f       	mov	r24, r18
+    145a:	86 78       	andi	r24, 0x86	; 134
+    145c:	59 f0       	breq	.+22     	; 0x1474 <__stack+0x375>
+    145e:	21 fd       	sbrc	r18, 1
+    1460:	02 c0       	rjmp	.+4      	; 0x1466 <__stack+0x367>
+    1462:	80 e2       	ldi	r24, 0x20	; 32
+    1464:	01 c0       	rjmp	.+2      	; 0x1468 <__stack+0x369>
+    1466:	8b e2       	ldi	r24, 0x2B	; 43
+    1468:	27 fd       	sbrc	r18, 7
+    146a:	8d e2       	ldi	r24, 0x2D	; 45
+    146c:	b7 01       	movw	r22, r14
+    146e:	90 e0       	ldi	r25, 0x00	; 0
+    1470:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1474:	c1 16       	cp	r12, r17
+    1476:	38 f4       	brcc	.+14     	; 0x1486 <__stack+0x387>
+    1478:	b7 01       	movw	r22, r14
+    147a:	80 e3       	ldi	r24, 0x30	; 48
+    147c:	90 e0       	ldi	r25, 0x00	; 0
+    147e:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1482:	11 50       	subi	r17, 0x01	; 1
+    1484:	f7 cf       	rjmp	.-18     	; 0x1474 <__stack+0x375>
+    1486:	ca 94       	dec	r12
+    1488:	f4 01       	movw	r30, r8
+    148a:	ec 0d       	add	r30, r12
+    148c:	f1 1d       	adc	r31, r1
+    148e:	80 81       	ld	r24, Z
+    1490:	b7 01       	movw	r22, r14
+    1492:	90 e0       	ldi	r25, 0x00	; 0
+    1494:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    1498:	c1 10       	cpse	r12, r1
+    149a:	f5 cf       	rjmp	.-22     	; 0x1486 <__stack+0x387>
+    149c:	55 20       	and	r5, r5
+    149e:	09 f4       	brne	.+2      	; 0x14a2 <__stack+0x3a3>
+    14a0:	c2 cc       	rjmp	.-1660   	; 0xe26 <vfprintf+0x58>
+    14a2:	b7 01       	movw	r22, r14
+    14a4:	80 e2       	ldi	r24, 0x20	; 32
+    14a6:	90 e0       	ldi	r25, 0x00	; 0
+    14a8:	0e 94 87 0b 	call	0x170e	; 0x170e <fputc>
+    14ac:	5a 94       	dec	r5
+    14ae:	f6 cf       	rjmp	.-20     	; 0x149c <__stack+0x39d>
+    14b0:	f7 01       	movw	r30, r14
+    14b2:	86 81       	ldd	r24, Z+6	; 0x06
+    14b4:	97 81       	ldd	r25, Z+7	; 0x07
+    14b6:	02 c0       	rjmp	.+4      	; 0x14bc <__stack+0x3bd>
+    14b8:	8f ef       	ldi	r24, 0xFF	; 255
+    14ba:	9f ef       	ldi	r25, 0xFF	; 255
+    14bc:	63 96       	adiw	r28, 0x13	; 19
+    14be:	e2 e1       	ldi	r30, 0x12	; 18
+    14c0:	0c 94 7e 0a 	jmp	0x14fc	; 0x14fc <__epilogue_restores__>
+
+000014c4 <__prologue_saves__>:
+    14c4:	2f 92       	push	r2
+    14c6:	3f 92       	push	r3
+    14c8:	4f 92       	push	r4
+    14ca:	5f 92       	push	r5
+    14cc:	6f 92       	push	r6
+    14ce:	7f 92       	push	r7
+    14d0:	8f 92       	push	r8
+    14d2:	9f 92       	push	r9
+    14d4:	af 92       	push	r10
+    14d6:	bf 92       	push	r11
+    14d8:	cf 92       	push	r12
+    14da:	df 92       	push	r13
+    14dc:	ef 92       	push	r14
+    14de:	ff 92       	push	r15
+    14e0:	0f 93       	push	r16
+    14e2:	1f 93       	push	r17
+    14e4:	cf 93       	push	r28
+    14e6:	df 93       	push	r29
+    14e8:	cd b7       	in	r28, 0x3d	; 61
+    14ea:	de b7       	in	r29, 0x3e	; 62
+    14ec:	ca 1b       	sub	r28, r26
+    14ee:	db 0b       	sbc	r29, r27
+    14f0:	0f b6       	in	r0, 0x3f	; 63
+    14f2:	f8 94       	cli
+    14f4:	de bf       	out	0x3e, r29	; 62
+    14f6:	0f be       	out	0x3f, r0	; 63
+    14f8:	cd bf       	out	0x3d, r28	; 61
+    14fa:	09 94       	ijmp
+
+000014fc <__epilogue_restores__>:
+    14fc:	2a 88       	ldd	r2, Y+18	; 0x12
+    14fe:	39 88       	ldd	r3, Y+17	; 0x11
+    1500:	48 88       	ldd	r4, Y+16	; 0x10
+    1502:	5f 84       	ldd	r5, Y+15	; 0x0f
+    1504:	6e 84       	ldd	r6, Y+14	; 0x0e
+    1506:	7d 84       	ldd	r7, Y+13	; 0x0d
+    1508:	8c 84       	ldd	r8, Y+12	; 0x0c
+    150a:	9b 84       	ldd	r9, Y+11	; 0x0b
+    150c:	aa 84       	ldd	r10, Y+10	; 0x0a
+    150e:	b9 84       	ldd	r11, Y+9	; 0x09
+    1510:	c8 84       	ldd	r12, Y+8	; 0x08
+    1512:	df 80       	ldd	r13, Y+7	; 0x07
+    1514:	ee 80       	ldd	r14, Y+6	; 0x06
+    1516:	fd 80       	ldd	r15, Y+5	; 0x05
+    1518:	0c 81       	ldd	r16, Y+4	; 0x04
+    151a:	1b 81       	ldd	r17, Y+3	; 0x03
+    151c:	aa 81       	ldd	r26, Y+2	; 0x02
+    151e:	b9 81       	ldd	r27, Y+1	; 0x01
+    1520:	ce 0f       	add	r28, r30
+    1522:	d1 1d       	adc	r29, r1
+    1524:	0f b6       	in	r0, 0x3f	; 63
+    1526:	f8 94       	cli
+    1528:	de bf       	out	0x3e, r29	; 62
+    152a:	0f be       	out	0x3f, r0	; 63
+    152c:	cd bf       	out	0x3d, r28	; 61
+    152e:	ed 01       	movw	r28, r26
+    1530:	08 95       	ret
+
+00001532 <__ftoa_engine>:
+    1532:	28 30       	cpi	r18, 0x08	; 8
+    1534:	08 f0       	brcs	.+2      	; 0x1538 <__ftoa_engine+0x6>
+    1536:	27 e0       	ldi	r18, 0x07	; 7
+    1538:	33 27       	eor	r19, r19
+    153a:	da 01       	movw	r26, r20
+    153c:	99 0f       	add	r25, r25
+    153e:	31 1d       	adc	r19, r1
+    1540:	87 fd       	sbrc	r24, 7
+    1542:	91 60       	ori	r25, 0x01	; 1
+    1544:	00 96       	adiw	r24, 0x00	; 0
+    1546:	61 05       	cpc	r22, r1
+    1548:	71 05       	cpc	r23, r1
+    154a:	39 f4       	brne	.+14     	; 0x155a <__ftoa_engine+0x28>
+    154c:	32 60       	ori	r19, 0x02	; 2
+    154e:	2e 5f       	subi	r18, 0xFE	; 254
+    1550:	3d 93       	st	X+, r19
+    1552:	30 e3       	ldi	r19, 0x30	; 48
+    1554:	2a 95       	dec	r18
+    1556:	e1 f7       	brne	.-8      	; 0x1550 <__ftoa_engine+0x1e>
+    1558:	08 95       	ret
+    155a:	9f 3f       	cpi	r25, 0xFF	; 255
+    155c:	30 f0       	brcs	.+12     	; 0x156a <__ftoa_engine+0x38>
+    155e:	80 38       	cpi	r24, 0x80	; 128
+    1560:	71 05       	cpc	r23, r1
+    1562:	61 05       	cpc	r22, r1
+    1564:	09 f0       	breq	.+2      	; 0x1568 <__ftoa_engine+0x36>
+    1566:	3c 5f       	subi	r19, 0xFC	; 252
+    1568:	3c 5f       	subi	r19, 0xFC	; 252
+    156a:	3d 93       	st	X+, r19
+    156c:	91 30       	cpi	r25, 0x01	; 1
+    156e:	08 f0       	brcs	.+2      	; 0x1572 <__ftoa_engine+0x40>
+    1570:	80 68       	ori	r24, 0x80	; 128
+    1572:	91 1d       	adc	r25, r1
+    1574:	df 93       	push	r29
+    1576:	cf 93       	push	r28
+    1578:	1f 93       	push	r17
+    157a:	0f 93       	push	r16
+    157c:	ff 92       	push	r15
+    157e:	ef 92       	push	r14
+    1580:	19 2f       	mov	r17, r25
+    1582:	98 7f       	andi	r25, 0xF8	; 248
+    1584:	96 95       	lsr	r25
+    1586:	e9 2f       	mov	r30, r25
+    1588:	96 95       	lsr	r25
+    158a:	96 95       	lsr	r25
+    158c:	e9 0f       	add	r30, r25
+    158e:	ff 27       	eor	r31, r31
+    1590:	e2 52       	subi	r30, 0x22	; 34
+    1592:	ff 4f       	sbci	r31, 0xFF	; 255
+    1594:	99 27       	eor	r25, r25
+    1596:	33 27       	eor	r19, r19
+    1598:	ee 24       	eor	r14, r14
+    159a:	ff 24       	eor	r15, r15
+    159c:	a7 01       	movw	r20, r14
+    159e:	e7 01       	movw	r28, r14
+    15a0:	05 90       	lpm	r0, Z+
+    15a2:	08 94       	sec
+    15a4:	07 94       	ror	r0
+    15a6:	28 f4       	brcc	.+10     	; 0x15b2 <__ftoa_engine+0x80>
+    15a8:	36 0f       	add	r19, r22
+    15aa:	e7 1e       	adc	r14, r23
+    15ac:	f8 1e       	adc	r15, r24
+    15ae:	49 1f       	adc	r20, r25
+    15b0:	51 1d       	adc	r21, r1
+    15b2:	66 0f       	add	r22, r22
+    15b4:	77 1f       	adc	r23, r23
+    15b6:	88 1f       	adc	r24, r24
+    15b8:	99 1f       	adc	r25, r25
+    15ba:	06 94       	lsr	r0
+    15bc:	a1 f7       	brne	.-24     	; 0x15a6 <__ftoa_engine+0x74>
+    15be:	05 90       	lpm	r0, Z+
+    15c0:	07 94       	ror	r0
+    15c2:	28 f4       	brcc	.+10     	; 0x15ce <__ftoa_engine+0x9c>
+    15c4:	e7 0e       	add	r14, r23
+    15c6:	f8 1e       	adc	r15, r24
+    15c8:	49 1f       	adc	r20, r25
+    15ca:	56 1f       	adc	r21, r22
+    15cc:	c1 1d       	adc	r28, r1
+    15ce:	77 0f       	add	r23, r23
+    15d0:	88 1f       	adc	r24, r24
+    15d2:	99 1f       	adc	r25, r25
+    15d4:	66 1f       	adc	r22, r22
+    15d6:	06 94       	lsr	r0
+    15d8:	a1 f7       	brne	.-24     	; 0x15c2 <__ftoa_engine+0x90>
+    15da:	05 90       	lpm	r0, Z+
+    15dc:	07 94       	ror	r0
+    15de:	28 f4       	brcc	.+10     	; 0x15ea <__ftoa_engine+0xb8>
+    15e0:	f8 0e       	add	r15, r24
+    15e2:	49 1f       	adc	r20, r25
+    15e4:	56 1f       	adc	r21, r22
+    15e6:	c7 1f       	adc	r28, r23
+    15e8:	d1 1d       	adc	r29, r1
+    15ea:	88 0f       	add	r24, r24
+    15ec:	99 1f       	adc	r25, r25
+    15ee:	66 1f       	adc	r22, r22
+    15f0:	77 1f       	adc	r23, r23
+    15f2:	06 94       	lsr	r0
+    15f4:	a1 f7       	brne	.-24     	; 0x15de <__ftoa_engine+0xac>
+    15f6:	05 90       	lpm	r0, Z+
+    15f8:	07 94       	ror	r0
+    15fa:	20 f4       	brcc	.+8      	; 0x1604 <__ftoa_engine+0xd2>
+    15fc:	49 0f       	add	r20, r25
+    15fe:	56 1f       	adc	r21, r22
+    1600:	c7 1f       	adc	r28, r23
+    1602:	d8 1f       	adc	r29, r24
+    1604:	99 0f       	add	r25, r25
+    1606:	66 1f       	adc	r22, r22
+    1608:	77 1f       	adc	r23, r23
+    160a:	88 1f       	adc	r24, r24
+    160c:	06 94       	lsr	r0
+    160e:	a9 f7       	brne	.-22     	; 0x15fa <__ftoa_engine+0xc8>
+    1610:	84 91       	lpm	r24, Z
+    1612:	10 95       	com	r17
+    1614:	17 70       	andi	r17, 0x07	; 7
+    1616:	41 f0       	breq	.+16     	; 0x1628 <__ftoa_engine+0xf6>
+    1618:	d6 95       	lsr	r29
+    161a:	c7 95       	ror	r28
+    161c:	57 95       	ror	r21
+    161e:	47 95       	ror	r20
+    1620:	f7 94       	ror	r15
+    1622:	e7 94       	ror	r14
+    1624:	1a 95       	dec	r17
+    1626:	c1 f7       	brne	.-16     	; 0x1618 <__ftoa_engine+0xe6>
+    1628:	e4 e8       	ldi	r30, 0x84	; 132
+    162a:	f0 e0       	ldi	r31, 0x00	; 0
+    162c:	68 94       	set
+    162e:	15 90       	lpm	r1, Z+
+    1630:	15 91       	lpm	r17, Z+
+    1632:	35 91       	lpm	r19, Z+
+    1634:	65 91       	lpm	r22, Z+
+    1636:	95 91       	lpm	r25, Z+
+    1638:	05 90       	lpm	r0, Z+
+    163a:	7f e2       	ldi	r23, 0x2F	; 47
+    163c:	73 95       	inc	r23
+    163e:	e1 18       	sub	r14, r1
+    1640:	f1 0a       	sbc	r15, r17
+    1642:	43 0b       	sbc	r20, r19
+    1644:	56 0b       	sbc	r21, r22
+    1646:	c9 0b       	sbc	r28, r25
+    1648:	d0 09       	sbc	r29, r0
+    164a:	c0 f7       	brcc	.-16     	; 0x163c <__ftoa_engine+0x10a>
+    164c:	e1 0c       	add	r14, r1
+    164e:	f1 1e       	adc	r15, r17
+    1650:	43 1f       	adc	r20, r19
+    1652:	56 1f       	adc	r21, r22
+    1654:	c9 1f       	adc	r28, r25
+    1656:	d0 1d       	adc	r29, r0
+    1658:	7e f4       	brtc	.+30     	; 0x1678 <__ftoa_engine+0x146>
+    165a:	70 33       	cpi	r23, 0x30	; 48
+    165c:	11 f4       	brne	.+4      	; 0x1662 <__ftoa_engine+0x130>
+    165e:	8a 95       	dec	r24
+    1660:	e6 cf       	rjmp	.-52     	; 0x162e <__ftoa_engine+0xfc>
+    1662:	e8 94       	clt
+    1664:	01 50       	subi	r16, 0x01	; 1
+    1666:	30 f0       	brcs	.+12     	; 0x1674 <__ftoa_engine+0x142>
+    1668:	08 0f       	add	r16, r24
+    166a:	0a f4       	brpl	.+2      	; 0x166e <__ftoa_engine+0x13c>
+    166c:	00 27       	eor	r16, r16
+    166e:	02 17       	cp	r16, r18
+    1670:	08 f4       	brcc	.+2      	; 0x1674 <__ftoa_engine+0x142>
+    1672:	20 2f       	mov	r18, r16
+    1674:	23 95       	inc	r18
+    1676:	02 2f       	mov	r16, r18
+    1678:	7a 33       	cpi	r23, 0x3A	; 58
+    167a:	28 f0       	brcs	.+10     	; 0x1686 <__ftoa_engine+0x154>
+    167c:	79 e3       	ldi	r23, 0x39	; 57
+    167e:	7d 93       	st	X+, r23
+    1680:	2a 95       	dec	r18
+    1682:	e9 f7       	brne	.-6      	; 0x167e <__ftoa_engine+0x14c>
+    1684:	10 c0       	rjmp	.+32     	; 0x16a6 <__ftoa_engine+0x174>
+    1686:	7d 93       	st	X+, r23
+    1688:	2a 95       	dec	r18
+    168a:	89 f6       	brne	.-94     	; 0x162e <__ftoa_engine+0xfc>
+    168c:	06 94       	lsr	r0
+    168e:	97 95       	ror	r25
+    1690:	67 95       	ror	r22
+    1692:	37 95       	ror	r19
+    1694:	17 95       	ror	r17
+    1696:	17 94       	ror	r1
+    1698:	e1 18       	sub	r14, r1
+    169a:	f1 0a       	sbc	r15, r17
+    169c:	43 0b       	sbc	r20, r19
+    169e:	56 0b       	sbc	r21, r22
+    16a0:	c9 0b       	sbc	r28, r25
+    16a2:	d0 09       	sbc	r29, r0
+    16a4:	98 f0       	brcs	.+38     	; 0x16cc <__ftoa_engine+0x19a>
+    16a6:	23 95       	inc	r18
+    16a8:	7e 91       	ld	r23, -X
+    16aa:	73 95       	inc	r23
+    16ac:	7a 33       	cpi	r23, 0x3A	; 58
+    16ae:	08 f0       	brcs	.+2      	; 0x16b2 <__ftoa_engine+0x180>
+    16b0:	70 e3       	ldi	r23, 0x30	; 48
+    16b2:	7c 93       	st	X, r23
+    16b4:	20 13       	cpse	r18, r16
+    16b6:	b8 f7       	brcc	.-18     	; 0x16a6 <__ftoa_engine+0x174>
+    16b8:	7e 91       	ld	r23, -X
+    16ba:	70 61       	ori	r23, 0x10	; 16
+    16bc:	7d 93       	st	X+, r23
+    16be:	30 f0       	brcs	.+12     	; 0x16cc <__ftoa_engine+0x19a>
+    16c0:	83 95       	inc	r24
+    16c2:	71 e3       	ldi	r23, 0x31	; 49
+    16c4:	7d 93       	st	X+, r23
+    16c6:	70 e3       	ldi	r23, 0x30	; 48
+    16c8:	2a 95       	dec	r18
+    16ca:	e1 f7       	brne	.-8      	; 0x16c4 <__ftoa_engine+0x192>
+    16cc:	11 24       	eor	r1, r1
+    16ce:	ef 90       	pop	r14
+    16d0:	ff 90       	pop	r15
+    16d2:	0f 91       	pop	r16
+    16d4:	1f 91       	pop	r17
+    16d6:	cf 91       	pop	r28
+    16d8:	df 91       	pop	r29
+    16da:	99 27       	eor	r25, r25
+    16dc:	87 fd       	sbrc	r24, 7
+    16de:	90 95       	com	r25
+    16e0:	08 95       	ret
+
+000016e2 <strnlen_P>:
+    16e2:	fc 01       	movw	r30, r24
+    16e4:	05 90       	lpm	r0, Z+
+    16e6:	61 50       	subi	r22, 0x01	; 1
+    16e8:	70 40       	sbci	r23, 0x00	; 0
+    16ea:	01 10       	cpse	r0, r1
+    16ec:	d8 f7       	brcc	.-10     	; 0x16e4 <strnlen_P+0x2>
+    16ee:	80 95       	com	r24
+    16f0:	90 95       	com	r25
+    16f2:	8e 0f       	add	r24, r30
+    16f4:	9f 1f       	adc	r25, r31
+    16f6:	08 95       	ret
+
+000016f8 <strnlen>:
+    16f8:	fc 01       	movw	r30, r24
+    16fa:	61 50       	subi	r22, 0x01	; 1
+    16fc:	70 40       	sbci	r23, 0x00	; 0
+    16fe:	01 90       	ld	r0, Z+
+    1700:	01 10       	cpse	r0, r1
+    1702:	d8 f7       	brcc	.-10     	; 0x16fa <strnlen+0x2>
+    1704:	80 95       	com	r24
+    1706:	90 95       	com	r25
+    1708:	8e 0f       	add	r24, r30
+    170a:	9f 1f       	adc	r25, r31
+    170c:	08 95       	ret
+
+0000170e <fputc>:
+    170e:	0f 93       	push	r16
+    1710:	1f 93       	push	r17
+    1712:	cf 93       	push	r28
+    1714:	df 93       	push	r29
+    1716:	18 2f       	mov	r17, r24
+    1718:	09 2f       	mov	r16, r25
+    171a:	eb 01       	movw	r28, r22
+    171c:	8b 81       	ldd	r24, Y+3	; 0x03
+    171e:	81 fd       	sbrc	r24, 1
+    1720:	03 c0       	rjmp	.+6      	; 0x1728 <fputc+0x1a>
+    1722:	8f ef       	ldi	r24, 0xFF	; 255
+    1724:	9f ef       	ldi	r25, 0xFF	; 255
+    1726:	20 c0       	rjmp	.+64     	; 0x1768 <fputc+0x5a>
+    1728:	82 ff       	sbrs	r24, 2
+    172a:	10 c0       	rjmp	.+32     	; 0x174c <fputc+0x3e>
+    172c:	4e 81       	ldd	r20, Y+6	; 0x06
+    172e:	5f 81       	ldd	r21, Y+7	; 0x07
+    1730:	2c 81       	ldd	r18, Y+4	; 0x04
+    1732:	3d 81       	ldd	r19, Y+5	; 0x05
+    1734:	42 17       	cp	r20, r18
+    1736:	53 07       	cpc	r21, r19
+    1738:	7c f4       	brge	.+30     	; 0x1758 <fputc+0x4a>
+    173a:	e8 81       	ld	r30, Y
+    173c:	f9 81       	ldd	r31, Y+1	; 0x01
+    173e:	9f 01       	movw	r18, r30
+    1740:	2f 5f       	subi	r18, 0xFF	; 255
+    1742:	3f 4f       	sbci	r19, 0xFF	; 255
+    1744:	39 83       	std	Y+1, r19	; 0x01
+    1746:	28 83       	st	Y, r18
+    1748:	10 83       	st	Z, r17
+    174a:	06 c0       	rjmp	.+12     	; 0x1758 <fputc+0x4a>
+    174c:	e8 85       	ldd	r30, Y+8	; 0x08
+    174e:	f9 85       	ldd	r31, Y+9	; 0x09
+    1750:	81 2f       	mov	r24, r17
+    1752:	09 95       	icall
+    1754:	89 2b       	or	r24, r25
+    1756:	29 f7       	brne	.-54     	; 0x1722 <fputc+0x14>
+    1758:	2e 81       	ldd	r18, Y+6	; 0x06
+    175a:	3f 81       	ldd	r19, Y+7	; 0x07
+    175c:	2f 5f       	subi	r18, 0xFF	; 255
+    175e:	3f 4f       	sbci	r19, 0xFF	; 255
+    1760:	3f 83       	std	Y+7, r19	; 0x07
+    1762:	2e 83       	std	Y+6, r18	; 0x06
+    1764:	81 2f       	mov	r24, r17
+    1766:	90 2f       	mov	r25, r16
+    1768:	df 91       	pop	r29
+    176a:	cf 91       	pop	r28
+    176c:	1f 91       	pop	r17
+    176e:	0f 91       	pop	r16
+    1770:	08 95       	ret
+
+00001772 <fwrite>:
+    1772:	a0 e0       	ldi	r26, 0x00	; 0
+    1774:	b0 e0       	ldi	r27, 0x00	; 0
+    1776:	ef eb       	ldi	r30, 0xBF	; 191
+    1778:	fb e0       	ldi	r31, 0x0B	; 11
+    177a:	0c 94 68 0a 	jmp	0x14d0	; 0x14d0 <__prologue_saves__+0xc>
+    177e:	6b 01       	movw	r12, r22
+    1780:	4a 01       	movw	r8, r20
+    1782:	79 01       	movw	r14, r18
+    1784:	d9 01       	movw	r26, r18
+    1786:	13 96       	adiw	r26, 0x03	; 3
+    1788:	2c 91       	ld	r18, X
+    178a:	21 ff       	sbrs	r18, 1
+    178c:	1d c0       	rjmp	.+58     	; 0x17c8 <fwrite+0x56>
+    178e:	c0 e0       	ldi	r28, 0x00	; 0
+    1790:	d0 e0       	ldi	r29, 0x00	; 0
+    1792:	c8 15       	cp	r28, r8
+    1794:	d9 05       	cpc	r29, r9
+    1796:	d9 f0       	breq	.+54     	; 0x17ce <fwrite+0x5c>
+    1798:	8c 01       	movw	r16, r24
+    179a:	5c 01       	movw	r10, r24
+    179c:	ac 0c       	add	r10, r12
+    179e:	bd 1c       	adc	r11, r13
+    17a0:	c8 01       	movw	r24, r16
+    17a2:	0a 15       	cp	r16, r10
+    17a4:	1b 05       	cpc	r17, r11
+    17a6:	71 f0       	breq	.+28     	; 0x17c4 <fwrite+0x52>
+    17a8:	0f 5f       	subi	r16, 0xFF	; 255
+    17aa:	1f 4f       	sbci	r17, 0xFF	; 255
+    17ac:	d7 01       	movw	r26, r14
+    17ae:	18 96       	adiw	r26, 0x08	; 8
+    17b0:	ed 91       	ld	r30, X+
+    17b2:	fc 91       	ld	r31, X
+    17b4:	19 97       	sbiw	r26, 0x09	; 9
+    17b6:	b7 01       	movw	r22, r14
+    17b8:	dc 01       	movw	r26, r24
+    17ba:	8c 91       	ld	r24, X
+    17bc:	09 95       	icall
+    17be:	89 2b       	or	r24, r25
+    17c0:	79 f3       	breq	.-34     	; 0x17a0 <fwrite+0x2e>
+    17c2:	05 c0       	rjmp	.+10     	; 0x17ce <fwrite+0x5c>
+    17c4:	21 96       	adiw	r28, 0x01	; 1
+    17c6:	e5 cf       	rjmp	.-54     	; 0x1792 <fwrite+0x20>
+    17c8:	80 e0       	ldi	r24, 0x00	; 0
+    17ca:	90 e0       	ldi	r25, 0x00	; 0
+    17cc:	01 c0       	rjmp	.+2      	; 0x17d0 <fwrite+0x5e>
+    17ce:	ce 01       	movw	r24, r28
+    17d0:	cd b7       	in	r28, 0x3d	; 61
+    17d2:	de b7       	in	r29, 0x3e	; 62
+    17d4:	ec e0       	ldi	r30, 0x0C	; 12
+    17d6:	0c 94 84 0a 	jmp	0x1508	; 0x1508 <__epilogue_restores__+0xc>
+
+000017da <puts>:
+    17da:	0f 93       	push	r16
+    17dc:	1f 93       	push	r17
+    17de:	cf 93       	push	r28
+    17e0:	df 93       	push	r29
+    17e2:	e0 91 d6 01 	lds	r30, 0x01D6
+    17e6:	f0 91 d7 01 	lds	r31, 0x01D7
+    17ea:	23 81       	ldd	r18, Z+3	; 0x03
+    17ec:	21 ff       	sbrs	r18, 1
+    17ee:	1b c0       	rjmp	.+54     	; 0x1826 <puts+0x4c>
+    17f0:	ec 01       	movw	r28, r24
+    17f2:	00 e0       	ldi	r16, 0x00	; 0
+    17f4:	10 e0       	ldi	r17, 0x00	; 0
+    17f6:	89 91       	ld	r24, Y+
+    17f8:	60 91 d6 01 	lds	r22, 0x01D6
+    17fc:	70 91 d7 01 	lds	r23, 0x01D7
+    1800:	db 01       	movw	r26, r22
+    1802:	18 96       	adiw	r26, 0x08	; 8
+    1804:	ed 91       	ld	r30, X+
+    1806:	fc 91       	ld	r31, X
+    1808:	19 97       	sbiw	r26, 0x09	; 9
+    180a:	88 23       	and	r24, r24
+    180c:	31 f0       	breq	.+12     	; 0x181a <puts+0x40>
+    180e:	09 95       	icall
+    1810:	89 2b       	or	r24, r25
+    1812:	89 f3       	breq	.-30     	; 0x17f6 <puts+0x1c>
+    1814:	0f ef       	ldi	r16, 0xFF	; 255
+    1816:	1f ef       	ldi	r17, 0xFF	; 255
+    1818:	ee cf       	rjmp	.-36     	; 0x17f6 <puts+0x1c>
+    181a:	8a e0       	ldi	r24, 0x0A	; 10
+    181c:	09 95       	icall
+    181e:	89 2b       	or	r24, r25
+    1820:	11 f4       	brne	.+4      	; 0x1826 <puts+0x4c>
+    1822:	c8 01       	movw	r24, r16
+    1824:	02 c0       	rjmp	.+4      	; 0x182a <puts+0x50>
+    1826:	8f ef       	ldi	r24, 0xFF	; 255
+    1828:	9f ef       	ldi	r25, 0xFF	; 255
+    182a:	df 91       	pop	r29
+    182c:	cf 91       	pop	r28
+    182e:	1f 91       	pop	r17
+    1830:	0f 91       	pop	r16
+    1832:	08 95       	ret
+
+00001834 <__ultoa_invert>:
+    1834:	fa 01       	movw	r30, r20
+    1836:	aa 27       	eor	r26, r26
+    1838:	28 30       	cpi	r18, 0x08	; 8
+    183a:	51 f1       	breq	.+84     	; 0x1890 <__ultoa_invert+0x5c>
+    183c:	20 31       	cpi	r18, 0x10	; 16
+    183e:	81 f1       	breq	.+96     	; 0x18a0 <__ultoa_invert+0x6c>
+    1840:	e8 94       	clt
+    1842:	6f 93       	push	r22
+    1844:	6e 7f       	andi	r22, 0xFE	; 254
+    1846:	6e 5f       	subi	r22, 0xFE	; 254
+    1848:	7f 4f       	sbci	r23, 0xFF	; 255
+    184a:	8f 4f       	sbci	r24, 0xFF	; 255
+    184c:	9f 4f       	sbci	r25, 0xFF	; 255
+    184e:	af 4f       	sbci	r26, 0xFF	; 255
+    1850:	b1 e0       	ldi	r27, 0x01	; 1
+    1852:	3e d0       	rcall	.+124    	; 0x18d0 <__ultoa_invert+0x9c>
+    1854:	b4 e0       	ldi	r27, 0x04	; 4
+    1856:	3c d0       	rcall	.+120    	; 0x18d0 <__ultoa_invert+0x9c>
+    1858:	67 0f       	add	r22, r23
+    185a:	78 1f       	adc	r23, r24
+    185c:	89 1f       	adc	r24, r25
+    185e:	9a 1f       	adc	r25, r26
+    1860:	a1 1d       	adc	r26, r1
+    1862:	68 0f       	add	r22, r24
+    1864:	79 1f       	adc	r23, r25
+    1866:	8a 1f       	adc	r24, r26
+    1868:	91 1d       	adc	r25, r1
+    186a:	a1 1d       	adc	r26, r1
+    186c:	6a 0f       	add	r22, r26
+    186e:	71 1d       	adc	r23, r1
+    1870:	81 1d       	adc	r24, r1
+    1872:	91 1d       	adc	r25, r1
+    1874:	a1 1d       	adc	r26, r1
+    1876:	20 d0       	rcall	.+64     	; 0x18b8 <__ultoa_invert+0x84>
+    1878:	09 f4       	brne	.+2      	; 0x187c <__ultoa_invert+0x48>
+    187a:	68 94       	set
+    187c:	3f 91       	pop	r19
+    187e:	2a e0       	ldi	r18, 0x0A	; 10
+    1880:	26 9f       	mul	r18, r22
+    1882:	11 24       	eor	r1, r1
+    1884:	30 19       	sub	r19, r0
+    1886:	30 5d       	subi	r19, 0xD0	; 208
+    1888:	31 93       	st	Z+, r19
+    188a:	de f6       	brtc	.-74     	; 0x1842 <__ultoa_invert+0xe>
+    188c:	cf 01       	movw	r24, r30
+    188e:	08 95       	ret
+    1890:	46 2f       	mov	r20, r22
+    1892:	47 70       	andi	r20, 0x07	; 7
+    1894:	40 5d       	subi	r20, 0xD0	; 208
+    1896:	41 93       	st	Z+, r20
+    1898:	b3 e0       	ldi	r27, 0x03	; 3
+    189a:	0f d0       	rcall	.+30     	; 0x18ba <__ultoa_invert+0x86>
+    189c:	c9 f7       	brne	.-14     	; 0x1890 <__ultoa_invert+0x5c>
+    189e:	f6 cf       	rjmp	.-20     	; 0x188c <__ultoa_invert+0x58>
+    18a0:	46 2f       	mov	r20, r22
+    18a2:	4f 70       	andi	r20, 0x0F	; 15
+    18a4:	40 5d       	subi	r20, 0xD0	; 208
+    18a6:	4a 33       	cpi	r20, 0x3A	; 58
+    18a8:	18 f0       	brcs	.+6      	; 0x18b0 <__ultoa_invert+0x7c>
+    18aa:	49 5d       	subi	r20, 0xD9	; 217
+    18ac:	31 fd       	sbrc	r19, 1
+    18ae:	40 52       	subi	r20, 0x20	; 32
+    18b0:	41 93       	st	Z+, r20
+    18b2:	02 d0       	rcall	.+4      	; 0x18b8 <__ultoa_invert+0x84>
+    18b4:	a9 f7       	brne	.-22     	; 0x18a0 <__ultoa_invert+0x6c>
+    18b6:	ea cf       	rjmp	.-44     	; 0x188c <__ultoa_invert+0x58>
+    18b8:	b4 e0       	ldi	r27, 0x04	; 4
+    18ba:	a6 95       	lsr	r26
+    18bc:	97 95       	ror	r25
+    18be:	87 95       	ror	r24
+    18c0:	77 95       	ror	r23
+    18c2:	67 95       	ror	r22
+    18c4:	ba 95       	dec	r27
+    18c6:	c9 f7       	brne	.-14     	; 0x18ba <__ultoa_invert+0x86>
+    18c8:	00 97       	sbiw	r24, 0x00	; 0
+    18ca:	61 05       	cpc	r22, r1
+    18cc:	71 05       	cpc	r23, r1
+    18ce:	08 95       	ret
+    18d0:	9b 01       	movw	r18, r22
+    18d2:	ac 01       	movw	r20, r24
+    18d4:	0a 2e       	mov	r0, r26
+    18d6:	06 94       	lsr	r0
+    18d8:	57 95       	ror	r21
+    18da:	47 95       	ror	r20
+    18dc:	37 95       	ror	r19
+    18de:	27 95       	ror	r18
+    18e0:	ba 95       	dec	r27
+    18e2:	c9 f7       	brne	.-14     	; 0x18d6 <__ultoa_invert+0xa2>
+    18e4:	62 0f       	add	r22, r18
+    18e6:	73 1f       	adc	r23, r19
+    18e8:	84 1f       	adc	r24, r20
+    18ea:	95 1f       	adc	r25, r21
+    18ec:	a0 1d       	adc	r26, r0
+    18ee:	08 95       	ret
+
+000018f0 <_exit>:
+    18f0:	f8 94       	cli
+
+000018f2 <__stop_program>:
+    18f2:	ff cf       	rjmp	.-2      	; 0x18f2 <__stop_program>

+ 784 - 0
heater3/Debug/heater3_6_2.map

@@ -0,0 +1,784 @@
+Archive member included because of file (symbol)
+
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
+                              heater3.o (__subsf3)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
+                              heater3.o (__divsf3)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+                              heater3.o (__fixunssfsi)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+                              heater3.o (__floatunsisf)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_inf)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_nan)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscA)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_pscB)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_round)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_split3)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o) (__fp_zero)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+                              heater3.o (__mulsf3)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+                              (vfprintf)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o (exit)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+                              heater3.o (__do_copy_data)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+                              heater3.o (__do_clear_bss)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__prologue_saves__)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__epilogue_restores__)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__ftoa_engine)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (strnlen_P)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (strnlen)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (fputc)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fwrite.o)
+                              heater3.o (fwrite)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+                              heater3.o (__iob)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(puts.o)
+                              heater3.o (puts)
+c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+                              c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o) (__ultoa_invert)
+
+Allocating common symbols
+Common symbol       size              file
+
+fifo0               0x82              heater3.o
+__iob               0x6               c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+rxbuffer            0x8               heater3.o
+
+Discarded input sections
+
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+ .text          0x00000000        0x0 heater3.o
+ .data          0x00000000        0x0 heater3.o
+ .bss           0x00000000        0x0 heater3.o
+ .text.TK_ReadData
+                0x00000000       0x4a heater3.o
+ .text.exec_cmd
+                0x00000000        0x2 heater3.o
+ .text          0x00000000        0x0 lcd-twi.o
+ .data          0x00000000        0x0 lcd-twi.o
+ .bss           0x00000000        0x0 lcd-twi.o
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc   0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc   0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc   0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.prologue
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text.libgcc   0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.mul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.div
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc   0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.builtins
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.fmul
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text.libgcc.fixed
+                0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(puts.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(puts.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(puts.o)
+ .text          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+ .data          0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+ .bss           0x00000000        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+text             0x00000000         0x00020000         xr
+data             0x00800060         0x0000ffa0         rw !x
+eeprom           0x00810000         0x00010000         rw !x
+fuse             0x00820000         0x00000400         rw !x
+lock             0x00830000         0x00000400         rw !x
+signature        0x00840000         0x00000400         rw !x
+user_signatures  0x00850000         0x00000400         rw !x
+*default*        0x00000000         0xffffffff
+
+Linker script and memory map
+
+Address of section .data set to 0x800100
+LOAD c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+LOAD heater3.o
+LOAD lcd-twi.o
+START GROUP
+LOAD c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a
+LOAD c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a
+END GROUP
+START GROUP
+LOAD c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a
+LOAD c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a
+LOAD c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a
+END GROUP
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text           0x00000000     0x18f4
+ *(.vectors)
+ .vectors       0x00000000       0x7c c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+                0x00000000                __vector_default
+                0x00000000                __vectors
+ *(.vectors)
+ *(.progmem.gcc*)
+                0x0000007c                . = ALIGN (0x2)
+                0x0000007c                __trampolines_start = .
+ *(.trampolines)
+ .trampolines   0x0000007c        0x0 linker stubs
+ *(.trampolines*)
+                0x0000007c                __trampolines_end = .
+ *(.progmem*)
+ .progmem.data  0x0000007c        0x8 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+ .progmem.data  0x00000084       0xfa c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+                0x0000017e                . = ALIGN (0x2)
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+                0x0000017e                __ctors_start = .
+ *(.ctors)
+                0x0000017e                __ctors_end = .
+                0x0000017e                __dtors_start = .
+ *(.dtors)
+                0x0000017e                __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0         0x0000017e        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+                0x0000017e                __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2         0x0000017e        0xc c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ .init4         0x0000018a       0x16 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_copy_data.o)
+                0x0000018a                __do_copy_data
+ .init4         0x000001a0       0x10 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_clear_bss.o)
+                0x000001a0                __do_clear_bss
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9         0x000001b0        0x8 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+ *(.init9)
+ *(.text)
+ .text          0x000001b8        0x4 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5/crtm644pa.o
+                0x000001b8                __vector_28
+                0x000001b8                __vector_12
+                0x000001b8                __bad_interrupt
+                0x000001b8                __vector_6
+                0x000001b8                __vector_3
+                0x000001b8                __vector_23
+                0x000001b8                __vector_30
+                0x000001b8                __vector_25
+                0x000001b8                __vector_11
+                0x000001b8                __vector_17
+                0x000001b8                __vector_19
+                0x000001b8                __vector_27
+                0x000001b8                __vector_5
+                0x000001b8                __vector_4
+                0x000001b8                __vector_9
+                0x000001b8                __vector_21
+                0x000001b8                __vector_15
+                0x000001b8                __vector_29
+                0x000001b8                __vector_8
+                0x000001b8                __vector_26
+                0x000001b8                __vector_14
+                0x000001b8                __vector_10
+                0x000001b8                __vector_16
+                0x000001b8                __vector_18
+                0x000001bc                . = ALIGN (0x2)
+ *(.text.*)
+ .text.uart_putchar
+                0x000001bc       0x40 heater3.o
+ .text.lcd_putchar
+                0x000001fc        0xa heater3.o
+ .text.__vector_7
+                0x00000206       0x26 heater3.o
+                0x00000206                __vector_7
+ .text.__vector_1
+                0x0000022c       0x22 heater3.o
+                0x0000022c                __vector_1
+ .text.__vector_2
+                0x0000024e       0x22 heater3.o
+                0x0000024e                __vector_2
+ .text.__vector_20
+                0x00000270       0x52 heater3.o
+                0x00000270                __vector_20
+ .text.__vector_22
+                0x000002c2       0x44 heater3.o
+                0x000002c2                __vector_22
+ .text.__vector_24
+                0x00000306       0x14 heater3.o
+                0x00000306                __vector_24
+ .text.__vector_13
+                0x0000031a       0x1e heater3.o
+                0x0000031a                __vector_13
+ .text.init     0x00000338       0xa4 heater3.o
+                0x00000338                init
+ .text.POT_SendData
+                0x000003dc       0x22 heater3.o
+                0x000003dc                POT_SendData
+ .text.SetGateVoltage
+                0x000003fe       0x56 heater3.o
+                0x000003fe                SetGateVoltage
+ .text.SetOpampGain
+                0x00000454       0x70 heater3.o
+                0x00000454                SetOpampGain
+ .text.SetOpampShift
+                0x000004c4       0x6e heater3.o
+                0x000004c4                SetOpampShift
+ .text.SetInputRange
+                0x00000532       0x78 heater3.o
+                0x00000532                SetInputRange
+ .text.main     0x000005aa      0x304 heater3.o
+                0x000005aa                main
+ .text.I2C_SendByte
+                0x000008ae       0x4c lcd-twi.o
+                0x000008ae                I2C_SendByte
+ .text.LCD_SendData
+                0x000008fa       0x3e lcd-twi.o
+                0x000008fa                LCD_SendData
+ .text.LCD_SendCmd
+                0x00000938       0x4e lcd-twi.o
+                0x00000938                LCD_SendCmd
+ .text.LCD_SetPos
+                0x00000986       0x14 lcd-twi.o
+                0x00000986                LCD_SetPos
+ .text.LCD_Init
+                0x0000099a       0x60 lcd-twi.o
+                0x0000099a                LCD_Init
+ .text.avr-libc.fplib
+                0x000009fa        0xa c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3.o)
+                0x000009fa                __subsf3
+                0x000009fc                __addsf3
+ .text.avr-libc.fplib
+                0x00000a04       0xc0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(addsf3x.o)
+                0x00000a1e                __addsf3x
+ .text.avr-libc.fplib
+                0x00000ac4        0x4 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3.o)
+                0x00000ac4                __divsf3
+ .text.avr-libc.fplib
+                0x00000ac8       0xcc c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(divsf3x.o)
+                0x00000ade                __divsf3x
+                0x00000ae2                __divsf3_pse
+ .text.avr-libc.fplib
+                0x00000b94       0x58 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fixunssfsi.o)
+                0x00000b94                __fixunssfsi
+ .text.avr-libc.fplib
+                0x00000bec       0x7a c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(floatsisf.o)
+                0x00000bec                __floatunsisf
+                0x00000bf0                __floatsisf
+ .text.avr-libc.fplib
+                0x00000c66        0xc c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_inf.o)
+                0x00000c66                __fp_inf
+ .text.avr-libc.fplib
+                0x00000c72        0x6 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_nan.o)
+                0x00000c72                __fp_nan
+ .text.avr-libc.fplib
+                0x00000c78        0xe c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscA.o)
+                0x00000c78                __fp_pscA
+ .text.avr-libc.fplib
+                0x00000c86        0xe c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_pscB.o)
+                0x00000c86                __fp_pscB
+ .text.avr-libc.fplib
+                0x00000c94       0x22 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_round.o)
+                0x00000c94                __fp_round
+ .text.avr-libc.fplib
+                0x00000cb6       0x44 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_split3.o)
+                0x00000cb6                __fp_split3
+                0x00000cc6                __fp_splitA
+ .text.avr-libc.fplib
+                0x00000cfa        0xe c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(fp_zero.o)
+                0x00000cfa                __fp_zero
+                0x00000cfc                __fp_szero
+ .text.avr-libc.fplib
+                0x00000d08        0x4 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3.o)
+                0x00000d08                __mulsf3
+ .text.avr-libc.fplib
+                0x00000d0c       0xc2 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
+                0x00000d20                __mulsf3x
+                0x00000d24                __mulsf3_pse
+ .text.avr-libc
+                0x00000dce      0x6f6 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+                0x00000dce                vfprintf
+ .text.libgcc.prologue
+                0x000014c4       0x38 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_prologue.o)
+                0x000014c4                __prologue_saves__
+ .text.libgcc.prologue
+                0x000014fc       0x36 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_epilogue.o)
+                0x000014fc                __epilogue_restores__
+ .text.avr-libc
+                0x00001532      0x1b0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ftoa_engine.o)
+                0x00001532                __ftoa_engine
+ .text.avr-libc
+                0x000016e2       0x16 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen_P.o)
+                0x000016e2                strnlen_P
+ .text.avr-libc
+                0x000016f8       0x16 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(strnlen.o)
+                0x000016f8                strnlen
+ .text.avr-libc
+                0x0000170e       0x64 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
+                0x0000170e                fputc
+ .text.avr-libc
+                0x00001772       0x68 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fwrite.o)
+                0x00001772                fwrite
+ .text.avr-libc
+                0x000017da       0x5a c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(puts.o)
+                0x000017da                puts
+ .text.avr-libc
+                0x00001834       0xbc c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(ultoa_invert.o)
+                0x00001834                __ultoa_invert
+                0x000018f0                . = ALIGN (0x2)
+ *(.fini9)
+ .fini9         0x000018f0        0x0 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+                0x000018f0                _exit
+                0x000018f0                exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0         0x000018f0        0x4 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/avr5\libgcc.a(_exit.o)
+ *(.fini0)
+                0x000018f4                _etext = .
+
+.data           0x00800100       0x44 load address 0x000018f4
+                0x00800100                PROVIDE (__data_start, .)
+ *(.data)
+ *(.data*)
+ .data.lcd_stdout.1924
+                0x00800100        0xe heater3.o
+ .data.uart_stdout.1925
+                0x0080010e        0xe heater3.o
+ *(.rodata)
+ *(.rodata*)
+ .rodata.str1.1
+                0x0080011c       0x28 heater3.o
+ *(.gnu.linkonce.d*)
+                0x00800144                . = ALIGN (0x2)
+                0x00800144                _edata = .
+                0x00800144                PROVIDE (__data_end, .)
+
+.bss            0x00800144       0x96
+                0x00800144                PROVIDE (__bss_start, .)
+ *(.bss)
+ *(.bss*)
+ .bss.tick      0x00800144        0x1 heater3.o
+                0x00800144                tick
+ .bss.ocp_ch    0x00800145        0x2 heater3.o
+                0x00800145                ocp_ch
+ .bss.rxcounter
+                0x00800147        0x1 heater3.o
+                0x00800147                rxcounter
+ .bss.rxbyte    0x00800148        0x1 heater3.o
+                0x00800148                rxbyte
+ .bss.btn_pressed
+                0x00800149        0x1 heater3.o
+                0x00800149                btn_pressed
+ *(COMMON)
+ COMMON         0x0080014a       0x8a heater3.o
+                0x0080014a                fifo0
+                0x008001cc                rxbuffer
+ COMMON         0x008001d4        0x6 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+                0x008001d4                __iob
+                0x008001da                PROVIDE (__bss_end, .)
+                0x000018f4                __data_load_start = LOADADDR (.data)
+                0x00001938                __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit         0x008001da        0x0
+                0x008001da                PROVIDE (__noinit_start, .)
+ *(.noinit*)
+                0x008001da                PROVIDE (__noinit_end, .)
+                0x008001da                _end = .
+                0x008001da                PROVIDE (__heap_start, .)
+
+.eeprom         0x00810000        0x0
+ *(.eeprom*)
+                0x00810000                __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.user_signatures
+ *(.user_signatures*)
+
+.stab
+ *(.stab)
+
+.stabstr
+ *(.stabstr)
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment        0x00000000       0x5c
+ *(.comment)
+ .comment       0x00000000       0x30 heater3.o
+                                 0x31 (size before relaxing)
+ .comment       0x00000000       0x31 lcd-twi.o
+ .comment       0x00000030       0x2c c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libprintf_flt.a(vfprintf_flt.o)
+                                 0x2d (size before relaxing)
+ .comment       0x00000000       0x31 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fputc.o)
+ .comment       0x00000000       0x31 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(fwrite.o)
+ .comment       0x00000000       0x31 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(iob.o)
+ .comment       0x00000000       0x31 c:/program files/atmel/atmel toolchain/avr8 gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.8.1/../../../../avr/lib/avr5\libc.a(puts.o)
+
+.note.gnu.build-id
+ *(.note.gnu.build-id)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges  0x00000000       0xe8
+ *(.debug_aranges)
+ .debug_aranges
+                0x00000000       0xa8 heater3.o
+ .debug_aranges
+                0x000000a8       0x40 lcd-twi.o
+
+.debug_pubnames
+ *(.debug_pubnames)
+
+.debug_info     0x00000000     0x11b3
+ *(.debug_info .gnu.linkonce.wi.*)
+ .debug_info    0x00000000      0xd3c heater3.o
+ .debug_info    0x00000d3c      0x477 lcd-twi.o
+
+.debug_abbrev   0x00000000      0x50b
+ *(.debug_abbrev)
+ .debug_abbrev  0x00000000      0x38a heater3.o
+ .debug_abbrev  0x0000038a      0x181 lcd-twi.o
+
+.debug_line     0x00000000      0x508
+ *(.debug_line .debug_line.* .debug_line_end)
+ .debug_line    0x00000000      0x34d heater3.o
+ .debug_line    0x0000034d      0x1bb lcd-twi.o
+
+.debug_frame    0x00000000      0x2d8
+ *(.debug_frame)
+ .debug_frame   0x00000000      0x254 heater3.o
+ .debug_frame   0x00000254       0x84 lcd-twi.o
+
+.debug_str      0x00000000      0x4d5
+ *(.debug_str)
+ .debug_str     0x00000000      0x49e heater3.o
+                                0x4f2 (size before relaxing)
+ .debug_str     0x0000049e       0x37 lcd-twi.o
+                                0x1e0 (size before relaxing)
+
+.debug_loc      0x00000000      0xb53
+ *(.debug_loc)
+ .debug_loc     0x00000000      0x90f heater3.o
+ .debug_loc     0x0000090f      0x244 lcd-twi.o
+
+.debug_macinfo
+ *(.debug_macinfo)
+
+.debug_weaknames
+ *(.debug_weaknames)
+
+.debug_funcnames
+ *(.debug_funcnames)
+
+.debug_typenames
+ *(.debug_typenames)
+
+.debug_varnames
+ *(.debug_varnames)
+
+.debug_pubtypes
+ *(.debug_pubtypes)
+
+.debug_ranges   0x00000000       0xe0
+ *(.debug_ranges)
+ .debug_ranges  0x00000000       0xb0 heater3.o
+ .debug_ranges  0x000000b0       0x30 lcd-twi.o
+
+.debug_macro
+ *(.debug_macro)
+OUTPUT(heater3_6_2.elf elf32-avr)
+LOAD linker stubs

+ 407 - 0
heater3/Debug/heater3_6_2.srec

@@ -0,0 +1,407 @@
+S0130000686561746572335F365F322E737265633F
+S11300000C94BF000C9416010C9427010C94DC0092
+S11300100C94DC000C94DC000C94DC000C940301C4
+S11300200C94DC000C94DC000C94DC000C94DC00DC
+S11300300C94DC000C948D010C94DC000C94DC001A
+S11300400C94DC000C94DC000C94DC000C94DC00BC
+S11300500C9438010C94DC000C9461010C94DC00C9
+S11300600C9483010C94DC000C94DC000C94DC00F4
+S11300700C94DC000C94DC000C94DC006E616E00CB
+S1130080696E660000407A10F35A00A0724E180997
+S11300900010A5D4E80000E87648170000E40B54EB
+S11300A0020000CA9A3B000000E1F50500008096BA
+S11300B09800000040420F000000A08601000000EC
+S11300C0102700000000E8030000000064000000A6
+S11300D000000A00000000000100000000002C766F
+S11300E0D888DC674F0823DFC1DFAE59E1B1B7968A
+S11300F0E5E3E453C63AE651997696E8E6C28426E7
+S1130100EB898C9B62ED407C6FFCEFBC9C9F40F2C2
+S1130110BAA56FA5F490055A2AF75C936B6CF9673E
+S11301206DC11BFCE0E40D47FEF520E6B500D0ED03
+S1130130902E0300943577050080841E080000206B
+S11301404E0A000000C80C333333330F986E128309
+S11301501141EF8D2114893BE65516CFFEE6DB18DD
+S1130160D1844B381BF77C1D901DA4BBE4242032A2
+S113017084725E228100C9F124ECA1E53D2711249B
+S11301801FBECFEFD0E1DEBFCDBF11E0A0E0B1E0F4
+S1130190E4EFF8E102C005900D92A434B107D9F759
+S11301A021E0A4E4B1E001C01D92AA3DB207E1F749
+S11301B00E94D5020C94780C0C940000F894909151
+S11301C0C00095FF03C08093C60014C09091CB017A
+S11301D0292F30E04091CA01241B31092038310510
+S11301E049F0E92FEF77F0E0E65BFE4F80839F5FF5
+S11301F09093CB01789480E090E008950E947D0470
+S113020080E090E008951F920F920FB60F92112490
+S11302108F9389B182958F70806F80958093490107
+S11302208F910F900FBE0F901F9018951F920F92F1
+S11302300FB60F9211248F93469A429881E08093CF
+S113024045018F910F900FBE0F901F9018951F922C
+S11302500F920FB60F9211248F93479A439881E01F
+S1130260809346018F910F900FBE0F901F901895A9
+S11302701F920F920FB60F9211248F93EF93FF9357
+S11302808091C6008093480180914701811104C088
+S113029080914801853569F4E0914701F0E080914F
+S11302A04801E453FE4F8083809147018F5F809320
+S11302B04701FF91EF918F910F900FBE0F901F9008
+S11302C018951F920F920FB60F9211248F93EF93EC
+S11302D0FF93E091CA018091CB01E81761F0EF77B9
+S11302E0F0E0E65BFE4F80818093C600EAECF1E02B
+S11302F080818F5F8083FF91EF918F910F900FBE6C
+S11303000F901F9018951F920F920FB60F92112401
+S11303100F900FBE0F901F9018951F920F920FB65B
+S11303200F9211248F9381E0809344018F910F9059
+S11303300FBE0F901F90189584B7877F84BFE0E6A7
+S1130340F0E08081886180831082E9E6F0E08081BA
+S11303508A6080838DB383608DBB88B1806C88B9DB
+S113036087B18C6C87B9599A519A1092C50086E26C
+S11303708093C40022E02093C00088ED8093C100E4
+S113038086E08093C20084B1876B84B985B1806BA9
+S113039085B980E58CBD84E08093B8008093BC006F
+S11303A08DE08093810080E094E0909389008093B5
+S11303B0880020936F00ECE7F0E08081806C8083FC
+S11303C084E880937A008FEF80937E0088E08093A6
+S11303D0680080EF809373007894089595B16770F6
+S11303E0987F692B65B92C9891E19EBD0DB407FEE9
+S11303F0FDCF8EBD0DB407FEFDCF2C9A0895CF928C
+S1130400DF92EF92FF92CF936A017B01C82FC170F4
+S11304102BE734E14EEC51E4C701B6010E94840697
+S11304200E94CA05F62E64E06C0F8F2D0E94EE0127
+S11304306F2D70E080E090E00E94F6052BE734E138
+S11304404EEC51E40E946205CF91FF90EF90DF9053
+S1130450CF900895CF92DF92EF92FF92CF936A01EB
+S11304607B018170C82FCC0F22E03BE247E051E4CE
+S1130470C701B6010E94840622E73AE84EE051E43F
+S11304800E94FD040E94CA05F62E61E06C0F8F2DB8
+S11304900E94EE016F2D70E080E090E00E94F6056E
+S11304A022E73AE84EE051E40E94FE0422E03BE2F7
+S11304B047E051E40E946205CF91FF90EF90DF90F6
+S11304C0CF900895CF92DF92EF92FF92CF936A017B
+S11304D07B01C82FC17020E030E04FE753E4C7012F
+S11304E0B6010E94840625E33EE542E050E40E9402
+S11304F062050E94CA05F62E6C2F660F8F2D0E948E
+S1130500EE016F2D70E080E090E00E94F60525E397
+S11305103EE542E050E40E94840620E030E04FE7EC
+S113052053E40E946205CF91FF90EF90DF90CF904B
+S11305300895CF92DF92EF92FF920F931F93CF9380
+S1130540DF93EC016A017B01C901B801A70196019F
+S11305500E94FD049B01AC0163E373E383E590E433
+S11305600E946205AB01BC0188810E942A02698352
+S11305707A838B839C832AE43CE042E45FE3C701F3
+S1130580B6010E948406AB01BC0188810E9462020C
+S11305906D837E838F839887DF91CF911F910F9115
+S11305A0FF90EF90DF90CF900895CF93DF93CDB776
+S11305B0DEB76A970FB6F894DEBF0FBECDBF1982BF
+S11305C01A861B861C861D8681E08E871F8A188EDC
+S11305D0198E1A8E8EE091E09093D7018093D60104
+S11305E00E949C010E94CD048CE191E00E94ED0BDD
+S11305F020E031E040E150E061E070E083E291E02E
+S11306000E94B90B61E080E00E94C30420E031E065
+S113061040E150E061E070E083E291E00E94B90BB8
+S113062040E050E0BA0180E00E94FF0140E050E069
+S1130630BA0181E00E94FF010AE919E929E13FE3D7
+S113064043E353E363EB7EE3CE0101960E949902F8
+S113065000E010E020E830E440E050E060E87FE3B0
+S1130660CE010E960E949902C12CD12C0F2EF5E4D6
+S1130670EF2EF1E0FF2EF02D06E411E00F2EFDEC3D
+S1130680AF2EF1E0BF2EF02D0F2EF3ED2F2EF1E063
+S11306903F2EF02D0F2EFCE74F2E512CF02D0F2E58
+S11306A0FAE76F2E712CF02D0F2EF8E78F2E912C78
+S11306B0F02DF70180818130B1F460E080E00E9488
+S11306C0C30420E031E04FE050E061E070E084E3F7
+S11306D091E00E94B90BF70110828FE295E7019730
+S11306E0F1F700C00000F80180818130B1F461E0CD
+S11306F080E00E94C30420E031E04FE050E061E07C
+S113070070E084E391E00E94B90BF80110828FE25B
+S113071095E70197F1F700C000008091470182300E
+S113072059F4F5018081823539F4F894E0E6F0E07B
+S1130730808188618083FFCF809147018830A9F44C
+S113074010924701F5018081EEECF1E08081EFEC3D
+S1130750F1E08081E0EDF1E08081E1EDF1E0808184
+S1130760E2EDF1E08081F1018081809144018823F0
+S1130770E9F110924401CC2061F1F4018081E9E7B0
+S1130780F0E08081F1E0DF1671F0DF1638F082E0EE
+S1130790D81671F093E0D91681F014C060E080E0BF
+S11307A00E94C30481C061E080E00E94C3047CC055
+S11307B060E089E00E94C30477C061E089E00E94A0
+S11307C0C30404C0D394E4E0DE120FC0C12CD12CC6
+S11307D00DC0F2018081887F8D298083F30180819F
+S11307E080648083CC24C39401C0C12C80914901CE
+S11307F0823021F118F4813031F05BCF843041F143
+S11308008830E1F156CF98B180E4892788B998B14E
+S113081084E0892788B9469B07C040E050E0BA01CC
+S113082080E00E94FF0107C04A855B856C857D8559
+S113083080E00E94FF01109249013BCF88B18058AB
+S113084088B998B188E0892788B91092490131CFD5
+S113085020E030E040E05FE36A857B858C859D8500
+S11308600E94FD04AB01BC014A875B876C877D87CE
+S113087080E00E94FF01109249011BCF20E030E08C
+S113088040E05FE36A857B858C859D850E94FE043C
+S1130890AB01BC014A875B876C877D8780E00E943F
+S11308A0FF011092490105CFD394C12C9FCFECEBEB
+S11308B0F0E09081906A908390819923ECF79EE414
+S11308C09093BB00ECEBF0E090819F7D908390814E
+S11308D09068908390819923ECF78093BB00ECEBB4
+S11308E0F0E080818068808380818823ECF7ECEBE2
+S11308F0F0E08081806980830895CF93DF93C82FCF
+S1130900D82FD07F8D2F85600E9457048D2F816052
+S11309100E94570480E1C89FE00111248C2F856058
+S11309200E9457048C2F81600E94570480E18A95AD
+S1130930F1F7DF91CF910895CF93DF93C82FD82F8C
+S1130940D07F8D2F84600E9457048D2F0E945704FE
+S113095020E1C29FC001112484600E9457048C2F9F
+S11309608295807F0E945704C13039F48FE496E465
+S11309700197F1F700C0000003C098E29A95F1F7DF
+S1130980DF91CF91089561708F7090E4699F800D1D
+S1130990112480680E949C040895CF9380E00E94F3
+S11309A057042FEB84ED91E0215080409040E1F713
+S11309B000C00000C5E084E00E94570480E00E946B
+S11309C05704C150C1F728EC2A95F1F784E20E943C
+S11309D0570480E20E9457048AE20E949C0488E043
+S11309E00E949C0481E00E949C0486E00E949C0476
+S11309F08CE00E949C04CF9108955058BB27AA27ED
+S1130A000ED048C139D130F03ED120F031F49F3FAF
+S1130A1011F41EF42EC10EF4E095E7FB24C1E92F76
+S1130A204AD180F3BA17620773078407950718F051
+S1130A3071F49EF562C10EF4E0950B2EBA2FA02D31
+S1130A400B01B90190010C01CA01A0011124FF2777
+S1130A50591B99F0593F50F4503E68F11A16F04072
+S1130A60A22F232F342F4427585FF3CF4695379571
+S1130A702795A795F0405395C9F77EF41F16BA0B36
+S1130A80620B730B840BBAF09150A1F0FF0FBB1FE4
+S1130A90661F771F881FC2F70EC0BA0F621F731F2D
+S1130AA0841F48F4879577956795B795F7959E3F8A
+S1130AB008F0B3CF9395880F08F09927EE0F979518
+S1130AC0879508950CD0E6C0DED040F0D5D030F044
+S1130AD021F45F3F19F0C7C0511110C1CAC0EBD057
+S1130AE098F39923C9F35523B1F3951B550BBB27F1
+S1130AF0AA2762177307840738F09F5F5F4F220F9E
+S1130B00331F441FAA1FA9F333D00E2E3AF0E0E896
+S1130B1030D091505040E695001CCAF729D0FE2FE2
+S1130B2027D0660F771F881FBB1F26173707480774
+S1130B30AB07B0E809F0BB0B802DBF01FF2793582A
+S1130B405F4F2AF09E3F510568F08DC0D7C05F3FCC
+S1130B50ECF3983EDCF3869577956795B795F79512
+S1130B609F5FC9F7880F911D9695879597F908950A
+S1130B70E1E0660F771F881FBB1F621773078407A6
+S1130B80BA0720F0621B730B840BBA0BEE1F88F7B5
+S1130B90E095089598D088F09F5790F0B92F992741
+S1130BA0B751A0F0D1F0660F771F881F991F1AF074
+S1130BB0BA95C9F712C0B13081F09FD0B1E0089561
+S1130BC09CC0672F782F8827B85F39F0B93FCCF3E2
+S1130BD0869577956795B395D9F73EF4909580956A
+S1130BE0709561957F4F8F4F9F4F0895E89409C08A
+S1130BF097FB3EF490958095709561957F4F8F4F4C
+S1130C009F4F9923A9F0F92F96E9BB279395F69561
+S1130C10879577956795B795F111F8CFFAF4BB0FDF
+S1130C2011F460FF1BC06F5F7F4F8F4F9F4F16C043
+S1130C30882311F096E911C0772321F09EE8872FCD
+S1130C40762F05C0662371F096E8862F70E060E089
+S1130C502AF09A95660F771F881FDAF7880F969502
+S1130C60879597F9089597F99F6780E870E060E0A9
+S1130C7008959FEF80EC089500240A941616170631
+S1130C8018060906089500240A9412161306140679
+S1130C9005060895092E0394000C11F4882352F0DC
+S1130CA0BB0F40F4BF2B11F460FF04C06F5F7F4F94
+S1130CB08F4F9F4F089557FD9058440F551F59F07B
+S1130CC05F3F71F04795880F97FB991F61F09F3F35
+S1130CD079F087950895121613061406551FF2CF5E
+S1130CE04695F1DF08C0161617061806991FF1CFAE
+S1130CF086957105610508940895E894BB276627D5
+S1130D007727CB0197F908950BD0C4CFB5DF28F02E
+S1130D10BADF18F0952309F0A6CFABCF1124EECF9C
+S1130D20CADFA0F3959FD1F3950F50E0551F629F42
+S1130D30F001729FBB27F00DB11D639FAA27F00D30
+S1130D40B11DAA1F649F6627B00DA11D661F829F57
+S1130D502227B00DA11D621F739FB00DA11D621F3C
+S1130D60839FA00D611D221F749F3327A00D611D59
+S1130D70231F849F600D211D822F762F6A2F11243B
+S1130D809F5750408AF0E1F088234AF0EE0FFF1F8E
+S1130D90BB1F661F771F881F91505040A9F79E3FC5
+S1130DA0510570F060CFAACF5F3FECF3983EDCF3BF
+S1130DB0869577956795B795F795E7959F5FC1F702
+S1130DC0FE2B880F911D9695879597F90895A3E1B9
+S1130DD0B0E0EDEEF6E00C94620A7C011B016A01BE
+S1130DE0FC0117821682838181FF66C3BE016F5F97
+S1130DF07F4F4B01F7019381F10193FD859193FF9F
+S1130E0081911F01882309F453C3853239F493FD7A
+S1130E10859193FF81911F01853239F4B70190E0E8
+S1130E200E94870B56016501E5CF10E0512C20E0AC
+S1130E302032A0F48B3269F030F4803259F08332DE
+S1130E4069F420612CC08D3239F0803339F421608B
+S1130E5026C02260246023C0286021C027FD27C04B
+S1130E6030ED380F3A3078F426FF06C0FAE01F9FC1
+S1130E70300D1124132F13C06AE0569E300D112437
+S1130E80532E20620CC08E3221F426FD11C320643F
+S1130E9006C08C3611F4206802C0883641F4F10192
+S1130EA093FD859193FF81911F018111C1CF9BEB2C
+S1130EB0980F933018F42061805E06C09BE9980F68
+S1130EC0933008F0AAC12F7E26FF16E02F73722EEE
+S1130ED0853621F4F22FF0647F2E08C0863621F483
+S1130EE0622F6068762E02C01111115077FE07C080
+S1130EF01C3348F444244394410E27E00BC01830BB
+S1130F0030F4212F06C027E04CE3442E03C027E031
+S1130F1017E0412C560174E0A70EB11CF601608164
+S1130F20718182819381042DA4010E94990A6C012C
+S1130F30098100FF02C003FF06C071FC07C072FCF8
+S1130F4008C0612C08C03DE2632E05C02BE2622E6E
+S1130F5002C090E2692E802F8C7099F1662011F006
+S1130F6084E001C083E0851510F0512C0BC0581AA1
+S1130F7073FC08C0B70180E290E00E94870B5A948A
+S1130F80C9F7F3CF662029F0B701862D90E00E94BF
+S1130F90870B03FD03C000E810E002C00CE710E07B
+S1130FA0F72DF0717F2EF8018491882309F476C21D
+S1130FB071108052B70190E00E94870B0F5F1F4FA2
+S1130FC0F2CF77FE0FC04C0C04FF04C08A8181333A
+S1130FD009F44A94141474F5F8E0F41578F588E0EB
+S1130FE0482E2CC076FC2AC0812F90E08C159D05DC
+S1130FF09CF06CEFC6166FEFD60674F0772D706810
+S1131000772E0AC0E2E0F0E0EC0FFD1FE10FF11DC6
+S11310108081803319F411501111F4CF77FE0EC082
+S113102044244394410E812F90E0C816D9062CF431
+S11310301C1904C04424439401C010E077FE07C087
+S11310401C141D043CF496012F5F3F4F05C025E09E
+S113105030E002C021E030E0662011F02F5F3F4F06
+S1131060112331F0412F50E04F5F5F4F240F351FA4
+S1131070452D50E02417350714F4521A01C0512CA1
+S1131080872D897049F4552039F0B70180E290E04A
+S11310900E94870B5A94F7CF662029F0B701862D5A
+S11310A090E00E94870B73FC09C0552039F0B7010A
+S11310B080E390E00E94870B5A94F7CF77FE5FC0DD
+S11310C09C2D8D2DD7FE02C090E080E0692E782EF5
+S11310D040E050E0C601841991099D878C879601F0
+S11310E026193709280D391D812F90E0EE27FF2797
+S11310F0E81BF90BFF87EE87FFEF6F167F0669F495
+S1131100B7018EE290E02B8B3A8B488B598B0E946F
+S1131110870B598948893A892B89C614D70454F016
+S11311206C857D85661577052CF4F901E40FF51FB0
+S1131130818101C080E371E0671A71084F5F5F4FDE
+S1131140EE85FF856E167F066CF0B70190E02B8B61
+S11311503A8B488B598B0E94870B2B893A89488993
+S11311605989CACF6C147D0439F49A81963318F4E2
+S1131170953311F404FF81E3B70190E04BC08A81F9
+S1131180813309F00F7EB70190E00E94870B1111A3
+S113119005C074FE18C085E490E017C0B7018EE264
+S11311A090E00E94870B82E066246394680EF40149
+S11311B0E80FF11D8081B70190E00E94870B115068
+S11311C041F3862DF1CF85E690E0B7010E94870BAD
+S11311D0D7FC05C0C114D10439F404FF05C0D1946F
+S11311E0C194D1088DE201C08BE2B70190E00E9466
+S11311F0870B80E36AE0C616D1042CF08F5FFAE017
+S1131200CF1AD108F7CFB70190E00E94870BB7013E
+S1131210C601C0960E94870B41C1833631F08337E3
+S113122079F0833509F058C021C0560172E0A70E49
+S1131230B11CF6018081898301E010E0640114C0CF
+S11312405601F2E0AF0EB11CF601C080D18026FF3A
+S113125003C0612F70E002C06FEF7FEFC6012B8BDC
+S11312600E947C0B8C012B892F7715C05601F2E06C
+S1131270AF0EB11CF601C080D18026FF03C0612FE0
+S113128070E002C06FEF7FEFC6012B8B0E94710BE1
+S11312908C012B892068722E23FD1AC0852D90E0C5
+S11312A008171907A8F4B70180E290E00E94870BA1
+S11312B05A94F4CFF60177FC859177FE81916F0102
+S11312C0B70190E00E94870B51105A940150110904
+S11312D00115110579F7E2C0843611F0893651F50C
+S11312E0560127FF09C0F4E0AF0EB11CF60160817E
+S11312F07181828193810AC0F2E0AF0EB11CF601C4
+S113130060817181882777FD8095982F022F0F7651
+S113131097FF08C090958095709561957F4F8F4F8A
+S11313209F4F00682AE030E0A4010E941A0CC82EE6
+S1131330C8183EC0022F853721F40F7E2AE030E022
+S11313401DC0097F8F3691F018F4883559F0B0C06C
+S1131350803719F0883711F0ABC0006104FF09C071
+S1131360046007C024FF08C0066006C028E030E01F
+S113137005C020E130E002C020E132E0560107FF61
+S113138009C0F4E0AF0EB11CF60160817181828165
+S1131390938108C0F2E0AF0EB11CF6016081718147
+S11313A080E090E0A4010E941A0CC82EC8180F77A0
+S11313B006FF0BC0202F2E7FC11650F404FF0AC075
+S11313C002FD08C0202F2E7E05C0DC2C202F03C078
+S11313D0DC2C01C0D12E24FF0DC0FE01EC0DF11D4B
+S11313E08081803311F4297E09C022FF06C0D39482
+S11313F0D39404C0822F867809F0D39423FD13C0BC
+S113140020FF06C01C2DD51418F4150D1D19D52C5C
+S1131410D51468F4B70180E290E02B8B0E94870B0F
+S1131420D3942B89F5CFD51410F45D1801C0512C39
+S113143024FF12C0B70180E390E02B8B0E94870B3E
+S11314402B8922FF17C021FF03C088E590E002C06A
+S113145088E790E0B7010CC0822F867859F021FD0F
+S113146002C080E201C08BE227FD8DE2B70190E06B
+S11314700E94870BC11638F4B70180E390E00E9404
+S1131480870B1150F7CFCA94F401EC0DF11D808144
+S1131490B70190E00E94870BC110F5CF552009F4E5
+S11314A0C2CCB70180E290E00E94870B5A94F6CF39
+S11314B0F7018681978102C08FEF9FEF6396E2E187
+S11314C00C947E0A2F923F924F925F926F927F927A
+S11314D08F929F92AF92BF92CF92DF92EF92FF9240
+S11314E00F931F93CF93DF93CDB7DEB7CA1BDB0BEC
+S11314F00FB6F894DEBF0FBECDBF09942A88398891
+S113150048885F846E847D848C849B84AA84B98497
+S1131510C884DF80EE80FD800C811B81AA81B981A3
+S1131520CE0FD11D0FB6F894DEBF0FBECDBFED01B7
+S11315300895283008F027E03327DA01990F311D88
+S113154087FD916000966105710539F432602E5F64
+S11315503D9330E32A95E1F708959F3F30F08038BA
+S11315607105610509F03C5F3C5F3D93913008F0E3
+S11315708068911DDF93CF931F930F93FF92EF9297
+S1131580192F987F9695E92F96959695E90FFF2741
+S1131590E252FF4F99273327EE24FF24A701E701E6
+S11315A005900894079428F4360FE71EF81E491F87
+S11315B0511D660F771F881F991F0694A1F7059088
+S11315C0079428F4E70EF81E491F561FC11D770F14
+S11315D0881F991F661F0694A1F70590079428F4A5
+S11315E0F80E491F561FC71FD11D880F991F661F6C
+S11315F0771F0694A1F70590079420F4490F561F0E
+S1131600C71FD81F990F661F771F881F0694A9F755
+S113161084911095177041F0D695C79557954795C5
+S1131620F794E7941A95C1F7E4E8F0E0689415900C
+S1131630159135916591959105907FE27395E11827
+S1131640F10A430B560BC90BD009C0F7E10CF11E8C
+S1131650431F561FC91FD01D7EF4703311F48A95A1
+S1131660E6CFE894015030F0080F0AF4002702177F
+S113167008F4202F2395022F7A3328F079E37D9301
+S11316802A95E9F710C07D932A9589F606949795D3
+S11316906795379517951794E118F10A430B560B84
+S11316A0C90BD00998F023957E9173957A3308F08D
+S11316B070E37C932013B8F77E9170617D9330F0D2
+S11316C0839571E37D9370E32A95E1F71124EF90FC
+S11316D0FF900F911F91CF91DF91992787FD9095EE
+S11316E00895FC010590615070400110D8F7809571
+S11316F090958E0F9F1F0895FC01615070400190DA
+S11317000110D8F7809590958E0F9F1F08950F9321
+S11317101F93CF93DF93182F092FEB018B8181FD4A
+S113172003C08FEF9FEF20C082FF10C04E815F8106
+S11317302C813D81421753077CF4E881F9819F0194
+S11317402F5F3F4F39832883108306C0E885F985CE
+S1131750812F0995892B29F72E813F812F5F3F4FD8
+S11317603F832E83812F902FDF91CF911F910F9173
+S11317700895A0E0B0E0EFEBFBE00C94680A6B0185
+S11317804A017901D90113962C9121FF1DC0C0E0B3
+S1131790D0E0C815D905D9F08C015C01AC0CBD1C96
+S11317A0C8010A151B0571F00F5F1F4FD70118966A
+S11317B0ED91FC911997B701DC018C910995892B66
+S11317C079F305C02196E5CF80E090E001C0CE0119
+S11317D0CDB7DEB7ECE00C94840A0F931F93CF933C
+S11317E0DF93E091D601F091D701238121FF1BC043
+S11317F0EC0100E010E089916091D6017091D7016D
+S1131800DB011896ED91FC911997882331F0099525
+S1131810892B89F30FEF1FEFEECF8AE00995892B0F
+S113182011F4C80102C08FEF9FEFDF91CF911F9198
+S11318300F910895FA01AA27283051F1203181F13E
+S1131840E8946F936E7F6E5F7F4F8F4F9F4FAF4FC4
+S1131850B1E03ED0B4E03CD0670F781F891F9A1FD7
+S1131860A11D680F791F8A1F911DA11D6A0F711D8B
+S1131870811D911DA11D20D009F468943F912AE097
+S1131880269F11243019305D3193DEF6CF0108957F
+S1131890462F4770405D4193B3E00FD0C9F7F6CFB0
+S11318A0462F4F70405D4A3318F0495D31FD405278
+S11318B0419302D0A9F7EACFB4E0A695979587950E
+S11318C077956795BA95C9F70097610571050895ED
+S11318D09B01AC010A2E0694579547953795279599
+S11318E0BA95C9F7620F731F841F951FA01D089531
+S10718F0F894FFCF96
+S11318F40000000200000000FE00000000000000E0
+S1131904000200000000DE000000000048454C4CCA
+S11319144F0D00FFFFFFFFFFFFFFFFFFFFFFFFFF70
+S1131924FFFFFF0020204F56455243555252454E67
+S10719345420200017
+S9030000FC

+ 48 - 0
heater3/Debug/lcd-twi.d

@@ -0,0 +1,48 @@
+lcd-twi.d lcd-twi.o: .././lcd-twi.c .././lcd-twi.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \
+ C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h
+
+.././lcd-twi.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:
+
+C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h:

BIN
heater3/Debug/lcd-twi.o


+ 14 - 0
heater3/Debug/makedep.mk

@@ -0,0 +1,14 @@
+################################################################################
+# Automatically-generated file. Do not edit or delete the file
+################################################################################
+
+heater3.c
+
+lcd-twi.c
+
+potentiometers.c
+
+saveload.c
+
+tools.c
+

+ 60 - 0
heater3/Debug/potentiometers.d

@@ -0,0 +1,60 @@
+potentiometers.d potentiometers.o: .././potentiometers.c .././heater3.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \
+ C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \
+ .././potentiometers.h
+
+.././heater3.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:
+
+C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h:
+
+.././potentiometers.h:

BIN
heater3/Debug/potentiometers.o


+ 70 - 0
heater3/Debug/saveload.d

@@ -0,0 +1,70 @@
+saveload.d saveload.o: .././saveload.c .././heater3.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \
+ C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h \
+ .././saveload.h .././potentiometers.h .././lcd-twi.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h
+
+.././heater3.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\inttypes.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:
+
+C:\Program\ Files\ (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include/avr/iom644pa.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\portpins.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\common.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\version.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\interrupt.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdio.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdarg.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\string.h:
+
+.././saveload.h:
+
+.././potentiometers.h:
+
+.././lcd-twi.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h:

BIN
heater3/Debug/saveload.o


+ 9 - 0
heater3/Debug/tools.d

@@ -0,0 +1,9 @@
+tools.d tools.o: .././tools.c .././tools.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \
+ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h
+
+.././tools.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h:
+
+c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h:

BIN
heater3/Debug/tools.o


+ 52 - 0
heater3/fifo.h

@@ -0,0 +1,52 @@
+#ifndef FIFO_H_
+#define FIFO_H_
+
+#include <stdint.h>
+
+//ðàçìåð äîëæåí áûòü ñòåïåíüþ äâîéêè: 4,8,16,32...128
+#define FIFO( size )\
+struct {\
+	uint8_t buf[size];\
+	uint16_t tail;\
+	uint16_t head;\
+}
+
+//êîëè÷åñòâî ýëåìåíòîâ â î÷åðåäè
+#define FIFO_COUNT(fifo)     (fifo.head-fifo.tail)
+
+//ðàçìåð fifo
+#define FIFO_SIZE(fifo)      ( sizeof(fifo.buf) / sizeof(fifo.buf[0]) )
+
+//fifo çàïîëíåíî?
+#define FIFO_IS_FULL(fifo)   (FIFO_COUNT(fifo)==FIFO_SIZE(fifo))
+
+//fifo ïóñòî?
+#define FIFO_IS_EMPTY(fifo)  (fifo.tail==fifo.head)
+
+//êîëè÷åñòâî ñâîáîäíîãî ìåñòà â fifo
+#define FIFO_SPACE(fifo)     (FIFO_SIZE(fifo)-FIFO_COUNT(fifo))
+
+//ïîìåñòèòü ýëåìåíò â fifo
+#define FIFO_PUSH(fifo, byte) \
+{\
+	fifo.buf[fifo.head & (FIFO_SIZE(fifo)-1)]=byte;\
+	fifo.head++;\
+}
+
+//âçÿòü ïåðâûé ýëåìåíò èç fifo
+#define FIFO_FRONT(fifo) (fifo.buf[fifo.tail & (FIFO_SIZE(fifo)-1)])
+
+//óìåíüøèòü êîëè÷åñòâî ýëåìåíòîâ â î÷åðåäè
+#define FIFO_POP(fifo)   \
+{\
+	fifo.tail++; \
+}
+
+//î÷èñòèòü fifo
+#define FIFO_FLUSH(fifo)   \
+{\
+	fifo.tail=0;\
+	fifo.head=0;\
+}
+
+#endif /* FIFO_H_ */

+ 319 - 0
heater3/heater3 (Конфликтующая копия с компьютера L362Com 2019-06-26).c

@@ -0,0 +1,319 @@
+#include "heater3.h"
+
+volatile uint8_t btn_pressed = 0;
+
+volatile uint8_t rxbyte = 0;
+volatile uint8_t rxcounter = 0;
+volatile uint8_t rxbuffer[8];
+
+volatile uint8_t tick = 0;
+
+FIFO(64) fifo0;
+
+//ISR(PCINT3_vect)
+//{
+	//PCICR &= ~(1 << PCIE3);
+	//btn_pressed = ~((PIND >> 4) | 0xF0);
+//}
+
+ISR(USART0_RX_vect)
+{
+	rxbyte = UDR0;
+	if(rxcounter || (rxbyte == 0x55))
+	{
+		rxbuffer[rxcounter] = rxbyte;
+		rxcounter++;
+	}
+}
+
+ISR(USART0_TX_vect)
+{
+	if(!FIFO_IS_EMPTY(fifo0))
+	{
+		UDR0 = FIFO_FRONT(fifo0);
+		FIFO_POP(fifo0);
+	}
+}
+
+ISR(TIMER1_COMPA_vect)
+{
+	tick = 1;
+}
+
+void init()
+{
+	/* Watchdog clear*/
+	MCUSR &= ~(1 << WDRF);
+	WDTCSR |= (1 << WDCE) | (1 << WDE);
+	WDTCSR = 0x00;
+	
+	/* GPIO Initialization */
+	PORTC |= (1 << LED1) | (1 << LED2) | (1 << GATE1) | (1 << GATE2);
+	DDRC  |= (1 << LED1) | (1 << LED2) | (1 << GATE1) | (1 << GATE2);
+	
+	/* UART Initialization */
+	TXD_PORT |= (1 << TXD_BIT);
+	TXD_DDR |= (1 << TXD_BIT);
+	UBRR0H = 0;
+	UBRR0L = 38;
+	UCSR0A = (1 << U2X0);
+	UCSR0B = (1 << RXCIE0) | (1 << TXCIE0) | (1 << RXEN0) | (1 << TXEN0);
+	UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
+	
+	/* SPI Initialization */
+	DDRB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT) | (7 << PORTB0);
+	PORTB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT);
+	SPCR = (1 << SPE) | (1 << MSTR);
+	
+	/* TWI Initialization */
+	TWBR = (uint8_t)(((F_CPU / TWI_FREQ) - 16) / 2);
+	TWCR = (1 << TWEN);
+	
+	/* Timer1 Initialization */
+	TCCR1B = (1 << CS12) | (1 << CS10) | (1 << WGM12);
+	OCR1A = 0x1000;
+	TIMSK1 = (1 << OCIE1A);
+
+	/* ADC Initialization */
+	ADMUX |= (1 << REFS0) | (1 << REFS1);
+	ADCSRA = (1 << ADEN) | (1 << ADPS2);
+	DIDR0 = 0x0F;
+	
+	//PCICR = (1 << PCIE3);
+	//PCMSK3 = 0xF0;
+	sei();
+}
+
+void POT_SendData(uint8_t data, potnum_t potnum)
+{
+	PORTB = (PORTB & 0xF8) | (potnum & 0x07);
+	PORTB &= ~(1 << SS_BIT);
+	SPDR = 0x11;
+	while(!(SPSR & (1 <<SPIF)));
+	SPDR = data;
+	while(!(SPSR & (1 <<SPIF)));
+	PORTB |= (1 << SS_BIT);
+}
+
+btw32_t TK_ReadData(void)
+{
+	uint8_t i = 0;
+	btw32_t data;
+	
+	PORTB = (PORTB & 0xF8) | 0x04;
+	PORTB &= ~(1 << SS_BIT);
+	for(i = 0; i < 4; i++)
+	{
+		SPDR = 0xFF;
+		while(!(SPSR & (1 <<SPIF)));
+		data.byte[3 - i] = SPDR;
+	}
+	PORTB |= (1 << SS_BIT);
+	return(data);
+}
+
+static int lcd_putchar(char c, FILE *stream)
+{
+	LCD_SendData(c);
+	return 0;
+}
+
+static int uart_putchar(char c, FILE *stream)
+{
+	cli();
+	if(UCSR0A & (1 << UDRIE0))
+	{
+		UDR0 = c;
+	}
+	else
+	{
+		if(!FIFO_IS_FULL(fifo0))
+		{
+			FIFO_PUSH(fifo0, c);
+		}
+	}
+	sei();
+	return 0;
+}
+/*
+void transmit(packet_str *packet)
+{
+	uint8_t i = 0;
+	if(txcomplete)
+	{
+		txcomplete = 0;
+		packet->checksum = 0;
+		for(i = 1; i < (TX_LENGTH - 1); i++)
+		{
+			packet->checksum += ((uint8_t*)packet)[i];
+		}
+		
+		txbuffer = (uint8_t*)packet;
+		txcounter = TX_LENGTH - 1;
+		UDR0 = txbuffer[0];
+	}
+}
+*/
+void exec_cmd(rxdata_str *rxdata)
+{
+	/*
+	switch(rxdata->command)
+	{
+		case CMD_RESET:
+			break;
+		
+		case CMD_CHONOFF:
+			break;
+		
+		case CMD_SETTEMP:
+			break;
+	}*/
+}
+
+int main()
+{
+	uint16_t i = 0;
+	uint8_t adc_ch = 0;
+	uint16_t adc_data = 0;
+	
+	uint8_t pot_data[4] = { 0x00, 0x55, 0xAA, 0xFF };
+	//btw32_t tk_data;
+	heater_str heater_ch[2];
+	//rxdata_str	rxdata;
+	
+	for(i = 0; i < 2; i++)
+	{
+		heater_ch[i].start = 0;
+		heater_ch[i].status.rsv = 0;
+		heater_ch[i].status.channel = i;
+		heater_ch[i].status.onoff = 0;
+		heater_ch[i].status.ocp = 0;
+		heater_ch[i].preset = 0;
+		heater_ch[i].tcouple = 0;
+		heater_ch[i].tmeas = 0;
+		heater_ch[i].tmeas_raw = 0;
+		heater_ch[i].tset = 0;
+		heater_ch[i].tset_raw = 0;
+		heater_ch[i].current = 0;
+		heater_ch[i].checksum = 0;
+	}
+	
+	//static FILE lcd_stdout = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
+	static FILE uart_stdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
+	stdout = &uart_stdout;
+	
+	init();
+	//printf("HELLO NIGGA\n");
+	//LCD_Init();
+
+	/*
+	POT_SendData(pot_data[0], 0);
+	POT_SendData(pot_data[1], 1);
+	POT_SendData(pot_data[2], 2);
+	POT_SendData(pot_data[3], 3);
+	*/
+	
+	//transmit(&packet_ch[0]);
+
+	i = 0;
+	ADCSRA |= (1 << ADSC);
+	TCNT1 = 0x00;
+	
+	PORTC &= ~(1 << GATE1);
+	
+	while(1)
+    {
+		if((rxcounter == 2) && (rxbuffer[1] == 'R'))
+		{
+			cli();
+			WDTCSR |= (1 << WDCE) | (1 << WDE);
+			while(1);
+		}
+		
+		if(rxcounter == 8)
+		{
+			rxcounter = 0;
+			uint8_t temp = 0;
+			for(i = 1; i < 7; i++)
+			{
+				temp += rxbuffer[i];
+			}
+			
+			if(temp == rxbuffer[7])
+			{
+				exec_cmd((rxdata_str*)rxbuffer);
+			}
+		}
+		
+		if(tick)
+		{
+			tick = 0;
+			adc_data = ADCL;
+			adc_data |= ((uint16_t)ADCH) << 8;
+			
+			switch(adc_ch)
+			{
+				case ADC_MEAS1:
+					heater_ch[0].tmeas_raw = adc_data;
+					printf("T0: %.4u\n", heater_ch[0].tmeas_raw);
+					break;
+				case ADC_MEAS2:
+					heater_ch[1].tmeas_raw = adc_data;
+					printf("T1: %.4u\n", heater_ch[1].tmeas_raw);
+					break;
+				case ADC_CUR1:
+					heater_ch[0].current = (uint16_t)((float)adc_data * 2.28);
+					printf("C0: %.4u\n", heater_ch[0].current);
+					break;
+				case ADC_CUR2:
+					heater_ch[1].current = (uint16_t)((float)adc_data * 2.28);;
+					printf("C1: %.4u\n", heater_ch[1].current);
+					break;
+			}
+
+			//printf("T0: %.4u, T1: %.4u \n", heater_ch[0].tmeas_raw, heater_ch[1].tmeas_raw);
+			//printf("C0: %.4u, C1: %.4u \n", heater_ch[0].current, heater_ch[1].current);
+			
+			if(++adc_ch > 0x03)
+				adc_ch = 0;
+			
+			ADMUX = (ADMUX & 0xFC) | adc_ch;
+			ADCSRA |= (1 << ADSC);
+		}
+		//fprintf(&lcd_stdout, "CH0: %.3d / %.3d ", packet_ch[0].tmeas, packet_ch[0].tset);
+		//if(i & (0x01))
+			//fprintf(&lcd_stdout, "\xD9");
+		//else
+			//fprintf(&lcd_stdout, " ");
+	
+		//transmit(&packet_ch[0]);
+		/*
+		LCD_SetPos(0, 1);
+		fprintf(&lcd_stdout, "CH1: %.3d / %.3d ", packet_ch[1].tmeas, packet_ch[1].tset);
+		if(i & 0x01)
+			fprintf(&lcd_stdout, "\xD9");
+		else
+			fprintf(&lcd_stdout, " ");
+		//transmit(&packet_ch[1]);*/
+/*
+		switch(btn_pressed)
+		{
+			case 0x01:
+				POT_SendData(++pot_data[0], 0);
+				btn_pressed = 0;
+				break;
+			case 0x02:
+				POT_SendData(++pot_data[1], 1);
+				btn_pressed = 0;
+				break;
+			case 0x04:
+				POT_SendData(++pot_data[2], 2);
+				btn_pressed = 0;
+				break;
+			case 0x08:
+				POT_SendData(++pot_data[3], 3);
+				btn_pressed = 0;
+				break;
+		}*/
+    }
+}

+ 1132 - 0
heater3/heater3.c

@@ -0,0 +1,1132 @@
+#include "heater3.h"
+#include "lcd-twi.h"
+#include "potentiometers.h"
+#include "saveload.h"
+#include "fifo.h"
+#include "tools.h"
+
+const char cyrillic[64] = {	'A', 0xA0, 'B', 0xA1, 0xE0, 'E', 0xA3, 0xA4, 0xA5, 0xA6, 'K', 0xA7, 'M', 'H', 'O', 0xA8,
+							'P', 'C', 'T', 0xA9, 0xAA, 'X', 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 'b', 0xAF, 0xB0, 0xB1,
+							'a', 0xB2, 0xB3, 0xB4, 0xE3, 'e', 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 'o', 0xBE,
+							'p', 'c', 0xBF, 'y', 0xE4, 'x', 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7 };
+
+volatile uint8_t btn_act = 0;
+volatile uint8_t rxbuf[40];
+volatile uint8_t count = 0;
+volatile comdata_str rxdata;
+volatile uint8_t tick1 = 0;
+volatile uint8_t tick2 = 0;
+uint8_t cal_tmax = 130;
+uint8_t cal_tmin = 40;
+
+heater_str	heater[2];
+opamp_str	opamp[2];
+preset_str	preset[2];
+uint8_t		txrequest = 0;
+
+static FILE lcd_stdout = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
+static FILE uart_stdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
+
+FIFO(512) fifo0;
+
+ISR(PCINT3_vect)
+{
+	btn_act = 1;
+	if(((BTNPIN >> 4) | 0xF0) == 0xF0)
+	{
+		cli();
+		WDTCSR |= (1 << WDCE) | (1 << WDE);
+	}
+}
+
+ISR(INT0_vect) /*OVERCURRENT PROTECTION 1*/
+{
+	cli();
+	GATEPORT |= (1 << GATE1) | (1 << GATE2);
+	LEDPORT &= ~((1 << LED1) | (1 << LED2));
+	PORTC &= ~(1 << V12POWER);
+	heater[0].status.heating = heater[1].status.heating = 0;
+	heater[0].status.onoff = heater[1].status.onoff = 0;
+	heater[0].status.ocp = 1;
+}
+
+ISR(INT1_vect) /*OVERCURRENT PROTECTION 2*/
+{
+	cli();
+	GATEPORT |= (1 << GATE1) | (1 << GATE2);
+	LEDPORT &= ~((1 << LED1) | (1 << LED2));
+	PORTC &= ~(1 << V12POWER);
+	heater[0].status.heating = heater[1].status.heating = 0;
+	heater[0].status.onoff = heater[1].status.onoff = 0;
+	heater[1].status.ocp = 1;
+}
+
+ISR(USART0_RX_vect)
+{
+	count++;
+	rxbuf[count - 1] = UDR0;
+}
+
+ISR(USART0_UDRE_vect)
+{
+	if(FIFO_IS_EMPTY(fifo0))
+	{
+		UCSR0B &= ~(1 << UDRIE0);
+	}
+	else
+	{
+		UDR0 = FIFO_FRONT(fifo0);
+		FIFO_POP(fifo0);
+	}
+}
+
+ISR(TIMER0_COMPA_vect)
+{
+	tick1 = 1;
+}
+
+ISR(TIMER1_COMPA_vect)
+{
+	tick2 = 1;
+}
+
+void init()
+{
+	/* Watchdog clear*/
+	MCUSR &= ~(1 << WDRF);
+	WDTCSR |= (1 << WDCE) | (1 << WDE);
+	WDTCSR = 0x00;
+	
+	/* External interrupts initialization */
+	EICRA |= (1 << ISC01) | (1 << ISC11);
+	EIMSK |= (1 << INT0) | (1 << INT1);
+	
+	/* GPIO Initialization */
+	PORTC |= (1 << GATE1) | (1 << GATE2)  | (1 << V12POWER);
+	DDRC  |= (1 << LED1) | (1 << LED2) | (1 << GATE1) | (1 << GATE2) | (1 << V12POWER);
+	
+	/* UART Initialization */
+	TXD_PORT |= (1 << TXD_BIT);
+	TXD_DDR |= (1 << TXD_BIT);
+	#if U2X0_SET
+		UBRR0H = (uint8_t)(((F_CPU / (8 * BAUD_RATE)) - 1) >> 8);
+		UBRR0L = (uint8_t)((F_CPU / (8 * BAUD_RATE)) - 1);
+		UCSR0A = (1 << U2X0);
+	#elif
+		UBRR0H = (uint8_t)(((F_CPU / (16 * BAUD_RATE)) - 1) >> 8);
+		UBRR0L = (uint8_t)((F_CPU / (16 * BAUD_RATE)) - 1);
+	#endif
+	UCSR0B = (1 << RXCIE0) | (1 << RXEN0) | (1 << TXEN0);
+	UCSR0C = (1 << UCSZ00) | (1 << UCSZ01);
+	
+	/* SPI Initialization */
+	DDRB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT) | (7 << PORTB0);
+	PORTB |= (1 << MOSI_BIT) | (1 << SCK_BIT) | (1 << SS_BIT);
+	SPCR = (1 << SPE) | (1 << MSTR);
+	
+	/* TWI Initialization */
+	TWBR = (uint8_t)(((F_CPU / TWI_FREQ) - 16) / 2);
+	TWCR = (1 << TWEN);
+	
+	/* Timer0 Initialization */
+	TCCR0A = (1 << WGM01);
+	OCR0A = 0x80;
+	TCCR0B = (1 << CS00) | (1 << CS02);
+	TIMSK0 = (1 << OCIE0A);
+	
+	/* Timer1 Initialization */
+	TCCR1B = (1 << CS12) | (1 << CS10) | (1 << WGM12);
+	OCR1A = 0x400;
+	TIMSK1 = (1 << OCIE1A);
+	
+	/* ADC Initialization */
+	ADMUX |= (1 << REFS0) | (1 << REFS1);
+	ADCSRA = (1 << ADEN) | (1 << ADPS0) | (1 << ADPS1);
+	DIDR0 = 0xFF;
+	
+	PCICR = (1 << PCIE3);
+	PCMSK3 = 0xF0;
+}
+
+void MAX_ReadData()
+{
+	uint8_t i = 0;
+	max31855_t data;
+	btw32_t *dptr = (btw32_t*)&data;
+	PORTB = (PORTB & 0xF8) | MAXADDR;
+	PORTB &= ~(1 << SS_BIT);
+	for(i = 0; i < 4; i++)
+	{
+		SPDR = 0xFF;
+		while(!(SPSR & (1 << SPIF)));
+		dptr->byte[3 - i] = SPDR;
+	}
+	PORTB |= (1 << SS_BIT);
+	
+	heater[CH0].tintr = heater[CH1].tintr = (int8_t)data.intt_int;
+	if(data.intt_frac * (100.0 / 16.0) >= 50)
+		heater[CH0].tintr++;
+	
+	if(data.oc | data.scg | data.scg)
+	{
+		heater[CH0].status.couple = heater[CH1].status.couple = dptr->byte[0] & 0x07;
+		heater[CH0].tcouple = heater[CH1].tcouple = 0;
+	}
+	else
+	{
+		heater[CH0].status.couple = heater[CH1].status.couple = 0;
+		heater[CH0].tcouple = heater[CH1].tcouple = ((int16_t)data.tct_int ^ 0x0800) - 0x0800;
+		if((data.tct_frac * (100 / 4)) >= 50)
+			heater[CH0].tcouple = heater[CH1].tcouple++;
+	}
+}
+
+int16_t CalculateTemp(uint16_t data, uint8_t ch)
+{
+	if(data > preset[ch].curve[0].adcdata)
+		return 0;
+		
+	if(data < preset[ch].curve[15].adcdata)
+		return 150;
+	
+	for(uint8_t i = 0; i < 16; i++)
+	{
+		if(data >= preset[ch].curve[i].adcdata)
+		{
+			return Approx(preset[ch].curve[i - 1].adcdata, preset[ch].curve[i].adcdata,
+					preset[ch].curve[i - 1].temp, preset[ch].curve[i].temp, data);
+		}
+	}
+	return (-1);
+}
+
+int16_t TMeasure(uint8_t ch)
+{
+	uint16_t addata = 0;
+	uint16_t avg_data = 0;
+	uint8_t i = 0;
+	
+	ADMUX = (ADMUX & 0xF8) | (ch & 0x01);
+	_delay_us(100);
+	avg_data = 0;
+	for(i = 0; i < 10; i++)
+	{
+		ADCSRA |= (1 << ADSC);
+		while(!(ADCSRA & (1 << ADIF)));
+		addata = ADCL;
+		addata |= ((uint16_t)ADCH) << 8;
+		avg_data += addata;
+	}
+	addata = avg_data / 10;
+	heater[ch].tmeas_raw = addata;
+	heater[ch].tmeas = CalculateTemp(addata, ch);
+	return (heater[ch].tmeas);
+}
+
+uint16_t CurrMeasure(uint8_t ch)
+{
+	uint16_t addata = 0;
+	
+	ADMUX = (ADMUX & 0xF8) | (ADC_CUR1 + (ch & 0x01));
+	_delay_us(100);
+	ADCSRA |= (1 << ADSC);
+	while(!(ADCSRA & (1 << ADIF)));
+	addata = ADCL;
+	addata |= ((uint16_t)ADCH) << 8;
+	heater[ch].current = ((float)addata * 2.4);
+	return (heater[ch].current);
+}
+
+int lcd_putchar(char c, FILE *stream)
+{
+	if(c >= 0xC0)
+		c = cyrillic[c - 0xC0];
+	LCD_SendData(c);
+	return 0;
+}
+
+int uart_putchar(char c, FILE *stream)
+{
+	cli();
+	if(!FIFO_IS_FULL(fifo0))
+	{
+		FIFO_PUSH(fifo0, c);
+		UCSR0B |= (1 << UDRIE0);
+	}
+	sei();
+	return 0;
+}
+
+void TransmitPresets()
+{
+	uint8_t checksum = 0x1F;
+	uart_putchar(0x55, NULL);
+//	fprintf(&uart_stdout, "BEG");
+	uart_putchar(0x45, NULL);
+	uart_putchar(0x85, NULL);
+	
+	for(uint8_t pn = 0; pn < 25; pn++)
+	{
+		for(uint8_t offs = 0; offs < 13; offs++)
+		{
+			EEAR = 0x30 + (pn * sizeof(preset_str)) + offs;
+			EECR |= (1 << EERE);
+			uint8_t data = EEDR;
+			uart_putchar(data, NULL);
+			checksum += data;
+		}
+	}
+	uart_putchar(checksum, NULL);
+	txrequest = 0;
+//	fprintf(&uart_stdout, "END");
+}
+
+void Transmit()
+{
+	comdata_str *txdata = (comdata_str*)calloc(1, sizeof(comdata_str));
+	txdata->start = 0x55;
+
+	txdata->command = txrequest;
+	
+	switch((txreq_t)txrequest)
+	{
+		case REQ_RST:
+		case REQ_ACK:
+		case REQ_NACK:
+			txdata->len = 0;
+			break;
+			
+		case REQ_MAINDATA:
+			txdata->len = sizeof(heater);
+			memcpy(txdata->data, heater, sizeof(heater));
+			break;
+		
+		case REQ_DEBUGDATA:
+			break;
+			
+		case REQ_PRESETTABLE:
+			TransmitPresets();
+			free(txdata);
+			return;
+			
+		case REQ_PRESETDATA:
+			txdata->len = sizeof(preset);
+			memcpy(txdata->data, preset, sizeof(preset));
+			break;
+	}
+	
+	//fprintf(&uart_stdout, "BEG");
+	
+	for(uint8_t i = 0; i < (txdata->len + 3); i++)
+	{
+		uart_putchar(((uint8_t*)txdata)[i], NULL);
+		txdata->checksum += ((uint8_t*)txdata)[i];
+	}
+	uart_putchar(txdata->checksum, NULL);
+	
+	//fprintf(&uart_stdout, "END");
+	txrequest = 0;
+	free(txdata);
+}
+
+void ResetMCU(void)
+{
+	cli();
+	WDTCSR |= (1 << WDCE) | (1 << WDE);
+	while(1);
+}
+
+void SwitchHeating(uint8_t ch, uint8_t onoff)
+{
+	if(onoff)
+	{
+		GATEPORT &= ~(1 << (GATE1 + (ch & 0x01)));
+		LEDPORT |= (1 << (LED1 + (ch & 0x01)));
+		heater[ch].status.heating = 1;
+	}
+	else
+	{
+		GATEPORT |= (1 << (GATE1 + (ch & 0x01)));
+		LEDPORT &= ~(1 << (LED1 + (ch & 0x01)));
+		heater[ch].status.heating = 0;
+	}
+}
+
+float VoltageMeasure(uint8_t ch)
+{
+	uint16_t addata = 0;
+	float voltage = 0.0;
+	ADMUX = (ADMUX & 0xF8) | (ch & 0x01);
+	_delay_us(100);
+	ADCSRA |= (1 << ADSC);
+	while(!(ADCSRA & (1 << ADIF)));
+	addata = ADCL;
+	addata |= ((uint16_t)ADCH) << 8;
+	voltage = (float)addata * 0.0025;
+	voltage = (voltage / (0.758 * opamp[ch].gain)) + opamp[ch].shift;
+	return voltage;
+}
+
+circ_t CircuitDetect(uint8_t ch)
+{
+	uint8_t gain, shift, drive;
+	float voltage;
+	circ_t circ;
+	
+	gain = heater[ch].gain;
+	shift = heater[ch].shift;
+	drive = heater[ch].drive;
+	
+	SetDriveVoltage(ch, 0);
+
+	SetInputRange(ch, 0.0, 3.0);
+	voltage = VoltageMeasure(ch);
+	if(voltage > 3.0)
+	{
+		circ = CIRC_OPEN;
+	}
+	else if((voltage > 0.05) && (voltage <= 1.5))
+	{
+		SetDriveData(ch, 0xFF);
+		SwitchDrive(ch, ON);
+		_delay_ms(1);
+		voltage = VoltageMeasure(ch);
+		SetDriveData(ch, drive);
+		SwitchDrive(ch, OFF);
+		if(voltage < 0.2)
+		{
+			circ = CIRC_MOSFET;
+		}
+		else
+		{
+			circ = CIRC_RES_DIODE;
+		}
+	}
+	else
+	{
+		circ = CIRC_RES;
+	}
+	
+	SetGainData(ch, gain);
+	SetShiftData(ch, shift);
+	SetDriveData(ch, drive);
+	heater[ch].status.circuit = circ;
+	return circ;
+}
+
+void UARTDataAvail()
+{
+	static uint8_t rxcnt;
+	uint8_t localcnt = count;
+	
+	for(uint8_t i = 0; i < localcnt; i++)
+	{
+		uint8_t rxbyte = rxbuf[i];
+		switch(rxcnt)
+		{
+			case 0:
+			if(rxbyte == 0x55)
+			{
+				//rxdata.start = rxbyte;
+				rxdata.checksum = rxbyte;
+				rxcnt++;
+			}
+			break;
+			
+			case 1:
+			if(rxbyte < 100)
+			{
+				rxdata.len = rxbyte;
+				rxdata.checksum += rxbyte;
+				rxcnt++;
+			}
+			else
+			{
+				rxcnt = 0;
+			}
+			break;
+			
+			case 2:
+			rxdata.command = rxbyte;
+			rxdata.checksum += rxbyte;
+			rxcnt++;
+			break;
+			
+			default:
+			if(rxcnt < (rxdata.len + 3))
+			{
+				rxdata.data[rxcnt - 3] = rxbyte;
+				rxdata.checksum += rxbyte;
+				rxcnt++;
+			}
+			else
+			{
+				if(rxbyte == rxdata.checksum)
+				{
+					ProcessCommand();
+				}
+				rxcnt = 0;
+			}
+		}
+		count--;
+	}
+}
+
+int AutoCalibration(uint8_t ch)
+{
+	uint8_t drive = 0;
+	int16_t tstart = 0;
+	uint16_t delcnt = 0;
+	float vlow = 0.0, vhigh = 0.0;
+	
+	MAX_ReadData();
+	CircuitDetect(ch);	
+	
+	if(((heater[ch].status.circuit == CIRC_MOSFET) || (heater[ch].status.circuit == CIRC_RES_DIODE))  && (heater[ch].status.couple == 0))
+	{
+		LCD_SendCmd(LCD_CLR);
+		SetInputRange(ch, 0.0, 3.0);
+		SetDriveVoltage(ch, 0.0);
+		_delay_ms(2);
+	
+		do {
+			MAX_ReadData();
+			LCD_SetPos(0, 0);
+			fprintf(&lcd_stdout, "K%.1u P%.2u Tm=%.3u -", ch + 1, heater[ch].preset, heater[ch].tmeas);
+			LCD_SetPos(0, 1);
+			fprintf(&lcd_stdout, "CALIB. Tc=%.3u -", heater[ch].tcouple);
+		} while(heater[ch].tcouple > cal_tmin);
+	
+		tstart = heater[ch].tcouple;
+		vhigh = VoltageMeasure(ch) + 0.04;
+		
+		if(heater[ch].status.circuit == CIRC_MOSFET)
+		{
+			do {
+				SetDriveData(ch, drive);
+				SwitchDrive(ch, ON);
+				SwitchHeating(ch, ON);
+				_delay_ms(1);
+				CurrMeasure(ch);
+				SwitchHeating(ch, OFF);
+				SwitchDrive(ch, OFF);
+				drive++;
+			} while(heater[ch].current < 1000);
+			
+			drive--;
+			SwitchDrive(ch, ON);
+		}
+
+		SwitchHeating(ch, ON);
+	
+		while(heater[ch].tcouple < (cal_tmax + 2))
+		{
+			if(CurrMeasure(ch) > CURR_MAX)
+				return 0;
+			
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+			{
+				if(heater[ch].current > 1500)
+				{
+					SetDriveData(ch, --drive);
+					SwitchDrive(ch, ON);
+				}
+				
+				if(heater[ch].current < 1000)
+				{
+					SetDriveData(ch, ++drive);
+					SwitchDrive(ch, ON);
+				}
+			}
+		
+			MAX_ReadData();
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0))
+			{
+				LoadPreset(ch);
+				return (-1);
+			}
+			
+			if(++delcnt > 300)
+			{
+				delcnt = 0;
+				if((heater[ch].tcouple - tstart) < 5)
+				{
+					SwitchHeating(ch, OFF);
+					SwitchDrive(ch, OFF);
+					LCD_SetPos(0, 0);
+					fprintf(&lcd_stdout, "Íåäîñòàòî÷íûé   ");
+					LCD_SetPos(0, 1);
+					fprintf(&lcd_stdout, "òåïëîâîé êîíòàêò");
+					LoadPreset(ch);
+					btn_act = 0;
+					while(!btn_act);
+					return(-1);
+				}
+				else
+				{
+					tstart = heater[ch].tcouple;
+				}
+			}
+		
+			LCD_SetPos(0, 0);
+			fprintf(&lcd_stdout, "%04.2f-%04.2f G=%04.2f", vhigh, vlow, opamp[ch].drive);
+			LCD_SetPos(0, 1);
+			fprintf(&lcd_stdout, "I=%.4umA Tc=%.3u ", heater[ch].current, heater[ch].tcouple);
+		}
+	
+		SwitchHeating(ch, OFF);
+		SwitchDrive(ch, OFF);
+		_delay_ms(2);
+	
+		vlow = VoltageMeasure(ch);
+		if(vlow > 0.01)
+			vlow -= 0.01;
+		SetInputRange(ch, vlow, vhigh);
+	
+		for(uint8_t temp = cal_tmax; temp >= cal_tmin; temp -= 10)
+		{
+			while(heater[ch].tcouple >= temp)
+			{
+				MAX_ReadData();
+				LCD_SetPos(0, 0);
+				fprintf(&lcd_stdout, "VH=%04.2f Dm=%.3u -", vhigh, heater[ch].tmeas_raw);
+				LCD_SetPos(0, 1);
+				fprintf(&lcd_stdout, "VL=%04.2f Tc=%.3u -", vlow, heater[ch].tcouple);
+			}
+			TMeasure(ch);
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = heater[ch].tmeas_raw;
+			
+			if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_RES) || (heater[ch].status.couple != 0) )
+			{
+				LoadPreset(ch);
+				return (-1);
+			}
+		}
+	
+		for(uint8_t temp = 0; temp < cal_tmin; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		for(uint8_t temp = (cal_tmax + 10); temp < 160; temp += 10)
+		{
+			preset[ch].curve[temp / 10].temp = temp;
+			preset[ch].curve[temp / 10].adcdata = Approx(preset[ch].curve[cal_tmin / 10].temp, preset[ch].curve[cal_tmax / 10].temp,
+				preset[ch].curve[cal_tmin / 10].adcdata, preset[ch].curve[cal_tmax / 10].adcdata, preset[ch].curve[temp / 10].temp);
+		}
+	
+		if(strlen(preset[ch].header) == 0)
+		{
+			strncpy(preset[ch].header, "DEFAULT", 12);
+		}
+	
+		preset[ch].number = heater[ch].preset;
+		preset[ch].gain = heater[ch].gain;
+		preset[ch].shift = heater[ch].shift;
+		preset[ch].drive = heater[ch].drive;
+	
+		SavePreset(ch);
+	
+		LCD_SendCmd(LCD_CLR);
+	}
+	return 0;
+}
+
+void ManualCalibration(uint8_t ch)
+{
+	uint8_t drive = 0;
+	float vlow = 0.0, vhigh = 0.0;
+	
+	LCD_SendCmd(LCD_CLR);
+	LCD_SetPos(0, 0);
+	fprintf(&lcd_stdout, "ÐÓ×Í. ÊÀËÈÁÐÎÂÊÀ");
+	
+	if(heater[ch].status.circuit == CIRC_MOSFET)
+	{
+		do {
+			SetDriveData(ch, drive);
+			SwitchDrive(ch, ON);
+			SwitchHeating(ch, ON);
+			_delay_ms(1);
+			CurrMeasure(ch);
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+			drive++;
+		} while(heater[ch].current < 1000);
+		
+		drive--;
+	}
+	
+	while(heater[ch].status.calib == CAL_MANUAL)
+	{
+		if(count)
+		{
+			UARTDataAvail();
+		}
+		
+		if(txrequest)
+		{
+			Transmit();
+		}
+		
+		if(heater[ch].status.heating)
+		{
+			if(heater[ch].status.circuit == CIRC_MOSFET)
+				SwitchDrive(ch, ON);
+
+			SwitchHeating(ch, ON);
+			_delay_ms(1);
+			if(CurrMeasure(ch) > 2000)
+			{
+				drive--;
+				SetDriveData(ch, drive);
+				SwitchDrive(ch, ON);
+			}
+		}
+		else
+		{
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+		}
+	}
+	heater[ch].status.heating = OFF;
+}
+
+void ProcessCommand()
+{
+	uint8_t ch = ((rxdata.command & 0x80) >> 7) & 0x01;
+	rxdata.command &= 0x7F;
+	txrequest = REQ_ACK;
+	switch(rxdata.command)
+	{
+		case CMD_RESET:
+			ResetMCU();
+			break;
+		
+		case CMD_REQ:
+			txrequest = rxdata.data[0];
+			break;
+		
+		case CMD_CHONOFF:
+			heater[ch].status.onoff = rxdata.data[0];
+			SwitchHeating(ch, OFF);
+			SwitchDrive(ch, OFF);
+			break;
+		
+		case CMD_SETTEMP:
+			heater[ch].tset = rxdata.data[0];
+			break;
+		
+		case CMD_SETRANGE:
+			heater[ch].gain = rxdata.data[0];
+			heater[ch].shift = rxdata.data[1];
+			SetGainData(ch, rxdata.data[0]);
+			SetShiftData(ch, rxdata.data[1]);
+			break;
+		
+		case CMD_SETVDRIVE:
+			heater[ch].drive = rxdata.data[0];
+			opamp[ch].drive = ((float)heater->drive / 25.76);
+			break;
+
+		case CMD_SWPRESET:
+			heater[ch].preset = rxdata.data[0];
+			LoadPreset(ch);
+			SavePrefs();
+			break;
+		
+		case CMD_LOADDATA:
+			memcpy((uint8_t*)preset, (uint8_t*)rxdata.data, rxdata.len);
+			SavePreset(ch);
+			break;
+		
+		case CMD_HEATING:
+			if(heater[ch].status.calib == CAL_MANUAL)
+			heater[ch].status.heating = rxdata.data[0];
+			break;
+		
+		case CMD_CALIBRATION:
+			heater[ch].status.calib = rxdata.data[0];
+			cal_tmin = rxdata.data[1];
+			cal_tmax = rxdata.data[2];
+		
+			if(heater[ch].status.calib == CAL_MANUAL)
+				ManualCalibration(ch);
+			else if(heater[ch].status.calib == CAL_AUTO)
+				AutoCalibration(ch);
+			break;
+	}
+}
+
+void LoadingScreen()
+{
+	uint8_t c = 0xFF, i = 0, d = 0, btn = 0;
+	do
+	{
+		_delay_ms(20);
+		LCD_SetPos(i, 0);
+		LCD_SendData(c);
+		LCD_SetPos(15 - i, 1);
+		LCD_SendData(c);
+		if(++i > 15)
+		{
+			c ^= ~' ';
+			i = 0;
+			d++;
+		}
+		btn = ~((BTNPIN >> 4) | 0xF0);
+	}
+	while(btn || (d < 2));
+	LCD_SendCmd(LCD_CLR);
+}
+
+int main()
+{
+	uint8_t ch = CH0;
+	uint8_t tmp = 0;
+	uint8_t display = DISP_MAIN;
+	btn_t button;
+	
+	menu_str *menu = (menu_str*)calloc(sizeof(menu_str), 1);
+	
+	memset(heater, 0x00, sizeof(heater));
+	memset(opamp,  0x00, sizeof(opamp));
+	memset(preset, 0x00, sizeof(preset));
+
+	opamp[CH0].ch = heater[CH0].status.channel = CH0;
+	opamp[CH1].ch = heater[CH1].status.channel = CH1;
+	
+	heater[CH0].tset = heater[CH1].tset = 25;
+
+	stdout = &uart_stdout;
+	
+	init();
+	LCD_Init();
+	
+	LoadingScreen();
+
+	LoadPrefs();
+	LoadPreset(CH0);
+	LoadPreset(CH1);
+	
+	//SwitchPower(ON);
+	
+	CircuitDetect(CH0);
+	CircuitDetect(CH1);
+	
+	sei();
+	
+	Transmit();
+	
+	while(1)
+    {
+		if(count)
+		{
+			UARTDataAvail();
+		}
+		
+		if(txrequest)
+		{
+			Transmit();
+		}
+		
+		if(heater[CH0].status.ocp || heater[CH1].status.ocp)
+		{
+			LCD_SetPos(0, 0);
+			fprintf(&lcd_stdout, "ÇÀÙÈÒÀ ÏÎ ÒÎÊÓ!!");
+			LCD_SetPos(0, 1);
+			fprintf(&lcd_stdout, "ÍÀÆ.");
+			LCD_SendData(0x00);
+			fprintf(&lcd_stdout, " ÄËß ÑÁÐÎÑÀ");
+			while(((BTNPIN >> 4) | 0xF0) != 0xF7);
+			ResetMCU();
+		}
+		
+		if(tick1)
+		{
+			/* ------------- MEASURING SECTION ----------------- */
+			tick1 = 0;
+			MAX_ReadData();
+			
+			tmp = ch;
+			for(uint8_t ch = CH0; ch <= CH1; ch++)
+			{
+				if(CurrMeasure(ch) > CURR_MAX)
+				{
+					heater[ch].status.onoff = OFF;
+				}
+				SwitchHeating(ch, OFF);
+				SwitchDrive(ch, OFF);
+				_delay_ms(1);
+
+				CircuitDetect(ch);
+				TMeasure(ch);
+					
+				if(heater[ch].status.circuit == CIRC_OPEN)
+				{
+					heater[ch].status.onoff = OFF;
+				}
+				else if(heater[ch].status.circuit == CIRC_RES)
+				{
+					if((heater[ch].status.onoff == ON) && (heater[ch].tcouple < heater[ch].tset))
+					{
+						SwitchHeating(ch, ON);
+					}
+					else
+					{
+						SwitchHeating(ch, OFF);
+					}
+				}
+				else
+				{
+					if((heater[ch].status.onoff == ON) && (heater[ch].tmeas < heater[ch].tset))
+					{
+						SwitchDrive(ch, ON);
+						SwitchHeating(ch, ON);
+					}
+					else
+					{
+						SwitchDrive(ch, OFF);
+						SwitchHeating(ch, OFF);
+					}
+				}
+			}
+			ch = tmp;
+		} ////// if(tick1) end
+		
+		if(tick2)
+		{
+			/* ------------- DISPLAY SECTION ----------------- */
+			tick2 = 0;
+			if(display == DISP_MAIN)
+			{
+				LCD_SetPos(0, 0);
+				fprintf(&lcd_stdout, "K%.1u #%.2u  Tï=", ch + 1, heater[ch].preset);
+				if(!heater[ch].status.couple)
+				{
+					fprintf(&lcd_stdout, "%.3d\x01", heater[ch].tcouple);
+				}
+				else
+				{
+					fprintf(&lcd_stdout, "--- ");
+				}
+			
+				switch(heater[ch].status.circuit)
+				{
+					case CIRC_OPEN:
+						LCD_SendData(SYM_OPEN);
+						break;
+					case CIRC_SHORT:
+						LCD_SendData(SYM_SHORT);
+						break;
+					case CIRC_RES:
+						LCD_SendData(SYM_RES);
+						break;
+					case CIRC_MOSFET:
+						LCD_SendData(SYM_MOSFET);
+						break;
+					case CIRC_RES_DIODE:
+						LCD_SendData(SYM_DIODE);
+						break;
+					case CIRC_DIODE:
+						break;
+				}
+
+				LCD_SetPos(0, 1);
+				fprintf(&lcd_stdout, "Tó=%.3u\x01 ", heater[ch].tset);
+			
+				if((heater[ch].status.circuit == CIRC_OPEN) || (heater[ch].status.circuit == CIRC_SHORT))
+				{
+					fprintf(&lcd_stdout, "ÎÒÊËÞ×.");
+				}
+				else if(heater[ch].status.circuit == CIRC_RES)
+				{
+					fprintf(&lcd_stdout, "I=%4.2fA", ((float)heater[ch].current) / 1000.0);
+				}
+				else
+				{
+					fprintf(&lcd_stdout, "Òí=%.3d\x01", heater[ch].tmeas);
+				}
+			
+				if(heater[ch].status.onoff)
+				{
+					if(heater[ch].status.heating)
+					{
+						LCD_SendData(0xD9);
+					}
+					else
+					{
+						LCD_SendData(0xDA);
+					}
+				}
+				else
+				{
+					LCD_SendData('-');
+				}
+			
+				if(menu->set == 1)
+				{
+					if(menu->blink_cnt % 4 == 0)
+					{
+						if(menu->blink_cnt > 40)
+						{
+							menu->set = 0;
+							menu->blink_cnt = 0;
+							SavePrefs();
+						}
+						LCD_SetPos(3, 1);
+						fprintf(&lcd_stdout, "   ");
+					}
+					menu->blink_cnt++;
+				}
+				else if(menu->set == 2)
+				{
+					if(menu->blink_cnt % 4 == 0)
+					{
+						if(menu->blink_cnt > 40)
+						{
+							menu->set = 0;
+							menu->blink_cnt = 0;
+							SavePrefs();
+						}
+						LCD_SetPos(4, 0);
+						fprintf(&lcd_stdout, "  ");
+					}
+					menu->blink_cnt++;	
+				}
+			
+				if(button.pressed && !button.holded)
+				{
+					if(++button.holdcnt == 12)
+					{
+						button.holded = 1;
+						btn_act = 1;
+					}
+				}
+			}
+			else if(display == DISP_VER)
+			{
+				LCD_SetPos(0, 0);
+				fprintf(&lcd_stdout, "ÓÊÍ-2 09.09.2019");
+				LCD_SetPos(0, 1);
+				fprintf(&lcd_stdout, "Íàãàåâ Àëåêñàíäð");
+			}
+			//txrequest = REQ_MAINDATA;
+			//Transmit();
+		} ////// if(tick2) end
+		
+		/* ---------------- BUTTON SECTION --------------- */
+		if(btn_act)
+		{
+			_delay_ms(20);
+			btn_act = 0;
+			button.code = ~((BTNPIN >> 4) | 0xF0);
+			if((button.code != 0x00) && (!button.holded)) // Button down event
+			{
+				if(display == DISP_MAIN)
+				{
+					button.pressed = 1;
+					button.released = 0;
+					button.prev_code = button.code;
+					switch(button.code)
+					{
+						case 0x01:
+							menu->blink_cnt = 1;
+							if(menu->set == 1)
+							{
+								heater[ch].tset -= (heater[ch].tset != 0);
+							}
+							else if(menu->set == 2)
+							{
+								heater[ch].preset -= (heater[ch].preset != 0);
+								LoadPreset(ch);
+							}
+							else
+							{
+								ch = CH0;
+							}
+							break;
+						
+						case 0x02:
+							menu->blink_cnt = 1;
+							if(menu->set == 1)
+							{
+								heater[ch].tset += (heater[ch].tset != 150);
+							}
+							else if(menu->set == 2)
+							{
+								heater[ch].preset += (heater[ch].preset != 24);
+								LoadPreset(ch);
+							}
+							else
+							{
+								ch = CH1;
+							}
+							break;
+							
+						case 0x03:
+							LCD_SendCmd(LCD_CLR);
+							display = DISP_VER;
+							break;
+							
+						case 0x04:
+							menu->set = (menu->set + 1) % 3;
+							if(menu->set == 0)
+								SavePrefs();
+							menu->blink_cnt = 0;
+							break;
+					} ////// switch(btn_code) end
+				} ////// if(display == ON) end
+			}
+			else if(button.code == 0) // Button up event
+			{
+				if(!button.holded)
+				{
+					display = DISP_MAIN;
+					if(button.prev_code == 0x08)
+					{
+						heater[ch].status.onoff ^= 1;
+						SwitchDrive(ch, OFF);
+						SwitchHeating(ch, OFF);
+					}
+				}
+				
+				button.pressed = 0;
+				button.released = 1;
+				button.holded = 0;
+				button.holdcnt = 0;
+			}
+			else // Button hold event
+			{
+				switch(button.code)
+				{
+					case 0x01:
+					case 0x02:
+						btn_act = 1;
+						button.holded = 0;
+						button.holdcnt--;
+						break;
+						
+					case 0x04:
+						menu->set = 0;
+						AutoCalibration(ch);
+						button.pressed = 0;
+						button.holded = 0;
+						button.holdcnt = 0;
+						break;
+						
+					case 0x08:
+						button.prev_code = 0;
+						display = OFF;
+						LCD_SendCmd(LCD_CLR);
+						//btn_hold = 0;
+						break;
+				}
+			}
+		} ////// if(btn_act) end
+	} ////// while(1) end
+} ////// main() end

+ 86 - 0
heater3/heater3.componentinfo.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Store xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="AtmelPackComponentManagement">
+	<ProjectComponents>
+		<ProjectComponent z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
+			<CApiVersion></CApiVersion>
+			<CBundle></CBundle>
+			<CClass>Device</CClass>
+			<CGroup>Startup</CGroup>
+			<CSub></CSub>
+			<CVariant></CVariant>
+			<CVendor>Atmel</CVendor>
+			<CVersion>1.2.0</CVersion>
+			<DefaultRepoPath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs</DefaultRepoPath>
+			<DependentComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+			<Description></Description>
+			<Files xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
+				<d4p1:anyType i:type="FileInfo">
+					<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include</AbsolutePath>
+					<Attribute></Attribute>
+					<Category>include</Category>
+					<Condition>C</Condition>
+					<FileContentHash i:nil="true" />
+					<FileVersion></FileVersion>
+					<Name>include</Name>
+					<SelectString></SelectString>
+					<SourcePath></SourcePath>
+				</d4p1:anyType>
+				<d4p1:anyType i:type="FileInfo">
+					<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\include\avr\iom644pa.h</AbsolutePath>
+					<Attribute></Attribute>
+					<Category>header</Category>
+					<Condition>C</Condition>
+					<FileContentHash>dmamizNMG7EXBqtW9kb8VA==</FileContentHash>
+					<FileVersion></FileVersion>
+					<Name>include/avr/iom644pa.h</Name>
+					<SelectString></SelectString>
+					<SourcePath></SourcePath>
+				</d4p1:anyType>
+				<d4p1:anyType i:type="FileInfo">
+					<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\templates\main.c</AbsolutePath>
+					<Attribute>template</Attribute>
+					<Category>source</Category>
+					<Condition>C Exe</Condition>
+					<FileContentHash>GD1k8YYhulqRs6FD1B2Hog==</FileContentHash>
+					<FileVersion></FileVersion>
+					<Name>templates/main.c</Name>
+					<SelectString>Main file (.c)</SelectString>
+					<SourcePath></SourcePath>
+				</d4p1:anyType>
+				<d4p1:anyType i:type="FileInfo">
+					<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\templates\main.cpp</AbsolutePath>
+					<Attribute>template</Attribute>
+					<Category>source</Category>
+					<Condition>C Exe</Condition>
+					<FileContentHash>YXFphlh0CtZJU+ebktABgQ==</FileContentHash>
+					<FileVersion></FileVersion>
+					<Name>templates/main.cpp</Name>
+					<SelectString>Main file (.cpp)</SelectString>
+					<SourcePath></SourcePath>
+				</d4p1:anyType>
+				<d4p1:anyType i:type="FileInfo">
+					<AbsolutePath>C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa</AbsolutePath>
+					<Attribute></Attribute>
+					<Category>libraryPrefix</Category>
+					<Condition>GCC</Condition>
+					<FileContentHash i:nil="true" />
+					<FileVersion></FileVersion>
+					<Name>gcc/dev/atmega644pa</Name>
+					<SelectString></SelectString>
+					<SourcePath></SourcePath>
+				</d4p1:anyType>
+			</Files>
+			<PackName>ATmega_DFP</PackName>
+			<PackPath>C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.2.209/Atmel.ATmega_DFP.pdsc</PackPath>
+			<PackVersion>1.2.209</PackVersion>
+			<PresentInProject>true</PresentInProject>
+			<ReferenceConditionId>ATmega644PA</ReferenceConditionId>
+			<RteComponents xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
+				<d4p1:string></d4p1:string>
+			</RteComponents>
+			<Status>Resolved</Status>
+			<VersionMode>Fixed</VersionMode>
+			<IsComponentInAtProject>true</IsComponentInAtProject>
+		</ProjectComponent>
+	</ProjectComponents>
+</Store>

+ 164 - 0
heater3/heater3.cproj

@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectVersion>7.0</ProjectVersion>
+    <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
+    <ProjectGuid>{8fbe0ce3-496b-42e0-bc4d-a4e4fc952454}</ProjectGuid>
+    <avrdevice>ATmega644PA</avrdevice>
+    <avrdeviceseries>none</avrdeviceseries>
+    <OutputType>Executable</OutputType>
+    <Language>C</Language>
+    <OutputFileName>$(MSBuildProjectName)</OutputFileName>
+    <OutputFileExtension>.elf</OutputFileExtension>
+    <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
+    <AssemblyName>heater3</AssemblyName>
+    <Name>heater3</Name>
+    <RootNamespace>heater3</RootNamespace>
+    <ToolchainFlavour>Native</ToolchainFlavour>
+    <KeepTimersRunning>true</KeepTimersRunning>
+    <OverrideVtor>false</OverrideVtor>
+    <CacheFlash>true</CacheFlash>
+    <ProgFlashFromRam>true</ProgFlashFromRam>
+    <RamSnippetAddress>0x20000000</RamSnippetAddress>
+    <UncachedRange />
+    <preserveEEPROM>true</preserveEEPROM>
+    <OverrideVtorValue>exception_table</OverrideVtorValue>
+    <BootSegment>2</BootSegment>
+    <eraseonlaunchrule>0</eraseonlaunchrule>
+    <AsfFrameworkConfig>
+      <framework-data>
+        <options />
+        <configurations />
+        <files />
+        <documentation help="" />
+        <offline-documentation help="" />
+        <dependencies>
+          <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.34.1" />
+        </dependencies>
+      </framework-data>
+    </AsfFrameworkConfig>
+    <ResetRule>0</ResetRule>
+    <EraseKey />
+    <avrtool />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+    <ToolchainSettings>
+      <AvrGcc>
+        <avrgcc.common.Device>-mmcu=atmega644pa -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa"</avrgcc.common.Device>
+        <avrgcc.common.optimization.RelaxBranches>True</avrgcc.common.optimization.RelaxBranches>
+        <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+        <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+        <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+        <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
+        <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
+        <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+        <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+        <avrgcc.compiler.symbols.DefSymbols>
+          <ListValues>
+            <Value>NDEBUG</Value>
+          </ListValues>
+        </avrgcc.compiler.symbols.DefSymbols>
+        <avrgcc.compiler.directories.IncludePaths>
+          <ListValues>
+            <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value>
+          </ListValues>
+        </avrgcc.compiler.directories.IncludePaths>
+        <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
+        <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+        <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+        <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+        <avrgcc.linker.libraries.Libraries>
+          <ListValues>
+            <Value>libm</Value>
+          </ListValues>
+        </avrgcc.linker.libraries.Libraries>
+        <avrgcc.assembler.general.IncludePaths>
+          <ListValues>
+            <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value>
+          </ListValues>
+        </avrgcc.assembler.general.IncludePaths>
+      </AvrGcc>
+    </ToolchainSettings>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <ToolchainSettings>
+      <AvrGcc>
+  <avrgcc.common.Device>-mmcu=atmega644pa -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\gcc\dev\atmega644pa"</avrgcc.common.Device>
+  <avrgcc.common.optimization.RelaxBranches>True</avrgcc.common.optimization.RelaxBranches>
+  <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+  <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+  <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+  <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
+  <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
+  <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+  <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+  <avrgcc.compiler.symbols.DefSymbols>
+    <ListValues>
+      <Value>DEBUG</Value>
+      <Value>F_CPU=12000000UL</Value>
+    </ListValues>
+  </avrgcc.compiler.symbols.DefSymbols>
+  <avrgcc.compiler.directories.IncludePaths>
+    <ListValues>
+      <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value>
+    </ListValues>
+  </avrgcc.compiler.directories.IncludePaths>
+  <avrgcc.compiler.optimization.level>Optimize more (-O2)</avrgcc.compiler.optimization.level>
+  <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+  <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+  <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
+  <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+  <avrgcc.linker.general.UseVprintfLibrary>True</avrgcc.linker.general.UseVprintfLibrary>
+  <avrgcc.linker.libraries.Libraries>
+    <ListValues>
+      <Value>libm</Value>
+    </ListValues>
+  </avrgcc.linker.libraries.Libraries>
+  <avrgcc.linker.miscellaneous.LinkerFlags>-lprintf_flt</avrgcc.linker.miscellaneous.LinkerFlags>
+  <avrgcc.assembler.general.IncludePaths>
+    <ListValues>
+      <Value>%24(PackRepoDir)\atmel\ATmega_DFP\1.2.209\include</Value>
+    </ListValues>
+  </avrgcc.assembler.general.IncludePaths>
+  <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
+</AvrGcc>
+    </ToolchainSettings>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="fifo.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="heater3.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="heater3.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="lcd-twi.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="lcd-twi.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="potentiometers.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="potentiometers.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="saveload.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="saveload.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="tools.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="tools.h">
+      <SubType>compile</SubType>
+    </Compile>
+  </ItemGroup>
+  <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
+</Project>

+ 159 - 0
heater3/heater3.h

@@ -0,0 +1,159 @@
+/*
+ * heater3.h
+ *
+ * Created: 25.06.2019 12:29:07
+ *  Author: naa
+ */ 
+
+#ifndef HEATER3_H_
+#define HEATER3_H_
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+
+#define TX_LENGTH	16
+#define TWI_FREQ	500000
+
+#define BAUD_RATE	38400
+#define U2X0_SET		1
+
+#define ADC_MEAS1	0
+#define ADC_MEAS2	1
+#define ADC_CUR1	2
+#define ADC_CUR2	3
+
+#define LEDPORT		PORTC
+#define LED1		PORTC2
+#define LED2		PORTC3
+
+#define GATEPORT	PORTC
+#define GATE1		PORTC6
+#define GATE2		PORTC7
+
+#define V12POWER	PORTC4
+
+#define OCP1		PORTD2
+#define OCP2		PORTD3
+
+#define BTNPIN		PIND
+#define BTN1		PORTD4
+#define BTN2		PORTD5
+#define BTN3		PORTD6
+#define BTN4		PORTD7
+
+#define CH0			0
+#define CH1			1
+
+#define MAXADDR		0x06
+
+#define START_BYTE	0x55
+
+#define CURR_MAX	2500
+
+#define DISP_OFF	0
+#define DISP_MAIN	1
+#define DISP_DBG	2
+#define DISP_VER	3
+
+typedef union {
+	uint8_t		byte[4];
+	uint16_t	word[2];
+	uint32_t	dword;
+} btw32_t;
+
+typedef union {
+	uint8_t		byte[2];
+	uint16_t	word;
+} btw16_t;
+
+typedef enum { CIRC_OPEN, CIRC_SHORT, CIRC_MOSFET, CIRC_RES_DIODE, CIRC_RES, CIRC_DIODE } circ_t;
+
+typedef struct  {
+	uint8_t	channel	: 1;
+	uint8_t	onoff	: 1;
+	uint8_t heating	: 1;
+	uint8_t	ocp		: 1;
+	uint8_t calib	: 2;
+	circ_t	circuit	: 3;
+	uint8_t couple	: 3;
+} status_str;
+
+typedef struct {
+	volatile status_str		status;
+	uint8_t			preset;
+	int8_t			tintr;
+	int16_t			tcouple;
+	int16_t			tmeas;
+	uint16_t		tmeas_raw;
+	uint16_t		tset;
+	uint16_t		tset_raw;
+	uint16_t		current;
+	uint8_t			gain;
+	uint8_t			shift;
+	uint8_t			drive;
+} heater_str;
+
+typedef enum { CMD_RESET, CMD_REQ, CMD_CHONOFF, CMD_SETTEMP, CMD_SETRANGE, CMD_SETVDRIVE, CMD_SWPRESET, CMD_LOADDATA, CMD_HEATING, CMD_CALIBRATION  } cmd_t;
+typedef	enum { REQ_RST, REQ_ACK, REQ_NACK, REQ_MAINDATA, REQ_DEBUGDATA, REQ_PRESETTABLE, REQ_PRESETDATA } txreq_t;
+
+typedef enum { CAL_OFF, CAL_AUTO, CAL_MANUAL } cal_t;
+
+typedef struct {
+	char			start;
+	uint8_t			len;
+	cmd_t			command;
+	uint8_t			data[160];
+	uint8_t			checksum;
+} comdata_str;
+
+typedef struct {
+	uint8_t			set;
+	uint8_t			blink_cnt;
+	uint8_t			pressed;
+} menu_str;
+
+typedef struct {
+	uint16_t temp;
+	uint16_t adcdata;
+} record_str;
+
+typedef struct {
+	uint8_t		number;
+	char		header[12];
+	uint8_t		gain;
+	uint8_t		shift;
+	uint8_t		drive;
+	record_str	curve[16];
+} preset_str;
+
+typedef struct {
+	uint16_t		oc			: 1;
+	uint16_t		scg			: 1;
+	uint16_t		scv			: 1;
+	uint16_t					: 1;
+	uint16_t		intt_frac	: 4;
+	uint16_t		intt_int	: 8;
+	uint16_t		fault		: 1;
+	uint16_t					: 1;
+	uint16_t		tct_frac	: 2;
+	uint16_t		tct_int		: 12;
+} max31855_t;
+
+typedef struct {
+	uint8_t pressed		: 1;
+	uint8_t released	: 1;
+	uint8_t holded		: 1;
+	uint8_t holdcnt		: 5;
+	uint8_t code		: 4;
+	uint8_t prev_code	: 4;
+} btn_t;
+
+int lcd_putchar(char c, FILE *stream);
+int uart_putchar(char c, FILE *stream);
+void ProcessCommand();
+
+#endif /* HEATER3_H_ */

+ 120 - 0
heater3/heater3_6_2.cproj

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectVersion>6.2</ProjectVersion>
+    <ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
+    <ProjectGuid>{8fbe0ce3-496b-42e0-bc4d-a4e4fc952454}</ProjectGuid>
+    <avrdevice>ATmega644PA</avrdevice>
+    <avrdeviceseries>none</avrdeviceseries>
+    <OutputType>Executable</OutputType>
+    <Language>C</Language>
+    <OutputFileName>$(MSBuildProjectName)</OutputFileName>
+    <OutputFileExtension>.elf</OutputFileExtension>
+    <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
+    <AssemblyName>heater3</AssemblyName>
+    <Name>heater3</Name>
+    <RootNamespace>heater3</RootNamespace>
+    <ToolchainFlavour>Native</ToolchainFlavour>
+    <KeepTimersRunning>true</KeepTimersRunning>
+    <OverrideVtor>false</OverrideVtor>
+    <CacheFlash>true</CacheFlash>
+    <ProgFlashFromRam>true</ProgFlashFromRam>
+    <RamSnippetAddress />
+    <UncachedRange />
+    <preserveEEPROM>true</preserveEEPROM>
+    <OverrideVtorValue />
+    <BootSegment>2</BootSegment>
+    <eraseonlaunchrule>1</eraseonlaunchrule>
+    <AsfFrameworkConfig>
+      <framework-data xmlns="">
+        <options />
+        <configurations />
+        <files />
+        <documentation help="" />
+        <offline-documentation help="" />
+        <dependencies>
+          <content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.21.0" />
+        </dependencies>
+      </framework-data>
+    </AsfFrameworkConfig>
+    <avrtool />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+    <ToolchainSettings>
+      <AvrGcc>
+        <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+        <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+        <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+        <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
+        <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
+        <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+        <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+        <avrgcc.compiler.symbols.DefSymbols>
+          <ListValues>
+            <Value>NDEBUG</Value>
+          </ListValues>
+        </avrgcc.compiler.symbols.DefSymbols>
+        <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
+        <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+        <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+        <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+        <avrgcc.linker.libraries.Libraries>
+          <ListValues>
+            <Value>libm</Value>
+          </ListValues>
+        </avrgcc.linker.libraries.Libraries>
+      </AvrGcc>
+    </ToolchainSettings>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <ToolchainSettings>
+      <AvrGcc>
+  <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+  <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+  <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+  <avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
+  <avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
+  <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+  <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+  <avrgcc.compiler.symbols.DefSymbols>
+    <ListValues>
+      <Value>DEBUG</Value>
+      <Value>F_CPU=12000000UL</Value>
+    </ListValues>
+  </avrgcc.compiler.symbols.DefSymbols>
+  <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
+  <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+  <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+  <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
+  <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+  <avrgcc.linker.general.UseVprintfLibrary>True</avrgcc.linker.general.UseVprintfLibrary>
+  <avrgcc.linker.libraries.Libraries>
+    <ListValues>
+      <Value>libm</Value>
+      <Value>printf_flt</Value>
+    </ListValues>
+  </avrgcc.linker.libraries.Libraries>
+  <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
+</AvrGcc>
+    </ToolchainSettings>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Include="fifo.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="heater3.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="heater3.h">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="lcd-twi.c">
+      <SubType>compile</SubType>
+    </Compile>
+    <Compile Include="lcd-twi.h">
+      <SubType>compile</SubType>
+    </Compile>
+  </ItemGroup>
+  <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
+</Project>

+ 94 - 0
heater3/lcd-twi.c

@@ -0,0 +1,94 @@
+#include "lcd-twi.h"
+
+const char symbols[8][8] = {{ 0x00, 0x0E, 0x1F, 0x1F, 0x1F, 0x0E, 0x00, 0x00 },	/* 0 Circle */
+							{ 0x08,	0x14, 0x08,	0x00, 0x00, 0x00, 0x00, 0x00 },	/* 1 DEGREE */
+							{ 0x00, 0x04, 0x0A, 0x11, 0x11, 0x11, 0x11, 0x11 },	/* 2 THERMOCOUPLE */
+							{ 0x04, 0x04, 0x1F, 0x04, 0x0A, 0x11, 0x1F, 0x04 },	/* 3 DIODE */
+							{ 0x04, 0x0E, 0x0A, 0x0A, 0x0A, 0x0A, 0x0E, 0x04 },	/* 4 RESISTOR */
+							{ 0x03, 0x0A, 0x08, 0x0B, 0x0A, 0x08, 0x1B, 0x02 }, /* 5 MOSFET */
+							{ 0x08, 0x08, 0x04, 0x02, 0x01, 0x08, 0x08, 0x08 }, /* 6 OPEN */
+							{ 0x08, 0x08, 0x04, 0x04, 0x02, 0x0F, 0x0A, 0x08 }};/* 7 SHORT */
+	
+void I2C_SendByte(uint8_t byte)
+{	
+	cli();
+	TWCR |= (1 << TWINT) | (1 << TWSTA);
+	while(!(TWCR & (1 << TWINT)));
+	TWDR = LCDI2CADDR;
+	TWCR &= ~(1 << TWSTA);
+	TWCR |= (1 << TWINT);
+	while(!(TWCR & (1 << TWINT)));
+	TWDR = byte;
+	TWCR |= (1 << TWINT);
+	while(!(TWCR & (1 << TWINT)));
+	TWCR |= (1 << TWINT) | (1 << TWSTO);
+	sei();
+}
+
+void LCD_SendData(uint8_t data)
+{
+	I2C_SendByte((data & 0xF0) | LCD_RS | LCD_E);
+	I2C_SendByte((data & 0xF0) | LCD_RS);
+	I2C_SendByte((data << 4) | LCD_RS | LCD_E);
+	I2C_SendByte((data << 4) | LCD_RS);
+	_delay_us(4);
+}
+
+void LCD_SendCmd(uint8_t cmd)
+{
+	I2C_SendByte(((cmd & 0xF0) & ~LCD_RS) | LCD_E);
+	I2C_SendByte((cmd & 0xF0) & ~LCD_RS);
+	I2C_SendByte(((cmd << 4) & ~LCD_RS) | LCD_E);
+	I2C_SendByte((cmd << 4) & ~LCD_RS);
+
+	if(cmd == LCD_CLR)
+	{
+		_delay_ms(6);
+	}
+	else
+	{
+		_delay_us(10);
+	}
+}
+
+void LCD_SetPos(uint8_t x, uint8_t y)
+{
+	y = ((y & 0x01) * 0x40);
+	x &= 0x0F;
+	LCD_SendCmd(LCD_DDRAM | (x + y));
+}
+
+void LoadSymbols()
+{
+	for(uint8_t i = 0; i < 8; i++)
+	{
+		LCD_SendCmd(LCD_CGRAM | (0x08 * i));
+		for(uint8_t j = 0; j < 8; j++)
+		{
+			LCD_SendData(symbols[i][j]);
+		}
+	}
+}
+
+void LCD_Init(void)
+{
+	I2C_SendByte(0x00);
+
+	_delay_ms(50);
+
+	for(uint8_t i = 0; i < 5; i++)
+	{
+		I2C_SendByte(0x00 | LCD_E);
+		I2C_SendByte(0x00 & ~LCD_E);
+	}
+	_delay_us(50);
+	
+	I2C_SendByte(LCD_WIDTH | LCD_E);
+	I2C_SendByte(LCD_WIDTH & ~LCD_E);
+	LCD_SendCmd(LCD_WIDTH | LCD_WIDTH_N | LCD_WIDTH_FT1);
+	LCD_SendCmd(LCD_ONOFF);
+	LCD_SendCmd(LCD_CLR);
+	LCD_SendCmd(LCD_DIR | LCD_DIR_ID);
+	LCD_SendCmd(LCD_ONOFF | LCD_ONOFF_D);
+	LoadSymbols();
+}

+ 57 - 0
heater3/lcd-twi.h

@@ -0,0 +1,57 @@
+#ifndef _LCD_TWI_H_
+#define _LCD_TWI_H_
+
+#ifndef F_CPU
+	#error "F_CPU not defined!"
+#endif
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+
+#define LCD_RS			0x01
+#define LCD_RW			0x02
+#define LCD_E			0x04
+#define LCD_LED			0x08
+
+#define LCD_CLR			(1 << 0x00)
+#define	LCD_RET			(1 << 0x01)
+#define LCD_DIR			(1 << 0x02)
+	#define LCD_DIR_S		(1 << 0x00)
+	#define LCD_DIR_ID		(1 << 0x01)
+
+#define LCD_ONOFF		(1 << 0x03)
+	#define LCD_ONOFF_B		(1 << 0x00)
+	#define LCD_ONOFF_C		(1 << 0x01)
+	#define LCD_ONOFF_D		(1 << 0x02)
+
+#define LCD_SHIFT		(1 << 0x04)
+	#define LCD_SHIFT_RL	(1 << 0x02)
+	#define LCD_SHIFT_SC	(1 << 0x03)
+	
+#define LCD_MODEPWR		((1 << 0x04) | (3 << 0x00))
+	#define LCD_MODEPWR_PWR	(1 << 0x02)
+	#define LCD_MODEPWR_GC	(1 << 0x03)
+
+
+#define LCD_WIDTH		(1 << 0x05)
+	#define LCD_WIDTH_FT0	(1 << 0x00)
+	#define LCD_WIDTH_FT1	(1 << 0x01)
+	#define LCD_WIDTH_F		(1 << 0x02)
+	#define LCD_WIDTH_N		(1 << 0x03)
+	#define LCD_WIDTH_DL	(1 << 0x04)
+
+#define LCD_CGRAM		(1 << 0x06)
+#define LCD_DDRAM		(1 << 0x07)
+
+#define LCDI2CADDR		0x4E
+
+enum { SYM_NULL, SYM_DEGREE, SYM_TCOUPLE, SYM_DIODE, SYM_RES, SYM_MOSFET, SYM_OPEN, SYM_SHORT };
+
+void I2C_SendByte(uint8_t);
+void LCD_SendData(uint8_t);
+void LCD_SendCmd(uint8_t);
+void LCD_SetPos(uint8_t, uint8_t);
+void LCD_Init(void);
+void LoadSymbol(void);
+#endif

+ 92 - 0
heater3/potentiometers.c

@@ -0,0 +1,92 @@
+/*
+ * potentiometers.c
+ *
+ * Created: 04.07.2019 19:29:15
+ *  Author: Radioman
+ */ 
+#include "heater3.h"
+#include "potentiometers.h"
+
+extern heater_str	heater[2];
+extern opamp_str	opamp[2];
+
+void POT_SendData(uint8_t data, potnum_t potnum)
+{
+	PORTB = (PORTB & 0xF8) | (potnum & 0x07);
+	PORTB &= ~(1 << SS_BIT);
+	SPDR = 0x11;
+	while(!(SPSR & (1 <<SPIF)));
+	SPDR = data;
+	while(!(SPSR & (1 <<SPIF)));
+	PORTB |= (1 << SS_BIT);
+}
+
+uint8_t SetOpampGain(uint8_t ch, float gain)
+{
+	uint8_t potval;
+	ch = ((ch & 0x01) * 2) + 1;
+	potval = (uint8_t)((8.448 * gain) - 8.9088);
+	POT_SendData(potval, ch);
+	//return (((float)potval + 8.9088) / 8.448);
+	return potval;
+}
+
+uint8_t SetOpampShift(uint8_t ch, float shift)
+{
+	uint8_t potval;
+	ch = (ch & 0x01) * 2;
+	potval = (uint8_t)((shift * 255.0) / 2.037);
+	POT_SendData(potval, ch);
+	//return (((float)potval * 2.037) / 255.0);
+	return potval;
+}
+
+uint8_t SetDriveVoltage(uint8_t ch, float voltage)
+{
+	uint8_t potval;
+	ch = POT_DRIVE1 + (ch & 0x01);
+	potval = (uint8_t)(voltage * 25.76);
+	POT_SendData(potval, ch);
+	//return ((float)potval / 25.76);
+	return potval;
+}
+
+void SetInputRange(uint8_t ch, float vlow, float vhigh)
+{
+	heater[ch].gain = SetOpampGain(ch, (3.3 / (vhigh - vlow)));
+	heater[ch].shift = SetOpampShift(ch, (0.758 * vlow));
+	opamp[ch].gain = (((float)heater[ch].gain + 8.9088) / 8.448);
+	opamp[ch].shift = (((float)heater[ch].shift * 2.037) / 255.0);
+}
+
+void SetGainData(uint8_t ch, uint8_t data)
+{
+	POT_SendData(data, ((ch & 0x01) * 2) + 1);
+	heater[ch].gain = data;
+	opamp[ch].gain = (((float)data + 8.9088) / 8.448);
+}
+
+void SetShiftData(uint8_t ch, uint8_t data)
+{
+	POT_SendData(data, (ch & 0x01) * 2);
+	heater[ch].shift = data;
+	opamp[ch].shift = (((float)data * 2.037) / 255.0);
+}
+
+void SetDriveData(uint8_t ch, uint8_t data)
+{
+	heater[ch].drive = data;
+	opamp[ch].drive = ((float)data / 25.76);
+}
+
+void SwitchDrive(uint8_t ch, uint8_t onoff)
+{
+	uint8_t potnum = POT_DRIVE1 + (ch & 0x01);
+	POT_SendData(heater[ch].drive * (onoff & 0x01), potnum);
+}
+
+void RestoreGainShift(uint8_t ch)
+{
+	POT_SendData(heater[ch].gain, ((ch & 0x01) * 2) + 1);
+	POT_SendData(heater[ch].shift, (ch & 0x01) * 2);
+}

+ 34 - 0
heater3/potentiometers.h

@@ -0,0 +1,34 @@
+/*
+ * potentiometers.h
+ *
+ * Created: 04.07.2019 19:30:37
+ *  Author: Radioman
+ */ 
+
+#ifndef POTENTIOMETERS_H_
+#define POTENTIOMETERS_H_
+
+#define ON	1
+#define OFF	0
+
+typedef enum { POT_SHIFT1, POT_GAIN1, POT_SHIFT2, POT_GAIN2, POT_DRIVE1, POT_DRIVE2 } potnum_t;
+
+typedef struct {
+	uint8_t ch;
+	float gain;
+	float shift;
+	float drive;
+} opamp_str;
+
+void POT_SendData(uint8_t data, potnum_t potnum);
+uint8_t SetOpampGain(uint8_t ch, float gain);
+uint8_t SetOpampShift(uint8_t ch, float shift);
+uint8_t SetDriveVoltage(uint8_t ch, float voltage);
+void SetInputRange(uint8_t ch, float vlow, float vhigh);
+void SetGainData(uint8_t ch, uint8_t data);
+void SetShiftData(uint8_t ch, uint8_t data);
+void SetDriveData(uint8_t ch, uint8_t data);
+void SwitchDrive(uint8_t ch, uint8_t onoff);
+void RestoreGainShift(uint8_t ch);
+
+#endif /* POTENTIOMETERS_H_ */

+ 100 - 0
heater3/saveload.c

@@ -0,0 +1,100 @@
+#include "heater3.h"
+#include "saveload.h"
+#include "potentiometers.h"
+#include "lcd-twi.h"
+
+extern heater_str	heater[2];
+extern opamp_str	opamp[2];
+extern preset_str	preset[2];
+
+void LoadPrefs()
+{
+	for(uint8_t addr = 0; addr < 4; addr++)
+	{
+		EEAR = addr;
+		EECR |= (1 << EERE);
+		switch(addr)
+		{
+			case 0:
+				heater[CH0].preset = EEDR;
+				break;
+			case 1:
+				heater[CH1].preset = EEDR;
+				break;
+			case 2:
+				heater[CH0].tset = EEDR;
+				break;
+			case 3:
+				heater[CH1].tset = EEDR;
+				break;
+		}
+	}
+}
+
+void SavePrefs()
+{
+	cli();
+	for(uint8_t addr = 0; addr < 4; addr++)
+	{
+		EEAR = addr;
+		switch(addr)
+		{
+			case 0:
+				EEDR = heater[CH0].preset;
+				break;
+			case 1:
+				EEDR = heater[CH1].preset;
+				break;
+			case 2:
+				EEDR = heater[CH0].tset;
+				break;
+			case 3:
+				EEDR = heater[CH1].tset;
+				break;
+		}
+
+		EECR |= (1 << EEMPE);
+		EECR |= (1 << EEPE);
+		while(EECR & (1 << EEPE));
+	}
+	sei();
+}
+
+void LoadPreset(uint8_t ch)
+{
+	uint8_t offset;
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+	{
+		EEAR = 0x30 + (heater[ch].preset * sizeof(preset_str)) + offset;
+		EECR |= (1 << EERE);
+		((uint8_t*)&preset[ch])[offset] = EEDR;
+	}
+	
+	SetGainData(ch, preset[ch].gain);
+	SetShiftData(ch, preset[ch].shift);
+	SetDriveData(ch, preset[ch].drive);
+	SwitchDrive(ch, OFF);
+}
+
+void SavePreset(uint8_t ch)
+{
+	uint8_t offset;
+	static FILE lcd_stdout = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
+	
+	cli();
+	LCD_SendCmd(LCD_CLR);
+	LCD_SetPos(0, 0);
+	fprintf(&lcd_stdout, "ÑÎÕÐÀÍÅÍÈÅ...");
+	LCD_SetPos(0, 1);
+	for(offset = 0; offset < sizeof(preset_str); offset++)
+	{
+		EEAR = 0x30 + (preset[ch].number * sizeof(preset_str)) + offset;
+		EEDR = ((uint8_t*)&preset[ch])[offset];
+		EECR |= (1 << EEMPE);
+		EECR |= (1 << EEPE);
+		while(EECR & (1 << EEPE));
+		if((offset + 1) % 5 == 0)
+			LCD_SendData(0xFF);
+	}
+	sei();
+}

+ 9 - 0
heater3/saveload.h

@@ -0,0 +1,9 @@
+#ifndef SAVELOAD_H_
+#define SAVELOAD_H_
+
+void LoadPrefs();
+void SavePrefs();
+void LoadPreset(uint8_t ch);
+void SavePreset(uint8_t ch);
+
+#endif /* SAVELOAD_H_ */

+ 29 - 0
heater3/tools.c

@@ -0,0 +1,29 @@
+/*
+ * tools.c
+ *
+ * Created: 20.08.2019 9:58:08
+ *  Author: Radioman
+ */ 
+
+#include "tools.h"
+
+void UInt8ToFloat(uint8_t *int_part, uint8_t *frac_part, float *result)
+{
+	*result = (float)(*int_part) + (float)(*frac_part) / 100.0;
+}
+
+void FloatToUInt8(float *input, uint8_t *int_out, uint8_t *frac_out)
+{
+	*int_out = (uint8_t)(*input);
+	*frac_out = (uint8_t)((*input - ((uint8_t)(*input))) * 100);
+}
+/*
+void arrncpy(void *dest, void *source, uint16_t n)
+{
+	uint16_t i;
+	for(i = 0; i < n; i++)
+	{
+		((uint8_t*)dest)[i] = ((uint8_t*)source)[i];
+	}
+}
+*/

+ 20 - 0
heater3/tools.h

@@ -0,0 +1,20 @@
+/*
+ * tools.h
+ *
+ * Created: 20.08.2019 9:59:00
+ *  Author: Radioman
+ */ 
+
+#ifndef TOOLS_H_
+#define TOOLS_H_
+
+#include <stdint.h>
+
+void UInt8ToFloat(uint8_t *int_part, uint8_t *frac_part, float *result);
+void FloatToUInt8(float *input, uint8_t *int_out, uint8_t *frac_out);
+//void arrncpy(void *dest, void *source, uint16_t n);
+
+inline double Approx(double x1, double x2, double y1, double y2, double x)
+{ return(y1 + ((y2 - y1) * (x - x1) / (x2 - x1))); }
+
+#endif /* TOOLS_H_ */

+ 20 - 0
heater3_6_2.atsln

@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Atmel Studio Solution File, Format Version 11.00
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "heater3", "heater3\heater3_6_2.cproj", "{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|AVR = Debug|AVR
+		Release|AVR = Release|AVR
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Debug|AVR.ActiveCfg = Debug|AVR
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Debug|AVR.Build.0 = Debug|AVR
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Release|AVR.ActiveCfg = Release|AVR
+		{8FBE0CE3-496B-42E0-BC4D-A4E4FC952454}.Release|AVR.Build.0 = Release|AVR
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

BIN
heater3_6_2.atsuo


+ 58 - 0
protocol.txt

@@ -0,0 +1,58 @@
+
+
+============== От мк к компьютеру ==============
+Стартовый байт				8 бит
+
+Зарезервировано				5 бит
+Номер канала				1 бит
+Канал X вкл/выкл			1 бит
+Защита по току канала X сработала/нет	1 бит
+
+Номер калибровочного пресета канала X	8 бит
+
+Температура термопары			16 бит
+Температура в корпусе устройства	16 бит
+Текущая температура канала X		16 бит
+Текущая температура канала X	   RAW 	16 бит
+Установленная температура канала X	16 бит
+Установленная температура канала X RAW	16 бит
+Ток через транзистор канала X		16 бит
+Напряжение на завторе канала Х		16 бит
+
+Контрольная сумма			8 бит
+
+Итого:					20 байт
+
+<start> <status> <preset> <tt> <tc> <tcr> <ts> <tsr> <curr> <reserved> <checksum>
+
+
+============== От компьютера к мк ============
+Стартовый байт				8 бит
+
+Длина данных				8 бит
+
+Номер канала				1 бит
+
+Команда					7 бит
+
+Данные					LEN бит
+
+Контрольная сумма			8 бит
+
+
+=============== Вид банка пресета =============
+Заголовок
+Данные потенциометров
+Таблица кривой
+
+#IRFP350	Header	13 байт
+120		Gain	1 байт
+50		Shift	1 байт
+100		Drive	1 байт
+0x0000		Temp0	2 байта
+0x01F0		Data0	2 байта
+...
+0x96		Temp15	2 байта
+0x0010		Data15	2 байта
+
+Итого: 80 байт