diff --git a/09-PlaySound/Makefile b/09-PlaySound/Makefile
new file mode 100644
index 0000000..58cedf1
--- /dev/null
+++ b/09-PlaySound/Makefile
@@ -0,0 +1,223 @@
+PROJECT = PlaySound
+PRJ_C_SRC = main.c \
+ sound.c \
+ serial_output.c \
+ ../ChibiOS/os/various/chprintf.c
+
+##############################################################################
+# Build global options
+# NOTE: Can be overridden externally.
+#
+
+# Compiler options here.
+ifeq ($(USE_OPT),)
+ USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
+endif
+
+# C specific options here (added to USE_OPT).
+ifeq ($(USE_COPT),)
+ USE_COPT =
+endif
+
+# C++ specific options here (added to USE_OPT).
+ifeq ($(USE_CPPOPT),)
+ USE_CPPOPT = -fno-rtti
+endif
+
+# Enable this if you want the linker to remove unused code and data
+ifeq ($(USE_LINK_GC),)
+ USE_LINK_GC = yes
+endif
+
+# If enabled, this option allows to compile the application in THUMB mode.
+ifeq ($(USE_THUMB),)
+ USE_THUMB = yes
+endif
+
+# Enable this if you want to see the full log while compiling.
+ifeq ($(USE_VERBOSE_COMPILE),)
+ USE_VERBOSE_COMPILE = no
+endif
+
+#
+# Build global options
+##############################################################################
+
+##############################################################################
+# Architecture or project specific options
+#
+
+# Enables the use of FPU on Cortex-M4.
+# Enable this if you really want to use the STM FWLib.
+ifeq ($(USE_FPU),)
+ USE_FPU = no
+endif
+
+# Enable this if you really want to use the STM FWLib.
+ifeq ($(USE_FWLIB),)
+ USE_FWLIB = no
+endif
+
+#
+# Architecture or project specific options
+##############################################################################
+
+##############################################################################
+# Project, sources and paths
+#
+
+# Imported source files and paths
+CHIBIOS = ../ChibiOS
+include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk
+include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk
+include $(CHIBIOS)/os/hal/hal.mk
+include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk
+include $(CHIBIOS)/os/kernel/kernel.mk
+
+# Define linker script file here
+LDSCRIPT= $(PORTLD)/STM32F407xG.ld
+#LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld
+
+# C sources that can be compiled in ARM or THUMB mode depending on the global
+# setting.
+CSRC = $(PORTSRC) \
+ $(KERNSRC) \
+ $(HALSRC) \
+ $(PLATFORMSRC) \
+ $(BOARDSRC) \
+ $(PRJ_C_SRC)
+
+# C++ sources that can be compiled in ARM or THUMB mode depending on the global
+# setting.
+CPPSRC =
+
+# C sources to be compiled in ARM mode regardless of the global setting.
+# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
+# option that results in lower performance and larger code size.
+ACSRC =
+
+# C++ sources to be compiled in ARM mode regardless of the global setting.
+# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
+# option that results in lower performance and larger code size.
+ACPPSRC =
+
+# C sources to be compiled in THUMB mode regardless of the global setting.
+# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
+# option that results in lower performance and larger code size.
+TCSRC =
+
+# C sources to be compiled in THUMB mode regardless of the global setting.
+# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
+# option that results in lower performance and larger code size.
+TCPPSRC =
+
+# List ASM source files here
+ASMSRC = $(PORTASM)
+
+INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
+ $(HALINC) $(PLATFORMINC) $(BOARDINC) \
+ $(CHIBIOS)/os/various/devices_lib/accel \
+ $(CHIBIOS)/os/various
+
+#
+# Project, sources and paths
+##############################################################################
+
+##############################################################################
+# Compiler settings
+#
+
+MCU = cortex-m4
+
+#TRGT = arm-elf-
+TRGT = arm-none-eabi-
+CC = $(TRGT)gcc
+CPPC = $(TRGT)g++
+# Enable loading with g++ only if you need C++ runtime support.
+# NOTE: You can use C++ even without C++ support if you are careful. C++
+# runtime support makes code size explode.
+LD = $(TRGT)gcc
+#LD = $(TRGT)g++
+CP = $(TRGT)objcopy
+AS = $(TRGT)gcc -x assembler-with-cpp
+OD = $(TRGT)objdump
+HEX = $(CP) -O ihex
+BIN = $(CP) -O binary
+
+# ARM-specific options here
+AOPT =
+
+# THUMB-specific options here
+TOPT = -mthumb -DTHUMB
+
+# Define C warning options here
+CWARN = -Wall -Wextra -Wstrict-prototypes
+
+# Define C++ warning options here
+CPPWARN = -Wall -Wextra
+
+#
+# Compiler settings
+##############################################################################
+
+##############################################################################
+# Start of default section
+#
+
+# List all default C defines here, like -D_DEBUG=1
+DDEFS =
+
+# List all default ASM defines here, like -D_DEBUG=1
+DADEFS =
+
+# List all default directories to look for include files here
+DINCDIR =
+
+# List the default directory to look for the libraries here
+DLIBDIR =
+
+# List all default libraries here
+DLIBS =
+
+#
+# End of default section
+##############################################################################
+
+##############################################################################
+# Start of user section
+#
+
+# List all user C define here, like -D_DEBUG=1
+UDEFS =
+
+# Define ASM defines here
+UADEFS =
+
+# List all user directories here
+UINCDIR =
+
+# List the user directory to look for the libraries here
+ULIBDIR =
+
+# List all user libraries here
+ULIBS =
+
+#
+# End of user defines
+##############################################################################
+
+ifeq ($(USE_FPU),yes)
+ USE_OPT += -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -fsingle-precision-constant
+ DDEFS += -DCORTEX_USE_FPU=TRUE
+else
+ DDEFS += -DCORTEX_USE_FPU=FALSE
+endif
+
+ifeq ($(USE_FWLIB),yes)
+ include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
+ CSRC += $(STM32SRC)
+ INCDIR += $(STM32INC)
+ USE_OPT += -DUSE_STDPERIPH_DRIVER
+endif
+
+include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
diff --git a/09-PlaySound/chconf.h b/09-PlaySound/chconf.h
new file mode 100644
index 0000000..0c2fc8c
--- /dev/null
+++ b/09-PlaySound/chconf.h
@@ -0,0 +1,535 @@
+/*
+ ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
+ 2011,2012 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef _CHCONF_H_
+#define _CHCONF_H_
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
+#define CH_FREQUENCY 1000
+#endif
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ *
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ */
+#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
+#define CH_TIME_QUANTUM 20
+#endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_USE_MEMCORE.
+ */
+#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
+#define CH_MEMCORE_SIZE 0
+#endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread automatically. The application has
+ * then the responsibility to do one of the following:
+ * - Spawn a custom idle thread at priority @p IDLEPRIO.
+ * - Change the main() thread priority to @p IDLEPRIO then enter
+ * an endless loop. In this scenario the @p main() thread acts as
+ * the idle thread.
+ * .
+ * @note Unless an idle thread is spawned the @p main() thread must not
+ * enter a sleep state.
+ */
+#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
+#define CH_NO_IDLE_THREAD FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
+#define CH_OPTIMIZE_SPEED TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
+#define CH_USE_REGISTRY TRUE
+#endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
+#define CH_USE_WAITEXIT TRUE
+#endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
+#define CH_USE_SEMAPHORES TRUE
+#endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special requirements.
+ * @note Requires @p CH_USE_SEMAPHORES.
+ */
+#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
+#define CH_USE_SEMAPHORES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Atomic semaphore API.
+ * @details If enabled then the semaphores the @p chSemSignalWait() API
+ * is included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_SEMAPHORES.
+ */
+#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
+#define CH_USE_SEMSW TRUE
+#endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
+#define CH_USE_MUTEXES TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MUTEXES.
+ */
+#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
+#define CH_USE_CONDVARS TRUE
+#endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_CONDVARS.
+ */
+#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
+#define CH_USE_CONDVARS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
+#define CH_USE_EVENTS TRUE
+#endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_EVENTS.
+ */
+#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
+#define CH_USE_EVENTS_TIMEOUT TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
+#define CH_USE_MESSAGES TRUE
+#endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special requirements.
+ * @note Requires @p CH_USE_MESSAGES.
+ */
+#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
+#define CH_USE_MESSAGES_PRIORITY FALSE
+#endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_SEMAPHORES.
+ */
+#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
+#define CH_USE_MAILBOXES TRUE
+#endif
+
+/**
+ * @brief I/O Queues APIs.
+ * @details If enabled then the I/O queues APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
+#define CH_USE_QUEUES TRUE
+#endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
+#define CH_USE_MEMCORE TRUE
+#endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
+ * @p CH_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
+#define CH_USE_HEAP TRUE
+#endif
+
+/**
+ * @brief C-runtime allocator.
+ * @details If enabled the the heap allocator APIs just wrap the C-runtime
+ * @p malloc() and @p free() functions.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_USE_HEAP.
+ * @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the
+ * appropriate documentation.
+ */
+#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
+#define CH_USE_MALLOC_HEAP FALSE
+#endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
+#define CH_USE_MEMPOOLS TRUE
+#endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_USE_WAITEXIT.
+ * @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
+ */
+#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
+#define CH_USE_DYNAMIC TRUE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
+#define CH_DBG_ENABLE_CHECKS FALSE
+#endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
+#define CH_DBG_ENABLE_ASSERTS FALSE
+#endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the context switch circular trace buffer is
+ * activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
+#define CH_DBG_ENABLE_TRACE FALSE
+#endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+#endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
+#define CH_DBG_FILL_THREADS FALSE
+#endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p Thread structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p TRUE.
+ * @note This debug option is defaulted to TRUE because it is required by
+ * some test cases into the test suite.
+ */
+#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
+#define CH_DBG_THREADS_PROFILING FALSE
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p Thread structure.
+ */
+#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
+#define THREAD_EXT_FIELDS \
+ /* Add threads custom fields here.*/
+#endif
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
+#define THREAD_EXT_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+#endif
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ *
+ * @note It is inserted into lock zone.
+ * @note It is also invoked when the threads simply return in order to
+ * terminate.
+ */
+#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
+#define THREAD_EXT_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+#endif
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
+#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* System halt code here.*/ \
+}
+#endif
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
+#define IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+#endif
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
+#define SYSTEM_TICK_EVENT_HOOK() { \
+ /* System tick event code here.*/ \
+}
+#endif
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
+#define SYSTEM_HALT_HOOK() { \
+ /* System halt code here.*/ \
+}
+#endif
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* _CHCONF_H_ */
+
+/** @} */
diff --git a/09-PlaySound/cs43l22_commands.h b/09-PlaySound/cs43l22_commands.h
new file mode 100644
index 0000000..fd7c964
--- /dev/null
+++ b/09-PlaySound/cs43l22_commands.h
@@ -0,0 +1,490 @@
+#ifndef __H_CS43L22
+#define __H_CS43L22
+
+/* Chip I.D. and revision register */
+#define CS43L22_REG_GET_ID 0x01
+/* Chip I.D. and revision register - Chip identifier */
+#define CS43L22_CHIP_ID_MASK ((uint8_t)0xf8)
+/* Chip I.D. and revision register - CS43L22 identifier */
+#define CS43L22_CHIP_ID ((uint8_t)0xe0)
+/* Chip I.D. and revision register - Revision level - Mask */
+#define CS43L22_CHIP_REV_MASK ((uint8_t)0x07)
+/* Chip I.D. and revision register - Revision level - A1 */
+#define CS43L22_CHIP_REV_A1 ((uint8_t)0x01)
+/* Chip I.D. and revision register - Revision level - B1 */
+#define CS43L22_CHIP_REV_B1 ((uint8_t)0x03)
+/* Chip I.D. and revision register - Revision level - A0 */
+#define CS43L22_CHIP_REV_A0 ((uint8_t)0x00)
+/* Chip I.D. and revision register - Revision level - B0 */
+#define CS43L22_CHIP_REV_B0 ((uint8_t)0x02)
+
+/* Power control 1 */
+#define CS43L22_REG_PWR_CTL1 0x02
+/* Power control 1 - Power up */
+#define CS43L22_PWR1_UP ((uint8_t)0x9e)
+/* Power control 1 - Power down */
+#define CS43L22_PWR1_DOWN ((uint8_t)0x01)
+
+/* Power control 2 */
+#define CS43L22_REG_PWR_CTL2 0x04
+/* Power control 2 - Speaker A - Mask */
+#define CS43L22_PWR2_SPKA_MASK ((uint8_t)0x03)
+/* Power control 2 - Speaker A - Enabled if switch high */
+#define CS43L22_PWR2_SPKA_SWHI ((uint8_t)0x01)
+/* Power control 2 - Speaker A - Disabled */
+#define CS43L22_PWR2_SPKA_OFF ((uint8_t)0x03)
+/* Power control 2 - Speaker A - Enabled if switch low */
+#define CS43L22_PWR2_SPKA_SWLO ((uint8_t)0x00)
+/* Power control 2 - Speaker A - Enabled */
+#define CS43L22_PWR2_SPKA_ON ((uint8_t)0x02)
+/* Power control 2 - Speaker B - Mask */
+#define CS43L22_PWR2_SPKB_MASK ((uint8_t)0x0c)
+/* Power control 2 - Speaker B - Enabled */
+#define CS43L22_PWR2_SPKB_ON ((uint8_t)0x08)
+/* Power control 2 - Speaker B - Enabled if switch high */
+#define CS43L22_PWR2_SPKB_SWHI ((uint8_t)0x04)
+/* Power control 2 - Speaker B - Enabled if switch low */
+#define CS43L22_PWR2_SPKB_SWLO ((uint8_t)0x00)
+/* Power control 2 - Speaker B - Disabled */
+#define CS43L22_PWR2_SPKB_OFF ((uint8_t)0x0c)
+/* Power control 2 - Headphone A - Mask */
+#define CS43L22_PWR2_HDA_MASK ((uint8_t)0x30)
+/* Power control 2 - Headphone A - Enabled */
+#define CS43L22_PWR2_HDA_ON ((uint8_t)0x20)
+/* Power control 2 - Headphone A - Enabled if switch low */
+#define CS43L22_PWR2_HDA_SWLO ((uint8_t)0x00)
+/* Power control 2 - Headphone A - Enabled if switch high */
+#define CS43L22_PWR2_HDA_SWHI ((uint8_t)0x10)
+/* Power control 2 - Headphone A - Disabled */
+#define CS43L22_PWR2_HDA_OFF ((uint8_t)0x30)
+/* Power control 2 - Headphone B - Mask */
+#define CS43L22_PWR2_HDB_MASK ((uint8_t)0xc0)
+/* Power control 2 - Headphone B - Enabled */
+#define CS43L22_PWR2_HDB_ON ((uint8_t)0x80)
+/* Power control 2 - Headphone B - Enabled if switch high */
+#define CS43L22_PWR2_HDB_SWHI ((uint8_t)0x40)
+/* Power control 2 - Headphone B - Enabled if switch low */
+#define CS43L22_PWR2_HDB_SWLO ((uint8_t)0x00)
+/* Power control 2 - Headphone B - Disabled */
+#define CS43L22_PWR2_HDB_OFF ((uint8_t)0xc0)
+
+/* Clocking control */
+#define CS43L22_REG_CLOCK_CTL 0x05
+/* Clocking control - Autodetection - Enabled */
+#define CS43L22_CLK_AUTO_ON ((uint8_t)0x80)
+/* Clocking control - Autodetection - Disabled */
+#define CS43L22_CLK_AUTO_OFF ((uint8_t)0x00)
+/* Clocking control - Speed mode - Mask */
+#define CS43L22_CLK_SPD_MASK ((uint8_t)0x60)
+/* Clocking control - Speed mode - Single speed */
+#define CS43L22_CLK_SPD_SSM ((uint8_t)0x20)
+/* Clocking control - Speed mode - Half speed */
+#define CS43L22_CLK_SPD_HSM ((uint8_t)0x40)
+/* Clocking control - Speed mode - Double speed */
+#define CS43L22_CLK_SPD_DSM ((uint8_t)0x00)
+/* Clocking control - Speed mode - Quarter speed */
+#define CS43L22_CLK_SPD_QSM ((uint8_t)0x60)
+/* Clocking control - 32KHz group - Disabled */
+#define CS43L22_CLK_32K_OFF ((uint8_t)0x00)
+/* Clocking control - 32KHz group - Enabled */
+#define CS43L22_CLK_32K_ON ((uint8_t)0x10)
+/* Clocking control - 27MHz video clock - Enabled */
+#define CS43L22_CLK_VC_ON ((uint8_t)0x08)
+/* Clocking control - 27MHz video clock - Disabled */
+#define CS43L22_CLK_VC_OFF ((uint8_t)0x00)
+/* Clocking control - Internal MCLK/LRCK ratio - Mask */
+#define CS43L22_CLK_MLR_MASK ((uint8_t)0x06)
+/* Clocking control - Internal MCLK/LRCK ratio - 68 */
+#define CS43L22_CLK_MLR_68 ((uint8_t)0x06)
+/* Clocking control - Internal MCLK/LRCK ratio - 66 */
+#define CS43L22_CLK_MLR_66 ((uint8_t)0x04)
+/* Clocking control - Internal MCLK/LRCK ratio - 64 */
+#define CS43L22_CLK_MLR_64 ((uint8_t)0x00)
+/* Clocking control - Internal MCLK/LRCK ratio - 62 */
+#define CS43L22_CLK_MLR_62 ((uint8_t)0x02)
+/* Clocking control - Master clock /= 2 - Enabled */
+#define CS43L22_CLK_MCDIV_ON ((uint8_t)0x01)
+/* Clocking control - Master clock /= 2 - Disabled */
+#define CS43L22_CLK_MCDIV_OFF ((uint8_t)0x00)
+
+/* Interface control 1 */
+#define CS43L22_REG_INT_CTL1 0x06
+/* Interface control 1 - Slave mode */
+#define CS43L22_IC1_SLAVE ((uint8_t)0x00)
+/* Interface control 1 - Master mode */
+#define CS43L22_IC1_MASTER ((uint8_t)0x80)
+/* Interface control 1 - SCLK inverted polarity - Enabled */
+#define CS43L22_IC1_SCPOL_ON ((uint8_t)0x40)
+/* Interface control 1 - SCLK inverted polarity - Disabled */
+#define CS43L22_IC1_SCPOL_OFF ((uint8_t)0x00)
+/* Interface control 1 - DSP - Disabled */
+#define CS43L22_IC1_DSP_OFF ((uint8_t)0x00)
+/* Interface control 1 - DSP - Enabled */
+#define CS43L22_IC1_DSP_ON ((uint8_t)0x10)
+/* Interface control 1 - DAC interface format - Right-justified */
+#define CS43L22_IC1_DIF_RJ ((uint8_t)0x08)
+/* Interface control 1 - DAC interface format - I2S, up to 24 bits */
+#define CS43L22_IC1_DIF_I2S ((uint8_t)0x04)
+/* Interface control 1 - DAC interface format - Left-justified, up to 24 bits */
+#define CS43L22_IC1_DIF_LJ ((uint8_t)0x00)
+/* Interface control 1 - Audio word length - 24-bit (DSP), 20-bit (RJ) */
+#define CS43L22_IC1_AWL_24 ((uint8_t)0x01)
+/* Interface control 1 - Audio word length - 16-bit (DSP), 16-bit (RJ) */
+#define CS43L22_IC1_AWL_16 ((uint8_t)0x03)
+/* Interface control 1 - Audio word length - 32-bit (DSP), 24-bit (RJ) */
+#define CS43L22_IC1_AWL_32 ((uint8_t)0x00)
+/* Interface control 1 - Audio word length - 20-bit (DSP), 18-bit (RJ) */
+#define CS43L22_IC1_AWL_20 ((uint8_t)0x02)
+
+/* Interface control 2 */
+#define CS43L22_REG_INT_CTL2 0x07
+/* Interface control 2 - SCLK = MCLK? - Equal */
+#define CS43L22_IC2_SEM_ON ((uint8_t)0x40)
+/* Interface control 2 - SCLK = MCLK? - Derived */
+#define CS43L22_IC2_SEM_OFF ((uint8_t)0x00)
+/* Interface control 2 - Speaker/Headphone switch invert - Enabled */
+#define CS43L22_IC2_SHSI_ON ((uint8_t)0x08)
+/* Interface control 2 - Speaker/Headphone switch invert - Disabled */
+#define CS43L22_IC2_SHSI_OFF ((uint8_t)0x00)
+
+/* Passthrough A select */
+#define CS43L22_REG_PSELA 0x08
+/* Passthrough A select - Mask */
+#define CS43L22_PSELA_MASK ((uint8_t)0x0f)
+/* Passthrough A select - AIN4 */
+#define CS43L22_PSELA_AIN4 ((uint8_t)0x08)
+/* Passthrough A select - AIN3 */
+#define CS43L22_PSELA_AIN3 ((uint8_t)0x04)
+/* Passthrough A select - AIN1 */
+#define CS43L22_PSELA_AIN1 ((uint8_t)0x01)
+/* Passthrough A select - NONE */
+#define CS43L22_PSELA_NONE ((uint8_t)0x00)
+/* Passthrough A select - AIN2 */
+#define CS43L22_PSELA_AIN2 ((uint8_t)0x02)
+
+/* Passthrough B select */
+#define CS43L22_REG_PSELB 0x09
+/* Passthrough B select - Mask */
+#define CS43L22_PSELB_MASK ((uint8_t)0x0f)
+/* Passthrough B select - AIN4 */
+#define CS43L22_PSELB_AIN4 ((uint8_t)0x08)
+/* Passthrough B select - AIN3 */
+#define CS43L22_PSELB_AIN3 ((uint8_t)0x04)
+/* Passthrough B select - AIN1 */
+#define CS43L22_PSELB_AIN1 ((uint8_t)0x01)
+/* Passthrough B select - NONE */
+#define CS43L22_PSELB_NONE ((uint8_t)0x00)
+/* Passthrough B select - AIN2 */
+#define CS43L22_PSELB_AIN2 ((uint8_t)0x02)
+
+/* Analog zero cross / soft ramp */
+#define CS43L22_REG_AZCSR 0x0a
+/* Analog zero cross / soft ramp - Channel B soft ramp - Enabled */
+#define CS43L22_AZCSR_SRB_ON ((uint8_t)0x08)
+/* Analog zero cross / soft ramp - Channel B soft ramp - Disabled */
+#define CS43L22_AZCSR_SRB_OFF ((uint8_t)0x00)
+/* Analog zero cross / soft ramp - Channel A soft ramp - Enabled */
+#define CS43L22_AZCSR_SRA_ON ((uint8_t)0x04)
+/* Analog zero cross / soft ramp - Channel A soft ramp - Disabled */
+#define CS43L22_AZCSR_SRA_OFF ((uint8_t)0x00)
+/* Analog zero cross / soft ramp - Channel B zero cross - Disabled */
+#define CS43L22_AZCSR_ZCB_OFF ((uint8_t)0x00)
+/* Analog zero cross / soft ramp - Channel B zero cross - Enabled */
+#define CS43L22_AZCSR_ZCB_ON ((uint8_t)0x02)
+/* Analog zero cross / soft ramp - Channel A zero cross - Enabled */
+#define CS43L22_AZCSR_ZCA_ON ((uint8_t)0x01)
+/* Analog zero cross / soft ramp - Channel A zero cross - Disabled */
+#define CS43L22_AZCSR_ZCA_OFF ((uint8_t)0x00)
+
+/* Passthrough gang control */
+#define CS43L22_REG_PGC 0x0c
+/* Passthrough gang control - Enabled */
+#define CS43L22_PGC_ON ((uint8_t)0x80)
+/* Passthrough gang control - Disabled */
+#define CS43L22_PGC_OFF ((uint8_t)0x00)
+
+/* Playback control 1 */
+#define CS43L22_REG_PB_CTL1 0x0d
+/* Playback control 1 - Headphone analog gain - Mask */
+#define CS43L22_PB1_HGAIN_MASK ((uint8_t)0xe0)
+/* Playback control 1 - Ganged volume control - Disabled */
+#define CS43L22_PB1_SAMEVOLUME_OFF ((uint8_t)0x00)
+/* Playback control 1 - Ganged volume control - Enabled */
+#define CS43L22_PB1_SAMEVOLUME_ON ((uint8_t)0x10)
+/* Playback control 1 - Invert channel B polarity - Enabled */
+#define CS43L22_PB1_INVB_ON ((uint8_t)0x08)
+/* Playback control 1 - Invert channel B polarity - Disabled */
+#define CS43L22_PB1_INVB_OFF ((uint8_t)0x00)
+/* Playback control 1 - Invert channel A polarity - Enabled */
+#define CS43L22_PB1_INVA_ON ((uint8_t)0x04)
+/* Playback control 1 - Invert channel A polarity - Disabled */
+#define CS43L22_PB1_INVA_OFF ((uint8_t)0x00)
+/* Playback control 1 - Channel B muted - Disabled */
+#define CS43L22_PB1_MUTEB_OFF ((uint8_t)0x00)
+/* Playback control 1 - Channel B muted - Enabled */
+#define CS43L22_PB1_MUTEB_ON ((uint8_t)0x02)
+/* Playback control 1 - Channel A muted - Enabled */
+#define CS43L22_PB1_MUTEA_ON ((uint8_t)0x01)
+/* Playback control 1 - Channel A muted - Disabled */
+#define CS43L22_PB1_MUTEA_OFF ((uint8_t)0x00)
+
+/* Miscellaneous controls */
+#define CS43L22_REG_MISC_CTL 0x0e
+/* Miscellaneous controls - Passthrough analog B - Enabled */
+#define CS43L22_MISC_PTHRUB_ON ((uint8_t)0x80)
+/* Miscellaneous controls - Passthrough analog B - Disabled */
+#define CS43L22_MISC_PTHRUB_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - Passthrough analog A - Enabled */
+#define CS43L22_MISC_PTHRUA_ON ((uint8_t)0x40)
+/* Miscellaneous controls - Passthrough analog A - Disabled */
+#define CS43L22_MISC_PTHRUA_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - Passthrough mute B - Enabled */
+#define CS43L22_MISC_PTMUTEB_ON ((uint8_t)0x20)
+/* Miscellaneous controls - Passthrough mute B - Disabled */
+#define CS43L22_MISC_PTMUTEB_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - Passthrough mute A - Disabled */
+#define CS43L22_MISC_PTMUTEA_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - Passthrough mute A - Enabled */
+#define CS43L22_MISC_PTMUTEA_ON ((uint8_t)0x10)
+/* Miscellaneous controls - Freeze registers - Enabled */
+#define CS43L22_MISC_FREEZE_ON ((uint8_t)0x08)
+/* Miscellaneous controls - Freeze registers - Disabled */
+#define CS43L22_MISC_FREEZE_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - De-emphasis filter - Enabled */
+#define CS43L22_MISC_DEEMPHASIS_ON ((uint8_t)0x04)
+/* Miscellaneous controls - De-emphasis filter - Disabled */
+#define CS43L22_MISC_DEEMPHASIS_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - Digital soft ramp - Disabled */
+#define CS43L22_MISC_DSR_OFF ((uint8_t)0x00)
+/* Miscellaneous controls - Digital soft ramp - Enabled */
+#define CS43L22_MISC_DSR_ON ((uint8_t)0x02)
+/* Miscellaneous controls - Digital zero cross - Enabled */
+#define CS43L22_MISC_DZC_ON ((uint8_t)0x01)
+/* Miscellaneous controls - Digital zero cross - Disabled */
+#define CS43L22_MISC_DZC_OFF ((uint8_t)0x00)
+
+/* Playback control 2 */
+#define CS43L22_REG_PB_CTL2 0x0f
+/* Playback control 2 - Headphone B mute - Enabled */
+#define CS43L22_PB2_HPB_MUTE_ON ((uint8_t)0x80)
+/* Playback control 2 - Headphone B mute - Disabled */
+#define CS43L22_PB2_HPB_MUTE_OFF ((uint8_t)0x00)
+/* Playback control 2 - Headphone A mute - Enabled */
+#define CS43L22_PB2_HPA_MUTE_ON ((uint8_t)0x40)
+/* Playback control 2 - Headphone A mute - Disabled */
+#define CS43L22_PB2_HPA_MUTE_OFF ((uint8_t)0x00)
+/* Playback control 2 - Speaker B mute - Enabled */
+#define CS43L22_PB2_SPKB_MUTE_ON ((uint8_t)0x20)
+/* Playback control 2 - Speaker B mute - Disabled */
+#define CS43L22_PB2_SPKB_MUTE_OFF ((uint8_t)0x00)
+/* Playback control 2 - Speaker A mute - Disabled */
+#define CS43L22_PB2_SPKA_MUTE_OFF ((uint8_t)0x00)
+/* Playback control 2 - Speaker A mute - Enabled */
+#define CS43L22_PB2_SPKA_MUTE_ON ((uint8_t)0x10)
+/* Playback control 2 - Ganged speaker volume settings - Enabled */
+#define CS43L22_PB2_SPK_GANG_ON ((uint8_t)0x08)
+/* Playback control 2 - Ganged speaker volume settings - Disabled */
+#define CS43L22_PB2_SPK_GANG_OFF ((uint8_t)0x00)
+/* Playback control 2 - Speaker channel swap - Enabled */
+#define CS43L22_PB2_SPK_SWAP_ON ((uint8_t)0x04)
+/* Playback control 2 - Speaker channel swap - Disabled */
+#define CS43L22_PB2_SPK_SWAP_OFF ((uint8_t)0x00)
+/* Playback control 2 - Speaker mono mode - Disabled */
+#define CS43L22_PB2_SPK_MONO_OFF ((uint8_t)0x00)
+/* Playback control 2 - Speaker mono mode - Enabled */
+#define CS43L22_PB2_SPK_MONO_ON ((uint8_t)0x02)
+/* Playback control 2 - Speaker mute 50/50 control - Enabled */
+#define CS43L22_PB2_SPK_M50_ON ((uint8_t)0x01)
+/* Playback control 2 - Speaker mute 50/50 control - Disabled */
+#define CS43L22_PB2_SPK_M50_OFF ((uint8_t)0x00)
+
+/* Passthrough volume (channel A) */
+#define CS43L22_REG_PASS_A_VOL 0x14
+
+/* Passthrough volume (channel B) */
+#define CS43L22_REG_PASS_B_VOL 0x15
+
+/* PCM channel A control */
+#define CS43L22_REG_PCM_A 0x1a
+/* PCM channel A control - Mute channel - Enabled */
+#define CS43L22_PCM_A_MUTE_ON ((uint8_t)0x80)
+/* PCM channel A control - Mute channel - Disabled */
+#define CS43L22_PCM_A_MUTE_OFF ((uint8_t)0x00)
+/* PCM channel A control - Channel volume - Mask */
+#define CS43L22_PCM_A_VOLUME_MASK ((uint8_t)0x7f)
+
+/* PCM channel B control */
+#define CS43L22_REG_PCM_B 0x1b
+/* PCM channel B control - Mute channel - Enabled */
+#define CS43L22_PCM_B_MUTE_ON ((uint8_t)0x80)
+/* PCM channel B control - Mute channel - Disabled */
+#define CS43L22_PCM_B_MUTE_OFF ((uint8_t)0x00)
+/* PCM channel B control - Channel volume - Mask */
+#define CS43L22_PCM_B_VOLUME_MASK ((uint8_t)0x7f)
+
+/* Beep control 1 */
+#define CS43L22_REG_BEEP_CTL1 0x1c
+/* Beep control 1 - Frequency - Mask */
+#define CS43L22_BEEP_FREQ_MASK ((uint8_t)0xf0)
+/* Beep control 1 - Duration - Mask */
+#define CS43L22_BEEP_ONTIME_MASK ((uint8_t)0x0f)
+
+/* Beep control 2 */
+#define CS43L22_REG_BEEP_CTL2 0x1d
+/* Beep control 2 - Off time - Mask */
+#define CS43L22_BEEP_OFFTIME_MASK ((uint8_t)0xf0)
+/* Beep control 2 - Volume - Mask */
+#define CS43L22_BEEP_VOL_MASK ((uint8_t)0x0f)
+
+/* Beep & tone configuration */
+#define CS43L22_REG_BEEP_TONE_CFG 0x1e
+/* Beep & tone configuration - Beep configuration - Multiple */
+#define CS43L22_B3_BEEP_CFG_MULTI ((uint8_t)0x80)
+/* Beep & tone configuration - Beep configuration - Single */
+#define CS43L22_B3_BEEP_CFG_SINGLE ((uint8_t)0x40)
+/* Beep & tone configuration - Beep configuration - Off */
+#define CS43L22_B3_BEEP_CFG_OFF ((uint8_t)0x00)
+/* Beep & tone configuration - Beep configuration - Continuous */
+#define CS43L22_B3_BEEP_CFG_CONT ((uint8_t)0xc0)
+/* Beep & tone configuration - Beep mix disable - OFF */
+#define CS43L22_B3_BEEP_NOMIX_OFF ((uint8_t)0x20)
+/* Beep & tone configuration - Beep mix disable - ON */
+#define CS43L22_B3_BEEP_NOMIX_ON ((uint8_t)0x00)
+/* Beep & tone configuration - Treble corner frequency - 7KHZ */
+#define CS43L22_B3_TREBLE_CF_7KHZ ((uint8_t)0x08)
+/* Beep & tone configuration - Treble corner frequency - 5KHZ */
+#define CS43L22_B3_TREBLE_CF_5KHZ ((uint8_t)0x00)
+/* Beep & tone configuration - Treble corner frequency - 15KHZ */
+#define CS43L22_B3_TREBLE_CF_15KHZ ((uint8_t)0x18)
+/* Beep & tone configuration - Treble corner frequency - 10KHZ */
+#define CS43L22_B3_TREBLE_CF_10KHZ ((uint8_t)0x10)
+/* Beep & tone configuration - Bass corner frequency - 250HZ */
+#define CS43L22_B3_BASS_CF_250HZ ((uint8_t)0x06)
+/* Beep & tone configuration - Bass corner frequency - 200HZ */
+#define CS43L22_B3_BASS_CF_200HZ ((uint8_t)0x04)
+/* Beep & tone configuration - Bass corner frequency - 50HZ */
+#define CS43L22_B3_BASS_CF_50HZ ((uint8_t)0x00)
+/* Beep & tone configuration - Bass corner frequency - 100HZ */
+#define CS43L22_B3_BASS_CF_100HZ ((uint8_t)0x02)
+/* Beep & tone configuration - Tone control - Enabled */
+#define CS43L22_B3_TONECTL_ON ((uint8_t)0x01)
+/* Beep & tone configuration - Tone control - Disabled */
+#define CS43L22_B3_TONECTL_OFF ((uint8_t)0x00)
+
+/* Tone control */
+#define CS43L22_REG_TONE_CTL 0x1f
+/* Tone control - Treble gain - Mask */
+#define CS43L22_TCTL_TREBLE_MASK ((uint8_t)0xf0)
+/* Tone control - Bass gain - Mask */
+#define CS43L22_TCTL_BASS_MASK ((uint8_t)0x0f)
+
+/* Master volume control (channel A) */
+#define CS43L22_REG_MASTER_VOLUME_A 0x20
+
+/* Master volume control (channel B) */
+#define CS43L22_REG_MASTER_VOLUME_B 0x21
+
+/* Headphone volume control (channel A) */
+#define CS43L22_REG_HP_VOLUME_A 0x22
+
+/* Headphone volume control (channel B) */
+#define CS43L22_REG_HP_VOLUME_B 0x23
+
+/* Speaker volume control (channel A) */
+#define CS43L22_REG_SPK_VOLUME_A 0x24
+
+/* Speaker volume control (channel B) */
+#define CS43L22_REG_SPK_VOLUME_B 0x25
+
+/* PCM channel swap */
+#define CS43L22_REG_PCM_SWAP 0x26
+/* PCM channel swap - Channel A - (Left + Right) / 2 */
+#define CS43L22_PCS_A_MIX ((uint8_t)0x40)
+/* PCM channel swap - Channel A - Left */
+#define CS43L22_PCS_A_LEFT ((uint8_t)0x00)
+/* PCM channel swap - Channel A - Right */
+#define CS43L22_PCS_A_RIGHT ((uint8_t)0xc0)
+/* PCM channel swap - Channel B - Right */
+#define CS43L22_PCS_B_RIGHT ((uint8_t)0x00)
+/* PCM channel swap - Channel B - (Left + Right) / 2 */
+#define CS43L22_PCS_B_MIX ((uint8_t)0x10)
+/* PCM channel swap - Channel B - Left */
+#define CS43L22_PCS_B_LEFT ((uint8_t)0x30)
+
+/* Limiter control 1 */
+#define CS43L22_REG_LIM_CTL1 0x27
+/* Limiter control 1 - Maximum threshold - Mask */
+#define CS43L22_LIM1_MAX_MASK ((uint8_t)0xe0)
+/* Limiter control 1 - Cushion threshold - Mask */
+#define CS43L22_LIM1_CUSHION_MASK ((uint8_t)0x1c)
+/* Limiter control 1 - Soft ramp - Use digital soft ramp */
+#define CS43L22_LIM1_SRD_OFF ((uint8_t)0x00)
+/* Limiter control 1 - Soft ramp - Ignore digital soft ramp */
+#define CS43L22_LIM1_SRD_ON ((uint8_t)0x02)
+/* Limiter control 1 - Zero cross - Ignore digital zero cross */
+#define CS43L22_LIM1_ZCD_ON ((uint8_t)0x01)
+/* Limiter control 1 - Zero cross - Use digital zero cross */
+#define CS43L22_LIM1_ZCD_OFF ((uint8_t)0x00)
+
+/* Limiter control 2 */
+#define CS43L22_REG_LIM_CTL2 0x28
+/* Limiter control 2 - Peak detect and limiter - Enabled */
+#define CS43L22_LIM2_ON ((uint8_t)0x80)
+/* Limiter control 2 - Peak detect and limiter - Disabled */
+#define CS43L22_LIM2_OFF ((uint8_t)0x00)
+/* Limiter control 2 - Limit both channels - Enabled */
+#define CS43L22_LIM2_LAC_ON ((uint8_t)0x40)
+/* Limiter control 2 - Limit both channels - Disabled */
+#define CS43L22_LIM2_LAC_OFF ((uint8_t)0x00)
+/* Limiter control 2 - Release rate - Mask */
+#define CS43L22_LIM2_RRATE_MASK ((uint8_t)0x3f)
+
+/* Limiter control 3 */
+#define CS43L22_REG_LIM_CTL3 0x29
+/* Limiter control 3 - Attack rate - Mask */
+#define CS43L22_LIM3_ARATE_MASK ((uint8_t)0x3f)
+
+/* Status (RO) */
+#define CS43L22_REG_STATUS 0x2e
+/* Status (RO) - Serial port clock error */
+#define CS43L22_STATUS_SERIAL_ERROR ((uint8_t)0x40)
+/* Status (RO) - DSP A overflow */
+#define CS43L22_STATUS_DSP_A_OVERFLOW ((uint8_t)0x20)
+/* Status (RO) - DSP B overflow */
+#define CS43L22_STATUS_DSP_B_OVERFLOW ((uint8_t)0x10)
+/* Status (RO) - PCM A overflow */
+#define CS43L22_STATUS_PCM_A_OVERFLOW ((uint8_t)0x08)
+/* Status (RO) - PCM B overflow */
+#define CS43L22_STATUS_PCM_B_OVERFLOW ((uint8_t)0x04)
+
+/* Battery compensation */
+#define CS43L22_REG_BATTERY_COMPENSATION 0x2f
+/* Battery compensation - Enabled */
+#define CS43L22_BC_ON ((uint8_t)0x80)
+/* Battery compensation - Disabled */
+#define CS43L22_BC_OFF ((uint8_t)0x00)
+/* Battery compensation - VP voltage level monitor - Enabled */
+#define CS43L22_BC_VPM_ON ((uint8_t)0x40)
+/* Battery compensation - VP voltage level monitor - Disabled */
+#define CS43L22_BC_VPM_OFF ((uint8_t)0x00)
+/* Battery compensation - VP reference - Mask */
+#define CS43L22_BC_VPREF_MASK ((uint8_t)0x0f)
+
+/* Battery level (RO) */
+#define CS43L22_REG_BATTERY_LEVEL 0x30
+
+/* Speaker status (RO) */
+#define CS43L22_REG_SPKR_STATUS 0x31
+/* Speaker status (RO) - Channel A overload detected */
+#define CS43L22_SPKS_OVERLOAD_A ((uint8_t)0x20)
+/* Speaker status (RO) - Channel B overload detected */
+#define CS43L22_SPKS_OVERLOAD_B ((uint8_t)0x10)
+/* Speaker status (RO) - Speaker/headphones pin status */
+#define CS43L22_SPKS_SPKHP_SWITCH ((uint8_t)0x08)
+
+/* Charge pump frequency */
+#define CS43L22_REG_CPFREQ 0x34
+/* Charge pump frequency - Mask */
+#define CS43L22_CPFREQ_MASK ((uint8_t)0xf0)
+
+#endif //__H_CS43L22
diff --git a/09-PlaySound/cs43l22_pins.h b/09-PlaySound/cs43l22_pins.h
new file mode 100644
index 0000000..ecf8456
--- /dev/null
+++ b/09-PlaySound/cs43l22_pins.h
@@ -0,0 +1,47 @@
+#ifndef __H_PINS_CS43L22
+#define __H_PINS_CS43L22
+
+// Alternate function used for I2S to the CS43L22
+#define I2S_OUT_FUNCTION 6
+
+// CS43L22 reset pin and delay
+#define I2S_ORESET_PORT GPIOD
+#define I2S_ORESET_PAD 4
+#define I2S_ORESET_DELAY 10
+
+// CS43L22 SCL pin
+#define I2C_OSCL_PORT GPIOB
+#define I2C_OSCL_PAD 6
+
+// CS43L22 SDA pin
+#define I2C_OSDA_PORT GPIOB
+#define I2C_OSDA_PAD 9
+
+// CS43L22 WS pin
+#define I2S_OWS_PORT GPIOA
+#define I2S_OWS_PAD 4
+
+// CS43L22 MCK pin
+#define I2S_OMCK_PORT GPIOC
+#define I2S_OMCK_PAD 7
+
+// CS43L22 SCK pin
+#define I2S_OSCK_PORT GPIOC
+#define I2S_OSCK_PAD 10
+
+// CS43L22 SD pin
+#define I2S_OSD_PORT GPIOC
+#define I2S_OSD_PAD 12
+
+// Output control I2C parameters
+#define I2S_OI2C_DRIVER I2CD1
+#define I2S_OI2C_SPEED 400000
+#define I2S_OI2C_ADDRESS 0x4a
+#define I2S_OI2C_TIMEOUT 1000
+
+// Base address of the SPI port
+#define I2S_SPI_BASE SPI3_BASE
+
+
+
+#endif //__H_PINS_CS43L22
diff --git a/09-PlaySound/halconf.h b/09-PlaySound/halconf.h
new file mode 100644
index 0000000..be8519c
--- /dev/null
+++ b/09-PlaySound/halconf.h
@@ -0,0 +1,353 @@
+/*
+ ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
+ 2011,2012 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ ---
+
+ A special exception to the GPL can be applied should you wish to distribute
+ a combined work that includes ChibiOS/RT, without being obliged to provide
+ the source code for any proprietary components. See the file exception.txt
+ for full details of how and when the exception can be applied.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the TM subsystem.
+ */
+#if !defined(HAL_USE_TM) || defined(__DOXYGEN__)
+#define HAL_USE_TM FALSE
+#endif
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C TRUE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL TRUE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI TRUE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Block size for MMC transfers.
+ */
+#if !defined(MMC_SECTOR_SIZE) || defined(__DOXYGEN__)
+#define MMC_SECTOR_SIZE 512
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/**
+ * @brief Number of positive insertion queries before generating the
+ * insertion event.
+ */
+#if !defined(MMC_POLLING_INTERVAL) || defined(__DOXYGEN__)
+#define MMC_POLLING_INTERVAL 10
+#endif
+
+/**
+ * @brief Interval, in milliseconds, between insertion queries.
+ */
+#if !defined(MMC_POLLING_DELAY) || defined(__DOXYGEN__)
+#define MMC_POLLING_DELAY 10
+#endif
+
+/**
+ * @brief Uses the SPI polled API for small data transfers.
+ * @details Polled transfers usually improve performance because it
+ * saves two context switches and interrupt servicing. Note
+ * that this option has no effect on large transfers which
+ * are always performed using DMAs/IRQs.
+ */
+#if !defined(MMC_USE_SPI_POLLING) || defined(__DOXYGEN__)
+#define MMC_USE_SPI_POLLING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+
+
+
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/09-PlaySound/i2s_bits.h b/09-PlaySound/i2s_bits.h
new file mode 100644
index 0000000..66f5202
--- /dev/null
+++ b/09-PlaySound/i2s_bits.h
@@ -0,0 +1,62 @@
+#ifndef __H_STM32F4_I2S
+#define __H_STM32F4_I2S
+
+/* I2S configuration */
+#define STM32F4_I2S_OFFS_CFG 0x0000001c
+/* I2S configuration - SPI mode */
+#define STM32F4_I2S_CFG_MODE_SPI ((uint16_t)0x0000)
+/* I2S configuration - I2S mode */
+#define STM32F4_I2S_CFG_MODE_I2S ((uint16_t)0x0800)
+/* I2S configuration - Peripheral enabled */
+#define STM32F4_I2S_CFG_ENABLED ((uint16_t)0x0400)
+/* I2S configuration - Peripheral disabled */
+#define STM32F4_I2S_CFG_DISABLED ((uint16_t)0x0000)
+/* I2S configuration - I2S configuration mode - Master/transmit */
+#define STM32F4_I2S_CFG_CFG_MS_TX ((uint16_t)0x0200)
+/* I2S configuration - I2S configuration mode - Slave/transmit */
+#define STM32F4_I2S_CFG_CFG_SL_TX ((uint16_t)0x0000)
+/* I2S configuration - I2S configuration mode - Slave/receive */
+#define STM32F4_I2S_CFG_CFG_SL_RX ((uint16_t)0x0100)
+/* I2S configuration - I2S configuration mode - Master/receive */
+#define STM32F4_I2S_CFG_CFG_MS_RX ((uint16_t)0x0300)
+/* I2S configuration - PCM frame sync - Long frame */
+#define STM32F4_I2S_CFG_PCMSYNC_LONG ((uint16_t)0x0080)
+/* I2S configuration - PCM frame sync - Short frame */
+#define STM32F4_I2S_CFG_PCMSYNC_SHORT ((uint16_t)0x0000)
+/* I2S configuration - I2S standard - Right justified */
+#define STM32F4_I2S_CFG_STD_LSB ((uint16_t)0x0020)
+/* I2S configuration - I2S standard - I2S Philips standard */
+#define STM32F4_I2S_CFG_STD_I2S ((uint16_t)0x0000)
+/* I2S configuration - I2S standard - Left justified */
+#define STM32F4_I2S_CFG_STD_MSB ((uint16_t)0x0010)
+/* I2S configuration - I2S standard - PCM standard */
+#define STM32F4_I2S_CFG_STD_PCM ((uint16_t)0x0030)
+/* I2S configuration - Reverse clock polarity - ON */
+#define STM32F4_I2S_CFG_RCPOL_ON ((uint16_t)0x0008)
+/* I2S configuration - Reverse clock polarity - OFF */
+#define STM32F4_I2S_CFG_RCPOL_OFF ((uint16_t)0x0000)
+/* I2S configuration - Data length - 32-bit */
+#define STM32F4_I2S_CFG_DLEN_32 ((uint16_t)0x0004)
+/* I2S configuration - Data length - 16-bit */
+#define STM32F4_I2S_CFG_DLEN_16 ((uint16_t)0x0000)
+/* I2S configuration - Data length - 24-bit */
+#define STM32F4_I2S_CFG_DLEN_24 ((uint16_t)0x0002)
+/* I2S configuration - Channel length - 32-bit */
+#define STM32F4_I2S_CFG_CLEN_32 ((uint16_t)0x0001)
+/* I2S configuration - Channel length - 16-bit */
+#define STM32F4_I2S_CFG_CLEN_16 ((uint16_t)0x0000)
+
+/* I2S prescaler */
+#define STM32F4_I2S_OFFS_PR 0x00000020
+/* I2S prescaler - Master clock output - ON */
+#define STM32F4_I2S_PR_MCLK_ON ((uint16_t)0x0200)
+/* I2S prescaler - Master clock output - OFF */
+#define STM32F4_I2S_PR_MCLK_OFF ((uint16_t)0x0000)
+/* I2S prescaler - Odd factor - Divider is I2SDIV * 2 */
+#define STM32F4_I2S_PR_EVEN ((uint16_t)0x0000)
+/* I2S prescaler - Odd factor - Divider is 1 + I2SDIV * 2 */
+#define STM32F4_I2S_PR_ODD ((uint16_t)0x0100)
+/* I2S prescaler - Divider - Mask */
+#define STM32F4_I2S_PR_DIV_MASK ((uint16_t)0x00ff)
+
+#endif //__H_STM32F4_I2S
diff --git a/09-PlaySound/main.c b/09-PlaySound/main.c
new file mode 100644
index 0000000..b11151c
--- /dev/null
+++ b/09-PlaySound/main.c
@@ -0,0 +1,118 @@
+#include "ch.h"
+#include "hal.h"
+
+#include "chprintf.h"
+
+#include "serial_output.h"
+#include "sound.h"
+
+
+// This is called when the board boots up with the user button pressed. The
+// idea is to enter this mode if the wrong SPI device has been used and flashing
+// is no longer possible.
+__attribute__ ((noreturn))
+static void lockdown( void )
+{
+ palSetPad( GPIOD , GPIOD_LED3 );
+ while (TRUE) {
+ // EMPTY
+ }
+}
+
+
+static int increment;
+static int curPos;
+static const s16 sinTable[16384] = {
+#include "sin_table.h"
+};
+
+
+void debug(void)
+{
+ chprintf( (void*)&SD2 , "I2S:\r\n" );
+ chprintf( (void*)&SD2 , " CR2 %x\r\n" , SPI3->CR2 );
+ chprintf( (void*)&SD2 , " SR %x\r\n" , SPI3->SR );
+ chprintf( (void*)&SD2 , " CFG %x\r\n" , SPI3->I2SCFGR );
+ chprintf( (void*)&SD2 , " PR %x\r\n" , SPI3->I2SPR );
+
+ chprintf( (void*)&SD2 , "DMA:\r\n" );
+ chprintf( (void*)&SD2 , " CR %x\r\n" ,
+ SPID3.dmatx->stream->CR );
+ chprintf( (void*)&SD2 , " NDT %x\r\n" ,
+ SPID3.dmatx->stream->NDTR );
+ chprintf( (void*)&SD2 , " PAR %x\r\n" ,
+ SPID3.dmatx->stream->PAR );
+ chprintf( (void*)&SD2 , " M0A %x\r\n" ,
+ SPID3.dmatx->stream->M0AR );
+ chprintf( (void*)&SD2 , " M1A %x\r\n" ,
+ SPID3.dmatx->stream->M1AR );
+ chprintf( (void*)&SD2 , " FCR %x\r\n" ,
+ SPID3.dmatx->stream->FCR );
+ chprintf( (void*)&SD2 , "curPos: %d\r\n" , curPos );
+}
+
+
+__attribute__ ((noreturn))
+int main( void )
+{
+ halInit();
+ chSysInit();
+ if ( palReadPad( GPIOA , GPIOA_BUTTON ) ) {
+ lockdown( );
+ }
+
+ soInit( );
+ chprintf( (void*)&SD2 , "Sound card initialisation\r\n" );
+ sndInit( 11025 );
+ chprintf( (void*)&SD2 ,
+ "Sound card initialisation complete\r\n" );
+ increment = 654; // 16384 * 440 / 11025
+ curPos = 0;
+
+ debug( );
+
+#ifdef USE_DMA_FOR_SEXY_BEEPS
+ int i = 0;
+ while ( 1 ) {
+ s16 * buffer = sndGetBuffer( );
+ if ( buffer == NULL ) {
+ i ++;
+ if ( i == 2000000 ) {
+ i = 0;
+ palTogglePad( GPIOD , GPIOD_LED4 );
+ debug( );
+ }
+ continue;
+ }
+ palTogglePad( GPIOD , GPIOD_LED3 );
+
+ int z;
+ for ( z = 0 ; z < SND_BUFSIZE / 2 ; z ++ ) {
+ buffer[ z * 2 ] = buffer[ z * 2 + 1 ]
+ = sinTable[ curPos ];
+ curPos = ( curPos + increment / 2 ) % 16384;
+ }
+ }
+
+#else // USE_DMA_FOR_SEXY_BEEPS
+
+ int i = 0;
+ while ( 1 ) {
+ u16 sr = SPI3->SR;
+ if ( ( sr & 0x2 ) == 0 ) {
+ continue;
+ }
+ SPI3->DR = sinTable[ curPos ];
+
+ if ( ( sr & 0x4 ) == 0 ) {
+ curPos = ( curPos + increment ) % 16384;
+ }
+ i ++;
+ if ( i == 22100 ) {
+ i = 0;
+ palTogglePad( GPIOD , GPIOD_LED4 );
+ debug( );
+ }
+ }
+#endif // USE_DMA_FOR_SEXY_BEEPS
+}
diff --git a/09-PlaySound/mcuconf.h b/09-PlaySound/mcuconf.h
new file mode 100644
index 0000000..208af41
--- /dev/null
+++ b/09-PlaySound/mcuconf.h
@@ -0,0 +1,258 @@
+/*
+ ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
+ 2011,2012 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+/*
+ * STM32F4xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F4xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_CLOCK48_REQUIRED TRUE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLM_VALUE 8
+#define STM32_PLLN_VALUE 336
+#define STM32_PLLP_VALUE 2
+#define STM32_PLLQ_VALUE 7
+#define HSE_VALUE 8000000
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV4
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_RTCPRE_VALUE 8
+#define STM32_MCO1SEL STM32_MCO1SEL_HSI
+#define STM32_MCO1PRE STM32_MCO1PRE_DIV1
+#define STM32_MCO2SEL STM32_MCO2SEL_SYSCLK
+#define STM32_MCO2PRE STM32_MCO2PRE_DIV5
+#define STM32_I2SSRC STM32_I2SSRC_PLLI2S
+#define STM32_PLLI2SN_VALUE 192
+#define STM32_PLLI2SR_VALUE 5
+#define STM32_VOS STM32_VOS_HIGH
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_ADCPRE ADC_CCR_ADCPRE_DIV4
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_USE_ADC2 FALSE
+#define STM32_ADC_USE_ADC3 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(2, 4)
+#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC2_DMA_PRIORITY 2
+#define STM32_ADC_ADC3_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 6
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 6
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 6
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_USE_CAN2 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+#define STM32_CAN_CAN2_IRQ_PRIORITY 11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 15
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI20_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI21_IRQ_PRIORITY 15
+#define STM32_EXT_EXTI22_IRQ_PRIORITY 15
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 TRUE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_USE_I2C3 FALSE
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_I2C2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
+#define STM32_I2C_I2C3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C3_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_I2C3_DMA_PRIORITY 3
+#define STM32_I2C_I2C1_DMA_ERROR_HOOK() chSysHalt()
+#define STM32_I2C_I2C2_DMA_ERROR_HOOK() chSysHalt()
+#define STM32_I2C_I2C3_DMA_ERROR_HOOK() chSysHalt()
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 TRUE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USE_USART6 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+#define STM32_SERIAL_USART6_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 TRUE
+#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0)
+#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt()
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 TRUE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USE_USART6 FALSE
+#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
+#define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART6_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_USART6_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt()
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_OTG1 FALSE
+#define STM32_USB_USE_OTG2 FALSE
+#define STM32_USB_OTG1_IRQ_PRIORITY 14
+#define STM32_USB_OTG2_IRQ_PRIORITY 14
+#define STM32_USB_OTG1_RX_FIFO_SIZE 512
+#define STM32_USB_OTG2_RX_FIFO_SIZE 1024
+#define STM32_USB_OTG_THREAD_PRIO LOWPRIO
+#define STM32_USB_OTG_THREAD_STACK_SIZE 128
+#define STM32_USB_OTGFIFO_FILL_BASEPRI 0
+
+
diff --git a/09-PlaySound/serial_output.c b/09-PlaySound/serial_output.c
new file mode 100644
index 0000000..b32bce8
--- /dev/null
+++ b/09-PlaySound/serial_output.c
@@ -0,0 +1,14 @@
+#include "ch.h"
+#include "hal.h"
+
+#include "serial_output.h"
+
+
+void soInit( void )
+{
+ sdStart( &SERIALOUT_DRIVER , NULL );
+ palSetPadMode( SERIALOUT_TX_PORT , SERIALOUT_TX_PAD ,
+ PAL_MODE_ALTERNATE( SERIALOUT_AF ) );
+ palSetPadMode( SERIALOUT_RX_PORT , SERIALOUT_RX_PAD ,
+ PAL_MODE_ALTERNATE( SERIALOUT_AF ) );
+}
diff --git a/09-PlaySound/serial_output.h b/09-PlaySound/serial_output.h
new file mode 100644
index 0000000..ae83fbd
--- /dev/null
+++ b/09-PlaySound/serial_output.h
@@ -0,0 +1,15 @@
+#ifndef __H_SERIALOUT
+#define __H_SERIALOUT
+
+#define SERIALOUT_DRIVER SD2
+#define SERIALOUT_TX_PORT GPIOA
+#define SERIALOUT_TX_PAD 2
+#define SERIALOUT_RX_PORT GPIOA
+#define SERIALOUT_RX_PAD 3
+#define SERIALOUT_AF 7
+
+
+void soInit( void );
+
+
+#endif // __H_SERIALOUT
diff --git a/09-PlaySound/sin_table.h b/09-PlaySound/sin_table.h
new file mode 100644
index 0000000..8b44f55
--- /dev/null
+++ b/09-PlaySound/sin_table.h
@@ -0,0 +1,16384 @@
+0,
+12,
+25,
+37,
+50,
+62,
+75,
+87,
+100,
+113,
+125,
+138,
+150,
+163,
+175,
+188,
+201,
+213,
+226,
+238,
+251,
+263,
+276,
+289,
+301,
+314,
+326,
+339,
+351,
+364,
+376,
+389,
+402,
+414,
+427,
+439,
+452,
+464,
+477,
+490,
+502,
+515,
+527,
+540,
+552,
+565,
+578,
+590,
+603,
+615,
+628,
+640,
+653,
+665,
+678,
+691,
+703,
+716,
+728,
+741,
+753,
+766,
+779,
+791,
+804,
+816,
+829,
+841,
+854,
+866,
+879,
+892,
+904,
+917,
+929,
+942,
+954,
+967,
+980,
+992,
+1005,
+1017,
+1030,
+1042,
+1055,
+1067,
+1080,
+1093,
+1105,
+1118,
+1130,
+1143,
+1155,
+1168,
+1180,
+1193,
+1206,
+1218,
+1231,
+1243,
+1256,
+1268,
+1281,
+1293,
+1306,
+1319,
+1331,
+1344,
+1356,
+1369,
+1381,
+1394,
+1406,
+1419,
+1432,
+1444,
+1457,
+1469,
+1482,
+1494,
+1507,
+1519,
+1532,
+1545,
+1557,
+1570,
+1582,
+1595,
+1607,
+1620,
+1632,
+1645,
+1658,
+1670,
+1683,
+1695,
+1708,
+1720,
+1733,
+1745,
+1758,
+1770,
+1783,
+1796,
+1808,
+1821,
+1833,
+1846,
+1858,
+1871,
+1883,
+1896,
+1908,
+1921,
+1934,
+1946,
+1959,
+1971,
+1984,
+1996,
+2009,
+2021,
+2034,
+2046,
+2059,
+2072,
+2084,
+2097,
+2109,
+2122,
+2134,
+2147,
+2159,
+2172,
+2184,
+2197,
+2209,
+2222,
+2235,
+2247,
+2260,
+2272,
+2285,
+2297,
+2310,
+2322,
+2335,
+2347,
+2360,
+2372,
+2385,
+2397,
+2410,
+2423,
+2435,
+2448,
+2460,
+2473,
+2485,
+2498,
+2510,
+2523,
+2535,
+2548,
+2560,
+2573,
+2585,
+2598,
+2610,
+2623,
+2636,
+2648,
+2661,
+2673,
+2686,
+2698,
+2711,
+2723,
+2736,
+2748,
+2761,
+2773,
+2786,
+2798,
+2811,
+2823,
+2836,
+2848,
+2861,
+2873,
+2886,
+2898,
+2911,
+2923,
+2936,
+2949,
+2961,
+2974,
+2986,
+2999,
+3011,
+3024,
+3036,
+3049,
+3061,
+3074,
+3086,
+3099,
+3111,
+3124,
+3136,
+3149,
+3161,
+3174,
+3186,
+3199,
+3211,
+3224,
+3236,
+3249,
+3261,
+3274,
+3286,
+3299,
+3311,
+3324,
+3336,
+3349,
+3361,
+3374,
+3386,
+3399,
+3411,
+3424,
+3436,
+3449,
+3461,
+3474,
+3486,
+3499,
+3511,
+3524,
+3536,
+3549,
+3561,
+3574,
+3586,
+3599,
+3611,
+3624,
+3636,
+3649,
+3661,
+3674,
+3686,
+3699,
+3711,
+3724,
+3736,
+3749,
+3761,
+3773,
+3786,
+3798,
+3811,
+3823,
+3836,
+3848,
+3861,
+3873,
+3886,
+3898,
+3911,
+3923,
+3936,
+3948,
+3961,
+3973,
+3986,
+3998,
+4011,
+4023,
+4035,
+4048,
+4060,
+4073,
+4085,
+4098,
+4110,
+4123,
+4135,
+4148,
+4160,
+4173,
+4185,
+4198,
+4210,
+4222,
+4235,
+4247,
+4260,
+4272,
+4285,
+4297,
+4310,
+4322,
+4335,
+4347,
+4359,
+4372,
+4384,
+4397,
+4409,
+4422,
+4434,
+4447,
+4459,
+4472,
+4484,
+4496,
+4509,
+4521,
+4534,
+4546,
+4559,
+4571,
+4584,
+4596,
+4608,
+4621,
+4633,
+4646,
+4658,
+4671,
+4683,
+4696,
+4708,
+4720,
+4733,
+4745,
+4758,
+4770,
+4783,
+4795,
+4807,
+4820,
+4832,
+4845,
+4857,
+4870,
+4882,
+4894,
+4907,
+4919,
+4932,
+4944,
+4957,
+4969,
+4981,
+4994,
+5006,
+5019,
+5031,
+5043,
+5056,
+5068,
+5081,
+5093,
+5106,
+5118,
+5130,
+5143,
+5155,
+5168,
+5180,
+5192,
+5205,
+5217,
+5230,
+5242,
+5254,
+5267,
+5279,
+5292,
+5304,
+5316,
+5329,
+5341,
+5354,
+5366,
+5378,
+5391,
+5403,
+5416,
+5428,
+5440,
+5453,
+5465,
+5478,
+5490,
+5502,
+5515,
+5527,
+5539,
+5552,
+5564,
+5577,
+5589,
+5601,
+5614,
+5626,
+5639,
+5651,
+5663,
+5676,
+5688,
+5700,
+5713,
+5725,
+5738,
+5750,
+5762,
+5775,
+5787,
+5799,
+5812,
+5824,
+5836,
+5849,
+5861,
+5874,
+5886,
+5898,
+5911,
+5923,
+5935,
+5948,
+5960,
+5972,
+5985,
+5997,
+6010,
+6022,
+6034,
+6047,
+6059,
+6071,
+6084,
+6096,
+6108,
+6121,
+6133,
+6145,
+6158,
+6170,
+6182,
+6195,
+6207,
+6219,
+6232,
+6244,
+6256,
+6269,
+6281,
+6293,
+6306,
+6318,
+6330,
+6343,
+6355,
+6367,
+6380,
+6392,
+6404,
+6417,
+6429,
+6441,
+6454,
+6466,
+6478,
+6491,
+6503,
+6515,
+6528,
+6540,
+6552,
+6564,
+6577,
+6589,
+6601,
+6614,
+6626,
+6638,
+6651,
+6663,
+6675,
+6688,
+6700,
+6712,
+6724,
+6737,
+6749,
+6761,
+6774,
+6786,
+6798,
+6811,
+6823,
+6835,
+6847,
+6860,
+6872,
+6884,
+6897,
+6909,
+6921,
+6933,
+6946,
+6958,
+6970,
+6982,
+6995,
+7007,
+7019,
+7032,
+7044,
+7056,
+7068,
+7081,
+7093,
+7105,
+7117,
+7130,
+7142,
+7154,
+7167,
+7179,
+7191,
+7203,
+7216,
+7228,
+7240,
+7252,
+7265,
+7277,
+7289,
+7301,
+7314,
+7326,
+7338,
+7350,
+7363,
+7375,
+7387,
+7399,
+7412,
+7424,
+7436,
+7448,
+7461,
+7473,
+7485,
+7497,
+7509,
+7522,
+7534,
+7546,
+7558,
+7571,
+7583,
+7595,
+7607,
+7619,
+7632,
+7644,
+7656,
+7668,
+7681,
+7693,
+7705,
+7717,
+7729,
+7742,
+7754,
+7766,
+7778,
+7790,
+7803,
+7815,
+7827,
+7839,
+7851,
+7864,
+7876,
+7888,
+7900,
+7912,
+7925,
+7937,
+7949,
+7961,
+7973,
+7986,
+7998,
+8010,
+8022,
+8034,
+8047,
+8059,
+8071,
+8083,
+8095,
+8107,
+8120,
+8132,
+8144,
+8156,
+8168,
+8180,
+8193,
+8205,
+8217,
+8229,
+8241,
+8253,
+8266,
+8278,
+8290,
+8302,
+8314,
+8326,
+8339,
+8351,
+8363,
+8375,
+8387,
+8399,
+8411,
+8424,
+8436,
+8448,
+8460,
+8472,
+8484,
+8496,
+8509,
+8521,
+8533,
+8545,
+8557,
+8569,
+8581,
+8593,
+8606,
+8618,
+8630,
+8642,
+8654,
+8666,
+8678,
+8690,
+8703,
+8715,
+8727,
+8739,
+8751,
+8763,
+8775,
+8787,
+8799,
+8812,
+8824,
+8836,
+8848,
+8860,
+8872,
+8884,
+8896,
+8908,
+8920,
+8932,
+8945,
+8957,
+8969,
+8981,
+8993,
+9005,
+9017,
+9029,
+9041,
+9053,
+9065,
+9077,
+9090,
+9102,
+9114,
+9126,
+9138,
+9150,
+9162,
+9174,
+9186,
+9198,
+9210,
+9222,
+9234,
+9246,
+9258,
+9270,
+9283,
+9295,
+9307,
+9319,
+9331,
+9343,
+9355,
+9367,
+9379,
+9391,
+9403,
+9415,
+9427,
+9439,
+9451,
+9463,
+9475,
+9487,
+9499,
+9511,
+9523,
+9535,
+9547,
+9559,
+9571,
+9583,
+9595,
+9607,
+9619,
+9631,
+9643,
+9655,
+9667,
+9679,
+9691,
+9703,
+9715,
+9727,
+9739,
+9751,
+9763,
+9775,
+9787,
+9799,
+9811,
+9823,
+9835,
+9847,
+9859,
+9871,
+9883,
+9895,
+9907,
+9919,
+9931,
+9943,
+9955,
+9967,
+9979,
+9991,
+10003,
+10015,
+10027,
+10039,
+10051,
+10063,
+10075,
+10087,
+10099,
+10111,
+10123,
+10135,
+10147,
+10159,
+10170,
+10182,
+10194,
+10206,
+10218,
+10230,
+10242,
+10254,
+10266,
+10278,
+10290,
+10302,
+10314,
+10326,
+10338,
+10349,
+10361,
+10373,
+10385,
+10397,
+10409,
+10421,
+10433,
+10445,
+10457,
+10469,
+10481,
+10492,
+10504,
+10516,
+10528,
+10540,
+10552,
+10564,
+10576,
+10588,
+10600,
+10611,
+10623,
+10635,
+10647,
+10659,
+10671,
+10683,
+10695,
+10706,
+10718,
+10730,
+10742,
+10754,
+10766,
+10778,
+10790,
+10801,
+10813,
+10825,
+10837,
+10849,
+10861,
+10873,
+10884,
+10896,
+10908,
+10920,
+10932,
+10944,
+10956,
+10967,
+10979,
+10991,
+11003,
+11015,
+11027,
+11038,
+11050,
+11062,
+11074,
+11086,
+11098,
+11109,
+11121,
+11133,
+11145,
+11157,
+11168,
+11180,
+11192,
+11204,
+11216,
+11227,
+11239,
+11251,
+11263,
+11275,
+11286,
+11298,
+11310,
+11322,
+11334,
+11345,
+11357,
+11369,
+11381,
+11393,
+11404,
+11416,
+11428,
+11440,
+11451,
+11463,
+11475,
+11487,
+11499,
+11510,
+11522,
+11534,
+11546,
+11557,
+11569,
+11581,
+11593,
+11604,
+11616,
+11628,
+11640,
+11651,
+11663,
+11675,
+11687,
+11698,
+11710,
+11722,
+11734,
+11745,
+11757,
+11769,
+11780,
+11792,
+11804,
+11816,
+11827,
+11839,
+11851,
+11862,
+11874,
+11886,
+11898,
+11909,
+11921,
+11933,
+11944,
+11956,
+11968,
+11980,
+11991,
+12003,
+12015,
+12026,
+12038,
+12050,
+12061,
+12073,
+12085,
+12096,
+12108,
+12120,
+12131,
+12143,
+12155,
+12166,
+12178,
+12190,
+12201,
+12213,
+12225,
+12236,
+12248,
+12260,
+12271,
+12283,
+12295,
+12306,
+12318,
+12330,
+12341,
+12353,
+12365,
+12376,
+12388,
+12399,
+12411,
+12423,
+12434,
+12446,
+12458,
+12469,
+12481,
+12492,
+12504,
+12516,
+12527,
+12539,
+12550,
+12562,
+12574,
+12585,
+12597,
+12609,
+12620,
+12632,
+12643,
+12655,
+12666,
+12678,
+12690,
+12701,
+12713,
+12724,
+12736,
+12748,
+12759,
+12771,
+12782,
+12794,
+12805,
+12817,
+12829,
+12840,
+12852,
+12863,
+12875,
+12886,
+12898,
+12909,
+12921,
+12933,
+12944,
+12956,
+12967,
+12979,
+12990,
+13002,
+13013,
+13025,
+13036,
+13048,
+13059,
+13071,
+13082,
+13094,
+13106,
+13117,
+13129,
+13140,
+13152,
+13163,
+13175,
+13186,
+13198,
+13209,
+13221,
+13232,
+13244,
+13255,
+13267,
+13278,
+13290,
+13301,
+13312,
+13324,
+13335,
+13347,
+13358,
+13370,
+13381,
+13393,
+13404,
+13416,
+13427,
+13439,
+13450,
+13462,
+13473,
+13485,
+13496,
+13507,
+13519,
+13530,
+13542,
+13553,
+13565,
+13576,
+13587,
+13599,
+13610,
+13622,
+13633,
+13645,
+13656,
+13667,
+13679,
+13690,
+13702,
+13713,
+13725,
+13736,
+13747,
+13759,
+13770,
+13782,
+13793,
+13804,
+13816,
+13827,
+13839,
+13850,
+13861,
+13873,
+13884,
+13895,
+13907,
+13918,
+13930,
+13941,
+13952,
+13964,
+13975,
+13986,
+13998,
+14009,
+14021,
+14032,
+14043,
+14055,
+14066,
+14077,
+14089,
+14100,
+14111,
+14123,
+14134,
+14145,
+14157,
+14168,
+14179,
+14191,
+14202,
+14213,
+14225,
+14236,
+14247,
+14259,
+14270,
+14281,
+14293,
+14304,
+14315,
+14326,
+14338,
+14349,
+14360,
+14372,
+14383,
+14394,
+14406,
+14417,
+14428,
+14439,
+14451,
+14462,
+14473,
+14484,
+14496,
+14507,
+14518,
+14530,
+14541,
+14552,
+14563,
+14575,
+14586,
+14597,
+14608,
+14620,
+14631,
+14642,
+14653,
+14665,
+14676,
+14687,
+14698,
+14709,
+14721,
+14732,
+14743,
+14754,
+14766,
+14777,
+14788,
+14799,
+14810,
+14822,
+14833,
+14844,
+14855,
+14866,
+14878,
+14889,
+14900,
+14911,
+14922,
+14934,
+14945,
+14956,
+14967,
+14978,
+14989,
+15001,
+15012,
+15023,
+15034,
+15045,
+15056,
+15068,
+15079,
+15090,
+15101,
+15112,
+15123,
+15135,
+15146,
+15157,
+15168,
+15179,
+15190,
+15201,
+15213,
+15224,
+15235,
+15246,
+15257,
+15268,
+15279,
+15290,
+15301,
+15313,
+15324,
+15335,
+15346,
+15357,
+15368,
+15379,
+15390,
+15401,
+15413,
+15424,
+15435,
+15446,
+15457,
+15468,
+15479,
+15490,
+15501,
+15512,
+15523,
+15534,
+15545,
+15556,
+15568,
+15579,
+15590,
+15601,
+15612,
+15623,
+15634,
+15645,
+15656,
+15667,
+15678,
+15689,
+15700,
+15711,
+15722,
+15733,
+15744,
+15755,
+15766,
+15777,
+15788,
+15799,
+15810,
+15821,
+15832,
+15843,
+15854,
+15865,
+15876,
+15887,
+15898,
+15909,
+15920,
+15931,
+15942,
+15953,
+15964,
+15975,
+15986,
+15997,
+16008,
+16019,
+16030,
+16041,
+16052,
+16063,
+16074,
+16085,
+16096,
+16107,
+16117,
+16128,
+16139,
+16150,
+16161,
+16172,
+16183,
+16194,
+16205,
+16216,
+16227,
+16238,
+16249,
+16260,
+16270,
+16281,
+16292,
+16303,
+16314,
+16325,
+16336,
+16347,
+16358,
+16368,
+16379,
+16390,
+16401,
+16412,
+16423,
+16434,
+16445,
+16455,
+16466,
+16477,
+16488,
+16499,
+16510,
+16521,
+16532,
+16542,
+16553,
+16564,
+16575,
+16586,
+16597,
+16607,
+16618,
+16629,
+16640,
+16651,
+16662,
+16672,
+16683,
+16694,
+16705,
+16716,
+16726,
+16737,
+16748,
+16759,
+16770,
+16780,
+16791,
+16802,
+16813,
+16824,
+16834,
+16845,
+16856,
+16867,
+16877,
+16888,
+16899,
+16910,
+16920,
+16931,
+16942,
+16953,
+16964,
+16974,
+16985,
+16996,
+17006,
+17017,
+17028,
+17039,
+17049,
+17060,
+17071,
+17082,
+17092,
+17103,
+17114,
+17124,
+17135,
+17146,
+17157,
+17167,
+17178,
+17189,
+17199,
+17210,
+17221,
+17232,
+17242,
+17253,
+17264,
+17274,
+17285,
+17296,
+17306,
+17317,
+17328,
+17338,
+17349,
+17360,
+17370,
+17381,
+17392,
+17402,
+17413,
+17423,
+17434,
+17445,
+17455,
+17466,
+17477,
+17487,
+17498,
+17509,
+17519,
+17530,
+17540,
+17551,
+17562,
+17572,
+17583,
+17593,
+17604,
+17615,
+17625,
+17636,
+17646,
+17657,
+17668,
+17678,
+17689,
+17699,
+17710,
+17720,
+17731,
+17742,
+17752,
+17763,
+17773,
+17784,
+17794,
+17805,
+17815,
+17826,
+17837,
+17847,
+17858,
+17868,
+17879,
+17889,
+17900,
+17910,
+17921,
+17931,
+17942,
+17952,
+17963,
+17973,
+17984,
+17994,
+18005,
+18015,
+18026,
+18036,
+18047,
+18057,
+18068,
+18078,
+18089,
+18099,
+18110,
+18120,
+18131,
+18141,
+18152,
+18162,
+18173,
+18183,
+18193,
+18204,
+18214,
+18225,
+18235,
+18246,
+18256,
+18267,
+18277,
+18287,
+18298,
+18308,
+18319,
+18329,
+18339,
+18350,
+18360,
+18371,
+18381,
+18392,
+18402,
+18412,
+18423,
+18433,
+18443,
+18454,
+18464,
+18475,
+18485,
+18495,
+18506,
+18516,
+18526,
+18537,
+18547,
+18558,
+18568,
+18578,
+18589,
+18599,
+18609,
+18620,
+18630,
+18640,
+18651,
+18661,
+18671,
+18682,
+18692,
+18702,
+18713,
+18723,
+18733,
+18744,
+18754,
+18764,
+18774,
+18785,
+18795,
+18805,
+18816,
+18826,
+18836,
+18846,
+18857,
+18867,
+18877,
+18888,
+18898,
+18908,
+18918,
+18929,
+18939,
+18949,
+18959,
+18970,
+18980,
+18990,
+19000,
+19011,
+19021,
+19031,
+19041,
+19051,
+19062,
+19072,
+19082,
+19092,
+19103,
+19113,
+19123,
+19133,
+19143,
+19154,
+19164,
+19174,
+19184,
+19194,
+19205,
+19215,
+19225,
+19235,
+19245,
+19255,
+19266,
+19276,
+19286,
+19296,
+19306,
+19316,
+19326,
+19337,
+19347,
+19357,
+19367,
+19377,
+19387,
+19397,
+19408,
+19418,
+19428,
+19438,
+19448,
+19458,
+19468,
+19478,
+19488,
+19499,
+19509,
+19519,
+19529,
+19539,
+19549,
+19559,
+19569,
+19579,
+19589,
+19599,
+19610,
+19620,
+19630,
+19640,
+19650,
+19660,
+19670,
+19680,
+19690,
+19700,
+19710,
+19720,
+19730,
+19740,
+19750,
+19760,
+19770,
+19780,
+19790,
+19800,
+19810,
+19820,
+19830,
+19840,
+19850,
+19860,
+19870,
+19880,
+19890,
+19900,
+19910,
+19920,
+19930,
+19940,
+19950,
+19960,
+19970,
+19980,
+19990,
+20000,
+20010,
+20020,
+20030,
+20040,
+20050,
+20060,
+20070,
+20079,
+20089,
+20099,
+20109,
+20119,
+20129,
+20139,
+20149,
+20159,
+20169,
+20179,
+20188,
+20198,
+20208,
+20218,
+20228,
+20238,
+20248,
+20258,
+20268,
+20277,
+20287,
+20297,
+20307,
+20317,
+20327,
+20337,
+20346,
+20356,
+20366,
+20376,
+20386,
+20396,
+20406,
+20415,
+20425,
+20435,
+20445,
+20455,
+20464,
+20474,
+20484,
+20494,
+20504,
+20513,
+20523,
+20533,
+20543,
+20553,
+20562,
+20572,
+20582,
+20592,
+20602,
+20611,
+20621,
+20631,
+20641,
+20650,
+20660,
+20670,
+20680,
+20689,
+20699,
+20709,
+20719,
+20728,
+20738,
+20748,
+20758,
+20767,
+20777,
+20787,
+20796,
+20806,
+20816,
+20825,
+20835,
+20845,
+20855,
+20864,
+20874,
+20884,
+20893,
+20903,
+20913,
+20922,
+20932,
+20942,
+20951,
+20961,
+20971,
+20980,
+20990,
+21000,
+21009,
+21019,
+21029,
+21038,
+21048,
+21057,
+21067,
+21077,
+21086,
+21096,
+21106,
+21115,
+21125,
+21134,
+21144,
+21154,
+21163,
+21173,
+21182,
+21192,
+21202,
+21211,
+21221,
+21230,
+21240,
+21249,
+21259,
+21268,
+21278,
+21288,
+21297,
+21307,
+21316,
+21326,
+21335,
+21345,
+21354,
+21364,
+21373,
+21383,
+21392,
+21402,
+21412,
+21421,
+21431,
+21440,
+21450,
+21459,
+21469,
+21478,
+21488,
+21497,
+21506,
+21516,
+21525,
+21535,
+21544,
+21554,
+21563,
+21573,
+21582,
+21592,
+21601,
+21611,
+21620,
+21629,
+21639,
+21648,
+21658,
+21667,
+21677,
+21686,
+21695,
+21705,
+21714,
+21724,
+21733,
+21743,
+21752,
+21761,
+21771,
+21780,
+21789,
+21799,
+21808,
+21818,
+21827,
+21836,
+21846,
+21855,
+21864,
+21874,
+21883,
+21893,
+21902,
+21911,
+21921,
+21930,
+21939,
+21949,
+21958,
+21967,
+21977,
+21986,
+21995,
+22004,
+22014,
+22023,
+22032,
+22042,
+22051,
+22060,
+22070,
+22079,
+22088,
+22097,
+22107,
+22116,
+22125,
+22135,
+22144,
+22153,
+22162,
+22172,
+22181,
+22190,
+22199,
+22209,
+22218,
+22227,
+22236,
+22245,
+22255,
+22264,
+22273,
+22282,
+22292,
+22301,
+22310,
+22319,
+22328,
+22338,
+22347,
+22356,
+22365,
+22374,
+22383,
+22393,
+22402,
+22411,
+22420,
+22429,
+22438,
+22448,
+22457,
+22466,
+22475,
+22484,
+22493,
+22503,
+22512,
+22521,
+22530,
+22539,
+22548,
+22557,
+22566,
+22575,
+22585,
+22594,
+22603,
+22612,
+22621,
+22630,
+22639,
+22648,
+22657,
+22666,
+22675,
+22685,
+22694,
+22703,
+22712,
+22721,
+22730,
+22739,
+22748,
+22757,
+22766,
+22775,
+22784,
+22793,
+22802,
+22811,
+22820,
+22829,
+22838,
+22847,
+22856,
+22865,
+22874,
+22883,
+22892,
+22901,
+22910,
+22919,
+22928,
+22937,
+22946,
+22955,
+22964,
+22973,
+22982,
+22991,
+23000,
+23009,
+23018,
+23027,
+23036,
+23045,
+23053,
+23062,
+23071,
+23080,
+23089,
+23098,
+23107,
+23116,
+23125,
+23134,
+23143,
+23151,
+23160,
+23169,
+23178,
+23187,
+23196,
+23205,
+23214,
+23223,
+23231,
+23240,
+23249,
+23258,
+23267,
+23276,
+23284,
+23293,
+23302,
+23311,
+23320,
+23329,
+23337,
+23346,
+23355,
+23364,
+23373,
+23382,
+23390,
+23399,
+23408,
+23417,
+23426,
+23434,
+23443,
+23452,
+23461,
+23469,
+23478,
+23487,
+23496,
+23504,
+23513,
+23522,
+23531,
+23539,
+23548,
+23557,
+23566,
+23574,
+23583,
+23592,
+23601,
+23609,
+23618,
+23627,
+23635,
+23644,
+23653,
+23661,
+23670,
+23679,
+23688,
+23696,
+23705,
+23714,
+23722,
+23731,
+23740,
+23748,
+23757,
+23766,
+23774,
+23783,
+23791,
+23800,
+23809,
+23817,
+23826,
+23835,
+23843,
+23852,
+23860,
+23869,
+23878,
+23886,
+23895,
+23903,
+23912,
+23921,
+23929,
+23938,
+23946,
+23955,
+23964,
+23972,
+23981,
+23989,
+23998,
+24006,
+24015,
+24023,
+24032,
+24041,
+24049,
+24058,
+24066,
+24075,
+24083,
+24092,
+24100,
+24109,
+24117,
+24126,
+24134,
+24143,
+24151,
+24160,
+24168,
+24177,
+24185,
+24194,
+24202,
+24211,
+24219,
+24228,
+24236,
+24244,
+24253,
+24261,
+24270,
+24278,
+24287,
+24295,
+24304,
+24312,
+24320,
+24329,
+24337,
+24346,
+24354,
+24362,
+24371,
+24379,
+24388,
+24396,
+24404,
+24413,
+24421,
+24430,
+24438,
+24446,
+24455,
+24463,
+24471,
+24480,
+24488,
+24496,
+24505,
+24513,
+24521,
+24530,
+24538,
+24546,
+24555,
+24563,
+24571,
+24580,
+24588,
+24596,
+24605,
+24613,
+24621,
+24630,
+24638,
+24646,
+24654,
+24663,
+24671,
+24679,
+24687,
+24696,
+24704,
+24712,
+24720,
+24729,
+24737,
+24745,
+24753,
+24762,
+24770,
+24778,
+24786,
+24795,
+24803,
+24811,
+24819,
+24827,
+24836,
+24844,
+24852,
+24860,
+24868,
+24877,
+24885,
+24893,
+24901,
+24909,
+24917,
+24926,
+24934,
+24942,
+24950,
+24958,
+24966,
+24974,
+24983,
+24991,
+24999,
+25007,
+25015,
+25023,
+25031,
+25039,
+25047,
+25056,
+25064,
+25072,
+25080,
+25088,
+25096,
+25104,
+25112,
+25120,
+25128,
+25136,
+25144,
+25152,
+25161,
+25169,
+25177,
+25185,
+25193,
+25201,
+25209,
+25217,
+25225,
+25233,
+25241,
+25249,
+25257,
+25265,
+25273,
+25281,
+25289,
+25297,
+25305,
+25313,
+25321,
+25329,
+25337,
+25345,
+25353,
+25361,
+25369,
+25376,
+25384,
+25392,
+25400,
+25408,
+25416,
+25424,
+25432,
+25440,
+25448,
+25456,
+25464,
+25472,
+25480,
+25487,
+25495,
+25503,
+25511,
+25519,
+25527,
+25535,
+25543,
+25550,
+25558,
+25566,
+25574,
+25582,
+25590,
+25598,
+25605,
+25613,
+25621,
+25629,
+25637,
+25645,
+25652,
+25660,
+25668,
+25676,
+25684,
+25691,
+25699,
+25707,
+25715,
+25723,
+25730,
+25738,
+25746,
+25754,
+25762,
+25769,
+25777,
+25785,
+25793,
+25800,
+25808,
+25816,
+25824,
+25831,
+25839,
+25847,
+25854,
+25862,
+25870,
+25878,
+25885,
+25893,
+25901,
+25908,
+25916,
+25924,
+25931,
+25939,
+25947,
+25954,
+25962,
+25970,
+25977,
+25985,
+25993,
+26000,
+26008,
+26016,
+26023,
+26031,
+26039,
+26046,
+26054,
+26061,
+26069,
+26077,
+26084,
+26092,
+26099,
+26107,
+26115,
+26122,
+26130,
+26137,
+26145,
+26153,
+26160,
+26168,
+26175,
+26183,
+26190,
+26198,
+26205,
+26213,
+26221,
+26228,
+26236,
+26243,
+26251,
+26258,
+26266,
+26273,
+26281,
+26288,
+26296,
+26303,
+26311,
+26318,
+26326,
+26333,
+26341,
+26348,
+26356,
+26363,
+26371,
+26378,
+26385,
+26393,
+26400,
+26408,
+26415,
+26423,
+26430,
+26437,
+26445,
+26452,
+26460,
+26467,
+26475,
+26482,
+26489,
+26497,
+26504,
+26512,
+26519,
+26526,
+26534,
+26541,
+26548,
+26556,
+26563,
+26570,
+26578,
+26585,
+26593,
+26600,
+26607,
+26615,
+26622,
+26629,
+26636,
+26644,
+26651,
+26658,
+26666,
+26673,
+26680,
+26688,
+26695,
+26702,
+26709,
+26717,
+26724,
+26731,
+26739,
+26746,
+26753,
+26760,
+26768,
+26775,
+26782,
+26789,
+26797,
+26804,
+26811,
+26818,
+26825,
+26833,
+26840,
+26847,
+26854,
+26861,
+26869,
+26876,
+26883,
+26890,
+26897,
+26905,
+26912,
+26919,
+26926,
+26933,
+26940,
+26948,
+26955,
+26962,
+26969,
+26976,
+26983,
+26990,
+26997,
+27005,
+27012,
+27019,
+27026,
+27033,
+27040,
+27047,
+27054,
+27061,
+27068,
+27076,
+27083,
+27090,
+27097,
+27104,
+27111,
+27118,
+27125,
+27132,
+27139,
+27146,
+27153,
+27160,
+27167,
+27174,
+27181,
+27188,
+27195,
+27202,
+27209,
+27216,
+27223,
+27230,
+27237,
+27244,
+27251,
+27258,
+27265,
+27272,
+27279,
+27286,
+27293,
+27300,
+27307,
+27314,
+27321,
+27328,
+27335,
+27342,
+27349,
+27355,
+27362,
+27369,
+27376,
+27383,
+27390,
+27397,
+27404,
+27411,
+27418,
+27424,
+27431,
+27438,
+27445,
+27452,
+27459,
+27466,
+27472,
+27479,
+27486,
+27493,
+27500,
+27507,
+27513,
+27520,
+27527,
+27534,
+27541,
+27548,
+27554,
+27561,
+27568,
+27575,
+27582,
+27588,
+27595,
+27602,
+27609,
+27615,
+27622,
+27629,
+27636,
+27642,
+27649,
+27656,
+27663,
+27669,
+27676,
+27683,
+27690,
+27696,
+27703,
+27710,
+27716,
+27723,
+27730,
+27736,
+27743,
+27750,
+27757,
+27763,
+27770,
+27777,
+27783,
+27790,
+27797,
+27803,
+27810,
+27816,
+27823,
+27830,
+27836,
+27843,
+27850,
+27856,
+27863,
+27869,
+27876,
+27883,
+27889,
+27896,
+27902,
+27909,
+27916,
+27922,
+27929,
+27935,
+27942,
+27948,
+27955,
+27962,
+27968,
+27975,
+27981,
+27988,
+27994,
+28001,
+28007,
+28014,
+28020,
+28027,
+28033,
+28040,
+28046,
+28053,
+28059,
+28066,
+28072,
+28079,
+28085,
+28092,
+28098,
+28105,
+28111,
+28118,
+28124,
+28131,
+28137,
+28143,
+28150,
+28156,
+28163,
+28169,
+28176,
+28182,
+28188,
+28195,
+28201,
+28208,
+28214,
+28220,
+28227,
+28233,
+28239,
+28246,
+28252,
+28259,
+28265,
+28271,
+28278,
+28284,
+28290,
+28297,
+28303,
+28309,
+28316,
+28322,
+28328,
+28335,
+28341,
+28347,
+28353,
+28360,
+28366,
+28372,
+28379,
+28385,
+28391,
+28397,
+28404,
+28410,
+28416,
+28423,
+28429,
+28435,
+28441,
+28447,
+28454,
+28460,
+28466,
+28472,
+28479,
+28485,
+28491,
+28497,
+28503,
+28510,
+28516,
+28522,
+28528,
+28534,
+28541,
+28547,
+28553,
+28559,
+28565,
+28571,
+28578,
+28584,
+28590,
+28596,
+28602,
+28608,
+28614,
+28620,
+28627,
+28633,
+28639,
+28645,
+28651,
+28657,
+28663,
+28669,
+28675,
+28681,
+28687,
+28694,
+28700,
+28706,
+28712,
+28718,
+28724,
+28730,
+28736,
+28742,
+28748,
+28754,
+28760,
+28766,
+28772,
+28778,
+28784,
+28790,
+28796,
+28802,
+28808,
+28814,
+28820,
+28826,
+28832,
+28838,
+28844,
+28850,
+28856,
+28862,
+28868,
+28874,
+28880,
+28886,
+28891,
+28897,
+28903,
+28909,
+28915,
+28921,
+28927,
+28933,
+28939,
+28945,
+28951,
+28956,
+28962,
+28968,
+28974,
+28980,
+28986,
+28992,
+28997,
+29003,
+29009,
+29015,
+29021,
+29027,
+29033,
+29038,
+29044,
+29050,
+29056,
+29062,
+29067,
+29073,
+29079,
+29085,
+29091,
+29096,
+29102,
+29108,
+29114,
+29119,
+29125,
+29131,
+29137,
+29142,
+29148,
+29154,
+29160,
+29165,
+29171,
+29177,
+29183,
+29188,
+29194,
+29200,
+29205,
+29211,
+29217,
+29222,
+29228,
+29234,
+29239,
+29245,
+29251,
+29256,
+29262,
+29268,
+29273,
+29279,
+29285,
+29290,
+29296,
+29302,
+29307,
+29313,
+29318,
+29324,
+29330,
+29335,
+29341,
+29346,
+29352,
+29358,
+29363,
+29369,
+29374,
+29380,
+29385,
+29391,
+29397,
+29402,
+29408,
+29413,
+29419,
+29424,
+29430,
+29435,
+29441,
+29446,
+29452,
+29457,
+29463,
+29468,
+29474,
+29479,
+29485,
+29490,
+29496,
+29501,
+29507,
+29512,
+29518,
+29523,
+29529,
+29534,
+29539,
+29545,
+29550,
+29556,
+29561,
+29567,
+29572,
+29577,
+29583,
+29588,
+29594,
+29599,
+29604,
+29610,
+29615,
+29621,
+29626,
+29631,
+29637,
+29642,
+29647,
+29653,
+29658,
+29663,
+29669,
+29674,
+29679,
+29685,
+29690,
+29695,
+29701,
+29706,
+29711,
+29717,
+29722,
+29727,
+29732,
+29738,
+29743,
+29748,
+29753,
+29759,
+29764,
+29769,
+29774,
+29780,
+29785,
+29790,
+29795,
+29801,
+29806,
+29811,
+29816,
+29822,
+29827,
+29832,
+29837,
+29842,
+29848,
+29853,
+29858,
+29863,
+29868,
+29873,
+29879,
+29884,
+29889,
+29894,
+29899,
+29904,
+29909,
+29915,
+29920,
+29925,
+29930,
+29935,
+29940,
+29945,
+29950,
+29955,
+29961,
+29966,
+29971,
+29976,
+29981,
+29986,
+29991,
+29996,
+30001,
+30006,
+30011,
+30016,
+30021,
+30026,
+30031,
+30036,
+30041,
+30046,
+30051,
+30056,
+30061,
+30066,
+30071,
+30076,
+30081,
+30086,
+30091,
+30096,
+30101,
+30106,
+30111,
+30116,
+30121,
+30126,
+30131,
+30136,
+30141,
+30146,
+30151,
+30156,
+30160,
+30165,
+30170,
+30175,
+30180,
+30185,
+30190,
+30195,
+30200,
+30205,
+30209,
+30214,
+30219,
+30224,
+30229,
+30234,
+30238,
+30243,
+30248,
+30253,
+30258,
+30263,
+30267,
+30272,
+30277,
+30282,
+30287,
+30291,
+30296,
+30301,
+30306,
+30311,
+30315,
+30320,
+30325,
+30330,
+30334,
+30339,
+30344,
+30349,
+30353,
+30358,
+30363,
+30368,
+30372,
+30377,
+30382,
+30386,
+30391,
+30396,
+30400,
+30405,
+30410,
+30415,
+30419,
+30424,
+30429,
+30433,
+30438,
+30442,
+30447,
+30452,
+30456,
+30461,
+30466,
+30470,
+30475,
+30480,
+30484,
+30489,
+30493,
+30498,
+30503,
+30507,
+30512,
+30516,
+30521,
+30525,
+30530,
+30535,
+30539,
+30544,
+30548,
+30553,
+30557,
+30562,
+30566,
+30571,
+30575,
+30580,
+30584,
+30589,
+30593,
+30598,
+30602,
+30607,
+30611,
+30616,
+30620,
+30625,
+30629,
+30634,
+30638,
+30643,
+30647,
+30652,
+30656,
+30660,
+30665,
+30669,
+30674,
+30678,
+30683,
+30687,
+30691,
+30696,
+30700,
+30705,
+30709,
+30713,
+30718,
+30722,
+30726,
+30731,
+30735,
+30739,
+30744,
+30748,
+30753,
+30757,
+30761,
+30766,
+30770,
+30774,
+30778,
+30783,
+30787,
+30791,
+30796,
+30800,
+30804,
+30809,
+30813,
+30817,
+30821,
+30826,
+30830,
+30834,
+30838,
+30843,
+30847,
+30851,
+30855,
+30860,
+30864,
+30868,
+30872,
+30876,
+30881,
+30885,
+30889,
+30893,
+30897,
+30902,
+30906,
+30910,
+30914,
+30918,
+30922,
+30927,
+30931,
+30935,
+30939,
+30943,
+30947,
+30951,
+30955,
+30960,
+30964,
+30968,
+30972,
+30976,
+30980,
+30984,
+30988,
+30992,
+30996,
+31001,
+31005,
+31009,
+31013,
+31017,
+31021,
+31025,
+31029,
+31033,
+31037,
+31041,
+31045,
+31049,
+31053,
+31057,
+31061,
+31065,
+31069,
+31073,
+31077,
+31081,
+31085,
+31089,
+31093,
+31097,
+31101,
+31105,
+31109,
+31113,
+31117,
+31121,
+31124,
+31128,
+31132,
+31136,
+31140,
+31144,
+31148,
+31152,
+31156,
+31160,
+31164,
+31167,
+31171,
+31175,
+31179,
+31183,
+31187,
+31191,
+31194,
+31198,
+31202,
+31206,
+31210,
+31214,
+31217,
+31221,
+31225,
+31229,
+31233,
+31236,
+31240,
+31244,
+31248,
+31252,
+31255,
+31259,
+31263,
+31267,
+31270,
+31274,
+31278,
+31282,
+31285,
+31289,
+31293,
+31297,
+31300,
+31304,
+31308,
+31311,
+31315,
+31319,
+31323,
+31326,
+31330,
+31334,
+31337,
+31341,
+31345,
+31348,
+31352,
+31356,
+31359,
+31363,
+31366,
+31370,
+31374,
+31377,
+31381,
+31385,
+31388,
+31392,
+31395,
+31399,
+31403,
+31406,
+31410,
+31413,
+31417,
+31420,
+31424,
+31428,
+31431,
+31435,
+31438,
+31442,
+31445,
+31449,
+31452,
+31456,
+31459,
+31463,
+31466,
+31470,
+31473,
+31477,
+31480,
+31484,
+31487,
+31491,
+31494,
+31498,
+31501,
+31505,
+31508,
+31512,
+31515,
+31518,
+31522,
+31525,
+31529,
+31532,
+31536,
+31539,
+31542,
+31546,
+31549,
+31553,
+31556,
+31559,
+31563,
+31566,
+31569,
+31573,
+31576,
+31580,
+31583,
+31586,
+31590,
+31593,
+31596,
+31600,
+31603,
+31606,
+31610,
+31613,
+31616,
+31619,
+31623,
+31626,
+31629,
+31633,
+31636,
+31639,
+31642,
+31646,
+31649,
+31652,
+31655,
+31659,
+31662,
+31665,
+31668,
+31672,
+31675,
+31678,
+31681,
+31684,
+31688,
+31691,
+31694,
+31697,
+31700,
+31704,
+31707,
+31710,
+31713,
+31716,
+31719,
+31723,
+31726,
+31729,
+31732,
+31735,
+31738,
+31741,
+31744,
+31748,
+31751,
+31754,
+31757,
+31760,
+31763,
+31766,
+31769,
+31772,
+31775,
+31778,
+31781,
+31785,
+31788,
+31791,
+31794,
+31797,
+31800,
+31803,
+31806,
+31809,
+31812,
+31815,
+31818,
+31821,
+31824,
+31827,
+31830,
+31833,
+31836,
+31839,
+31842,
+31845,
+31848,
+31851,
+31854,
+31856,
+31859,
+31862,
+31865,
+31868,
+31871,
+31874,
+31877,
+31880,
+31883,
+31886,
+31889,
+31891,
+31894,
+31897,
+31900,
+31903,
+31906,
+31909,
+31911,
+31914,
+31917,
+31920,
+31923,
+31926,
+31929,
+31931,
+31934,
+31937,
+31940,
+31943,
+31945,
+31948,
+31951,
+31954,
+31957,
+31959,
+31962,
+31965,
+31968,
+31970,
+31973,
+31976,
+31979,
+31981,
+31984,
+31987,
+31989,
+31992,
+31995,
+31998,
+32000,
+32003,
+32006,
+32008,
+32011,
+32014,
+32016,
+32019,
+32022,
+32024,
+32027,
+32030,
+32032,
+32035,
+32038,
+32040,
+32043,
+32046,
+32048,
+32051,
+32053,
+32056,
+32059,
+32061,
+32064,
+32066,
+32069,
+32072,
+32074,
+32077,
+32079,
+32082,
+32084,
+32087,
+32089,
+32092,
+32095,
+32097,
+32100,
+32102,
+32105,
+32107,
+32110,
+32112,
+32115,
+32117,
+32120,
+32122,
+32125,
+32127,
+32130,
+32132,
+32134,
+32137,
+32139,
+32142,
+32144,
+32147,
+32149,
+32152,
+32154,
+32156,
+32159,
+32161,
+32164,
+32166,
+32168,
+32171,
+32173,
+32176,
+32178,
+32180,
+32183,
+32185,
+32187,
+32190,
+32192,
+32194,
+32197,
+32199,
+32201,
+32204,
+32206,
+32208,
+32211,
+32213,
+32215,
+32218,
+32220,
+32222,
+32224,
+32227,
+32229,
+32231,
+32233,
+32236,
+32238,
+32240,
+32242,
+32245,
+32247,
+32249,
+32251,
+32254,
+32256,
+32258,
+32260,
+32262,
+32265,
+32267,
+32269,
+32271,
+32273,
+32275,
+32278,
+32280,
+32282,
+32284,
+32286,
+32288,
+32291,
+32293,
+32295,
+32297,
+32299,
+32301,
+32303,
+32305,
+32307,
+32310,
+32312,
+32314,
+32316,
+32318,
+32320,
+32322,
+32324,
+32326,
+32328,
+32330,
+32332,
+32334,
+32336,
+32338,
+32340,
+32342,
+32344,
+32346,
+32348,
+32350,
+32352,
+32354,
+32356,
+32358,
+32360,
+32362,
+32364,
+32366,
+32368,
+32370,
+32372,
+32374,
+32376,
+32378,
+32380,
+32382,
+32384,
+32386,
+32387,
+32389,
+32391,
+32393,
+32395,
+32397,
+32399,
+32401,
+32403,
+32404,
+32406,
+32408,
+32410,
+32412,
+32414,
+32416,
+32417,
+32419,
+32421,
+32423,
+32425,
+32426,
+32428,
+32430,
+32432,
+32434,
+32435,
+32437,
+32439,
+32441,
+32443,
+32444,
+32446,
+32448,
+32450,
+32451,
+32453,
+32455,
+32456,
+32458,
+32460,
+32462,
+32463,
+32465,
+32467,
+32468,
+32470,
+32472,
+32473,
+32475,
+32477,
+32478,
+32480,
+32482,
+32483,
+32485,
+32487,
+32488,
+32490,
+32492,
+32493,
+32495,
+32496,
+32498,
+32500,
+32501,
+32503,
+32504,
+32506,
+32508,
+32509,
+32511,
+32512,
+32514,
+32515,
+32517,
+32519,
+32520,
+32522,
+32523,
+32525,
+32526,
+32528,
+32529,
+32531,
+32532,
+32534,
+32535,
+32537,
+32538,
+32540,
+32541,
+32543,
+32544,
+32546,
+32547,
+32548,
+32550,
+32551,
+32553,
+32554,
+32556,
+32557,
+32558,
+32560,
+32561,
+32563,
+32564,
+32565,
+32567,
+32568,
+32570,
+32571,
+32572,
+32574,
+32575,
+32576,
+32578,
+32579,
+32580,
+32582,
+32583,
+32584,
+32586,
+32587,
+32588,
+32590,
+32591,
+32592,
+32594,
+32595,
+32596,
+32597,
+32599,
+32600,
+32601,
+32602,
+32604,
+32605,
+32606,
+32607,
+32609,
+32610,
+32611,
+32612,
+32614,
+32615,
+32616,
+32617,
+32618,
+32620,
+32621,
+32622,
+32623,
+32624,
+32625,
+32627,
+32628,
+32629,
+32630,
+32631,
+32632,
+32634,
+32635,
+32636,
+32637,
+32638,
+32639,
+32640,
+32641,
+32642,
+32644,
+32645,
+32646,
+32647,
+32648,
+32649,
+32650,
+32651,
+32652,
+32653,
+32654,
+32655,
+32656,
+32657,
+32658,
+32659,
+32660,
+32661,
+32662,
+32663,
+32664,
+32665,
+32666,
+32667,
+32668,
+32669,
+32670,
+32671,
+32672,
+32673,
+32674,
+32675,
+32676,
+32677,
+32678,
+32679,
+32680,
+32680,
+32681,
+32682,
+32683,
+32684,
+32685,
+32686,
+32687,
+32688,
+32688,
+32689,
+32690,
+32691,
+32692,
+32693,
+32694,
+32694,
+32695,
+32696,
+32697,
+32698,
+32699,
+32699,
+32700,
+32701,
+32702,
+32703,
+32703,
+32704,
+32705,
+32706,
+32706,
+32707,
+32708,
+32709,
+32709,
+32710,
+32711,
+32712,
+32712,
+32713,
+32714,
+32714,
+32715,
+32716,
+32717,
+32717,
+32718,
+32719,
+32719,
+32720,
+32721,
+32721,
+32722,
+32723,
+32723,
+32724,
+32725,
+32725,
+32726,
+32726,
+32727,
+32728,
+32728,
+32729,
+32729,
+32730,
+32731,
+32731,
+32732,
+32732,
+32733,
+32734,
+32734,
+32735,
+32735,
+32736,
+32736,
+32737,
+32737,
+32738,
+32738,
+32739,
+32739,
+32740,
+32740,
+32741,
+32741,
+32742,
+32742,
+32743,
+32743,
+32744,
+32744,
+32745,
+32745,
+32746,
+32746,
+32747,
+32747,
+32747,
+32748,
+32748,
+32749,
+32749,
+32750,
+32750,
+32750,
+32751,
+32751,
+32751,
+32752,
+32752,
+32753,
+32753,
+32753,
+32754,
+32754,
+32754,
+32755,
+32755,
+32755,
+32756,
+32756,
+32756,
+32757,
+32757,
+32757,
+32758,
+32758,
+32758,
+32758,
+32759,
+32759,
+32759,
+32759,
+32760,
+32760,
+32760,
+32760,
+32761,
+32761,
+32761,
+32761,
+32762,
+32762,
+32762,
+32762,
+32762,
+32763,
+32763,
+32763,
+32763,
+32763,
+32764,
+32764,
+32764,
+32764,
+32764,
+32764,
+32764,
+32765,
+32765,
+32765,
+32765,
+32765,
+32765,
+32765,
+32765,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32767,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32766,
+32765,
+32765,
+32765,
+32765,
+32765,
+32765,
+32765,
+32765,
+32764,
+32764,
+32764,
+32764,
+32764,
+32764,
+32764,
+32763,
+32763,
+32763,
+32763,
+32763,
+32762,
+32762,
+32762,
+32762,
+32762,
+32761,
+32761,
+32761,
+32761,
+32760,
+32760,
+32760,
+32760,
+32759,
+32759,
+32759,
+32759,
+32758,
+32758,
+32758,
+32758,
+32757,
+32757,
+32757,
+32756,
+32756,
+32756,
+32755,
+32755,
+32755,
+32754,
+32754,
+32754,
+32753,
+32753,
+32753,
+32752,
+32752,
+32751,
+32751,
+32751,
+32750,
+32750,
+32750,
+32749,
+32749,
+32748,
+32748,
+32747,
+32747,
+32747,
+32746,
+32746,
+32745,
+32745,
+32744,
+32744,
+32743,
+32743,
+32742,
+32742,
+32741,
+32741,
+32740,
+32740,
+32739,
+32739,
+32738,
+32738,
+32737,
+32737,
+32736,
+32736,
+32735,
+32735,
+32734,
+32734,
+32733,
+32732,
+32732,
+32731,
+32731,
+32730,
+32729,
+32729,
+32728,
+32728,
+32727,
+32726,
+32726,
+32725,
+32725,
+32724,
+32723,
+32723,
+32722,
+32721,
+32721,
+32720,
+32719,
+32719,
+32718,
+32717,
+32717,
+32716,
+32715,
+32714,
+32714,
+32713,
+32712,
+32712,
+32711,
+32710,
+32709,
+32709,
+32708,
+32707,
+32706,
+32706,
+32705,
+32704,
+32703,
+32703,
+32702,
+32701,
+32700,
+32699,
+32699,
+32698,
+32697,
+32696,
+32695,
+32694,
+32694,
+32693,
+32692,
+32691,
+32690,
+32689,
+32688,
+32688,
+32687,
+32686,
+32685,
+32684,
+32683,
+32682,
+32681,
+32680,
+32680,
+32679,
+32678,
+32677,
+32676,
+32675,
+32674,
+32673,
+32672,
+32671,
+32670,
+32669,
+32668,
+32667,
+32666,
+32665,
+32664,
+32663,
+32662,
+32661,
+32660,
+32659,
+32658,
+32657,
+32656,
+32655,
+32654,
+32653,
+32652,
+32651,
+32650,
+32649,
+32648,
+32647,
+32646,
+32645,
+32644,
+32642,
+32641,
+32640,
+32639,
+32638,
+32637,
+32636,
+32635,
+32634,
+32632,
+32631,
+32630,
+32629,
+32628,
+32627,
+32625,
+32624,
+32623,
+32622,
+32621,
+32620,
+32618,
+32617,
+32616,
+32615,
+32614,
+32612,
+32611,
+32610,
+32609,
+32607,
+32606,
+32605,
+32604,
+32602,
+32601,
+32600,
+32599,
+32597,
+32596,
+32595,
+32594,
+32592,
+32591,
+32590,
+32588,
+32587,
+32586,
+32584,
+32583,
+32582,
+32580,
+32579,
+32578,
+32576,
+32575,
+32574,
+32572,
+32571,
+32570,
+32568,
+32567,
+32565,
+32564,
+32563,
+32561,
+32560,
+32558,
+32557,
+32556,
+32554,
+32553,
+32551,
+32550,
+32548,
+32547,
+32546,
+32544,
+32543,
+32541,
+32540,
+32538,
+32537,
+32535,
+32534,
+32532,
+32531,
+32529,
+32528,
+32526,
+32525,
+32523,
+32522,
+32520,
+32519,
+32517,
+32515,
+32514,
+32512,
+32511,
+32509,
+32508,
+32506,
+32504,
+32503,
+32501,
+32500,
+32498,
+32496,
+32495,
+32493,
+32492,
+32490,
+32488,
+32487,
+32485,
+32483,
+32482,
+32480,
+32478,
+32477,
+32475,
+32473,
+32472,
+32470,
+32468,
+32467,
+32465,
+32463,
+32462,
+32460,
+32458,
+32456,
+32455,
+32453,
+32451,
+32450,
+32448,
+32446,
+32444,
+32443,
+32441,
+32439,
+32437,
+32435,
+32434,
+32432,
+32430,
+32428,
+32426,
+32425,
+32423,
+32421,
+32419,
+32417,
+32416,
+32414,
+32412,
+32410,
+32408,
+32406,
+32404,
+32403,
+32401,
+32399,
+32397,
+32395,
+32393,
+32391,
+32389,
+32387,
+32386,
+32384,
+32382,
+32380,
+32378,
+32376,
+32374,
+32372,
+32370,
+32368,
+32366,
+32364,
+32362,
+32360,
+32358,
+32356,
+32354,
+32352,
+32350,
+32348,
+32346,
+32344,
+32342,
+32340,
+32338,
+32336,
+32334,
+32332,
+32330,
+32328,
+32326,
+32324,
+32322,
+32320,
+32318,
+32316,
+32314,
+32312,
+32310,
+32307,
+32305,
+32303,
+32301,
+32299,
+32297,
+32295,
+32293,
+32291,
+32288,
+32286,
+32284,
+32282,
+32280,
+32278,
+32275,
+32273,
+32271,
+32269,
+32267,
+32265,
+32262,
+32260,
+32258,
+32256,
+32254,
+32251,
+32249,
+32247,
+32245,
+32242,
+32240,
+32238,
+32236,
+32233,
+32231,
+32229,
+32227,
+32224,
+32222,
+32220,
+32218,
+32215,
+32213,
+32211,
+32208,
+32206,
+32204,
+32201,
+32199,
+32197,
+32194,
+32192,
+32190,
+32187,
+32185,
+32183,
+32180,
+32178,
+32176,
+32173,
+32171,
+32168,
+32166,
+32164,
+32161,
+32159,
+32156,
+32154,
+32152,
+32149,
+32147,
+32144,
+32142,
+32139,
+32137,
+32134,
+32132,
+32130,
+32127,
+32125,
+32122,
+32120,
+32117,
+32115,
+32112,
+32110,
+32107,
+32105,
+32102,
+32100,
+32097,
+32095,
+32092,
+32089,
+32087,
+32084,
+32082,
+32079,
+32077,
+32074,
+32072,
+32069,
+32066,
+32064,
+32061,
+32059,
+32056,
+32053,
+32051,
+32048,
+32046,
+32043,
+32040,
+32038,
+32035,
+32032,
+32030,
+32027,
+32024,
+32022,
+32019,
+32016,
+32014,
+32011,
+32008,
+32006,
+32003,
+32000,
+31998,
+31995,
+31992,
+31989,
+31987,
+31984,
+31981,
+31979,
+31976,
+31973,
+31970,
+31968,
+31965,
+31962,
+31959,
+31957,
+31954,
+31951,
+31948,
+31945,
+31943,
+31940,
+31937,
+31934,
+31931,
+31929,
+31926,
+31923,
+31920,
+31917,
+31914,
+31911,
+31909,
+31906,
+31903,
+31900,
+31897,
+31894,
+31891,
+31889,
+31886,
+31883,
+31880,
+31877,
+31874,
+31871,
+31868,
+31865,
+31862,
+31859,
+31856,
+31854,
+31851,
+31848,
+31845,
+31842,
+31839,
+31836,
+31833,
+31830,
+31827,
+31824,
+31821,
+31818,
+31815,
+31812,
+31809,
+31806,
+31803,
+31800,
+31797,
+31794,
+31791,
+31788,
+31785,
+31781,
+31778,
+31775,
+31772,
+31769,
+31766,
+31763,
+31760,
+31757,
+31754,
+31751,
+31748,
+31744,
+31741,
+31738,
+31735,
+31732,
+31729,
+31726,
+31723,
+31719,
+31716,
+31713,
+31710,
+31707,
+31704,
+31700,
+31697,
+31694,
+31691,
+31688,
+31684,
+31681,
+31678,
+31675,
+31672,
+31668,
+31665,
+31662,
+31659,
+31655,
+31652,
+31649,
+31646,
+31642,
+31639,
+31636,
+31633,
+31629,
+31626,
+31623,
+31619,
+31616,
+31613,
+31610,
+31606,
+31603,
+31600,
+31596,
+31593,
+31590,
+31586,
+31583,
+31580,
+31576,
+31573,
+31569,
+31566,
+31563,
+31559,
+31556,
+31553,
+31549,
+31546,
+31542,
+31539,
+31536,
+31532,
+31529,
+31525,
+31522,
+31518,
+31515,
+31512,
+31508,
+31505,
+31501,
+31498,
+31494,
+31491,
+31487,
+31484,
+31480,
+31477,
+31473,
+31470,
+31466,
+31463,
+31459,
+31456,
+31452,
+31449,
+31445,
+31442,
+31438,
+31435,
+31431,
+31428,
+31424,
+31420,
+31417,
+31413,
+31410,
+31406,
+31403,
+31399,
+31395,
+31392,
+31388,
+31385,
+31381,
+31377,
+31374,
+31370,
+31366,
+31363,
+31359,
+31356,
+31352,
+31348,
+31345,
+31341,
+31337,
+31334,
+31330,
+31326,
+31323,
+31319,
+31315,
+31311,
+31308,
+31304,
+31300,
+31297,
+31293,
+31289,
+31285,
+31282,
+31278,
+31274,
+31270,
+31267,
+31263,
+31259,
+31255,
+31252,
+31248,
+31244,
+31240,
+31236,
+31233,
+31229,
+31225,
+31221,
+31217,
+31214,
+31210,
+31206,
+31202,
+31198,
+31194,
+31191,
+31187,
+31183,
+31179,
+31175,
+31171,
+31167,
+31164,
+31160,
+31156,
+31152,
+31148,
+31144,
+31140,
+31136,
+31132,
+31128,
+31124,
+31121,
+31117,
+31113,
+31109,
+31105,
+31101,
+31097,
+31093,
+31089,
+31085,
+31081,
+31077,
+31073,
+31069,
+31065,
+31061,
+31057,
+31053,
+31049,
+31045,
+31041,
+31037,
+31033,
+31029,
+31025,
+31021,
+31017,
+31013,
+31009,
+31005,
+31001,
+30996,
+30992,
+30988,
+30984,
+30980,
+30976,
+30972,
+30968,
+30964,
+30960,
+30955,
+30951,
+30947,
+30943,
+30939,
+30935,
+30931,
+30927,
+30922,
+30918,
+30914,
+30910,
+30906,
+30902,
+30897,
+30893,
+30889,
+30885,
+30881,
+30876,
+30872,
+30868,
+30864,
+30860,
+30855,
+30851,
+30847,
+30843,
+30838,
+30834,
+30830,
+30826,
+30821,
+30817,
+30813,
+30809,
+30804,
+30800,
+30796,
+30791,
+30787,
+30783,
+30778,
+30774,
+30770,
+30766,
+30761,
+30757,
+30753,
+30748,
+30744,
+30739,
+30735,
+30731,
+30726,
+30722,
+30718,
+30713,
+30709,
+30705,
+30700,
+30696,
+30691,
+30687,
+30683,
+30678,
+30674,
+30669,
+30665,
+30660,
+30656,
+30652,
+30647,
+30643,
+30638,
+30634,
+30629,
+30625,
+30620,
+30616,
+30611,
+30607,
+30602,
+30598,
+30593,
+30589,
+30584,
+30580,
+30575,
+30571,
+30566,
+30562,
+30557,
+30553,
+30548,
+30544,
+30539,
+30535,
+30530,
+30525,
+30521,
+30516,
+30512,
+30507,
+30503,
+30498,
+30493,
+30489,
+30484,
+30480,
+30475,
+30470,
+30466,
+30461,
+30456,
+30452,
+30447,
+30442,
+30438,
+30433,
+30429,
+30424,
+30419,
+30415,
+30410,
+30405,
+30400,
+30396,
+30391,
+30386,
+30382,
+30377,
+30372,
+30368,
+30363,
+30358,
+30353,
+30349,
+30344,
+30339,
+30334,
+30330,
+30325,
+30320,
+30315,
+30311,
+30306,
+30301,
+30296,
+30291,
+30287,
+30282,
+30277,
+30272,
+30267,
+30263,
+30258,
+30253,
+30248,
+30243,
+30238,
+30234,
+30229,
+30224,
+30219,
+30214,
+30209,
+30205,
+30200,
+30195,
+30190,
+30185,
+30180,
+30175,
+30170,
+30165,
+30160,
+30156,
+30151,
+30146,
+30141,
+30136,
+30131,
+30126,
+30121,
+30116,
+30111,
+30106,
+30101,
+30096,
+30091,
+30086,
+30081,
+30076,
+30071,
+30066,
+30061,
+30056,
+30051,
+30046,
+30041,
+30036,
+30031,
+30026,
+30021,
+30016,
+30011,
+30006,
+30001,
+29996,
+29991,
+29986,
+29981,
+29976,
+29971,
+29966,
+29961,
+29955,
+29950,
+29945,
+29940,
+29935,
+29930,
+29925,
+29920,
+29915,
+29909,
+29904,
+29899,
+29894,
+29889,
+29884,
+29879,
+29873,
+29868,
+29863,
+29858,
+29853,
+29848,
+29842,
+29837,
+29832,
+29827,
+29822,
+29816,
+29811,
+29806,
+29801,
+29795,
+29790,
+29785,
+29780,
+29774,
+29769,
+29764,
+29759,
+29753,
+29748,
+29743,
+29738,
+29732,
+29727,
+29722,
+29717,
+29711,
+29706,
+29701,
+29695,
+29690,
+29685,
+29679,
+29674,
+29669,
+29663,
+29658,
+29653,
+29647,
+29642,
+29637,
+29631,
+29626,
+29621,
+29615,
+29610,
+29604,
+29599,
+29594,
+29588,
+29583,
+29577,
+29572,
+29567,
+29561,
+29556,
+29550,
+29545,
+29539,
+29534,
+29529,
+29523,
+29518,
+29512,
+29507,
+29501,
+29496,
+29490,
+29485,
+29479,
+29474,
+29468,
+29463,
+29457,
+29452,
+29446,
+29441,
+29435,
+29430,
+29424,
+29419,
+29413,
+29408,
+29402,
+29397,
+29391,
+29385,
+29380,
+29374,
+29369,
+29363,
+29358,
+29352,
+29346,
+29341,
+29335,
+29330,
+29324,
+29318,
+29313,
+29307,
+29302,
+29296,
+29290,
+29285,
+29279,
+29273,
+29268,
+29262,
+29256,
+29251,
+29245,
+29239,
+29234,
+29228,
+29222,
+29217,
+29211,
+29205,
+29200,
+29194,
+29188,
+29183,
+29177,
+29171,
+29165,
+29160,
+29154,
+29148,
+29142,
+29137,
+29131,
+29125,
+29119,
+29114,
+29108,
+29102,
+29096,
+29091,
+29085,
+29079,
+29073,
+29067,
+29062,
+29056,
+29050,
+29044,
+29038,
+29033,
+29027,
+29021,
+29015,
+29009,
+29003,
+28997,
+28992,
+28986,
+28980,
+28974,
+28968,
+28962,
+28956,
+28951,
+28945,
+28939,
+28933,
+28927,
+28921,
+28915,
+28909,
+28903,
+28897,
+28891,
+28886,
+28880,
+28874,
+28868,
+28862,
+28856,
+28850,
+28844,
+28838,
+28832,
+28826,
+28820,
+28814,
+28808,
+28802,
+28796,
+28790,
+28784,
+28778,
+28772,
+28766,
+28760,
+28754,
+28748,
+28742,
+28736,
+28730,
+28724,
+28718,
+28712,
+28706,
+28700,
+28694,
+28687,
+28681,
+28675,
+28669,
+28663,
+28657,
+28651,
+28645,
+28639,
+28633,
+28627,
+28620,
+28614,
+28608,
+28602,
+28596,
+28590,
+28584,
+28578,
+28571,
+28565,
+28559,
+28553,
+28547,
+28541,
+28534,
+28528,
+28522,
+28516,
+28510,
+28503,
+28497,
+28491,
+28485,
+28479,
+28472,
+28466,
+28460,
+28454,
+28447,
+28441,
+28435,
+28429,
+28423,
+28416,
+28410,
+28404,
+28397,
+28391,
+28385,
+28379,
+28372,
+28366,
+28360,
+28353,
+28347,
+28341,
+28335,
+28328,
+28322,
+28316,
+28309,
+28303,
+28297,
+28290,
+28284,
+28278,
+28271,
+28265,
+28259,
+28252,
+28246,
+28239,
+28233,
+28227,
+28220,
+28214,
+28208,
+28201,
+28195,
+28188,
+28182,
+28176,
+28169,
+28163,
+28156,
+28150,
+28143,
+28137,
+28131,
+28124,
+28118,
+28111,
+28105,
+28098,
+28092,
+28085,
+28079,
+28072,
+28066,
+28059,
+28053,
+28046,
+28040,
+28033,
+28027,
+28020,
+28014,
+28007,
+28001,
+27994,
+27988,
+27981,
+27975,
+27968,
+27962,
+27955,
+27948,
+27942,
+27935,
+27929,
+27922,
+27916,
+27909,
+27902,
+27896,
+27889,
+27883,
+27876,
+27869,
+27863,
+27856,
+27850,
+27843,
+27836,
+27830,
+27823,
+27816,
+27810,
+27803,
+27797,
+27790,
+27783,
+27777,
+27770,
+27763,
+27757,
+27750,
+27743,
+27736,
+27730,
+27723,
+27716,
+27710,
+27703,
+27696,
+27690,
+27683,
+27676,
+27669,
+27663,
+27656,
+27649,
+27642,
+27636,
+27629,
+27622,
+27615,
+27609,
+27602,
+27595,
+27588,
+27582,
+27575,
+27568,
+27561,
+27554,
+27548,
+27541,
+27534,
+27527,
+27520,
+27513,
+27507,
+27500,
+27493,
+27486,
+27479,
+27472,
+27466,
+27459,
+27452,
+27445,
+27438,
+27431,
+27424,
+27418,
+27411,
+27404,
+27397,
+27390,
+27383,
+27376,
+27369,
+27362,
+27355,
+27349,
+27342,
+27335,
+27328,
+27321,
+27314,
+27307,
+27300,
+27293,
+27286,
+27279,
+27272,
+27265,
+27258,
+27251,
+27244,
+27237,
+27230,
+27223,
+27216,
+27209,
+27202,
+27195,
+27188,
+27181,
+27174,
+27167,
+27160,
+27153,
+27146,
+27139,
+27132,
+27125,
+27118,
+27111,
+27104,
+27097,
+27090,
+27083,
+27076,
+27068,
+27061,
+27054,
+27047,
+27040,
+27033,
+27026,
+27019,
+27012,
+27005,
+26997,
+26990,
+26983,
+26976,
+26969,
+26962,
+26955,
+26948,
+26940,
+26933,
+26926,
+26919,
+26912,
+26905,
+26897,
+26890,
+26883,
+26876,
+26869,
+26861,
+26854,
+26847,
+26840,
+26833,
+26825,
+26818,
+26811,
+26804,
+26797,
+26789,
+26782,
+26775,
+26768,
+26760,
+26753,
+26746,
+26739,
+26731,
+26724,
+26717,
+26709,
+26702,
+26695,
+26688,
+26680,
+26673,
+26666,
+26658,
+26651,
+26644,
+26636,
+26629,
+26622,
+26615,
+26607,
+26600,
+26593,
+26585,
+26578,
+26570,
+26563,
+26556,
+26548,
+26541,
+26534,
+26526,
+26519,
+26512,
+26504,
+26497,
+26489,
+26482,
+26475,
+26467,
+26460,
+26452,
+26445,
+26437,
+26430,
+26423,
+26415,
+26408,
+26400,
+26393,
+26385,
+26378,
+26371,
+26363,
+26356,
+26348,
+26341,
+26333,
+26326,
+26318,
+26311,
+26303,
+26296,
+26288,
+26281,
+26273,
+26266,
+26258,
+26251,
+26243,
+26236,
+26228,
+26221,
+26213,
+26205,
+26198,
+26190,
+26183,
+26175,
+26168,
+26160,
+26153,
+26145,
+26137,
+26130,
+26122,
+26115,
+26107,
+26099,
+26092,
+26084,
+26077,
+26069,
+26061,
+26054,
+26046,
+26039,
+26031,
+26023,
+26016,
+26008,
+26000,
+25993,
+25985,
+25977,
+25970,
+25962,
+25954,
+25947,
+25939,
+25931,
+25924,
+25916,
+25908,
+25901,
+25893,
+25885,
+25878,
+25870,
+25862,
+25854,
+25847,
+25839,
+25831,
+25824,
+25816,
+25808,
+25800,
+25793,
+25785,
+25777,
+25769,
+25762,
+25754,
+25746,
+25738,
+25730,
+25723,
+25715,
+25707,
+25699,
+25691,
+25684,
+25676,
+25668,
+25660,
+25652,
+25645,
+25637,
+25629,
+25621,
+25613,
+25605,
+25598,
+25590,
+25582,
+25574,
+25566,
+25558,
+25550,
+25543,
+25535,
+25527,
+25519,
+25511,
+25503,
+25495,
+25487,
+25480,
+25472,
+25464,
+25456,
+25448,
+25440,
+25432,
+25424,
+25416,
+25408,
+25400,
+25392,
+25384,
+25376,
+25369,
+25361,
+25353,
+25345,
+25337,
+25329,
+25321,
+25313,
+25305,
+25297,
+25289,
+25281,
+25273,
+25265,
+25257,
+25249,
+25241,
+25233,
+25225,
+25217,
+25209,
+25201,
+25193,
+25185,
+25177,
+25169,
+25161,
+25152,
+25144,
+25136,
+25128,
+25120,
+25112,
+25104,
+25096,
+25088,
+25080,
+25072,
+25064,
+25056,
+25047,
+25039,
+25031,
+25023,
+25015,
+25007,
+24999,
+24991,
+24983,
+24974,
+24966,
+24958,
+24950,
+24942,
+24934,
+24926,
+24917,
+24909,
+24901,
+24893,
+24885,
+24877,
+24868,
+24860,
+24852,
+24844,
+24836,
+24827,
+24819,
+24811,
+24803,
+24795,
+24786,
+24778,
+24770,
+24762,
+24753,
+24745,
+24737,
+24729,
+24720,
+24712,
+24704,
+24696,
+24687,
+24679,
+24671,
+24663,
+24654,
+24646,
+24638,
+24630,
+24621,
+24613,
+24605,
+24596,
+24588,
+24580,
+24571,
+24563,
+24555,
+24546,
+24538,
+24530,
+24521,
+24513,
+24505,
+24496,
+24488,
+24480,
+24471,
+24463,
+24455,
+24446,
+24438,
+24430,
+24421,
+24413,
+24404,
+24396,
+24388,
+24379,
+24371,
+24362,
+24354,
+24346,
+24337,
+24329,
+24320,
+24312,
+24304,
+24295,
+24287,
+24278,
+24270,
+24261,
+24253,
+24244,
+24236,
+24228,
+24219,
+24211,
+24202,
+24194,
+24185,
+24177,
+24168,
+24160,
+24151,
+24143,
+24134,
+24126,
+24117,
+24109,
+24100,
+24092,
+24083,
+24075,
+24066,
+24058,
+24049,
+24041,
+24032,
+24023,
+24015,
+24006,
+23998,
+23989,
+23981,
+23972,
+23964,
+23955,
+23946,
+23938,
+23929,
+23921,
+23912,
+23903,
+23895,
+23886,
+23878,
+23869,
+23860,
+23852,
+23843,
+23835,
+23826,
+23817,
+23809,
+23800,
+23791,
+23783,
+23774,
+23766,
+23757,
+23748,
+23740,
+23731,
+23722,
+23714,
+23705,
+23696,
+23688,
+23679,
+23670,
+23661,
+23653,
+23644,
+23635,
+23627,
+23618,
+23609,
+23601,
+23592,
+23583,
+23574,
+23566,
+23557,
+23548,
+23539,
+23531,
+23522,
+23513,
+23504,
+23496,
+23487,
+23478,
+23469,
+23461,
+23452,
+23443,
+23434,
+23426,
+23417,
+23408,
+23399,
+23390,
+23382,
+23373,
+23364,
+23355,
+23346,
+23337,
+23329,
+23320,
+23311,
+23302,
+23293,
+23284,
+23276,
+23267,
+23258,
+23249,
+23240,
+23231,
+23223,
+23214,
+23205,
+23196,
+23187,
+23178,
+23169,
+23160,
+23151,
+23143,
+23134,
+23125,
+23116,
+23107,
+23098,
+23089,
+23080,
+23071,
+23062,
+23053,
+23045,
+23036,
+23027,
+23018,
+23009,
+23000,
+22991,
+22982,
+22973,
+22964,
+22955,
+22946,
+22937,
+22928,
+22919,
+22910,
+22901,
+22892,
+22883,
+22874,
+22865,
+22856,
+22847,
+22838,
+22829,
+22820,
+22811,
+22802,
+22793,
+22784,
+22775,
+22766,
+22757,
+22748,
+22739,
+22730,
+22721,
+22712,
+22703,
+22694,
+22685,
+22675,
+22666,
+22657,
+22648,
+22639,
+22630,
+22621,
+22612,
+22603,
+22594,
+22585,
+22575,
+22566,
+22557,
+22548,
+22539,
+22530,
+22521,
+22512,
+22503,
+22493,
+22484,
+22475,
+22466,
+22457,
+22448,
+22438,
+22429,
+22420,
+22411,
+22402,
+22393,
+22383,
+22374,
+22365,
+22356,
+22347,
+22338,
+22328,
+22319,
+22310,
+22301,
+22292,
+22282,
+22273,
+22264,
+22255,
+22245,
+22236,
+22227,
+22218,
+22209,
+22199,
+22190,
+22181,
+22172,
+22162,
+22153,
+22144,
+22135,
+22125,
+22116,
+22107,
+22097,
+22088,
+22079,
+22070,
+22060,
+22051,
+22042,
+22032,
+22023,
+22014,
+22004,
+21995,
+21986,
+21977,
+21967,
+21958,
+21949,
+21939,
+21930,
+21921,
+21911,
+21902,
+21893,
+21883,
+21874,
+21864,
+21855,
+21846,
+21836,
+21827,
+21818,
+21808,
+21799,
+21789,
+21780,
+21771,
+21761,
+21752,
+21743,
+21733,
+21724,
+21714,
+21705,
+21695,
+21686,
+21677,
+21667,
+21658,
+21648,
+21639,
+21629,
+21620,
+21611,
+21601,
+21592,
+21582,
+21573,
+21563,
+21554,
+21544,
+21535,
+21525,
+21516,
+21506,
+21497,
+21488,
+21478,
+21469,
+21459,
+21450,
+21440,
+21431,
+21421,
+21412,
+21402,
+21392,
+21383,
+21373,
+21364,
+21354,
+21345,
+21335,
+21326,
+21316,
+21307,
+21297,
+21288,
+21278,
+21268,
+21259,
+21249,
+21240,
+21230,
+21221,
+21211,
+21202,
+21192,
+21182,
+21173,
+21163,
+21154,
+21144,
+21134,
+21125,
+21115,
+21106,
+21096,
+21086,
+21077,
+21067,
+21057,
+21048,
+21038,
+21029,
+21019,
+21009,
+21000,
+20990,
+20980,
+20971,
+20961,
+20951,
+20942,
+20932,
+20922,
+20913,
+20903,
+20893,
+20884,
+20874,
+20864,
+20855,
+20845,
+20835,
+20825,
+20816,
+20806,
+20796,
+20787,
+20777,
+20767,
+20758,
+20748,
+20738,
+20728,
+20719,
+20709,
+20699,
+20689,
+20680,
+20670,
+20660,
+20650,
+20641,
+20631,
+20621,
+20611,
+20602,
+20592,
+20582,
+20572,
+20562,
+20553,
+20543,
+20533,
+20523,
+20513,
+20504,
+20494,
+20484,
+20474,
+20464,
+20455,
+20445,
+20435,
+20425,
+20415,
+20406,
+20396,
+20386,
+20376,
+20366,
+20356,
+20346,
+20337,
+20327,
+20317,
+20307,
+20297,
+20287,
+20277,
+20268,
+20258,
+20248,
+20238,
+20228,
+20218,
+20208,
+20198,
+20188,
+20179,
+20169,
+20159,
+20149,
+20139,
+20129,
+20119,
+20109,
+20099,
+20089,
+20079,
+20070,
+20060,
+20050,
+20040,
+20030,
+20020,
+20010,
+20000,
+19990,
+19980,
+19970,
+19960,
+19950,
+19940,
+19930,
+19920,
+19910,
+19900,
+19890,
+19880,
+19870,
+19860,
+19850,
+19840,
+19830,
+19820,
+19810,
+19800,
+19790,
+19780,
+19770,
+19760,
+19750,
+19740,
+19730,
+19720,
+19710,
+19700,
+19690,
+19680,
+19670,
+19660,
+19650,
+19640,
+19630,
+19620,
+19610,
+19599,
+19589,
+19579,
+19569,
+19559,
+19549,
+19539,
+19529,
+19519,
+19509,
+19499,
+19488,
+19478,
+19468,
+19458,
+19448,
+19438,
+19428,
+19418,
+19408,
+19397,
+19387,
+19377,
+19367,
+19357,
+19347,
+19337,
+19326,
+19316,
+19306,
+19296,
+19286,
+19276,
+19266,
+19255,
+19245,
+19235,
+19225,
+19215,
+19205,
+19194,
+19184,
+19174,
+19164,
+19154,
+19143,
+19133,
+19123,
+19113,
+19103,
+19092,
+19082,
+19072,
+19062,
+19051,
+19041,
+19031,
+19021,
+19011,
+19000,
+18990,
+18980,
+18970,
+18959,
+18949,
+18939,
+18929,
+18918,
+18908,
+18898,
+18888,
+18877,
+18867,
+18857,
+18846,
+18836,
+18826,
+18816,
+18805,
+18795,
+18785,
+18774,
+18764,
+18754,
+18744,
+18733,
+18723,
+18713,
+18702,
+18692,
+18682,
+18671,
+18661,
+18651,
+18640,
+18630,
+18620,
+18609,
+18599,
+18589,
+18578,
+18568,
+18558,
+18547,
+18537,
+18526,
+18516,
+18506,
+18495,
+18485,
+18475,
+18464,
+18454,
+18443,
+18433,
+18423,
+18412,
+18402,
+18392,
+18381,
+18371,
+18360,
+18350,
+18339,
+18329,
+18319,
+18308,
+18298,
+18287,
+18277,
+18267,
+18256,
+18246,
+18235,
+18225,
+18214,
+18204,
+18193,
+18183,
+18173,
+18162,
+18152,
+18141,
+18131,
+18120,
+18110,
+18099,
+18089,
+18078,
+18068,
+18057,
+18047,
+18036,
+18026,
+18015,
+18005,
+17994,
+17984,
+17973,
+17963,
+17952,
+17942,
+17931,
+17921,
+17910,
+17900,
+17889,
+17879,
+17868,
+17858,
+17847,
+17837,
+17826,
+17815,
+17805,
+17794,
+17784,
+17773,
+17763,
+17752,
+17742,
+17731,
+17720,
+17710,
+17699,
+17689,
+17678,
+17668,
+17657,
+17646,
+17636,
+17625,
+17615,
+17604,
+17593,
+17583,
+17572,
+17562,
+17551,
+17540,
+17530,
+17519,
+17509,
+17498,
+17487,
+17477,
+17466,
+17455,
+17445,
+17434,
+17423,
+17413,
+17402,
+17392,
+17381,
+17370,
+17360,
+17349,
+17338,
+17328,
+17317,
+17306,
+17296,
+17285,
+17274,
+17264,
+17253,
+17242,
+17232,
+17221,
+17210,
+17199,
+17189,
+17178,
+17167,
+17157,
+17146,
+17135,
+17124,
+17114,
+17103,
+17092,
+17082,
+17071,
+17060,
+17049,
+17039,
+17028,
+17017,
+17006,
+16996,
+16985,
+16974,
+16964,
+16953,
+16942,
+16931,
+16920,
+16910,
+16899,
+16888,
+16877,
+16867,
+16856,
+16845,
+16834,
+16824,
+16813,
+16802,
+16791,
+16780,
+16770,
+16759,
+16748,
+16737,
+16726,
+16716,
+16705,
+16694,
+16683,
+16672,
+16662,
+16651,
+16640,
+16629,
+16618,
+16607,
+16597,
+16586,
+16575,
+16564,
+16553,
+16542,
+16532,
+16521,
+16510,
+16499,
+16488,
+16477,
+16466,
+16455,
+16445,
+16434,
+16423,
+16412,
+16401,
+16390,
+16379,
+16368,
+16358,
+16347,
+16336,
+16325,
+16314,
+16303,
+16292,
+16281,
+16270,
+16260,
+16249,
+16238,
+16227,
+16216,
+16205,
+16194,
+16183,
+16172,
+16161,
+16150,
+16139,
+16128,
+16117,
+16107,
+16096,
+16085,
+16074,
+16063,
+16052,
+16041,
+16030,
+16019,
+16008,
+15997,
+15986,
+15975,
+15964,
+15953,
+15942,
+15931,
+15920,
+15909,
+15898,
+15887,
+15876,
+15865,
+15854,
+15843,
+15832,
+15821,
+15810,
+15799,
+15788,
+15777,
+15766,
+15755,
+15744,
+15733,
+15722,
+15711,
+15700,
+15689,
+15678,
+15667,
+15656,
+15645,
+15634,
+15623,
+15612,
+15601,
+15590,
+15579,
+15568,
+15556,
+15545,
+15534,
+15523,
+15512,
+15501,
+15490,
+15479,
+15468,
+15457,
+15446,
+15435,
+15424,
+15413,
+15401,
+15390,
+15379,
+15368,
+15357,
+15346,
+15335,
+15324,
+15313,
+15301,
+15290,
+15279,
+15268,
+15257,
+15246,
+15235,
+15224,
+15213,
+15201,
+15190,
+15179,
+15168,
+15157,
+15146,
+15135,
+15123,
+15112,
+15101,
+15090,
+15079,
+15068,
+15056,
+15045,
+15034,
+15023,
+15012,
+15001,
+14989,
+14978,
+14967,
+14956,
+14945,
+14934,
+14922,
+14911,
+14900,
+14889,
+14878,
+14866,
+14855,
+14844,
+14833,
+14822,
+14810,
+14799,
+14788,
+14777,
+14766,
+14754,
+14743,
+14732,
+14721,
+14709,
+14698,
+14687,
+14676,
+14665,
+14653,
+14642,
+14631,
+14620,
+14608,
+14597,
+14586,
+14575,
+14563,
+14552,
+14541,
+14530,
+14518,
+14507,
+14496,
+14484,
+14473,
+14462,
+14451,
+14439,
+14428,
+14417,
+14406,
+14394,
+14383,
+14372,
+14360,
+14349,
+14338,
+14326,
+14315,
+14304,
+14293,
+14281,
+14270,
+14259,
+14247,
+14236,
+14225,
+14213,
+14202,
+14191,
+14179,
+14168,
+14157,
+14145,
+14134,
+14123,
+14111,
+14100,
+14089,
+14077,
+14066,
+14055,
+14043,
+14032,
+14021,
+14009,
+13998,
+13986,
+13975,
+13964,
+13952,
+13941,
+13930,
+13918,
+13907,
+13895,
+13884,
+13873,
+13861,
+13850,
+13839,
+13827,
+13816,
+13804,
+13793,
+13782,
+13770,
+13759,
+13747,
+13736,
+13725,
+13713,
+13702,
+13690,
+13679,
+13667,
+13656,
+13645,
+13633,
+13622,
+13610,
+13599,
+13587,
+13576,
+13565,
+13553,
+13542,
+13530,
+13519,
+13507,
+13496,
+13485,
+13473,
+13462,
+13450,
+13439,
+13427,
+13416,
+13404,
+13393,
+13381,
+13370,
+13358,
+13347,
+13335,
+13324,
+13312,
+13301,
+13290,
+13278,
+13267,
+13255,
+13244,
+13232,
+13221,
+13209,
+13198,
+13186,
+13175,
+13163,
+13152,
+13140,
+13129,
+13117,
+13106,
+13094,
+13082,
+13071,
+13059,
+13048,
+13036,
+13025,
+13013,
+13002,
+12990,
+12979,
+12967,
+12956,
+12944,
+12933,
+12921,
+12909,
+12898,
+12886,
+12875,
+12863,
+12852,
+12840,
+12829,
+12817,
+12805,
+12794,
+12782,
+12771,
+12759,
+12748,
+12736,
+12724,
+12713,
+12701,
+12690,
+12678,
+12666,
+12655,
+12643,
+12632,
+12620,
+12609,
+12597,
+12585,
+12574,
+12562,
+12550,
+12539,
+12527,
+12516,
+12504,
+12492,
+12481,
+12469,
+12458,
+12446,
+12434,
+12423,
+12411,
+12399,
+12388,
+12376,
+12365,
+12353,
+12341,
+12330,
+12318,
+12306,
+12295,
+12283,
+12271,
+12260,
+12248,
+12236,
+12225,
+12213,
+12201,
+12190,
+12178,
+12166,
+12155,
+12143,
+12131,
+12120,
+12108,
+12096,
+12085,
+12073,
+12061,
+12050,
+12038,
+12026,
+12015,
+12003,
+11991,
+11980,
+11968,
+11956,
+11944,
+11933,
+11921,
+11909,
+11898,
+11886,
+11874,
+11862,
+11851,
+11839,
+11827,
+11816,
+11804,
+11792,
+11780,
+11769,
+11757,
+11745,
+11734,
+11722,
+11710,
+11698,
+11687,
+11675,
+11663,
+11651,
+11640,
+11628,
+11616,
+11604,
+11593,
+11581,
+11569,
+11557,
+11546,
+11534,
+11522,
+11510,
+11499,
+11487,
+11475,
+11463,
+11451,
+11440,
+11428,
+11416,
+11404,
+11393,
+11381,
+11369,
+11357,
+11345,
+11334,
+11322,
+11310,
+11298,
+11286,
+11275,
+11263,
+11251,
+11239,
+11227,
+11216,
+11204,
+11192,
+11180,
+11168,
+11157,
+11145,
+11133,
+11121,
+11109,
+11098,
+11086,
+11074,
+11062,
+11050,
+11038,
+11027,
+11015,
+11003,
+10991,
+10979,
+10967,
+10956,
+10944,
+10932,
+10920,
+10908,
+10896,
+10884,
+10873,
+10861,
+10849,
+10837,
+10825,
+10813,
+10801,
+10790,
+10778,
+10766,
+10754,
+10742,
+10730,
+10718,
+10706,
+10695,
+10683,
+10671,
+10659,
+10647,
+10635,
+10623,
+10611,
+10600,
+10588,
+10576,
+10564,
+10552,
+10540,
+10528,
+10516,
+10504,
+10492,
+10481,
+10469,
+10457,
+10445,
+10433,
+10421,
+10409,
+10397,
+10385,
+10373,
+10361,
+10349,
+10338,
+10326,
+10314,
+10302,
+10290,
+10278,
+10266,
+10254,
+10242,
+10230,
+10218,
+10206,
+10194,
+10182,
+10170,
+10159,
+10147,
+10135,
+10123,
+10111,
+10099,
+10087,
+10075,
+10063,
+10051,
+10039,
+10027,
+10015,
+10003,
+9991,
+9979,
+9967,
+9955,
+9943,
+9931,
+9919,
+9907,
+9895,
+9883,
+9871,
+9859,
+9847,
+9835,
+9823,
+9811,
+9799,
+9787,
+9775,
+9763,
+9751,
+9739,
+9727,
+9715,
+9703,
+9691,
+9679,
+9667,
+9655,
+9643,
+9631,
+9619,
+9607,
+9595,
+9583,
+9571,
+9559,
+9547,
+9535,
+9523,
+9511,
+9499,
+9487,
+9475,
+9463,
+9451,
+9439,
+9427,
+9415,
+9403,
+9391,
+9379,
+9367,
+9355,
+9343,
+9331,
+9319,
+9307,
+9295,
+9283,
+9270,
+9258,
+9246,
+9234,
+9222,
+9210,
+9198,
+9186,
+9174,
+9162,
+9150,
+9138,
+9126,
+9114,
+9102,
+9090,
+9077,
+9065,
+9053,
+9041,
+9029,
+9017,
+9005,
+8993,
+8981,
+8969,
+8957,
+8945,
+8932,
+8920,
+8908,
+8896,
+8884,
+8872,
+8860,
+8848,
+8836,
+8824,
+8812,
+8799,
+8787,
+8775,
+8763,
+8751,
+8739,
+8727,
+8715,
+8703,
+8690,
+8678,
+8666,
+8654,
+8642,
+8630,
+8618,
+8606,
+8593,
+8581,
+8569,
+8557,
+8545,
+8533,
+8521,
+8509,
+8496,
+8484,
+8472,
+8460,
+8448,
+8436,
+8424,
+8411,
+8399,
+8387,
+8375,
+8363,
+8351,
+8339,
+8326,
+8314,
+8302,
+8290,
+8278,
+8266,
+8253,
+8241,
+8229,
+8217,
+8205,
+8193,
+8180,
+8168,
+8156,
+8144,
+8132,
+8120,
+8107,
+8095,
+8083,
+8071,
+8059,
+8047,
+8034,
+8022,
+8010,
+7998,
+7986,
+7973,
+7961,
+7949,
+7937,
+7925,
+7912,
+7900,
+7888,
+7876,
+7864,
+7851,
+7839,
+7827,
+7815,
+7803,
+7790,
+7778,
+7766,
+7754,
+7742,
+7729,
+7717,
+7705,
+7693,
+7681,
+7668,
+7656,
+7644,
+7632,
+7619,
+7607,
+7595,
+7583,
+7571,
+7558,
+7546,
+7534,
+7522,
+7509,
+7497,
+7485,
+7473,
+7461,
+7448,
+7436,
+7424,
+7412,
+7399,
+7387,
+7375,
+7363,
+7350,
+7338,
+7326,
+7314,
+7301,
+7289,
+7277,
+7265,
+7252,
+7240,
+7228,
+7216,
+7203,
+7191,
+7179,
+7167,
+7154,
+7142,
+7130,
+7117,
+7105,
+7093,
+7081,
+7068,
+7056,
+7044,
+7032,
+7019,
+7007,
+6995,
+6982,
+6970,
+6958,
+6946,
+6933,
+6921,
+6909,
+6897,
+6884,
+6872,
+6860,
+6847,
+6835,
+6823,
+6811,
+6798,
+6786,
+6774,
+6761,
+6749,
+6737,
+6724,
+6712,
+6700,
+6688,
+6675,
+6663,
+6651,
+6638,
+6626,
+6614,
+6601,
+6589,
+6577,
+6564,
+6552,
+6540,
+6528,
+6515,
+6503,
+6491,
+6478,
+6466,
+6454,
+6441,
+6429,
+6417,
+6404,
+6392,
+6380,
+6367,
+6355,
+6343,
+6330,
+6318,
+6306,
+6293,
+6281,
+6269,
+6256,
+6244,
+6232,
+6219,
+6207,
+6195,
+6182,
+6170,
+6158,
+6145,
+6133,
+6121,
+6108,
+6096,
+6084,
+6071,
+6059,
+6047,
+6034,
+6022,
+6010,
+5997,
+5985,
+5972,
+5960,
+5948,
+5935,
+5923,
+5911,
+5898,
+5886,
+5874,
+5861,
+5849,
+5836,
+5824,
+5812,
+5799,
+5787,
+5775,
+5762,
+5750,
+5738,
+5725,
+5713,
+5700,
+5688,
+5676,
+5663,
+5651,
+5639,
+5626,
+5614,
+5601,
+5589,
+5577,
+5564,
+5552,
+5539,
+5527,
+5515,
+5502,
+5490,
+5478,
+5465,
+5453,
+5440,
+5428,
+5416,
+5403,
+5391,
+5378,
+5366,
+5354,
+5341,
+5329,
+5316,
+5304,
+5292,
+5279,
+5267,
+5254,
+5242,
+5230,
+5217,
+5205,
+5192,
+5180,
+5168,
+5155,
+5143,
+5130,
+5118,
+5106,
+5093,
+5081,
+5068,
+5056,
+5043,
+5031,
+5019,
+5006,
+4994,
+4981,
+4969,
+4957,
+4944,
+4932,
+4919,
+4907,
+4894,
+4882,
+4870,
+4857,
+4845,
+4832,
+4820,
+4807,
+4795,
+4783,
+4770,
+4758,
+4745,
+4733,
+4720,
+4708,
+4696,
+4683,
+4671,
+4658,
+4646,
+4633,
+4621,
+4608,
+4596,
+4584,
+4571,
+4559,
+4546,
+4534,
+4521,
+4509,
+4496,
+4484,
+4472,
+4459,
+4447,
+4434,
+4422,
+4409,
+4397,
+4384,
+4372,
+4359,
+4347,
+4335,
+4322,
+4310,
+4297,
+4285,
+4272,
+4260,
+4247,
+4235,
+4222,
+4210,
+4198,
+4185,
+4173,
+4160,
+4148,
+4135,
+4123,
+4110,
+4098,
+4085,
+4073,
+4060,
+4048,
+4035,
+4023,
+4011,
+3998,
+3986,
+3973,
+3961,
+3948,
+3936,
+3923,
+3911,
+3898,
+3886,
+3873,
+3861,
+3848,
+3836,
+3823,
+3811,
+3798,
+3786,
+3773,
+3761,
+3749,
+3736,
+3724,
+3711,
+3699,
+3686,
+3674,
+3661,
+3649,
+3636,
+3624,
+3611,
+3599,
+3586,
+3574,
+3561,
+3549,
+3536,
+3524,
+3511,
+3499,
+3486,
+3474,
+3461,
+3449,
+3436,
+3424,
+3411,
+3399,
+3386,
+3374,
+3361,
+3349,
+3336,
+3324,
+3311,
+3299,
+3286,
+3274,
+3261,
+3249,
+3236,
+3224,
+3211,
+3199,
+3186,
+3174,
+3161,
+3149,
+3136,
+3124,
+3111,
+3099,
+3086,
+3074,
+3061,
+3049,
+3036,
+3024,
+3011,
+2999,
+2986,
+2974,
+2961,
+2949,
+2936,
+2923,
+2911,
+2898,
+2886,
+2873,
+2861,
+2848,
+2836,
+2823,
+2811,
+2798,
+2786,
+2773,
+2761,
+2748,
+2736,
+2723,
+2711,
+2698,
+2686,
+2673,
+2661,
+2648,
+2636,
+2623,
+2610,
+2598,
+2585,
+2573,
+2560,
+2548,
+2535,
+2523,
+2510,
+2498,
+2485,
+2473,
+2460,
+2448,
+2435,
+2423,
+2410,
+2397,
+2385,
+2372,
+2360,
+2347,
+2335,
+2322,
+2310,
+2297,
+2285,
+2272,
+2260,
+2247,
+2235,
+2222,
+2209,
+2197,
+2184,
+2172,
+2159,
+2147,
+2134,
+2122,
+2109,
+2097,
+2084,
+2072,
+2059,
+2046,
+2034,
+2021,
+2009,
+1996,
+1984,
+1971,
+1959,
+1946,
+1934,
+1921,
+1908,
+1896,
+1883,
+1871,
+1858,
+1846,
+1833,
+1821,
+1808,
+1796,
+1783,
+1770,
+1758,
+1745,
+1733,
+1720,
+1708,
+1695,
+1683,
+1670,
+1658,
+1645,
+1632,
+1620,
+1607,
+1595,
+1582,
+1570,
+1557,
+1545,
+1532,
+1519,
+1507,
+1494,
+1482,
+1469,
+1457,
+1444,
+1432,
+1419,
+1406,
+1394,
+1381,
+1369,
+1356,
+1344,
+1331,
+1319,
+1306,
+1293,
+1281,
+1268,
+1256,
+1243,
+1231,
+1218,
+1206,
+1193,
+1180,
+1168,
+1155,
+1143,
+1130,
+1118,
+1105,
+1093,
+1080,
+1067,
+1055,
+1042,
+1030,
+1017,
+1005,
+992,
+980,
+967,
+954,
+942,
+929,
+917,
+904,
+892,
+879,
+866,
+854,
+841,
+829,
+816,
+804,
+791,
+779,
+766,
+753,
+741,
+728,
+716,
+703,
+691,
+678,
+665,
+653,
+640,
+628,
+615,
+603,
+590,
+578,
+565,
+552,
+540,
+527,
+515,
+502,
+490,
+477,
+464,
+452,
+439,
+427,
+414,
+402,
+389,
+376,
+364,
+351,
+339,
+326,
+314,
+301,
+289,
+276,
+263,
+251,
+238,
+226,
+213,
+201,
+188,
+175,
+163,
+150,
+138,
+125,
+113,
+100,
+87,
+75,
+62,
+50,
+37,
+25,
+12,
+0,
+-12,
+-25,
+-37,
+-50,
+-62,
+-75,
+-87,
+-100,
+-113,
+-125,
+-138,
+-150,
+-163,
+-175,
+-188,
+-201,
+-213,
+-226,
+-238,
+-251,
+-263,
+-276,
+-289,
+-301,
+-314,
+-326,
+-339,
+-351,
+-364,
+-376,
+-389,
+-402,
+-414,
+-427,
+-439,
+-452,
+-464,
+-477,
+-490,
+-502,
+-515,
+-527,
+-540,
+-552,
+-565,
+-578,
+-590,
+-603,
+-615,
+-628,
+-640,
+-653,
+-665,
+-678,
+-691,
+-703,
+-716,
+-728,
+-741,
+-753,
+-766,
+-779,
+-791,
+-804,
+-816,
+-829,
+-841,
+-854,
+-866,
+-879,
+-892,
+-904,
+-917,
+-929,
+-942,
+-954,
+-967,
+-980,
+-992,
+-1005,
+-1017,
+-1030,
+-1042,
+-1055,
+-1067,
+-1080,
+-1093,
+-1105,
+-1118,
+-1130,
+-1143,
+-1155,
+-1168,
+-1180,
+-1193,
+-1206,
+-1218,
+-1231,
+-1243,
+-1256,
+-1268,
+-1281,
+-1293,
+-1306,
+-1319,
+-1331,
+-1344,
+-1356,
+-1369,
+-1381,
+-1394,
+-1406,
+-1419,
+-1432,
+-1444,
+-1457,
+-1469,
+-1482,
+-1494,
+-1507,
+-1519,
+-1532,
+-1545,
+-1557,
+-1570,
+-1582,
+-1595,
+-1607,
+-1620,
+-1632,
+-1645,
+-1658,
+-1670,
+-1683,
+-1695,
+-1708,
+-1720,
+-1733,
+-1745,
+-1758,
+-1770,
+-1783,
+-1796,
+-1808,
+-1821,
+-1833,
+-1846,
+-1858,
+-1871,
+-1883,
+-1896,
+-1908,
+-1921,
+-1934,
+-1946,
+-1959,
+-1971,
+-1984,
+-1996,
+-2009,
+-2021,
+-2034,
+-2046,
+-2059,
+-2072,
+-2084,
+-2097,
+-2109,
+-2122,
+-2134,
+-2147,
+-2159,
+-2172,
+-2184,
+-2197,
+-2209,
+-2222,
+-2235,
+-2247,
+-2260,
+-2272,
+-2285,
+-2297,
+-2310,
+-2322,
+-2335,
+-2347,
+-2360,
+-2372,
+-2385,
+-2397,
+-2410,
+-2423,
+-2435,
+-2448,
+-2460,
+-2473,
+-2485,
+-2498,
+-2510,
+-2523,
+-2535,
+-2548,
+-2560,
+-2573,
+-2585,
+-2598,
+-2610,
+-2623,
+-2636,
+-2648,
+-2661,
+-2673,
+-2686,
+-2698,
+-2711,
+-2723,
+-2736,
+-2748,
+-2761,
+-2773,
+-2786,
+-2798,
+-2811,
+-2823,
+-2836,
+-2848,
+-2861,
+-2873,
+-2886,
+-2898,
+-2911,
+-2923,
+-2936,
+-2949,
+-2961,
+-2974,
+-2986,
+-2999,
+-3011,
+-3024,
+-3036,
+-3049,
+-3061,
+-3074,
+-3086,
+-3099,
+-3111,
+-3124,
+-3136,
+-3149,
+-3161,
+-3174,
+-3186,
+-3199,
+-3211,
+-3224,
+-3236,
+-3249,
+-3261,
+-3274,
+-3286,
+-3299,
+-3311,
+-3324,
+-3336,
+-3349,
+-3361,
+-3374,
+-3386,
+-3399,
+-3411,
+-3424,
+-3436,
+-3449,
+-3461,
+-3474,
+-3486,
+-3499,
+-3511,
+-3524,
+-3536,
+-3549,
+-3561,
+-3574,
+-3586,
+-3599,
+-3611,
+-3624,
+-3636,
+-3649,
+-3661,
+-3674,
+-3686,
+-3699,
+-3711,
+-3724,
+-3736,
+-3749,
+-3761,
+-3773,
+-3786,
+-3798,
+-3811,
+-3823,
+-3836,
+-3848,
+-3861,
+-3873,
+-3886,
+-3898,
+-3911,
+-3923,
+-3936,
+-3948,
+-3961,
+-3973,
+-3986,
+-3998,
+-4011,
+-4023,
+-4035,
+-4048,
+-4060,
+-4073,
+-4085,
+-4098,
+-4110,
+-4123,
+-4135,
+-4148,
+-4160,
+-4173,
+-4185,
+-4198,
+-4210,
+-4222,
+-4235,
+-4247,
+-4260,
+-4272,
+-4285,
+-4297,
+-4310,
+-4322,
+-4335,
+-4347,
+-4359,
+-4372,
+-4384,
+-4397,
+-4409,
+-4422,
+-4434,
+-4447,
+-4459,
+-4472,
+-4484,
+-4496,
+-4509,
+-4521,
+-4534,
+-4546,
+-4559,
+-4571,
+-4584,
+-4596,
+-4608,
+-4621,
+-4633,
+-4646,
+-4658,
+-4671,
+-4683,
+-4696,
+-4708,
+-4720,
+-4733,
+-4745,
+-4758,
+-4770,
+-4783,
+-4795,
+-4807,
+-4820,
+-4832,
+-4845,
+-4857,
+-4870,
+-4882,
+-4894,
+-4907,
+-4919,
+-4932,
+-4944,
+-4957,
+-4969,
+-4981,
+-4994,
+-5006,
+-5019,
+-5031,
+-5043,
+-5056,
+-5068,
+-5081,
+-5093,
+-5106,
+-5118,
+-5130,
+-5143,
+-5155,
+-5168,
+-5180,
+-5192,
+-5205,
+-5217,
+-5230,
+-5242,
+-5254,
+-5267,
+-5279,
+-5292,
+-5304,
+-5316,
+-5329,
+-5341,
+-5354,
+-5366,
+-5378,
+-5391,
+-5403,
+-5416,
+-5428,
+-5440,
+-5453,
+-5465,
+-5478,
+-5490,
+-5502,
+-5515,
+-5527,
+-5539,
+-5552,
+-5564,
+-5577,
+-5589,
+-5601,
+-5614,
+-5626,
+-5639,
+-5651,
+-5663,
+-5676,
+-5688,
+-5700,
+-5713,
+-5725,
+-5738,
+-5750,
+-5762,
+-5775,
+-5787,
+-5799,
+-5812,
+-5824,
+-5836,
+-5849,
+-5861,
+-5874,
+-5886,
+-5898,
+-5911,
+-5923,
+-5935,
+-5948,
+-5960,
+-5972,
+-5985,
+-5997,
+-6010,
+-6022,
+-6034,
+-6047,
+-6059,
+-6071,
+-6084,
+-6096,
+-6108,
+-6121,
+-6133,
+-6145,
+-6158,
+-6170,
+-6182,
+-6195,
+-6207,
+-6219,
+-6232,
+-6244,
+-6256,
+-6269,
+-6281,
+-6293,
+-6306,
+-6318,
+-6330,
+-6343,
+-6355,
+-6367,
+-6380,
+-6392,
+-6404,
+-6417,
+-6429,
+-6441,
+-6454,
+-6466,
+-6478,
+-6491,
+-6503,
+-6515,
+-6528,
+-6540,
+-6552,
+-6564,
+-6577,
+-6589,
+-6601,
+-6614,
+-6626,
+-6638,
+-6651,
+-6663,
+-6675,
+-6688,
+-6700,
+-6712,
+-6724,
+-6737,
+-6749,
+-6761,
+-6774,
+-6786,
+-6798,
+-6811,
+-6823,
+-6835,
+-6847,
+-6860,
+-6872,
+-6884,
+-6897,
+-6909,
+-6921,
+-6933,
+-6946,
+-6958,
+-6970,
+-6982,
+-6995,
+-7007,
+-7019,
+-7032,
+-7044,
+-7056,
+-7068,
+-7081,
+-7093,
+-7105,
+-7117,
+-7130,
+-7142,
+-7154,
+-7167,
+-7179,
+-7191,
+-7203,
+-7216,
+-7228,
+-7240,
+-7252,
+-7265,
+-7277,
+-7289,
+-7301,
+-7314,
+-7326,
+-7338,
+-7350,
+-7363,
+-7375,
+-7387,
+-7399,
+-7412,
+-7424,
+-7436,
+-7448,
+-7461,
+-7473,
+-7485,
+-7497,
+-7509,
+-7522,
+-7534,
+-7546,
+-7558,
+-7571,
+-7583,
+-7595,
+-7607,
+-7619,
+-7632,
+-7644,
+-7656,
+-7668,
+-7681,
+-7693,
+-7705,
+-7717,
+-7729,
+-7742,
+-7754,
+-7766,
+-7778,
+-7790,
+-7803,
+-7815,
+-7827,
+-7839,
+-7851,
+-7864,
+-7876,
+-7888,
+-7900,
+-7912,
+-7925,
+-7937,
+-7949,
+-7961,
+-7973,
+-7986,
+-7998,
+-8010,
+-8022,
+-8034,
+-8047,
+-8059,
+-8071,
+-8083,
+-8095,
+-8107,
+-8120,
+-8132,
+-8144,
+-8156,
+-8168,
+-8180,
+-8193,
+-8205,
+-8217,
+-8229,
+-8241,
+-8253,
+-8266,
+-8278,
+-8290,
+-8302,
+-8314,
+-8326,
+-8339,
+-8351,
+-8363,
+-8375,
+-8387,
+-8399,
+-8411,
+-8424,
+-8436,
+-8448,
+-8460,
+-8472,
+-8484,
+-8496,
+-8509,
+-8521,
+-8533,
+-8545,
+-8557,
+-8569,
+-8581,
+-8593,
+-8606,
+-8618,
+-8630,
+-8642,
+-8654,
+-8666,
+-8678,
+-8690,
+-8703,
+-8715,
+-8727,
+-8739,
+-8751,
+-8763,
+-8775,
+-8787,
+-8799,
+-8812,
+-8824,
+-8836,
+-8848,
+-8860,
+-8872,
+-8884,
+-8896,
+-8908,
+-8920,
+-8932,
+-8945,
+-8957,
+-8969,
+-8981,
+-8993,
+-9005,
+-9017,
+-9029,
+-9041,
+-9053,
+-9065,
+-9077,
+-9090,
+-9102,
+-9114,
+-9126,
+-9138,
+-9150,
+-9162,
+-9174,
+-9186,
+-9198,
+-9210,
+-9222,
+-9234,
+-9246,
+-9258,
+-9270,
+-9283,
+-9295,
+-9307,
+-9319,
+-9331,
+-9343,
+-9355,
+-9367,
+-9379,
+-9391,
+-9403,
+-9415,
+-9427,
+-9439,
+-9451,
+-9463,
+-9475,
+-9487,
+-9499,
+-9511,
+-9523,
+-9535,
+-9547,
+-9559,
+-9571,
+-9583,
+-9595,
+-9607,
+-9619,
+-9631,
+-9643,
+-9655,
+-9667,
+-9679,
+-9691,
+-9703,
+-9715,
+-9727,
+-9739,
+-9751,
+-9763,
+-9775,
+-9787,
+-9799,
+-9811,
+-9823,
+-9835,
+-9847,
+-9859,
+-9871,
+-9883,
+-9895,
+-9907,
+-9919,
+-9931,
+-9943,
+-9955,
+-9967,
+-9979,
+-9991,
+-10003,
+-10015,
+-10027,
+-10039,
+-10051,
+-10063,
+-10075,
+-10087,
+-10099,
+-10111,
+-10123,
+-10135,
+-10147,
+-10159,
+-10170,
+-10182,
+-10194,
+-10206,
+-10218,
+-10230,
+-10242,
+-10254,
+-10266,
+-10278,
+-10290,
+-10302,
+-10314,
+-10326,
+-10338,
+-10349,
+-10361,
+-10373,
+-10385,
+-10397,
+-10409,
+-10421,
+-10433,
+-10445,
+-10457,
+-10469,
+-10481,
+-10492,
+-10504,
+-10516,
+-10528,
+-10540,
+-10552,
+-10564,
+-10576,
+-10588,
+-10600,
+-10611,
+-10623,
+-10635,
+-10647,
+-10659,
+-10671,
+-10683,
+-10695,
+-10706,
+-10718,
+-10730,
+-10742,
+-10754,
+-10766,
+-10778,
+-10790,
+-10801,
+-10813,
+-10825,
+-10837,
+-10849,
+-10861,
+-10873,
+-10884,
+-10896,
+-10908,
+-10920,
+-10932,
+-10944,
+-10956,
+-10967,
+-10979,
+-10991,
+-11003,
+-11015,
+-11027,
+-11038,
+-11050,
+-11062,
+-11074,
+-11086,
+-11098,
+-11109,
+-11121,
+-11133,
+-11145,
+-11157,
+-11168,
+-11180,
+-11192,
+-11204,
+-11216,
+-11227,
+-11239,
+-11251,
+-11263,
+-11275,
+-11286,
+-11298,
+-11310,
+-11322,
+-11334,
+-11345,
+-11357,
+-11369,
+-11381,
+-11393,
+-11404,
+-11416,
+-11428,
+-11440,
+-11451,
+-11463,
+-11475,
+-11487,
+-11499,
+-11510,
+-11522,
+-11534,
+-11546,
+-11557,
+-11569,
+-11581,
+-11593,
+-11604,
+-11616,
+-11628,
+-11640,
+-11651,
+-11663,
+-11675,
+-11687,
+-11698,
+-11710,
+-11722,
+-11734,
+-11745,
+-11757,
+-11769,
+-11780,
+-11792,
+-11804,
+-11816,
+-11827,
+-11839,
+-11851,
+-11862,
+-11874,
+-11886,
+-11898,
+-11909,
+-11921,
+-11933,
+-11944,
+-11956,
+-11968,
+-11980,
+-11991,
+-12003,
+-12015,
+-12026,
+-12038,
+-12050,
+-12061,
+-12073,
+-12085,
+-12096,
+-12108,
+-12120,
+-12131,
+-12143,
+-12155,
+-12166,
+-12178,
+-12190,
+-12201,
+-12213,
+-12225,
+-12236,
+-12248,
+-12260,
+-12271,
+-12283,
+-12295,
+-12306,
+-12318,
+-12330,
+-12341,
+-12353,
+-12365,
+-12376,
+-12388,
+-12399,
+-12411,
+-12423,
+-12434,
+-12446,
+-12458,
+-12469,
+-12481,
+-12492,
+-12504,
+-12516,
+-12527,
+-12539,
+-12550,
+-12562,
+-12574,
+-12585,
+-12597,
+-12609,
+-12620,
+-12632,
+-12643,
+-12655,
+-12666,
+-12678,
+-12690,
+-12701,
+-12713,
+-12724,
+-12736,
+-12748,
+-12759,
+-12771,
+-12782,
+-12794,
+-12805,
+-12817,
+-12829,
+-12840,
+-12852,
+-12863,
+-12875,
+-12886,
+-12898,
+-12909,
+-12921,
+-12933,
+-12944,
+-12956,
+-12967,
+-12979,
+-12990,
+-13002,
+-13013,
+-13025,
+-13036,
+-13048,
+-13059,
+-13071,
+-13082,
+-13094,
+-13106,
+-13117,
+-13129,
+-13140,
+-13152,
+-13163,
+-13175,
+-13186,
+-13198,
+-13209,
+-13221,
+-13232,
+-13244,
+-13255,
+-13267,
+-13278,
+-13290,
+-13301,
+-13312,
+-13324,
+-13335,
+-13347,
+-13358,
+-13370,
+-13381,
+-13393,
+-13404,
+-13416,
+-13427,
+-13439,
+-13450,
+-13462,
+-13473,
+-13485,
+-13496,
+-13507,
+-13519,
+-13530,
+-13542,
+-13553,
+-13565,
+-13576,
+-13587,
+-13599,
+-13610,
+-13622,
+-13633,
+-13645,
+-13656,
+-13667,
+-13679,
+-13690,
+-13702,
+-13713,
+-13725,
+-13736,
+-13747,
+-13759,
+-13770,
+-13782,
+-13793,
+-13804,
+-13816,
+-13827,
+-13839,
+-13850,
+-13861,
+-13873,
+-13884,
+-13895,
+-13907,
+-13918,
+-13930,
+-13941,
+-13952,
+-13964,
+-13975,
+-13986,
+-13998,
+-14009,
+-14021,
+-14032,
+-14043,
+-14055,
+-14066,
+-14077,
+-14089,
+-14100,
+-14111,
+-14123,
+-14134,
+-14145,
+-14157,
+-14168,
+-14179,
+-14191,
+-14202,
+-14213,
+-14225,
+-14236,
+-14247,
+-14259,
+-14270,
+-14281,
+-14293,
+-14304,
+-14315,
+-14326,
+-14338,
+-14349,
+-14360,
+-14372,
+-14383,
+-14394,
+-14406,
+-14417,
+-14428,
+-14439,
+-14451,
+-14462,
+-14473,
+-14484,
+-14496,
+-14507,
+-14518,
+-14530,
+-14541,
+-14552,
+-14563,
+-14575,
+-14586,
+-14597,
+-14608,
+-14620,
+-14631,
+-14642,
+-14653,
+-14665,
+-14676,
+-14687,
+-14698,
+-14709,
+-14721,
+-14732,
+-14743,
+-14754,
+-14766,
+-14777,
+-14788,
+-14799,
+-14810,
+-14822,
+-14833,
+-14844,
+-14855,
+-14866,
+-14878,
+-14889,
+-14900,
+-14911,
+-14922,
+-14934,
+-14945,
+-14956,
+-14967,
+-14978,
+-14989,
+-15001,
+-15012,
+-15023,
+-15034,
+-15045,
+-15056,
+-15068,
+-15079,
+-15090,
+-15101,
+-15112,
+-15123,
+-15135,
+-15146,
+-15157,
+-15168,
+-15179,
+-15190,
+-15201,
+-15213,
+-15224,
+-15235,
+-15246,
+-15257,
+-15268,
+-15279,
+-15290,
+-15301,
+-15313,
+-15324,
+-15335,
+-15346,
+-15357,
+-15368,
+-15379,
+-15390,
+-15401,
+-15413,
+-15424,
+-15435,
+-15446,
+-15457,
+-15468,
+-15479,
+-15490,
+-15501,
+-15512,
+-15523,
+-15534,
+-15545,
+-15556,
+-15568,
+-15579,
+-15590,
+-15601,
+-15612,
+-15623,
+-15634,
+-15645,
+-15656,
+-15667,
+-15678,
+-15689,
+-15700,
+-15711,
+-15722,
+-15733,
+-15744,
+-15755,
+-15766,
+-15777,
+-15788,
+-15799,
+-15810,
+-15821,
+-15832,
+-15843,
+-15854,
+-15865,
+-15876,
+-15887,
+-15898,
+-15909,
+-15920,
+-15931,
+-15942,
+-15953,
+-15964,
+-15975,
+-15986,
+-15997,
+-16008,
+-16019,
+-16030,
+-16041,
+-16052,
+-16063,
+-16074,
+-16085,
+-16096,
+-16107,
+-16117,
+-16128,
+-16139,
+-16150,
+-16161,
+-16172,
+-16183,
+-16194,
+-16205,
+-16216,
+-16227,
+-16238,
+-16249,
+-16260,
+-16270,
+-16281,
+-16292,
+-16303,
+-16314,
+-16325,
+-16336,
+-16347,
+-16358,
+-16368,
+-16379,
+-16390,
+-16401,
+-16412,
+-16423,
+-16434,
+-16445,
+-16455,
+-16466,
+-16477,
+-16488,
+-16499,
+-16510,
+-16521,
+-16532,
+-16542,
+-16553,
+-16564,
+-16575,
+-16586,
+-16597,
+-16607,
+-16618,
+-16629,
+-16640,
+-16651,
+-16662,
+-16672,
+-16683,
+-16694,
+-16705,
+-16716,
+-16726,
+-16737,
+-16748,
+-16759,
+-16770,
+-16780,
+-16791,
+-16802,
+-16813,
+-16824,
+-16834,
+-16845,
+-16856,
+-16867,
+-16877,
+-16888,
+-16899,
+-16910,
+-16920,
+-16931,
+-16942,
+-16953,
+-16964,
+-16974,
+-16985,
+-16996,
+-17006,
+-17017,
+-17028,
+-17039,
+-17049,
+-17060,
+-17071,
+-17082,
+-17092,
+-17103,
+-17114,
+-17124,
+-17135,
+-17146,
+-17157,
+-17167,
+-17178,
+-17189,
+-17199,
+-17210,
+-17221,
+-17232,
+-17242,
+-17253,
+-17264,
+-17274,
+-17285,
+-17296,
+-17306,
+-17317,
+-17328,
+-17338,
+-17349,
+-17360,
+-17370,
+-17381,
+-17392,
+-17402,
+-17413,
+-17423,
+-17434,
+-17445,
+-17455,
+-17466,
+-17477,
+-17487,
+-17498,
+-17509,
+-17519,
+-17530,
+-17540,
+-17551,
+-17562,
+-17572,
+-17583,
+-17593,
+-17604,
+-17615,
+-17625,
+-17636,
+-17646,
+-17657,
+-17668,
+-17678,
+-17689,
+-17699,
+-17710,
+-17720,
+-17731,
+-17742,
+-17752,
+-17763,
+-17773,
+-17784,
+-17794,
+-17805,
+-17815,
+-17826,
+-17837,
+-17847,
+-17858,
+-17868,
+-17879,
+-17889,
+-17900,
+-17910,
+-17921,
+-17931,
+-17942,
+-17952,
+-17963,
+-17973,
+-17984,
+-17994,
+-18005,
+-18015,
+-18026,
+-18036,
+-18047,
+-18057,
+-18068,
+-18078,
+-18089,
+-18099,
+-18110,
+-18120,
+-18131,
+-18141,
+-18152,
+-18162,
+-18173,
+-18183,
+-18193,
+-18204,
+-18214,
+-18225,
+-18235,
+-18246,
+-18256,
+-18267,
+-18277,
+-18287,
+-18298,
+-18308,
+-18319,
+-18329,
+-18339,
+-18350,
+-18360,
+-18371,
+-18381,
+-18392,
+-18402,
+-18412,
+-18423,
+-18433,
+-18443,
+-18454,
+-18464,
+-18475,
+-18485,
+-18495,
+-18506,
+-18516,
+-18526,
+-18537,
+-18547,
+-18558,
+-18568,
+-18578,
+-18589,
+-18599,
+-18609,
+-18620,
+-18630,
+-18640,
+-18651,
+-18661,
+-18671,
+-18682,
+-18692,
+-18702,
+-18713,
+-18723,
+-18733,
+-18744,
+-18754,
+-18764,
+-18774,
+-18785,
+-18795,
+-18805,
+-18816,
+-18826,
+-18836,
+-18846,
+-18857,
+-18867,
+-18877,
+-18888,
+-18898,
+-18908,
+-18918,
+-18929,
+-18939,
+-18949,
+-18959,
+-18970,
+-18980,
+-18990,
+-19000,
+-19011,
+-19021,
+-19031,
+-19041,
+-19051,
+-19062,
+-19072,
+-19082,
+-19092,
+-19103,
+-19113,
+-19123,
+-19133,
+-19143,
+-19154,
+-19164,
+-19174,
+-19184,
+-19194,
+-19205,
+-19215,
+-19225,
+-19235,
+-19245,
+-19255,
+-19266,
+-19276,
+-19286,
+-19296,
+-19306,
+-19316,
+-19326,
+-19337,
+-19347,
+-19357,
+-19367,
+-19377,
+-19387,
+-19397,
+-19408,
+-19418,
+-19428,
+-19438,
+-19448,
+-19458,
+-19468,
+-19478,
+-19488,
+-19499,
+-19509,
+-19519,
+-19529,
+-19539,
+-19549,
+-19559,
+-19569,
+-19579,
+-19589,
+-19599,
+-19610,
+-19620,
+-19630,
+-19640,
+-19650,
+-19660,
+-19670,
+-19680,
+-19690,
+-19700,
+-19710,
+-19720,
+-19730,
+-19740,
+-19750,
+-19760,
+-19770,
+-19780,
+-19790,
+-19800,
+-19810,
+-19820,
+-19830,
+-19840,
+-19850,
+-19860,
+-19870,
+-19880,
+-19890,
+-19900,
+-19910,
+-19920,
+-19930,
+-19940,
+-19950,
+-19960,
+-19970,
+-19980,
+-19990,
+-20000,
+-20010,
+-20020,
+-20030,
+-20040,
+-20050,
+-20060,
+-20070,
+-20079,
+-20089,
+-20099,
+-20109,
+-20119,
+-20129,
+-20139,
+-20149,
+-20159,
+-20169,
+-20179,
+-20188,
+-20198,
+-20208,
+-20218,
+-20228,
+-20238,
+-20248,
+-20258,
+-20268,
+-20277,
+-20287,
+-20297,
+-20307,
+-20317,
+-20327,
+-20337,
+-20346,
+-20356,
+-20366,
+-20376,
+-20386,
+-20396,
+-20406,
+-20415,
+-20425,
+-20435,
+-20445,
+-20455,
+-20464,
+-20474,
+-20484,
+-20494,
+-20504,
+-20513,
+-20523,
+-20533,
+-20543,
+-20553,
+-20562,
+-20572,
+-20582,
+-20592,
+-20602,
+-20611,
+-20621,
+-20631,
+-20641,
+-20650,
+-20660,
+-20670,
+-20680,
+-20689,
+-20699,
+-20709,
+-20719,
+-20728,
+-20738,
+-20748,
+-20758,
+-20767,
+-20777,
+-20787,
+-20796,
+-20806,
+-20816,
+-20825,
+-20835,
+-20845,
+-20855,
+-20864,
+-20874,
+-20884,
+-20893,
+-20903,
+-20913,
+-20922,
+-20932,
+-20942,
+-20951,
+-20961,
+-20971,
+-20980,
+-20990,
+-21000,
+-21009,
+-21019,
+-21029,
+-21038,
+-21048,
+-21057,
+-21067,
+-21077,
+-21086,
+-21096,
+-21106,
+-21115,
+-21125,
+-21134,
+-21144,
+-21154,
+-21163,
+-21173,
+-21182,
+-21192,
+-21202,
+-21211,
+-21221,
+-21230,
+-21240,
+-21249,
+-21259,
+-21268,
+-21278,
+-21288,
+-21297,
+-21307,
+-21316,
+-21326,
+-21335,
+-21345,
+-21354,
+-21364,
+-21373,
+-21383,
+-21392,
+-21402,
+-21412,
+-21421,
+-21431,
+-21440,
+-21450,
+-21459,
+-21469,
+-21478,
+-21488,
+-21497,
+-21506,
+-21516,
+-21525,
+-21535,
+-21544,
+-21554,
+-21563,
+-21573,
+-21582,
+-21592,
+-21601,
+-21611,
+-21620,
+-21629,
+-21639,
+-21648,
+-21658,
+-21667,
+-21677,
+-21686,
+-21695,
+-21705,
+-21714,
+-21724,
+-21733,
+-21743,
+-21752,
+-21761,
+-21771,
+-21780,
+-21789,
+-21799,
+-21808,
+-21818,
+-21827,
+-21836,
+-21846,
+-21855,
+-21864,
+-21874,
+-21883,
+-21893,
+-21902,
+-21911,
+-21921,
+-21930,
+-21939,
+-21949,
+-21958,
+-21967,
+-21977,
+-21986,
+-21995,
+-22004,
+-22014,
+-22023,
+-22032,
+-22042,
+-22051,
+-22060,
+-22070,
+-22079,
+-22088,
+-22097,
+-22107,
+-22116,
+-22125,
+-22135,
+-22144,
+-22153,
+-22162,
+-22172,
+-22181,
+-22190,
+-22199,
+-22209,
+-22218,
+-22227,
+-22236,
+-22245,
+-22255,
+-22264,
+-22273,
+-22282,
+-22292,
+-22301,
+-22310,
+-22319,
+-22328,
+-22338,
+-22347,
+-22356,
+-22365,
+-22374,
+-22383,
+-22393,
+-22402,
+-22411,
+-22420,
+-22429,
+-22438,
+-22448,
+-22457,
+-22466,
+-22475,
+-22484,
+-22493,
+-22503,
+-22512,
+-22521,
+-22530,
+-22539,
+-22548,
+-22557,
+-22566,
+-22575,
+-22585,
+-22594,
+-22603,
+-22612,
+-22621,
+-22630,
+-22639,
+-22648,
+-22657,
+-22666,
+-22675,
+-22685,
+-22694,
+-22703,
+-22712,
+-22721,
+-22730,
+-22739,
+-22748,
+-22757,
+-22766,
+-22775,
+-22784,
+-22793,
+-22802,
+-22811,
+-22820,
+-22829,
+-22838,
+-22847,
+-22856,
+-22865,
+-22874,
+-22883,
+-22892,
+-22901,
+-22910,
+-22919,
+-22928,
+-22937,
+-22946,
+-22955,
+-22964,
+-22973,
+-22982,
+-22991,
+-23000,
+-23009,
+-23018,
+-23027,
+-23036,
+-23045,
+-23053,
+-23062,
+-23071,
+-23080,
+-23089,
+-23098,
+-23107,
+-23116,
+-23125,
+-23134,
+-23143,
+-23151,
+-23160,
+-23169,
+-23178,
+-23187,
+-23196,
+-23205,
+-23214,
+-23223,
+-23231,
+-23240,
+-23249,
+-23258,
+-23267,
+-23276,
+-23284,
+-23293,
+-23302,
+-23311,
+-23320,
+-23329,
+-23337,
+-23346,
+-23355,
+-23364,
+-23373,
+-23382,
+-23390,
+-23399,
+-23408,
+-23417,
+-23426,
+-23434,
+-23443,
+-23452,
+-23461,
+-23469,
+-23478,
+-23487,
+-23496,
+-23504,
+-23513,
+-23522,
+-23531,
+-23539,
+-23548,
+-23557,
+-23566,
+-23574,
+-23583,
+-23592,
+-23601,
+-23609,
+-23618,
+-23627,
+-23635,
+-23644,
+-23653,
+-23661,
+-23670,
+-23679,
+-23688,
+-23696,
+-23705,
+-23714,
+-23722,
+-23731,
+-23740,
+-23748,
+-23757,
+-23766,
+-23774,
+-23783,
+-23791,
+-23800,
+-23809,
+-23817,
+-23826,
+-23835,
+-23843,
+-23852,
+-23860,
+-23869,
+-23878,
+-23886,
+-23895,
+-23903,
+-23912,
+-23921,
+-23929,
+-23938,
+-23946,
+-23955,
+-23964,
+-23972,
+-23981,
+-23989,
+-23998,
+-24006,
+-24015,
+-24023,
+-24032,
+-24041,
+-24049,
+-24058,
+-24066,
+-24075,
+-24083,
+-24092,
+-24100,
+-24109,
+-24117,
+-24126,
+-24134,
+-24143,
+-24151,
+-24160,
+-24168,
+-24177,
+-24185,
+-24194,
+-24202,
+-24211,
+-24219,
+-24228,
+-24236,
+-24244,
+-24253,
+-24261,
+-24270,
+-24278,
+-24287,
+-24295,
+-24304,
+-24312,
+-24320,
+-24329,
+-24337,
+-24346,
+-24354,
+-24362,
+-24371,
+-24379,
+-24388,
+-24396,
+-24404,
+-24413,
+-24421,
+-24430,
+-24438,
+-24446,
+-24455,
+-24463,
+-24471,
+-24480,
+-24488,
+-24496,
+-24505,
+-24513,
+-24521,
+-24530,
+-24538,
+-24546,
+-24555,
+-24563,
+-24571,
+-24580,
+-24588,
+-24596,
+-24605,
+-24613,
+-24621,
+-24630,
+-24638,
+-24646,
+-24654,
+-24663,
+-24671,
+-24679,
+-24687,
+-24696,
+-24704,
+-24712,
+-24720,
+-24729,
+-24737,
+-24745,
+-24753,
+-24762,
+-24770,
+-24778,
+-24786,
+-24795,
+-24803,
+-24811,
+-24819,
+-24827,
+-24836,
+-24844,
+-24852,
+-24860,
+-24868,
+-24877,
+-24885,
+-24893,
+-24901,
+-24909,
+-24917,
+-24926,
+-24934,
+-24942,
+-24950,
+-24958,
+-24966,
+-24974,
+-24983,
+-24991,
+-24999,
+-25007,
+-25015,
+-25023,
+-25031,
+-25039,
+-25047,
+-25056,
+-25064,
+-25072,
+-25080,
+-25088,
+-25096,
+-25104,
+-25112,
+-25120,
+-25128,
+-25136,
+-25144,
+-25152,
+-25161,
+-25169,
+-25177,
+-25185,
+-25193,
+-25201,
+-25209,
+-25217,
+-25225,
+-25233,
+-25241,
+-25249,
+-25257,
+-25265,
+-25273,
+-25281,
+-25289,
+-25297,
+-25305,
+-25313,
+-25321,
+-25329,
+-25337,
+-25345,
+-25353,
+-25361,
+-25369,
+-25376,
+-25384,
+-25392,
+-25400,
+-25408,
+-25416,
+-25424,
+-25432,
+-25440,
+-25448,
+-25456,
+-25464,
+-25472,
+-25480,
+-25487,
+-25495,
+-25503,
+-25511,
+-25519,
+-25527,
+-25535,
+-25543,
+-25550,
+-25558,
+-25566,
+-25574,
+-25582,
+-25590,
+-25598,
+-25605,
+-25613,
+-25621,
+-25629,
+-25637,
+-25645,
+-25652,
+-25660,
+-25668,
+-25676,
+-25684,
+-25691,
+-25699,
+-25707,
+-25715,
+-25723,
+-25730,
+-25738,
+-25746,
+-25754,
+-25762,
+-25769,
+-25777,
+-25785,
+-25793,
+-25800,
+-25808,
+-25816,
+-25824,
+-25831,
+-25839,
+-25847,
+-25854,
+-25862,
+-25870,
+-25878,
+-25885,
+-25893,
+-25901,
+-25908,
+-25916,
+-25924,
+-25931,
+-25939,
+-25947,
+-25954,
+-25962,
+-25970,
+-25977,
+-25985,
+-25993,
+-26000,
+-26008,
+-26016,
+-26023,
+-26031,
+-26039,
+-26046,
+-26054,
+-26061,
+-26069,
+-26077,
+-26084,
+-26092,
+-26099,
+-26107,
+-26115,
+-26122,
+-26130,
+-26137,
+-26145,
+-26153,
+-26160,
+-26168,
+-26175,
+-26183,
+-26190,
+-26198,
+-26205,
+-26213,
+-26221,
+-26228,
+-26236,
+-26243,
+-26251,
+-26258,
+-26266,
+-26273,
+-26281,
+-26288,
+-26296,
+-26303,
+-26311,
+-26318,
+-26326,
+-26333,
+-26341,
+-26348,
+-26356,
+-26363,
+-26371,
+-26378,
+-26385,
+-26393,
+-26400,
+-26408,
+-26415,
+-26423,
+-26430,
+-26437,
+-26445,
+-26452,
+-26460,
+-26467,
+-26475,
+-26482,
+-26489,
+-26497,
+-26504,
+-26512,
+-26519,
+-26526,
+-26534,
+-26541,
+-26548,
+-26556,
+-26563,
+-26570,
+-26578,
+-26585,
+-26593,
+-26600,
+-26607,
+-26615,
+-26622,
+-26629,
+-26636,
+-26644,
+-26651,
+-26658,
+-26666,
+-26673,
+-26680,
+-26688,
+-26695,
+-26702,
+-26709,
+-26717,
+-26724,
+-26731,
+-26739,
+-26746,
+-26753,
+-26760,
+-26768,
+-26775,
+-26782,
+-26789,
+-26797,
+-26804,
+-26811,
+-26818,
+-26825,
+-26833,
+-26840,
+-26847,
+-26854,
+-26861,
+-26869,
+-26876,
+-26883,
+-26890,
+-26897,
+-26905,
+-26912,
+-26919,
+-26926,
+-26933,
+-26940,
+-26948,
+-26955,
+-26962,
+-26969,
+-26976,
+-26983,
+-26990,
+-26997,
+-27005,
+-27012,
+-27019,
+-27026,
+-27033,
+-27040,
+-27047,
+-27054,
+-27061,
+-27068,
+-27076,
+-27083,
+-27090,
+-27097,
+-27104,
+-27111,
+-27118,
+-27125,
+-27132,
+-27139,
+-27146,
+-27153,
+-27160,
+-27167,
+-27174,
+-27181,
+-27188,
+-27195,
+-27202,
+-27209,
+-27216,
+-27223,
+-27230,
+-27237,
+-27244,
+-27251,
+-27258,
+-27265,
+-27272,
+-27279,
+-27286,
+-27293,
+-27300,
+-27307,
+-27314,
+-27321,
+-27328,
+-27335,
+-27342,
+-27349,
+-27355,
+-27362,
+-27369,
+-27376,
+-27383,
+-27390,
+-27397,
+-27404,
+-27411,
+-27418,
+-27424,
+-27431,
+-27438,
+-27445,
+-27452,
+-27459,
+-27466,
+-27472,
+-27479,
+-27486,
+-27493,
+-27500,
+-27507,
+-27513,
+-27520,
+-27527,
+-27534,
+-27541,
+-27548,
+-27554,
+-27561,
+-27568,
+-27575,
+-27582,
+-27588,
+-27595,
+-27602,
+-27609,
+-27615,
+-27622,
+-27629,
+-27636,
+-27642,
+-27649,
+-27656,
+-27663,
+-27669,
+-27676,
+-27683,
+-27690,
+-27696,
+-27703,
+-27710,
+-27716,
+-27723,
+-27730,
+-27736,
+-27743,
+-27750,
+-27757,
+-27763,
+-27770,
+-27777,
+-27783,
+-27790,
+-27797,
+-27803,
+-27810,
+-27816,
+-27823,
+-27830,
+-27836,
+-27843,
+-27850,
+-27856,
+-27863,
+-27869,
+-27876,
+-27883,
+-27889,
+-27896,
+-27902,
+-27909,
+-27916,
+-27922,
+-27929,
+-27935,
+-27942,
+-27948,
+-27955,
+-27962,
+-27968,
+-27975,
+-27981,
+-27988,
+-27994,
+-28001,
+-28007,
+-28014,
+-28020,
+-28027,
+-28033,
+-28040,
+-28046,
+-28053,
+-28059,
+-28066,
+-28072,
+-28079,
+-28085,
+-28092,
+-28098,
+-28105,
+-28111,
+-28118,
+-28124,
+-28131,
+-28137,
+-28143,
+-28150,
+-28156,
+-28163,
+-28169,
+-28176,
+-28182,
+-28188,
+-28195,
+-28201,
+-28208,
+-28214,
+-28220,
+-28227,
+-28233,
+-28239,
+-28246,
+-28252,
+-28259,
+-28265,
+-28271,
+-28278,
+-28284,
+-28290,
+-28297,
+-28303,
+-28309,
+-28316,
+-28322,
+-28328,
+-28335,
+-28341,
+-28347,
+-28353,
+-28360,
+-28366,
+-28372,
+-28379,
+-28385,
+-28391,
+-28397,
+-28404,
+-28410,
+-28416,
+-28423,
+-28429,
+-28435,
+-28441,
+-28447,
+-28454,
+-28460,
+-28466,
+-28472,
+-28479,
+-28485,
+-28491,
+-28497,
+-28503,
+-28510,
+-28516,
+-28522,
+-28528,
+-28534,
+-28541,
+-28547,
+-28553,
+-28559,
+-28565,
+-28571,
+-28578,
+-28584,
+-28590,
+-28596,
+-28602,
+-28608,
+-28614,
+-28620,
+-28627,
+-28633,
+-28639,
+-28645,
+-28651,
+-28657,
+-28663,
+-28669,
+-28675,
+-28681,
+-28687,
+-28694,
+-28700,
+-28706,
+-28712,
+-28718,
+-28724,
+-28730,
+-28736,
+-28742,
+-28748,
+-28754,
+-28760,
+-28766,
+-28772,
+-28778,
+-28784,
+-28790,
+-28796,
+-28802,
+-28808,
+-28814,
+-28820,
+-28826,
+-28832,
+-28838,
+-28844,
+-28850,
+-28856,
+-28862,
+-28868,
+-28874,
+-28880,
+-28886,
+-28891,
+-28897,
+-28903,
+-28909,
+-28915,
+-28921,
+-28927,
+-28933,
+-28939,
+-28945,
+-28951,
+-28956,
+-28962,
+-28968,
+-28974,
+-28980,
+-28986,
+-28992,
+-28997,
+-29003,
+-29009,
+-29015,
+-29021,
+-29027,
+-29033,
+-29038,
+-29044,
+-29050,
+-29056,
+-29062,
+-29067,
+-29073,
+-29079,
+-29085,
+-29091,
+-29096,
+-29102,
+-29108,
+-29114,
+-29119,
+-29125,
+-29131,
+-29137,
+-29142,
+-29148,
+-29154,
+-29160,
+-29165,
+-29171,
+-29177,
+-29183,
+-29188,
+-29194,
+-29200,
+-29205,
+-29211,
+-29217,
+-29222,
+-29228,
+-29234,
+-29239,
+-29245,
+-29251,
+-29256,
+-29262,
+-29268,
+-29273,
+-29279,
+-29285,
+-29290,
+-29296,
+-29302,
+-29307,
+-29313,
+-29318,
+-29324,
+-29330,
+-29335,
+-29341,
+-29346,
+-29352,
+-29358,
+-29363,
+-29369,
+-29374,
+-29380,
+-29385,
+-29391,
+-29397,
+-29402,
+-29408,
+-29413,
+-29419,
+-29424,
+-29430,
+-29435,
+-29441,
+-29446,
+-29452,
+-29457,
+-29463,
+-29468,
+-29474,
+-29479,
+-29485,
+-29490,
+-29496,
+-29501,
+-29507,
+-29512,
+-29518,
+-29523,
+-29529,
+-29534,
+-29539,
+-29545,
+-29550,
+-29556,
+-29561,
+-29567,
+-29572,
+-29577,
+-29583,
+-29588,
+-29594,
+-29599,
+-29604,
+-29610,
+-29615,
+-29621,
+-29626,
+-29631,
+-29637,
+-29642,
+-29647,
+-29653,
+-29658,
+-29663,
+-29669,
+-29674,
+-29679,
+-29685,
+-29690,
+-29695,
+-29701,
+-29706,
+-29711,
+-29717,
+-29722,
+-29727,
+-29732,
+-29738,
+-29743,
+-29748,
+-29753,
+-29759,
+-29764,
+-29769,
+-29774,
+-29780,
+-29785,
+-29790,
+-29795,
+-29801,
+-29806,
+-29811,
+-29816,
+-29822,
+-29827,
+-29832,
+-29837,
+-29842,
+-29848,
+-29853,
+-29858,
+-29863,
+-29868,
+-29873,
+-29879,
+-29884,
+-29889,
+-29894,
+-29899,
+-29904,
+-29909,
+-29915,
+-29920,
+-29925,
+-29930,
+-29935,
+-29940,
+-29945,
+-29950,
+-29955,
+-29961,
+-29966,
+-29971,
+-29976,
+-29981,
+-29986,
+-29991,
+-29996,
+-30001,
+-30006,
+-30011,
+-30016,
+-30021,
+-30026,
+-30031,
+-30036,
+-30041,
+-30046,
+-30051,
+-30056,
+-30061,
+-30066,
+-30071,
+-30076,
+-30081,
+-30086,
+-30091,
+-30096,
+-30101,
+-30106,
+-30111,
+-30116,
+-30121,
+-30126,
+-30131,
+-30136,
+-30141,
+-30146,
+-30151,
+-30156,
+-30160,
+-30165,
+-30170,
+-30175,
+-30180,
+-30185,
+-30190,
+-30195,
+-30200,
+-30205,
+-30209,
+-30214,
+-30219,
+-30224,
+-30229,
+-30234,
+-30238,
+-30243,
+-30248,
+-30253,
+-30258,
+-30263,
+-30267,
+-30272,
+-30277,
+-30282,
+-30287,
+-30291,
+-30296,
+-30301,
+-30306,
+-30311,
+-30315,
+-30320,
+-30325,
+-30330,
+-30334,
+-30339,
+-30344,
+-30349,
+-30353,
+-30358,
+-30363,
+-30368,
+-30372,
+-30377,
+-30382,
+-30386,
+-30391,
+-30396,
+-30400,
+-30405,
+-30410,
+-30415,
+-30419,
+-30424,
+-30429,
+-30433,
+-30438,
+-30442,
+-30447,
+-30452,
+-30456,
+-30461,
+-30466,
+-30470,
+-30475,
+-30480,
+-30484,
+-30489,
+-30493,
+-30498,
+-30503,
+-30507,
+-30512,
+-30516,
+-30521,
+-30525,
+-30530,
+-30535,
+-30539,
+-30544,
+-30548,
+-30553,
+-30557,
+-30562,
+-30566,
+-30571,
+-30575,
+-30580,
+-30584,
+-30589,
+-30593,
+-30598,
+-30602,
+-30607,
+-30611,
+-30616,
+-30620,
+-30625,
+-30629,
+-30634,
+-30638,
+-30643,
+-30647,
+-30652,
+-30656,
+-30660,
+-30665,
+-30669,
+-30674,
+-30678,
+-30683,
+-30687,
+-30691,
+-30696,
+-30700,
+-30705,
+-30709,
+-30713,
+-30718,
+-30722,
+-30726,
+-30731,
+-30735,
+-30739,
+-30744,
+-30748,
+-30753,
+-30757,
+-30761,
+-30766,
+-30770,
+-30774,
+-30778,
+-30783,
+-30787,
+-30791,
+-30796,
+-30800,
+-30804,
+-30809,
+-30813,
+-30817,
+-30821,
+-30826,
+-30830,
+-30834,
+-30838,
+-30843,
+-30847,
+-30851,
+-30855,
+-30860,
+-30864,
+-30868,
+-30872,
+-30876,
+-30881,
+-30885,
+-30889,
+-30893,
+-30897,
+-30902,
+-30906,
+-30910,
+-30914,
+-30918,
+-30922,
+-30927,
+-30931,
+-30935,
+-30939,
+-30943,
+-30947,
+-30951,
+-30955,
+-30960,
+-30964,
+-30968,
+-30972,
+-30976,
+-30980,
+-30984,
+-30988,
+-30992,
+-30996,
+-31001,
+-31005,
+-31009,
+-31013,
+-31017,
+-31021,
+-31025,
+-31029,
+-31033,
+-31037,
+-31041,
+-31045,
+-31049,
+-31053,
+-31057,
+-31061,
+-31065,
+-31069,
+-31073,
+-31077,
+-31081,
+-31085,
+-31089,
+-31093,
+-31097,
+-31101,
+-31105,
+-31109,
+-31113,
+-31117,
+-31121,
+-31124,
+-31128,
+-31132,
+-31136,
+-31140,
+-31144,
+-31148,
+-31152,
+-31156,
+-31160,
+-31164,
+-31167,
+-31171,
+-31175,
+-31179,
+-31183,
+-31187,
+-31191,
+-31194,
+-31198,
+-31202,
+-31206,
+-31210,
+-31214,
+-31217,
+-31221,
+-31225,
+-31229,
+-31233,
+-31236,
+-31240,
+-31244,
+-31248,
+-31252,
+-31255,
+-31259,
+-31263,
+-31267,
+-31270,
+-31274,
+-31278,
+-31282,
+-31285,
+-31289,
+-31293,
+-31297,
+-31300,
+-31304,
+-31308,
+-31311,
+-31315,
+-31319,
+-31323,
+-31326,
+-31330,
+-31334,
+-31337,
+-31341,
+-31345,
+-31348,
+-31352,
+-31356,
+-31359,
+-31363,
+-31366,
+-31370,
+-31374,
+-31377,
+-31381,
+-31385,
+-31388,
+-31392,
+-31395,
+-31399,
+-31403,
+-31406,
+-31410,
+-31413,
+-31417,
+-31420,
+-31424,
+-31428,
+-31431,
+-31435,
+-31438,
+-31442,
+-31445,
+-31449,
+-31452,
+-31456,
+-31459,
+-31463,
+-31466,
+-31470,
+-31473,
+-31477,
+-31480,
+-31484,
+-31487,
+-31491,
+-31494,
+-31498,
+-31501,
+-31505,
+-31508,
+-31512,
+-31515,
+-31518,
+-31522,
+-31525,
+-31529,
+-31532,
+-31536,
+-31539,
+-31542,
+-31546,
+-31549,
+-31553,
+-31556,
+-31559,
+-31563,
+-31566,
+-31569,
+-31573,
+-31576,
+-31580,
+-31583,
+-31586,
+-31590,
+-31593,
+-31596,
+-31600,
+-31603,
+-31606,
+-31610,
+-31613,
+-31616,
+-31619,
+-31623,
+-31626,
+-31629,
+-31633,
+-31636,
+-31639,
+-31642,
+-31646,
+-31649,
+-31652,
+-31655,
+-31659,
+-31662,
+-31665,
+-31668,
+-31672,
+-31675,
+-31678,
+-31681,
+-31684,
+-31688,
+-31691,
+-31694,
+-31697,
+-31700,
+-31704,
+-31707,
+-31710,
+-31713,
+-31716,
+-31719,
+-31723,
+-31726,
+-31729,
+-31732,
+-31735,
+-31738,
+-31741,
+-31744,
+-31748,
+-31751,
+-31754,
+-31757,
+-31760,
+-31763,
+-31766,
+-31769,
+-31772,
+-31775,
+-31778,
+-31781,
+-31785,
+-31788,
+-31791,
+-31794,
+-31797,
+-31800,
+-31803,
+-31806,
+-31809,
+-31812,
+-31815,
+-31818,
+-31821,
+-31824,
+-31827,
+-31830,
+-31833,
+-31836,
+-31839,
+-31842,
+-31845,
+-31848,
+-31851,
+-31854,
+-31856,
+-31859,
+-31862,
+-31865,
+-31868,
+-31871,
+-31874,
+-31877,
+-31880,
+-31883,
+-31886,
+-31889,
+-31891,
+-31894,
+-31897,
+-31900,
+-31903,
+-31906,
+-31909,
+-31911,
+-31914,
+-31917,
+-31920,
+-31923,
+-31926,
+-31929,
+-31931,
+-31934,
+-31937,
+-31940,
+-31943,
+-31945,
+-31948,
+-31951,
+-31954,
+-31957,
+-31959,
+-31962,
+-31965,
+-31968,
+-31970,
+-31973,
+-31976,
+-31979,
+-31981,
+-31984,
+-31987,
+-31989,
+-31992,
+-31995,
+-31998,
+-32000,
+-32003,
+-32006,
+-32008,
+-32011,
+-32014,
+-32016,
+-32019,
+-32022,
+-32024,
+-32027,
+-32030,
+-32032,
+-32035,
+-32038,
+-32040,
+-32043,
+-32046,
+-32048,
+-32051,
+-32053,
+-32056,
+-32059,
+-32061,
+-32064,
+-32066,
+-32069,
+-32072,
+-32074,
+-32077,
+-32079,
+-32082,
+-32084,
+-32087,
+-32089,
+-32092,
+-32095,
+-32097,
+-32100,
+-32102,
+-32105,
+-32107,
+-32110,
+-32112,
+-32115,
+-32117,
+-32120,
+-32122,
+-32125,
+-32127,
+-32130,
+-32132,
+-32134,
+-32137,
+-32139,
+-32142,
+-32144,
+-32147,
+-32149,
+-32152,
+-32154,
+-32156,
+-32159,
+-32161,
+-32164,
+-32166,
+-32168,
+-32171,
+-32173,
+-32176,
+-32178,
+-32180,
+-32183,
+-32185,
+-32187,
+-32190,
+-32192,
+-32194,
+-32197,
+-32199,
+-32201,
+-32204,
+-32206,
+-32208,
+-32211,
+-32213,
+-32215,
+-32218,
+-32220,
+-32222,
+-32224,
+-32227,
+-32229,
+-32231,
+-32233,
+-32236,
+-32238,
+-32240,
+-32242,
+-32245,
+-32247,
+-32249,
+-32251,
+-32254,
+-32256,
+-32258,
+-32260,
+-32262,
+-32265,
+-32267,
+-32269,
+-32271,
+-32273,
+-32275,
+-32278,
+-32280,
+-32282,
+-32284,
+-32286,
+-32288,
+-32291,
+-32293,
+-32295,
+-32297,
+-32299,
+-32301,
+-32303,
+-32305,
+-32307,
+-32310,
+-32312,
+-32314,
+-32316,
+-32318,
+-32320,
+-32322,
+-32324,
+-32326,
+-32328,
+-32330,
+-32332,
+-32334,
+-32336,
+-32338,
+-32340,
+-32342,
+-32344,
+-32346,
+-32348,
+-32350,
+-32352,
+-32354,
+-32356,
+-32358,
+-32360,
+-32362,
+-32364,
+-32366,
+-32368,
+-32370,
+-32372,
+-32374,
+-32376,
+-32378,
+-32380,
+-32382,
+-32384,
+-32386,
+-32387,
+-32389,
+-32391,
+-32393,
+-32395,
+-32397,
+-32399,
+-32401,
+-32403,
+-32404,
+-32406,
+-32408,
+-32410,
+-32412,
+-32414,
+-32416,
+-32417,
+-32419,
+-32421,
+-32423,
+-32425,
+-32426,
+-32428,
+-32430,
+-32432,
+-32434,
+-32435,
+-32437,
+-32439,
+-32441,
+-32443,
+-32444,
+-32446,
+-32448,
+-32450,
+-32451,
+-32453,
+-32455,
+-32456,
+-32458,
+-32460,
+-32462,
+-32463,
+-32465,
+-32467,
+-32468,
+-32470,
+-32472,
+-32473,
+-32475,
+-32477,
+-32478,
+-32480,
+-32482,
+-32483,
+-32485,
+-32487,
+-32488,
+-32490,
+-32492,
+-32493,
+-32495,
+-32496,
+-32498,
+-32500,
+-32501,
+-32503,
+-32504,
+-32506,
+-32508,
+-32509,
+-32511,
+-32512,
+-32514,
+-32515,
+-32517,
+-32519,
+-32520,
+-32522,
+-32523,
+-32525,
+-32526,
+-32528,
+-32529,
+-32531,
+-32532,
+-32534,
+-32535,
+-32537,
+-32538,
+-32540,
+-32541,
+-32543,
+-32544,
+-32546,
+-32547,
+-32548,
+-32550,
+-32551,
+-32553,
+-32554,
+-32556,
+-32557,
+-32558,
+-32560,
+-32561,
+-32563,
+-32564,
+-32565,
+-32567,
+-32568,
+-32570,
+-32571,
+-32572,
+-32574,
+-32575,
+-32576,
+-32578,
+-32579,
+-32580,
+-32582,
+-32583,
+-32584,
+-32586,
+-32587,
+-32588,
+-32590,
+-32591,
+-32592,
+-32594,
+-32595,
+-32596,
+-32597,
+-32599,
+-32600,
+-32601,
+-32602,
+-32604,
+-32605,
+-32606,
+-32607,
+-32609,
+-32610,
+-32611,
+-32612,
+-32614,
+-32615,
+-32616,
+-32617,
+-32618,
+-32620,
+-32621,
+-32622,
+-32623,
+-32624,
+-32625,
+-32627,
+-32628,
+-32629,
+-32630,
+-32631,
+-32632,
+-32634,
+-32635,
+-32636,
+-32637,
+-32638,
+-32639,
+-32640,
+-32641,
+-32642,
+-32644,
+-32645,
+-32646,
+-32647,
+-32648,
+-32649,
+-32650,
+-32651,
+-32652,
+-32653,
+-32654,
+-32655,
+-32656,
+-32657,
+-32658,
+-32659,
+-32660,
+-32661,
+-32662,
+-32663,
+-32664,
+-32665,
+-32666,
+-32667,
+-32668,
+-32669,
+-32670,
+-32671,
+-32672,
+-32673,
+-32674,
+-32675,
+-32676,
+-32677,
+-32678,
+-32679,
+-32680,
+-32680,
+-32681,
+-32682,
+-32683,
+-32684,
+-32685,
+-32686,
+-32687,
+-32688,
+-32688,
+-32689,
+-32690,
+-32691,
+-32692,
+-32693,
+-32694,
+-32694,
+-32695,
+-32696,
+-32697,
+-32698,
+-32699,
+-32699,
+-32700,
+-32701,
+-32702,
+-32703,
+-32703,
+-32704,
+-32705,
+-32706,
+-32706,
+-32707,
+-32708,
+-32709,
+-32709,
+-32710,
+-32711,
+-32712,
+-32712,
+-32713,
+-32714,
+-32714,
+-32715,
+-32716,
+-32717,
+-32717,
+-32718,
+-32719,
+-32719,
+-32720,
+-32721,
+-32721,
+-32722,
+-32723,
+-32723,
+-32724,
+-32725,
+-32725,
+-32726,
+-32726,
+-32727,
+-32728,
+-32728,
+-32729,
+-32729,
+-32730,
+-32731,
+-32731,
+-32732,
+-32732,
+-32733,
+-32734,
+-32734,
+-32735,
+-32735,
+-32736,
+-32736,
+-32737,
+-32737,
+-32738,
+-32738,
+-32739,
+-32739,
+-32740,
+-32740,
+-32741,
+-32741,
+-32742,
+-32742,
+-32743,
+-32743,
+-32744,
+-32744,
+-32745,
+-32745,
+-32746,
+-32746,
+-32747,
+-32747,
+-32747,
+-32748,
+-32748,
+-32749,
+-32749,
+-32750,
+-32750,
+-32750,
+-32751,
+-32751,
+-32751,
+-32752,
+-32752,
+-32753,
+-32753,
+-32753,
+-32754,
+-32754,
+-32754,
+-32755,
+-32755,
+-32755,
+-32756,
+-32756,
+-32756,
+-32757,
+-32757,
+-32757,
+-32758,
+-32758,
+-32758,
+-32758,
+-32759,
+-32759,
+-32759,
+-32759,
+-32760,
+-32760,
+-32760,
+-32760,
+-32761,
+-32761,
+-32761,
+-32761,
+-32762,
+-32762,
+-32762,
+-32762,
+-32762,
+-32763,
+-32763,
+-32763,
+-32763,
+-32763,
+-32764,
+-32764,
+-32764,
+-32764,
+-32764,
+-32764,
+-32764,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32767,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32766,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32765,
+-32764,
+-32764,
+-32764,
+-32764,
+-32764,
+-32764,
+-32764,
+-32763,
+-32763,
+-32763,
+-32763,
+-32763,
+-32762,
+-32762,
+-32762,
+-32762,
+-32762,
+-32761,
+-32761,
+-32761,
+-32761,
+-32760,
+-32760,
+-32760,
+-32760,
+-32759,
+-32759,
+-32759,
+-32759,
+-32758,
+-32758,
+-32758,
+-32758,
+-32757,
+-32757,
+-32757,
+-32756,
+-32756,
+-32756,
+-32755,
+-32755,
+-32755,
+-32754,
+-32754,
+-32754,
+-32753,
+-32753,
+-32753,
+-32752,
+-32752,
+-32751,
+-32751,
+-32751,
+-32750,
+-32750,
+-32750,
+-32749,
+-32749,
+-32748,
+-32748,
+-32747,
+-32747,
+-32747,
+-32746,
+-32746,
+-32745,
+-32745,
+-32744,
+-32744,
+-32743,
+-32743,
+-32742,
+-32742,
+-32741,
+-32741,
+-32740,
+-32740,
+-32739,
+-32739,
+-32738,
+-32738,
+-32737,
+-32737,
+-32736,
+-32736,
+-32735,
+-32735,
+-32734,
+-32734,
+-32733,
+-32732,
+-32732,
+-32731,
+-32731,
+-32730,
+-32729,
+-32729,
+-32728,
+-32728,
+-32727,
+-32726,
+-32726,
+-32725,
+-32725,
+-32724,
+-32723,
+-32723,
+-32722,
+-32721,
+-32721,
+-32720,
+-32719,
+-32719,
+-32718,
+-32717,
+-32717,
+-32716,
+-32715,
+-32714,
+-32714,
+-32713,
+-32712,
+-32712,
+-32711,
+-32710,
+-32709,
+-32709,
+-32708,
+-32707,
+-32706,
+-32706,
+-32705,
+-32704,
+-32703,
+-32703,
+-32702,
+-32701,
+-32700,
+-32699,
+-32699,
+-32698,
+-32697,
+-32696,
+-32695,
+-32694,
+-32694,
+-32693,
+-32692,
+-32691,
+-32690,
+-32689,
+-32688,
+-32688,
+-32687,
+-32686,
+-32685,
+-32684,
+-32683,
+-32682,
+-32681,
+-32680,
+-32680,
+-32679,
+-32678,
+-32677,
+-32676,
+-32675,
+-32674,
+-32673,
+-32672,
+-32671,
+-32670,
+-32669,
+-32668,
+-32667,
+-32666,
+-32665,
+-32664,
+-32663,
+-32662,
+-32661,
+-32660,
+-32659,
+-32658,
+-32657,
+-32656,
+-32655,
+-32654,
+-32653,
+-32652,
+-32651,
+-32650,
+-32649,
+-32648,
+-32647,
+-32646,
+-32645,
+-32644,
+-32642,
+-32641,
+-32640,
+-32639,
+-32638,
+-32637,
+-32636,
+-32635,
+-32634,
+-32632,
+-32631,
+-32630,
+-32629,
+-32628,
+-32627,
+-32625,
+-32624,
+-32623,
+-32622,
+-32621,
+-32620,
+-32618,
+-32617,
+-32616,
+-32615,
+-32614,
+-32612,
+-32611,
+-32610,
+-32609,
+-32607,
+-32606,
+-32605,
+-32604,
+-32602,
+-32601,
+-32600,
+-32599,
+-32597,
+-32596,
+-32595,
+-32594,
+-32592,
+-32591,
+-32590,
+-32588,
+-32587,
+-32586,
+-32584,
+-32583,
+-32582,
+-32580,
+-32579,
+-32578,
+-32576,
+-32575,
+-32574,
+-32572,
+-32571,
+-32570,
+-32568,
+-32567,
+-32565,
+-32564,
+-32563,
+-32561,
+-32560,
+-32558,
+-32557,
+-32556,
+-32554,
+-32553,
+-32551,
+-32550,
+-32548,
+-32547,
+-32546,
+-32544,
+-32543,
+-32541,
+-32540,
+-32538,
+-32537,
+-32535,
+-32534,
+-32532,
+-32531,
+-32529,
+-32528,
+-32526,
+-32525,
+-32523,
+-32522,
+-32520,
+-32519,
+-32517,
+-32515,
+-32514,
+-32512,
+-32511,
+-32509,
+-32508,
+-32506,
+-32504,
+-32503,
+-32501,
+-32500,
+-32498,
+-32496,
+-32495,
+-32493,
+-32492,
+-32490,
+-32488,
+-32487,
+-32485,
+-32483,
+-32482,
+-32480,
+-32478,
+-32477,
+-32475,
+-32473,
+-32472,
+-32470,
+-32468,
+-32467,
+-32465,
+-32463,
+-32462,
+-32460,
+-32458,
+-32456,
+-32455,
+-32453,
+-32451,
+-32450,
+-32448,
+-32446,
+-32444,
+-32443,
+-32441,
+-32439,
+-32437,
+-32435,
+-32434,
+-32432,
+-32430,
+-32428,
+-32426,
+-32425,
+-32423,
+-32421,
+-32419,
+-32417,
+-32416,
+-32414,
+-32412,
+-32410,
+-32408,
+-32406,
+-32404,
+-32403,
+-32401,
+-32399,
+-32397,
+-32395,
+-32393,
+-32391,
+-32389,
+-32387,
+-32386,
+-32384,
+-32382,
+-32380,
+-32378,
+-32376,
+-32374,
+-32372,
+-32370,
+-32368,
+-32366,
+-32364,
+-32362,
+-32360,
+-32358,
+-32356,
+-32354,
+-32352,
+-32350,
+-32348,
+-32346,
+-32344,
+-32342,
+-32340,
+-32338,
+-32336,
+-32334,
+-32332,
+-32330,
+-32328,
+-32326,
+-32324,
+-32322,
+-32320,
+-32318,
+-32316,
+-32314,
+-32312,
+-32310,
+-32307,
+-32305,
+-32303,
+-32301,
+-32299,
+-32297,
+-32295,
+-32293,
+-32291,
+-32288,
+-32286,
+-32284,
+-32282,
+-32280,
+-32278,
+-32275,
+-32273,
+-32271,
+-32269,
+-32267,
+-32265,
+-32262,
+-32260,
+-32258,
+-32256,
+-32254,
+-32251,
+-32249,
+-32247,
+-32245,
+-32242,
+-32240,
+-32238,
+-32236,
+-32233,
+-32231,
+-32229,
+-32227,
+-32224,
+-32222,
+-32220,
+-32218,
+-32215,
+-32213,
+-32211,
+-32208,
+-32206,
+-32204,
+-32201,
+-32199,
+-32197,
+-32194,
+-32192,
+-32190,
+-32187,
+-32185,
+-32183,
+-32180,
+-32178,
+-32176,
+-32173,
+-32171,
+-32168,
+-32166,
+-32164,
+-32161,
+-32159,
+-32156,
+-32154,
+-32152,
+-32149,
+-32147,
+-32144,
+-32142,
+-32139,
+-32137,
+-32134,
+-32132,
+-32130,
+-32127,
+-32125,
+-32122,
+-32120,
+-32117,
+-32115,
+-32112,
+-32110,
+-32107,
+-32105,
+-32102,
+-32100,
+-32097,
+-32095,
+-32092,
+-32089,
+-32087,
+-32084,
+-32082,
+-32079,
+-32077,
+-32074,
+-32072,
+-32069,
+-32066,
+-32064,
+-32061,
+-32059,
+-32056,
+-32053,
+-32051,
+-32048,
+-32046,
+-32043,
+-32040,
+-32038,
+-32035,
+-32032,
+-32030,
+-32027,
+-32024,
+-32022,
+-32019,
+-32016,
+-32014,
+-32011,
+-32008,
+-32006,
+-32003,
+-32000,
+-31998,
+-31995,
+-31992,
+-31989,
+-31987,
+-31984,
+-31981,
+-31979,
+-31976,
+-31973,
+-31970,
+-31968,
+-31965,
+-31962,
+-31959,
+-31957,
+-31954,
+-31951,
+-31948,
+-31945,
+-31943,
+-31940,
+-31937,
+-31934,
+-31931,
+-31929,
+-31926,
+-31923,
+-31920,
+-31917,
+-31914,
+-31911,
+-31909,
+-31906,
+-31903,
+-31900,
+-31897,
+-31894,
+-31891,
+-31889,
+-31886,
+-31883,
+-31880,
+-31877,
+-31874,
+-31871,
+-31868,
+-31865,
+-31862,
+-31859,
+-31856,
+-31854,
+-31851,
+-31848,
+-31845,
+-31842,
+-31839,
+-31836,
+-31833,
+-31830,
+-31827,
+-31824,
+-31821,
+-31818,
+-31815,
+-31812,
+-31809,
+-31806,
+-31803,
+-31800,
+-31797,
+-31794,
+-31791,
+-31788,
+-31785,
+-31781,
+-31778,
+-31775,
+-31772,
+-31769,
+-31766,
+-31763,
+-31760,
+-31757,
+-31754,
+-31751,
+-31748,
+-31744,
+-31741,
+-31738,
+-31735,
+-31732,
+-31729,
+-31726,
+-31723,
+-31719,
+-31716,
+-31713,
+-31710,
+-31707,
+-31704,
+-31700,
+-31697,
+-31694,
+-31691,
+-31688,
+-31684,
+-31681,
+-31678,
+-31675,
+-31672,
+-31668,
+-31665,
+-31662,
+-31659,
+-31655,
+-31652,
+-31649,
+-31646,
+-31642,
+-31639,
+-31636,
+-31633,
+-31629,
+-31626,
+-31623,
+-31619,
+-31616,
+-31613,
+-31610,
+-31606,
+-31603,
+-31600,
+-31596,
+-31593,
+-31590,
+-31586,
+-31583,
+-31580,
+-31576,
+-31573,
+-31569,
+-31566,
+-31563,
+-31559,
+-31556,
+-31553,
+-31549,
+-31546,
+-31542,
+-31539,
+-31536,
+-31532,
+-31529,
+-31525,
+-31522,
+-31518,
+-31515,
+-31512,
+-31508,
+-31505,
+-31501,
+-31498,
+-31494,
+-31491,
+-31487,
+-31484,
+-31480,
+-31477,
+-31473,
+-31470,
+-31466,
+-31463,
+-31459,
+-31456,
+-31452,
+-31449,
+-31445,
+-31442,
+-31438,
+-31435,
+-31431,
+-31428,
+-31424,
+-31420,
+-31417,
+-31413,
+-31410,
+-31406,
+-31403,
+-31399,
+-31395,
+-31392,
+-31388,
+-31385,
+-31381,
+-31377,
+-31374,
+-31370,
+-31366,
+-31363,
+-31359,
+-31356,
+-31352,
+-31348,
+-31345,
+-31341,
+-31337,
+-31334,
+-31330,
+-31326,
+-31323,
+-31319,
+-31315,
+-31311,
+-31308,
+-31304,
+-31300,
+-31297,
+-31293,
+-31289,
+-31285,
+-31282,
+-31278,
+-31274,
+-31270,
+-31267,
+-31263,
+-31259,
+-31255,
+-31252,
+-31248,
+-31244,
+-31240,
+-31236,
+-31233,
+-31229,
+-31225,
+-31221,
+-31217,
+-31214,
+-31210,
+-31206,
+-31202,
+-31198,
+-31194,
+-31191,
+-31187,
+-31183,
+-31179,
+-31175,
+-31171,
+-31167,
+-31164,
+-31160,
+-31156,
+-31152,
+-31148,
+-31144,
+-31140,
+-31136,
+-31132,
+-31128,
+-31124,
+-31121,
+-31117,
+-31113,
+-31109,
+-31105,
+-31101,
+-31097,
+-31093,
+-31089,
+-31085,
+-31081,
+-31077,
+-31073,
+-31069,
+-31065,
+-31061,
+-31057,
+-31053,
+-31049,
+-31045,
+-31041,
+-31037,
+-31033,
+-31029,
+-31025,
+-31021,
+-31017,
+-31013,
+-31009,
+-31005,
+-31001,
+-30996,
+-30992,
+-30988,
+-30984,
+-30980,
+-30976,
+-30972,
+-30968,
+-30964,
+-30960,
+-30955,
+-30951,
+-30947,
+-30943,
+-30939,
+-30935,
+-30931,
+-30927,
+-30922,
+-30918,
+-30914,
+-30910,
+-30906,
+-30902,
+-30897,
+-30893,
+-30889,
+-30885,
+-30881,
+-30876,
+-30872,
+-30868,
+-30864,
+-30860,
+-30855,
+-30851,
+-30847,
+-30843,
+-30838,
+-30834,
+-30830,
+-30826,
+-30821,
+-30817,
+-30813,
+-30809,
+-30804,
+-30800,
+-30796,
+-30791,
+-30787,
+-30783,
+-30778,
+-30774,
+-30770,
+-30766,
+-30761,
+-30757,
+-30753,
+-30748,
+-30744,
+-30739,
+-30735,
+-30731,
+-30726,
+-30722,
+-30718,
+-30713,
+-30709,
+-30705,
+-30700,
+-30696,
+-30691,
+-30687,
+-30683,
+-30678,
+-30674,
+-30669,
+-30665,
+-30660,
+-30656,
+-30652,
+-30647,
+-30643,
+-30638,
+-30634,
+-30629,
+-30625,
+-30620,
+-30616,
+-30611,
+-30607,
+-30602,
+-30598,
+-30593,
+-30589,
+-30584,
+-30580,
+-30575,
+-30571,
+-30566,
+-30562,
+-30557,
+-30553,
+-30548,
+-30544,
+-30539,
+-30535,
+-30530,
+-30525,
+-30521,
+-30516,
+-30512,
+-30507,
+-30503,
+-30498,
+-30493,
+-30489,
+-30484,
+-30480,
+-30475,
+-30470,
+-30466,
+-30461,
+-30456,
+-30452,
+-30447,
+-30442,
+-30438,
+-30433,
+-30429,
+-30424,
+-30419,
+-30415,
+-30410,
+-30405,
+-30400,
+-30396,
+-30391,
+-30386,
+-30382,
+-30377,
+-30372,
+-30368,
+-30363,
+-30358,
+-30353,
+-30349,
+-30344,
+-30339,
+-30334,
+-30330,
+-30325,
+-30320,
+-30315,
+-30311,
+-30306,
+-30301,
+-30296,
+-30291,
+-30287,
+-30282,
+-30277,
+-30272,
+-30267,
+-30263,
+-30258,
+-30253,
+-30248,
+-30243,
+-30238,
+-30234,
+-30229,
+-30224,
+-30219,
+-30214,
+-30209,
+-30205,
+-30200,
+-30195,
+-30190,
+-30185,
+-30180,
+-30175,
+-30170,
+-30165,
+-30160,
+-30156,
+-30151,
+-30146,
+-30141,
+-30136,
+-30131,
+-30126,
+-30121,
+-30116,
+-30111,
+-30106,
+-30101,
+-30096,
+-30091,
+-30086,
+-30081,
+-30076,
+-30071,
+-30066,
+-30061,
+-30056,
+-30051,
+-30046,
+-30041,
+-30036,
+-30031,
+-30026,
+-30021,
+-30016,
+-30011,
+-30006,
+-30001,
+-29996,
+-29991,
+-29986,
+-29981,
+-29976,
+-29971,
+-29966,
+-29961,
+-29955,
+-29950,
+-29945,
+-29940,
+-29935,
+-29930,
+-29925,
+-29920,
+-29915,
+-29909,
+-29904,
+-29899,
+-29894,
+-29889,
+-29884,
+-29879,
+-29873,
+-29868,
+-29863,
+-29858,
+-29853,
+-29848,
+-29842,
+-29837,
+-29832,
+-29827,
+-29822,
+-29816,
+-29811,
+-29806,
+-29801,
+-29795,
+-29790,
+-29785,
+-29780,
+-29774,
+-29769,
+-29764,
+-29759,
+-29753,
+-29748,
+-29743,
+-29738,
+-29732,
+-29727,
+-29722,
+-29717,
+-29711,
+-29706,
+-29701,
+-29695,
+-29690,
+-29685,
+-29679,
+-29674,
+-29669,
+-29663,
+-29658,
+-29653,
+-29647,
+-29642,
+-29637,
+-29631,
+-29626,
+-29621,
+-29615,
+-29610,
+-29604,
+-29599,
+-29594,
+-29588,
+-29583,
+-29577,
+-29572,
+-29567,
+-29561,
+-29556,
+-29550,
+-29545,
+-29539,
+-29534,
+-29529,
+-29523,
+-29518,
+-29512,
+-29507,
+-29501,
+-29496,
+-29490,
+-29485,
+-29479,
+-29474,
+-29468,
+-29463,
+-29457,
+-29452,
+-29446,
+-29441,
+-29435,
+-29430,
+-29424,
+-29419,
+-29413,
+-29408,
+-29402,
+-29397,
+-29391,
+-29385,
+-29380,
+-29374,
+-29369,
+-29363,
+-29358,
+-29352,
+-29346,
+-29341,
+-29335,
+-29330,
+-29324,
+-29318,
+-29313,
+-29307,
+-29302,
+-29296,
+-29290,
+-29285,
+-29279,
+-29273,
+-29268,
+-29262,
+-29256,
+-29251,
+-29245,
+-29239,
+-29234,
+-29228,
+-29222,
+-29217,
+-29211,
+-29205,
+-29200,
+-29194,
+-29188,
+-29183,
+-29177,
+-29171,
+-29165,
+-29160,
+-29154,
+-29148,
+-29142,
+-29137,
+-29131,
+-29125,
+-29119,
+-29114,
+-29108,
+-29102,
+-29096,
+-29091,
+-29085,
+-29079,
+-29073,
+-29067,
+-29062,
+-29056,
+-29050,
+-29044,
+-29038,
+-29033,
+-29027,
+-29021,
+-29015,
+-29009,
+-29003,
+-28997,
+-28992,
+-28986,
+-28980,
+-28974,
+-28968,
+-28962,
+-28956,
+-28951,
+-28945,
+-28939,
+-28933,
+-28927,
+-28921,
+-28915,
+-28909,
+-28903,
+-28897,
+-28891,
+-28886,
+-28880,
+-28874,
+-28868,
+-28862,
+-28856,
+-28850,
+-28844,
+-28838,
+-28832,
+-28826,
+-28820,
+-28814,
+-28808,
+-28802,
+-28796,
+-28790,
+-28784,
+-28778,
+-28772,
+-28766,
+-28760,
+-28754,
+-28748,
+-28742,
+-28736,
+-28730,
+-28724,
+-28718,
+-28712,
+-28706,
+-28700,
+-28694,
+-28687,
+-28681,
+-28675,
+-28669,
+-28663,
+-28657,
+-28651,
+-28645,
+-28639,
+-28633,
+-28627,
+-28620,
+-28614,
+-28608,
+-28602,
+-28596,
+-28590,
+-28584,
+-28578,
+-28571,
+-28565,
+-28559,
+-28553,
+-28547,
+-28541,
+-28534,
+-28528,
+-28522,
+-28516,
+-28510,
+-28503,
+-28497,
+-28491,
+-28485,
+-28479,
+-28472,
+-28466,
+-28460,
+-28454,
+-28447,
+-28441,
+-28435,
+-28429,
+-28423,
+-28416,
+-28410,
+-28404,
+-28397,
+-28391,
+-28385,
+-28379,
+-28372,
+-28366,
+-28360,
+-28353,
+-28347,
+-28341,
+-28335,
+-28328,
+-28322,
+-28316,
+-28309,
+-28303,
+-28297,
+-28290,
+-28284,
+-28278,
+-28271,
+-28265,
+-28259,
+-28252,
+-28246,
+-28239,
+-28233,
+-28227,
+-28220,
+-28214,
+-28208,
+-28201,
+-28195,
+-28188,
+-28182,
+-28176,
+-28169,
+-28163,
+-28156,
+-28150,
+-28143,
+-28137,
+-28131,
+-28124,
+-28118,
+-28111,
+-28105,
+-28098,
+-28092,
+-28085,
+-28079,
+-28072,
+-28066,
+-28059,
+-28053,
+-28046,
+-28040,
+-28033,
+-28027,
+-28020,
+-28014,
+-28007,
+-28001,
+-27994,
+-27988,
+-27981,
+-27975,
+-27968,
+-27962,
+-27955,
+-27948,
+-27942,
+-27935,
+-27929,
+-27922,
+-27916,
+-27909,
+-27902,
+-27896,
+-27889,
+-27883,
+-27876,
+-27869,
+-27863,
+-27856,
+-27850,
+-27843,
+-27836,
+-27830,
+-27823,
+-27816,
+-27810,
+-27803,
+-27797,
+-27790,
+-27783,
+-27777,
+-27770,
+-27763,
+-27757,
+-27750,
+-27743,
+-27736,
+-27730,
+-27723,
+-27716,
+-27710,
+-27703,
+-27696,
+-27690,
+-27683,
+-27676,
+-27669,
+-27663,
+-27656,
+-27649,
+-27642,
+-27636,
+-27629,
+-27622,
+-27615,
+-27609,
+-27602,
+-27595,
+-27588,
+-27582,
+-27575,
+-27568,
+-27561,
+-27554,
+-27548,
+-27541,
+-27534,
+-27527,
+-27520,
+-27513,
+-27507,
+-27500,
+-27493,
+-27486,
+-27479,
+-27472,
+-27466,
+-27459,
+-27452,
+-27445,
+-27438,
+-27431,
+-27424,
+-27418,
+-27411,
+-27404,
+-27397,
+-27390,
+-27383,
+-27376,
+-27369,
+-27362,
+-27355,
+-27349,
+-27342,
+-27335,
+-27328,
+-27321,
+-27314,
+-27307,
+-27300,
+-27293,
+-27286,
+-27279,
+-27272,
+-27265,
+-27258,
+-27251,
+-27244,
+-27237,
+-27230,
+-27223,
+-27216,
+-27209,
+-27202,
+-27195,
+-27188,
+-27181,
+-27174,
+-27167,
+-27160,
+-27153,
+-27146,
+-27139,
+-27132,
+-27125,
+-27118,
+-27111,
+-27104,
+-27097,
+-27090,
+-27083,
+-27076,
+-27068,
+-27061,
+-27054,
+-27047,
+-27040,
+-27033,
+-27026,
+-27019,
+-27012,
+-27005,
+-26997,
+-26990,
+-26983,
+-26976,
+-26969,
+-26962,
+-26955,
+-26948,
+-26940,
+-26933,
+-26926,
+-26919,
+-26912,
+-26905,
+-26897,
+-26890,
+-26883,
+-26876,
+-26869,
+-26861,
+-26854,
+-26847,
+-26840,
+-26833,
+-26825,
+-26818,
+-26811,
+-26804,
+-26797,
+-26789,
+-26782,
+-26775,
+-26768,
+-26760,
+-26753,
+-26746,
+-26739,
+-26731,
+-26724,
+-26717,
+-26709,
+-26702,
+-26695,
+-26688,
+-26680,
+-26673,
+-26666,
+-26658,
+-26651,
+-26644,
+-26636,
+-26629,
+-26622,
+-26615,
+-26607,
+-26600,
+-26593,
+-26585,
+-26578,
+-26570,
+-26563,
+-26556,
+-26548,
+-26541,
+-26534,
+-26526,
+-26519,
+-26512,
+-26504,
+-26497,
+-26489,
+-26482,
+-26475,
+-26467,
+-26460,
+-26452,
+-26445,
+-26437,
+-26430,
+-26423,
+-26415,
+-26408,
+-26400,
+-26393,
+-26385,
+-26378,
+-26371,
+-26363,
+-26356,
+-26348,
+-26341,
+-26333,
+-26326,
+-26318,
+-26311,
+-26303,
+-26296,
+-26288,
+-26281,
+-26273,
+-26266,
+-26258,
+-26251,
+-26243,
+-26236,
+-26228,
+-26221,
+-26213,
+-26205,
+-26198,
+-26190,
+-26183,
+-26175,
+-26168,
+-26160,
+-26153,
+-26145,
+-26137,
+-26130,
+-26122,
+-26115,
+-26107,
+-26099,
+-26092,
+-26084,
+-26077,
+-26069,
+-26061,
+-26054,
+-26046,
+-26039,
+-26031,
+-26023,
+-26016,
+-26008,
+-26000,
+-25993,
+-25985,
+-25977,
+-25970,
+-25962,
+-25954,
+-25947,
+-25939,
+-25931,
+-25924,
+-25916,
+-25908,
+-25901,
+-25893,
+-25885,
+-25878,
+-25870,
+-25862,
+-25854,
+-25847,
+-25839,
+-25831,
+-25824,
+-25816,
+-25808,
+-25800,
+-25793,
+-25785,
+-25777,
+-25769,
+-25762,
+-25754,
+-25746,
+-25738,
+-25730,
+-25723,
+-25715,
+-25707,
+-25699,
+-25691,
+-25684,
+-25676,
+-25668,
+-25660,
+-25652,
+-25645,
+-25637,
+-25629,
+-25621,
+-25613,
+-25605,
+-25598,
+-25590,
+-25582,
+-25574,
+-25566,
+-25558,
+-25550,
+-25543,
+-25535,
+-25527,
+-25519,
+-25511,
+-25503,
+-25495,
+-25487,
+-25480,
+-25472,
+-25464,
+-25456,
+-25448,
+-25440,
+-25432,
+-25424,
+-25416,
+-25408,
+-25400,
+-25392,
+-25384,
+-25376,
+-25369,
+-25361,
+-25353,
+-25345,
+-25337,
+-25329,
+-25321,
+-25313,
+-25305,
+-25297,
+-25289,
+-25281,
+-25273,
+-25265,
+-25257,
+-25249,
+-25241,
+-25233,
+-25225,
+-25217,
+-25209,
+-25201,
+-25193,
+-25185,
+-25177,
+-25169,
+-25161,
+-25152,
+-25144,
+-25136,
+-25128,
+-25120,
+-25112,
+-25104,
+-25096,
+-25088,
+-25080,
+-25072,
+-25064,
+-25056,
+-25047,
+-25039,
+-25031,
+-25023,
+-25015,
+-25007,
+-24999,
+-24991,
+-24983,
+-24974,
+-24966,
+-24958,
+-24950,
+-24942,
+-24934,
+-24926,
+-24917,
+-24909,
+-24901,
+-24893,
+-24885,
+-24877,
+-24868,
+-24860,
+-24852,
+-24844,
+-24836,
+-24827,
+-24819,
+-24811,
+-24803,
+-24795,
+-24786,
+-24778,
+-24770,
+-24762,
+-24753,
+-24745,
+-24737,
+-24729,
+-24720,
+-24712,
+-24704,
+-24696,
+-24687,
+-24679,
+-24671,
+-24663,
+-24654,
+-24646,
+-24638,
+-24630,
+-24621,
+-24613,
+-24605,
+-24596,
+-24588,
+-24580,
+-24571,
+-24563,
+-24555,
+-24546,
+-24538,
+-24530,
+-24521,
+-24513,
+-24505,
+-24496,
+-24488,
+-24480,
+-24471,
+-24463,
+-24455,
+-24446,
+-24438,
+-24430,
+-24421,
+-24413,
+-24404,
+-24396,
+-24388,
+-24379,
+-24371,
+-24362,
+-24354,
+-24346,
+-24337,
+-24329,
+-24320,
+-24312,
+-24304,
+-24295,
+-24287,
+-24278,
+-24270,
+-24261,
+-24253,
+-24244,
+-24236,
+-24228,
+-24219,
+-24211,
+-24202,
+-24194,
+-24185,
+-24177,
+-24168,
+-24160,
+-24151,
+-24143,
+-24134,
+-24126,
+-24117,
+-24109,
+-24100,
+-24092,
+-24083,
+-24075,
+-24066,
+-24058,
+-24049,
+-24041,
+-24032,
+-24023,
+-24015,
+-24006,
+-23998,
+-23989,
+-23981,
+-23972,
+-23964,
+-23955,
+-23946,
+-23938,
+-23929,
+-23921,
+-23912,
+-23903,
+-23895,
+-23886,
+-23878,
+-23869,
+-23860,
+-23852,
+-23843,
+-23835,
+-23826,
+-23817,
+-23809,
+-23800,
+-23791,
+-23783,
+-23774,
+-23766,
+-23757,
+-23748,
+-23740,
+-23731,
+-23722,
+-23714,
+-23705,
+-23696,
+-23688,
+-23679,
+-23670,
+-23661,
+-23653,
+-23644,
+-23635,
+-23627,
+-23618,
+-23609,
+-23601,
+-23592,
+-23583,
+-23574,
+-23566,
+-23557,
+-23548,
+-23539,
+-23531,
+-23522,
+-23513,
+-23504,
+-23496,
+-23487,
+-23478,
+-23469,
+-23461,
+-23452,
+-23443,
+-23434,
+-23426,
+-23417,
+-23408,
+-23399,
+-23390,
+-23382,
+-23373,
+-23364,
+-23355,
+-23346,
+-23337,
+-23329,
+-23320,
+-23311,
+-23302,
+-23293,
+-23284,
+-23276,
+-23267,
+-23258,
+-23249,
+-23240,
+-23231,
+-23223,
+-23214,
+-23205,
+-23196,
+-23187,
+-23178,
+-23169,
+-23160,
+-23151,
+-23143,
+-23134,
+-23125,
+-23116,
+-23107,
+-23098,
+-23089,
+-23080,
+-23071,
+-23062,
+-23053,
+-23045,
+-23036,
+-23027,
+-23018,
+-23009,
+-23000,
+-22991,
+-22982,
+-22973,
+-22964,
+-22955,
+-22946,
+-22937,
+-22928,
+-22919,
+-22910,
+-22901,
+-22892,
+-22883,
+-22874,
+-22865,
+-22856,
+-22847,
+-22838,
+-22829,
+-22820,
+-22811,
+-22802,
+-22793,
+-22784,
+-22775,
+-22766,
+-22757,
+-22748,
+-22739,
+-22730,
+-22721,
+-22712,
+-22703,
+-22694,
+-22685,
+-22675,
+-22666,
+-22657,
+-22648,
+-22639,
+-22630,
+-22621,
+-22612,
+-22603,
+-22594,
+-22585,
+-22575,
+-22566,
+-22557,
+-22548,
+-22539,
+-22530,
+-22521,
+-22512,
+-22503,
+-22493,
+-22484,
+-22475,
+-22466,
+-22457,
+-22448,
+-22438,
+-22429,
+-22420,
+-22411,
+-22402,
+-22393,
+-22383,
+-22374,
+-22365,
+-22356,
+-22347,
+-22338,
+-22328,
+-22319,
+-22310,
+-22301,
+-22292,
+-22282,
+-22273,
+-22264,
+-22255,
+-22245,
+-22236,
+-22227,
+-22218,
+-22209,
+-22199,
+-22190,
+-22181,
+-22172,
+-22162,
+-22153,
+-22144,
+-22135,
+-22125,
+-22116,
+-22107,
+-22097,
+-22088,
+-22079,
+-22070,
+-22060,
+-22051,
+-22042,
+-22032,
+-22023,
+-22014,
+-22004,
+-21995,
+-21986,
+-21977,
+-21967,
+-21958,
+-21949,
+-21939,
+-21930,
+-21921,
+-21911,
+-21902,
+-21893,
+-21883,
+-21874,
+-21864,
+-21855,
+-21846,
+-21836,
+-21827,
+-21818,
+-21808,
+-21799,
+-21789,
+-21780,
+-21771,
+-21761,
+-21752,
+-21743,
+-21733,
+-21724,
+-21714,
+-21705,
+-21695,
+-21686,
+-21677,
+-21667,
+-21658,
+-21648,
+-21639,
+-21629,
+-21620,
+-21611,
+-21601,
+-21592,
+-21582,
+-21573,
+-21563,
+-21554,
+-21544,
+-21535,
+-21525,
+-21516,
+-21506,
+-21497,
+-21488,
+-21478,
+-21469,
+-21459,
+-21450,
+-21440,
+-21431,
+-21421,
+-21412,
+-21402,
+-21392,
+-21383,
+-21373,
+-21364,
+-21354,
+-21345,
+-21335,
+-21326,
+-21316,
+-21307,
+-21297,
+-21288,
+-21278,
+-21268,
+-21259,
+-21249,
+-21240,
+-21230,
+-21221,
+-21211,
+-21202,
+-21192,
+-21182,
+-21173,
+-21163,
+-21154,
+-21144,
+-21134,
+-21125,
+-21115,
+-21106,
+-21096,
+-21086,
+-21077,
+-21067,
+-21057,
+-21048,
+-21038,
+-21029,
+-21019,
+-21009,
+-21000,
+-20990,
+-20980,
+-20971,
+-20961,
+-20951,
+-20942,
+-20932,
+-20922,
+-20913,
+-20903,
+-20893,
+-20884,
+-20874,
+-20864,
+-20855,
+-20845,
+-20835,
+-20825,
+-20816,
+-20806,
+-20796,
+-20787,
+-20777,
+-20767,
+-20758,
+-20748,
+-20738,
+-20728,
+-20719,
+-20709,
+-20699,
+-20689,
+-20680,
+-20670,
+-20660,
+-20650,
+-20641,
+-20631,
+-20621,
+-20611,
+-20602,
+-20592,
+-20582,
+-20572,
+-20562,
+-20553,
+-20543,
+-20533,
+-20523,
+-20513,
+-20504,
+-20494,
+-20484,
+-20474,
+-20464,
+-20455,
+-20445,
+-20435,
+-20425,
+-20415,
+-20406,
+-20396,
+-20386,
+-20376,
+-20366,
+-20356,
+-20346,
+-20337,
+-20327,
+-20317,
+-20307,
+-20297,
+-20287,
+-20277,
+-20268,
+-20258,
+-20248,
+-20238,
+-20228,
+-20218,
+-20208,
+-20198,
+-20188,
+-20179,
+-20169,
+-20159,
+-20149,
+-20139,
+-20129,
+-20119,
+-20109,
+-20099,
+-20089,
+-20079,
+-20070,
+-20060,
+-20050,
+-20040,
+-20030,
+-20020,
+-20010,
+-20000,
+-19990,
+-19980,
+-19970,
+-19960,
+-19950,
+-19940,
+-19930,
+-19920,
+-19910,
+-19900,
+-19890,
+-19880,
+-19870,
+-19860,
+-19850,
+-19840,
+-19830,
+-19820,
+-19810,
+-19800,
+-19790,
+-19780,
+-19770,
+-19760,
+-19750,
+-19740,
+-19730,
+-19720,
+-19710,
+-19700,
+-19690,
+-19680,
+-19670,
+-19660,
+-19650,
+-19640,
+-19630,
+-19620,
+-19610,
+-19599,
+-19589,
+-19579,
+-19569,
+-19559,
+-19549,
+-19539,
+-19529,
+-19519,
+-19509,
+-19499,
+-19488,
+-19478,
+-19468,
+-19458,
+-19448,
+-19438,
+-19428,
+-19418,
+-19408,
+-19397,
+-19387,
+-19377,
+-19367,
+-19357,
+-19347,
+-19337,
+-19326,
+-19316,
+-19306,
+-19296,
+-19286,
+-19276,
+-19266,
+-19255,
+-19245,
+-19235,
+-19225,
+-19215,
+-19205,
+-19194,
+-19184,
+-19174,
+-19164,
+-19154,
+-19143,
+-19133,
+-19123,
+-19113,
+-19103,
+-19092,
+-19082,
+-19072,
+-19062,
+-19051,
+-19041,
+-19031,
+-19021,
+-19011,
+-19000,
+-18990,
+-18980,
+-18970,
+-18959,
+-18949,
+-18939,
+-18929,
+-18918,
+-18908,
+-18898,
+-18888,
+-18877,
+-18867,
+-18857,
+-18846,
+-18836,
+-18826,
+-18816,
+-18805,
+-18795,
+-18785,
+-18774,
+-18764,
+-18754,
+-18744,
+-18733,
+-18723,
+-18713,
+-18702,
+-18692,
+-18682,
+-18671,
+-18661,
+-18651,
+-18640,
+-18630,
+-18620,
+-18609,
+-18599,
+-18589,
+-18578,
+-18568,
+-18558,
+-18547,
+-18537,
+-18526,
+-18516,
+-18506,
+-18495,
+-18485,
+-18475,
+-18464,
+-18454,
+-18443,
+-18433,
+-18423,
+-18412,
+-18402,
+-18392,
+-18381,
+-18371,
+-18360,
+-18350,
+-18339,
+-18329,
+-18319,
+-18308,
+-18298,
+-18287,
+-18277,
+-18267,
+-18256,
+-18246,
+-18235,
+-18225,
+-18214,
+-18204,
+-18193,
+-18183,
+-18173,
+-18162,
+-18152,
+-18141,
+-18131,
+-18120,
+-18110,
+-18099,
+-18089,
+-18078,
+-18068,
+-18057,
+-18047,
+-18036,
+-18026,
+-18015,
+-18005,
+-17994,
+-17984,
+-17973,
+-17963,
+-17952,
+-17942,
+-17931,
+-17921,
+-17910,
+-17900,
+-17889,
+-17879,
+-17868,
+-17858,
+-17847,
+-17837,
+-17826,
+-17815,
+-17805,
+-17794,
+-17784,
+-17773,
+-17763,
+-17752,
+-17742,
+-17731,
+-17720,
+-17710,
+-17699,
+-17689,
+-17678,
+-17668,
+-17657,
+-17646,
+-17636,
+-17625,
+-17615,
+-17604,
+-17593,
+-17583,
+-17572,
+-17562,
+-17551,
+-17540,
+-17530,
+-17519,
+-17509,
+-17498,
+-17487,
+-17477,
+-17466,
+-17455,
+-17445,
+-17434,
+-17423,
+-17413,
+-17402,
+-17392,
+-17381,
+-17370,
+-17360,
+-17349,
+-17338,
+-17328,
+-17317,
+-17306,
+-17296,
+-17285,
+-17274,
+-17264,
+-17253,
+-17242,
+-17232,
+-17221,
+-17210,
+-17199,
+-17189,
+-17178,
+-17167,
+-17157,
+-17146,
+-17135,
+-17124,
+-17114,
+-17103,
+-17092,
+-17082,
+-17071,
+-17060,
+-17049,
+-17039,
+-17028,
+-17017,
+-17006,
+-16996,
+-16985,
+-16974,
+-16964,
+-16953,
+-16942,
+-16931,
+-16920,
+-16910,
+-16899,
+-16888,
+-16877,
+-16867,
+-16856,
+-16845,
+-16834,
+-16824,
+-16813,
+-16802,
+-16791,
+-16780,
+-16770,
+-16759,
+-16748,
+-16737,
+-16726,
+-16716,
+-16705,
+-16694,
+-16683,
+-16672,
+-16662,
+-16651,
+-16640,
+-16629,
+-16618,
+-16607,
+-16597,
+-16586,
+-16575,
+-16564,
+-16553,
+-16542,
+-16532,
+-16521,
+-16510,
+-16499,
+-16488,
+-16477,
+-16466,
+-16455,
+-16445,
+-16434,
+-16423,
+-16412,
+-16401,
+-16390,
+-16379,
+-16368,
+-16358,
+-16347,
+-16336,
+-16325,
+-16314,
+-16303,
+-16292,
+-16281,
+-16270,
+-16260,
+-16249,
+-16238,
+-16227,
+-16216,
+-16205,
+-16194,
+-16183,
+-16172,
+-16161,
+-16150,
+-16139,
+-16128,
+-16117,
+-16107,
+-16096,
+-16085,
+-16074,
+-16063,
+-16052,
+-16041,
+-16030,
+-16019,
+-16008,
+-15997,
+-15986,
+-15975,
+-15964,
+-15953,
+-15942,
+-15931,
+-15920,
+-15909,
+-15898,
+-15887,
+-15876,
+-15865,
+-15854,
+-15843,
+-15832,
+-15821,
+-15810,
+-15799,
+-15788,
+-15777,
+-15766,
+-15755,
+-15744,
+-15733,
+-15722,
+-15711,
+-15700,
+-15689,
+-15678,
+-15667,
+-15656,
+-15645,
+-15634,
+-15623,
+-15612,
+-15601,
+-15590,
+-15579,
+-15568,
+-15556,
+-15545,
+-15534,
+-15523,
+-15512,
+-15501,
+-15490,
+-15479,
+-15468,
+-15457,
+-15446,
+-15435,
+-15424,
+-15413,
+-15401,
+-15390,
+-15379,
+-15368,
+-15357,
+-15346,
+-15335,
+-15324,
+-15313,
+-15301,
+-15290,
+-15279,
+-15268,
+-15257,
+-15246,
+-15235,
+-15224,
+-15213,
+-15201,
+-15190,
+-15179,
+-15168,
+-15157,
+-15146,
+-15135,
+-15123,
+-15112,
+-15101,
+-15090,
+-15079,
+-15068,
+-15056,
+-15045,
+-15034,
+-15023,
+-15012,
+-15001,
+-14989,
+-14978,
+-14967,
+-14956,
+-14945,
+-14934,
+-14922,
+-14911,
+-14900,
+-14889,
+-14878,
+-14866,
+-14855,
+-14844,
+-14833,
+-14822,
+-14810,
+-14799,
+-14788,
+-14777,
+-14766,
+-14754,
+-14743,
+-14732,
+-14721,
+-14709,
+-14698,
+-14687,
+-14676,
+-14665,
+-14653,
+-14642,
+-14631,
+-14620,
+-14608,
+-14597,
+-14586,
+-14575,
+-14563,
+-14552,
+-14541,
+-14530,
+-14518,
+-14507,
+-14496,
+-14484,
+-14473,
+-14462,
+-14451,
+-14439,
+-14428,
+-14417,
+-14406,
+-14394,
+-14383,
+-14372,
+-14360,
+-14349,
+-14338,
+-14326,
+-14315,
+-14304,
+-14293,
+-14281,
+-14270,
+-14259,
+-14247,
+-14236,
+-14225,
+-14213,
+-14202,
+-14191,
+-14179,
+-14168,
+-14157,
+-14145,
+-14134,
+-14123,
+-14111,
+-14100,
+-14089,
+-14077,
+-14066,
+-14055,
+-14043,
+-14032,
+-14021,
+-14009,
+-13998,
+-13986,
+-13975,
+-13964,
+-13952,
+-13941,
+-13930,
+-13918,
+-13907,
+-13895,
+-13884,
+-13873,
+-13861,
+-13850,
+-13839,
+-13827,
+-13816,
+-13804,
+-13793,
+-13782,
+-13770,
+-13759,
+-13747,
+-13736,
+-13725,
+-13713,
+-13702,
+-13690,
+-13679,
+-13667,
+-13656,
+-13645,
+-13633,
+-13622,
+-13610,
+-13599,
+-13587,
+-13576,
+-13565,
+-13553,
+-13542,
+-13530,
+-13519,
+-13507,
+-13496,
+-13485,
+-13473,
+-13462,
+-13450,
+-13439,
+-13427,
+-13416,
+-13404,
+-13393,
+-13381,
+-13370,
+-13358,
+-13347,
+-13335,
+-13324,
+-13312,
+-13301,
+-13290,
+-13278,
+-13267,
+-13255,
+-13244,
+-13232,
+-13221,
+-13209,
+-13198,
+-13186,
+-13175,
+-13163,
+-13152,
+-13140,
+-13129,
+-13117,
+-13106,
+-13094,
+-13082,
+-13071,
+-13059,
+-13048,
+-13036,
+-13025,
+-13013,
+-13002,
+-12990,
+-12979,
+-12967,
+-12956,
+-12944,
+-12933,
+-12921,
+-12909,
+-12898,
+-12886,
+-12875,
+-12863,
+-12852,
+-12840,
+-12829,
+-12817,
+-12805,
+-12794,
+-12782,
+-12771,
+-12759,
+-12748,
+-12736,
+-12724,
+-12713,
+-12701,
+-12690,
+-12678,
+-12666,
+-12655,
+-12643,
+-12632,
+-12620,
+-12609,
+-12597,
+-12585,
+-12574,
+-12562,
+-12550,
+-12539,
+-12527,
+-12516,
+-12504,
+-12492,
+-12481,
+-12469,
+-12458,
+-12446,
+-12434,
+-12423,
+-12411,
+-12399,
+-12388,
+-12376,
+-12365,
+-12353,
+-12341,
+-12330,
+-12318,
+-12306,
+-12295,
+-12283,
+-12271,
+-12260,
+-12248,
+-12236,
+-12225,
+-12213,
+-12201,
+-12190,
+-12178,
+-12166,
+-12155,
+-12143,
+-12131,
+-12120,
+-12108,
+-12096,
+-12085,
+-12073,
+-12061,
+-12050,
+-12038,
+-12026,
+-12015,
+-12003,
+-11991,
+-11980,
+-11968,
+-11956,
+-11944,
+-11933,
+-11921,
+-11909,
+-11898,
+-11886,
+-11874,
+-11862,
+-11851,
+-11839,
+-11827,
+-11816,
+-11804,
+-11792,
+-11780,
+-11769,
+-11757,
+-11745,
+-11734,
+-11722,
+-11710,
+-11698,
+-11687,
+-11675,
+-11663,
+-11651,
+-11640,
+-11628,
+-11616,
+-11604,
+-11593,
+-11581,
+-11569,
+-11557,
+-11546,
+-11534,
+-11522,
+-11510,
+-11499,
+-11487,
+-11475,
+-11463,
+-11451,
+-11440,
+-11428,
+-11416,
+-11404,
+-11393,
+-11381,
+-11369,
+-11357,
+-11345,
+-11334,
+-11322,
+-11310,
+-11298,
+-11286,
+-11275,
+-11263,
+-11251,
+-11239,
+-11227,
+-11216,
+-11204,
+-11192,
+-11180,
+-11168,
+-11157,
+-11145,
+-11133,
+-11121,
+-11109,
+-11098,
+-11086,
+-11074,
+-11062,
+-11050,
+-11038,
+-11027,
+-11015,
+-11003,
+-10991,
+-10979,
+-10967,
+-10956,
+-10944,
+-10932,
+-10920,
+-10908,
+-10896,
+-10884,
+-10873,
+-10861,
+-10849,
+-10837,
+-10825,
+-10813,
+-10801,
+-10790,
+-10778,
+-10766,
+-10754,
+-10742,
+-10730,
+-10718,
+-10706,
+-10695,
+-10683,
+-10671,
+-10659,
+-10647,
+-10635,
+-10623,
+-10611,
+-10600,
+-10588,
+-10576,
+-10564,
+-10552,
+-10540,
+-10528,
+-10516,
+-10504,
+-10492,
+-10481,
+-10469,
+-10457,
+-10445,
+-10433,
+-10421,
+-10409,
+-10397,
+-10385,
+-10373,
+-10361,
+-10349,
+-10338,
+-10326,
+-10314,
+-10302,
+-10290,
+-10278,
+-10266,
+-10254,
+-10242,
+-10230,
+-10218,
+-10206,
+-10194,
+-10182,
+-10170,
+-10159,
+-10147,
+-10135,
+-10123,
+-10111,
+-10099,
+-10087,
+-10075,
+-10063,
+-10051,
+-10039,
+-10027,
+-10015,
+-10003,
+-9991,
+-9979,
+-9967,
+-9955,
+-9943,
+-9931,
+-9919,
+-9907,
+-9895,
+-9883,
+-9871,
+-9859,
+-9847,
+-9835,
+-9823,
+-9811,
+-9799,
+-9787,
+-9775,
+-9763,
+-9751,
+-9739,
+-9727,
+-9715,
+-9703,
+-9691,
+-9679,
+-9667,
+-9655,
+-9643,
+-9631,
+-9619,
+-9607,
+-9595,
+-9583,
+-9571,
+-9559,
+-9547,
+-9535,
+-9523,
+-9511,
+-9499,
+-9487,
+-9475,
+-9463,
+-9451,
+-9439,
+-9427,
+-9415,
+-9403,
+-9391,
+-9379,
+-9367,
+-9355,
+-9343,
+-9331,
+-9319,
+-9307,
+-9295,
+-9283,
+-9270,
+-9258,
+-9246,
+-9234,
+-9222,
+-9210,
+-9198,
+-9186,
+-9174,
+-9162,
+-9150,
+-9138,
+-9126,
+-9114,
+-9102,
+-9090,
+-9077,
+-9065,
+-9053,
+-9041,
+-9029,
+-9017,
+-9005,
+-8993,
+-8981,
+-8969,
+-8957,
+-8945,
+-8932,
+-8920,
+-8908,
+-8896,
+-8884,
+-8872,
+-8860,
+-8848,
+-8836,
+-8824,
+-8812,
+-8799,
+-8787,
+-8775,
+-8763,
+-8751,
+-8739,
+-8727,
+-8715,
+-8703,
+-8690,
+-8678,
+-8666,
+-8654,
+-8642,
+-8630,
+-8618,
+-8606,
+-8593,
+-8581,
+-8569,
+-8557,
+-8545,
+-8533,
+-8521,
+-8509,
+-8496,
+-8484,
+-8472,
+-8460,
+-8448,
+-8436,
+-8424,
+-8411,
+-8399,
+-8387,
+-8375,
+-8363,
+-8351,
+-8339,
+-8326,
+-8314,
+-8302,
+-8290,
+-8278,
+-8266,
+-8253,
+-8241,
+-8229,
+-8217,
+-8205,
+-8193,
+-8180,
+-8168,
+-8156,
+-8144,
+-8132,
+-8120,
+-8107,
+-8095,
+-8083,
+-8071,
+-8059,
+-8047,
+-8034,
+-8022,
+-8010,
+-7998,
+-7986,
+-7973,
+-7961,
+-7949,
+-7937,
+-7925,
+-7912,
+-7900,
+-7888,
+-7876,
+-7864,
+-7851,
+-7839,
+-7827,
+-7815,
+-7803,
+-7790,
+-7778,
+-7766,
+-7754,
+-7742,
+-7729,
+-7717,
+-7705,
+-7693,
+-7681,
+-7668,
+-7656,
+-7644,
+-7632,
+-7619,
+-7607,
+-7595,
+-7583,
+-7571,
+-7558,
+-7546,
+-7534,
+-7522,
+-7509,
+-7497,
+-7485,
+-7473,
+-7461,
+-7448,
+-7436,
+-7424,
+-7412,
+-7399,
+-7387,
+-7375,
+-7363,
+-7350,
+-7338,
+-7326,
+-7314,
+-7301,
+-7289,
+-7277,
+-7265,
+-7252,
+-7240,
+-7228,
+-7216,
+-7203,
+-7191,
+-7179,
+-7167,
+-7154,
+-7142,
+-7130,
+-7117,
+-7105,
+-7093,
+-7081,
+-7068,
+-7056,
+-7044,
+-7032,
+-7019,
+-7007,
+-6995,
+-6982,
+-6970,
+-6958,
+-6946,
+-6933,
+-6921,
+-6909,
+-6897,
+-6884,
+-6872,
+-6860,
+-6847,
+-6835,
+-6823,
+-6811,
+-6798,
+-6786,
+-6774,
+-6761,
+-6749,
+-6737,
+-6724,
+-6712,
+-6700,
+-6688,
+-6675,
+-6663,
+-6651,
+-6638,
+-6626,
+-6614,
+-6601,
+-6589,
+-6577,
+-6564,
+-6552,
+-6540,
+-6528,
+-6515,
+-6503,
+-6491,
+-6478,
+-6466,
+-6454,
+-6441,
+-6429,
+-6417,
+-6404,
+-6392,
+-6380,
+-6367,
+-6355,
+-6343,
+-6330,
+-6318,
+-6306,
+-6293,
+-6281,
+-6269,
+-6256,
+-6244,
+-6232,
+-6219,
+-6207,
+-6195,
+-6182,
+-6170,
+-6158,
+-6145,
+-6133,
+-6121,
+-6108,
+-6096,
+-6084,
+-6071,
+-6059,
+-6047,
+-6034,
+-6022,
+-6010,
+-5997,
+-5985,
+-5972,
+-5960,
+-5948,
+-5935,
+-5923,
+-5911,
+-5898,
+-5886,
+-5874,
+-5861,
+-5849,
+-5836,
+-5824,
+-5812,
+-5799,
+-5787,
+-5775,
+-5762,
+-5750,
+-5738,
+-5725,
+-5713,
+-5700,
+-5688,
+-5676,
+-5663,
+-5651,
+-5639,
+-5626,
+-5614,
+-5601,
+-5589,
+-5577,
+-5564,
+-5552,
+-5539,
+-5527,
+-5515,
+-5502,
+-5490,
+-5478,
+-5465,
+-5453,
+-5440,
+-5428,
+-5416,
+-5403,
+-5391,
+-5378,
+-5366,
+-5354,
+-5341,
+-5329,
+-5316,
+-5304,
+-5292,
+-5279,
+-5267,
+-5254,
+-5242,
+-5230,
+-5217,
+-5205,
+-5192,
+-5180,
+-5168,
+-5155,
+-5143,
+-5130,
+-5118,
+-5106,
+-5093,
+-5081,
+-5068,
+-5056,
+-5043,
+-5031,
+-5019,
+-5006,
+-4994,
+-4981,
+-4969,
+-4957,
+-4944,
+-4932,
+-4919,
+-4907,
+-4894,
+-4882,
+-4870,
+-4857,
+-4845,
+-4832,
+-4820,
+-4807,
+-4795,
+-4783,
+-4770,
+-4758,
+-4745,
+-4733,
+-4720,
+-4708,
+-4696,
+-4683,
+-4671,
+-4658,
+-4646,
+-4633,
+-4621,
+-4608,
+-4596,
+-4584,
+-4571,
+-4559,
+-4546,
+-4534,
+-4521,
+-4509,
+-4496,
+-4484,
+-4472,
+-4459,
+-4447,
+-4434,
+-4422,
+-4409,
+-4397,
+-4384,
+-4372,
+-4359,
+-4347,
+-4335,
+-4322,
+-4310,
+-4297,
+-4285,
+-4272,
+-4260,
+-4247,
+-4235,
+-4222,
+-4210,
+-4198,
+-4185,
+-4173,
+-4160,
+-4148,
+-4135,
+-4123,
+-4110,
+-4098,
+-4085,
+-4073,
+-4060,
+-4048,
+-4035,
+-4023,
+-4011,
+-3998,
+-3986,
+-3973,
+-3961,
+-3948,
+-3936,
+-3923,
+-3911,
+-3898,
+-3886,
+-3873,
+-3861,
+-3848,
+-3836,
+-3823,
+-3811,
+-3798,
+-3786,
+-3773,
+-3761,
+-3749,
+-3736,
+-3724,
+-3711,
+-3699,
+-3686,
+-3674,
+-3661,
+-3649,
+-3636,
+-3624,
+-3611,
+-3599,
+-3586,
+-3574,
+-3561,
+-3549,
+-3536,
+-3524,
+-3511,
+-3499,
+-3486,
+-3474,
+-3461,
+-3449,
+-3436,
+-3424,
+-3411,
+-3399,
+-3386,
+-3374,
+-3361,
+-3349,
+-3336,
+-3324,
+-3311,
+-3299,
+-3286,
+-3274,
+-3261,
+-3249,
+-3236,
+-3224,
+-3211,
+-3199,
+-3186,
+-3174,
+-3161,
+-3149,
+-3136,
+-3124,
+-3111,
+-3099,
+-3086,
+-3074,
+-3061,
+-3049,
+-3036,
+-3024,
+-3011,
+-2999,
+-2986,
+-2974,
+-2961,
+-2949,
+-2936,
+-2923,
+-2911,
+-2898,
+-2886,
+-2873,
+-2861,
+-2848,
+-2836,
+-2823,
+-2811,
+-2798,
+-2786,
+-2773,
+-2761,
+-2748,
+-2736,
+-2723,
+-2711,
+-2698,
+-2686,
+-2673,
+-2661,
+-2648,
+-2636,
+-2623,
+-2610,
+-2598,
+-2585,
+-2573,
+-2560,
+-2548,
+-2535,
+-2523,
+-2510,
+-2498,
+-2485,
+-2473,
+-2460,
+-2448,
+-2435,
+-2423,
+-2410,
+-2397,
+-2385,
+-2372,
+-2360,
+-2347,
+-2335,
+-2322,
+-2310,
+-2297,
+-2285,
+-2272,
+-2260,
+-2247,
+-2235,
+-2222,
+-2209,
+-2197,
+-2184,
+-2172,
+-2159,
+-2147,
+-2134,
+-2122,
+-2109,
+-2097,
+-2084,
+-2072,
+-2059,
+-2046,
+-2034,
+-2021,
+-2009,
+-1996,
+-1984,
+-1971,
+-1959,
+-1946,
+-1934,
+-1921,
+-1908,
+-1896,
+-1883,
+-1871,
+-1858,
+-1846,
+-1833,
+-1821,
+-1808,
+-1796,
+-1783,
+-1770,
+-1758,
+-1745,
+-1733,
+-1720,
+-1708,
+-1695,
+-1683,
+-1670,
+-1658,
+-1645,
+-1632,
+-1620,
+-1607,
+-1595,
+-1582,
+-1570,
+-1557,
+-1545,
+-1532,
+-1519,
+-1507,
+-1494,
+-1482,
+-1469,
+-1457,
+-1444,
+-1432,
+-1419,
+-1406,
+-1394,
+-1381,
+-1369,
+-1356,
+-1344,
+-1331,
+-1319,
+-1306,
+-1293,
+-1281,
+-1268,
+-1256,
+-1243,
+-1231,
+-1218,
+-1206,
+-1193,
+-1180,
+-1168,
+-1155,
+-1143,
+-1130,
+-1118,
+-1105,
+-1093,
+-1080,
+-1067,
+-1055,
+-1042,
+-1030,
+-1017,
+-1005,
+-992,
+-980,
+-967,
+-954,
+-942,
+-929,
+-917,
+-904,
+-892,
+-879,
+-866,
+-854,
+-841,
+-829,
+-816,
+-804,
+-791,
+-779,
+-766,
+-753,
+-741,
+-728,
+-716,
+-703,
+-691,
+-678,
+-665,
+-653,
+-640,
+-628,
+-615,
+-603,
+-590,
+-578,
+-565,
+-552,
+-540,
+-527,
+-515,
+-502,
+-490,
+-477,
+-464,
+-452,
+-439,
+-427,
+-414,
+-402,
+-389,
+-376,
+-364,
+-351,
+-339,
+-326,
+-314,
+-301,
+-289,
+-276,
+-263,
+-251,
+-238,
+-226,
+-213,
+-201,
+-188,
+-175,
+-163,
+-150,
+-138,
+-125,
+-113,
+-100,
+-87,
+-75,
+-62,
+-50,
+-37,
+-25,
+-12,
diff --git a/09-PlaySound/sound.c b/09-PlaySound/sound.c
new file mode 100644
index 0000000..3525e82
--- /dev/null
+++ b/09-PlaySound/sound.c
@@ -0,0 +1,283 @@
+#include "ch.h"
+#include "hal.h"
+#include "chprintf.h"
+#include "stm32f4xx.h"
+
+#include "sound.h"
+#include "i2s_bits.h"
+#include "cs43l22_pins.h"
+#include "cs43l22_commands.h"
+
+
+/* I2C driver configuration */
+static const I2CConfig _i2s_i2c_config = {
+ OPMODE_I2C , // Operation mode
+ I2S_OI2C_SPEED , // Clock frequency
+ FAST_DUTY_CYCLE_2 // Duty cycle
+};
+
+
+/* Initialise one of the I2C pads */
+#define _i2s_init_i2c_pad(port,pad) \
+ palSetPadMode( port , pad , \
+ PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_OSPEED_MID2 \
+ | PAL_MODE_ALTERNATE(4) )
+
+/* Initialise an I2S pad */
+#define _i2s_init_i2s_pad(port,pad) \
+ palSetPadMode( port , pad , \
+ PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_MID2 \
+ | PAL_STM32_ALTERNATE( I2S_OUT_FUNCTION ) )
+
+
+/* Currently playing? */
+static int _snd_playing;
+/* May write next buffer? */
+static int _snd_next_ok;
+/* Last initialised buffer */
+static int _snd_init_buffer;
+/* Buffers */
+static s16 _snd_buffers[ 2 * SND_BUFSIZE ];
+
+/* Compute a buffer's address */
+#define _snd_buffer_address(idx) \
+ (& _snd_buffers[ (idx) * SND_BUFSIZE ] )
+
+
+#ifdef USE_DMA_FOR_SEXY_BEEPS
+/* SPI transfer callback, used when buffers need to be rotated */
+static void _cs43l22_spi_callback( SPIDriver * driver , u32 flags )
+{
+ if ( driver != &SPID3 || !( flags & STM32_DMA_ISR_TCIF ) ) {
+ return;
+ }
+ extern u32 isrFlags;
+ isrFlags = flags;
+ _snd_next_ok = TRUE;
+}
+#endif // USE_DMA_FOR_SEXY_BEEPS
+
+
+
+/*
+ * Initialise GPIO ports to handle:
+ * - the CS43L22's I2C channel,
+ * - the CS43L22's I2S channel.
+ */
+static void _i2s_init_gpio( void )
+{
+ // Reset pin
+ palSetPadMode( I2S_ORESET_PORT , I2S_ORESET_PAD ,
+ PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_MID2 );
+
+ // SDL/SDA pins
+ _i2s_init_i2c_pad( I2C_OSCL_PORT , I2C_OSCL_PAD );
+ _i2s_init_i2c_pad( I2C_OSDA_PORT , I2C_OSDA_PAD );
+
+ // I2S WS/MCK/SCK/SD pins
+ _i2s_init_i2s_pad( I2S_OWS_PORT , I2S_OWS_PAD );
+ _i2s_init_i2s_pad( I2S_OMCK_PORT , I2S_OMCK_PAD );
+ _i2s_init_i2s_pad( I2S_OSCK_PORT , I2S_OSCK_PAD );
+ _i2s_init_i2s_pad( I2S_OSD_PORT , I2S_OSD_PAD );
+}
+
+
+/* Reset the CS43L22 */
+static void _i2s_reset_output( void )
+{
+ palClearPad( I2S_ORESET_PORT , I2S_ORESET_PAD );
+ chThdSleep( I2S_ORESET_DELAY );
+ palSetPad( I2S_ORESET_PORT , I2S_ORESET_PAD );
+ chThdSleep( I2S_ORESET_DELAY );
+}
+
+
+/* Send a command to the CS43L22 through I2C */
+static msg_t _cs43l22_set( u8 reg , u8 value )
+{
+ u8 txBuffer[ 2 ];
+ txBuffer[0] = reg;
+ txBuffer[1] = value;
+ msg_t rv = i2cMasterTransmitTimeout(
+ & I2S_OI2C_DRIVER , I2S_OI2C_ADDRESS ,
+ txBuffer , 2 ,
+ NULL , 0 ,
+ I2S_OI2C_TIMEOUT );
+ if ( rv ) {
+ chprintf( (void*)&SD2 ,
+ "I2C 0x%0.2x <- 0x%0.2x ERROR %d\r\n" ,
+ reg , value , rv );
+ chprintf( (void*)&SD2 ,
+ " status = 0x%x\r\n" ,
+ i2cGetErrors( & I2S_OI2C_DRIVER ) );
+ } else {
+ chprintf( (void*)&SD2 ,
+ "I2C 0x%0.2x <- 0x%0.2x OK\r\n" ,
+ reg , value );
+ }
+ return rv;
+}
+
+
+/* Get a register from the CS43L22 through I2C */
+static u8 _cs43l22_get( u8 reg )
+{
+ u8 data;
+ msg_t rv = i2cMasterTransmitTimeout(
+ & I2S_OI2C_DRIVER , I2S_OI2C_ADDRESS ,
+ ® , 1 ,
+ &data , 1 ,
+ I2S_OI2C_TIMEOUT );
+ if ( rv ) {
+ chprintf( (void*)&SD2 ,
+ "I2C 0x%0.2x >- ??? ERROR %d\r\n" ,
+ reg , rv );
+ chprintf( (void*)&SD2 ,
+ " status = 0x%x\r\n" ,
+ i2cGetErrors( & I2S_OI2C_DRIVER ) );
+ }
+ return data;
+}
+
+
+/* Initialise the CS43L22 through its I2C interface */
+static void _cs43l22_init( void )
+{
+ i2cStart( &( I2S_OI2C_DRIVER ) , &_i2s_i2c_config );
+
+ // Make sure the device is powered down
+ _cs43l22_set( CS43L22_REG_PWR_CTL1 , CS43L22_PWR1_DOWN );
+ // Activate headphone channels
+ _cs43l22_set( CS43L22_REG_PWR_CTL2 ,
+ CS43L22_PWR2_SPKA_OFF | CS43L22_PWR2_SPKB_OFF
+ | CS43L22_PWR2_HDA_ON | CS43L22_PWR2_HDB_ON );
+ // Set serial clock
+ _cs43l22_set( CS43L22_REG_CLOCK_CTL , CS43L22_CLK_AUTO_ON
+ | CS43L22_CLK_MCDIV_ON );
+ // Set input data format
+ _cs43l22_set( CS43L22_REG_INT_CTL1 , CS43L22_IC1_SLAVE
+ | CS43L22_IC1_SCPOL_OFF | CS43L22_IC1_DSP_OFF
+ | CS43L22_IC1_DIF_I2S | CS43L22_IC1_AWL_32 );
+ // Fire it up
+ _cs43l22_set( CS43L22_REG_PWR_CTL1 , CS43L22_PWR1_UP );
+ // Analog soft ramp/zero cross disabled
+ _cs43l22_set( CS43L22_REG_AZCSR ,
+ CS43L22_AZCSR_SRB_OFF | CS43L22_AZCSR_SRA_OFF
+ | CS43L22_AZCSR_ZCB_OFF | CS43L22_AZCSR_ZCA_OFF );
+ // Digital soft ramp disabled
+ _cs43l22_set( CS43L22_REG_MISC_CTL , CS43L22_MISC_DEEMPHASIS_ON );
+ // Limiter: no soft ramp/zero cross, no attack level
+ _cs43l22_set( CS43L22_REG_LIM_CTL1 , CS43L22_LIM1_SRD_OFF
+ | CS43L22_LIM1_ZCD_OFF );
+ // Initial volume and tone controls
+ _cs43l22_set( CS43L22_REG_TONE_CTL , 0xf );
+ _cs43l22_set( CS43L22_REG_PCM_A , 0x00 );
+ _cs43l22_set( CS43L22_REG_PCM_B , 0x00 );
+ sndOutputVolume( 200 );
+}
+
+
+/* Initialise the I2S interface to the CS43L22 */
+static void _cs43l22_init_i2s( u32 frequency )
+{
+ rccEnableSPI3(FALSE);
+
+ u32 plln = ( RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SN ) >> 6;
+ u32 pllr = ( RCC->PLLI2SCFGR & RCC_PLLI2SCFGR_PLLI2SR ) >> 28;
+ u32 pllm = (u32)( RCC->PLLCFGR & RCC_PLLCFGR_PLLM );
+ u32 clock = (u32)( ( ( HSE_VALUE / pllm ) * plln ) / pllr );
+ chprintf( (void*)&SD2 , "PLL REG=0x%.x N=%d R=%d M=%d CLK = %d\r\n" ,
+ RCC->PLLI2SCFGR , plln , pllr , pllm , clock );
+
+ u16 frq = (u16)(( ( ( clock / 256 ) * 10 ) / frequency ) + 5 ) / 10;
+ chprintf( (void*)&SD2 , "frq base = 0x%x\r\n" , frq );
+ if ( ( frq & 1 ) == 0 ) {
+ frq = frq >> 1;
+ } else {
+ frq = STM32F4_I2S_PR_ODD | ( frq >> 1 );
+ }
+ chprintf( (void*)&SD2 , "frq = 0x%x\r\n" , frq );
+
+ *((u32*)(SPI3_BASE + STM32F4_I2S_OFFS_CFG)) =
+ STM32F4_I2S_CFG_MODE_I2S
+ | STM32F4_I2S_CFG_STD_I2S
+ | STM32F4_I2S_CFG_CFG_MS_TX
+ | STM32F4_I2S_CFG_RCPOL_OFF
+ | STM32F4_I2S_CFG_DLEN_16
+ | STM32F4_I2S_CFG_CLEN_16;
+ *((u32*)(SPI3_BASE + STM32F4_I2S_OFFS_PR)) = frq
+ | STM32F4_I2S_PR_MCLK_ON;
+ *((u32*)(SPI3_BASE + STM32F4_I2S_OFFS_CFG)) |= STM32F4_I2S_CFG_ENABLED;
+}
+
+#ifdef USE_DMA_FOR_SEXY_BEEPS
+static void _cs43l22_init_dma( void )
+{
+ dmaStreamAllocate( SPID3.dmatx , 1 ,
+ (stm32_dmaisr_t) _cs43l22_spi_callback ,
+ &SPID3 );
+ SPID3.txdmamode |= ( STM32_DMA_CR_PSIZE_HWORD | 0x30000
+ | STM32_DMA_CR_MINC | STM32_DMA_CR_MSIZE_HWORD
+ | STM32_DMA_CR_DBM | STM32_DMA_CR_TCIE );
+ dmaStreamSetMode( SPID3.dmatx , SPID3.txdmamode );
+ dmaStreamSetFIFO( SPID3.dmatx , STM32_DMA_FCR_DMDIS
+ | STM32_DMA_FCR_FTH_HALF );
+ dmaStreamSetPeripheral( SPID3.dmatx , &( SPID3.spi->DR ) );
+ SPID3.spi->CR2 |= SPI_CR2_TXDMAEN;
+}
+#endif // USE_DMA_FOR_SEXY_BEEPS
+
+
+void sndInit( u32 frequency )
+{
+ _i2s_init_gpio( );
+ _i2s_reset_output( );
+ _cs43l22_init( );
+ _cs43l22_init_i2s( frequency );
+#ifdef USE_DMA_FOR_SEXY_BEEPS
+ _cs43l22_init_dma( );
+#endif // USE_DMA_FOR_SEXY_BEEPS
+ _snd_next_ok = TRUE;
+}
+
+
+void sndOutputVolume( u8 volume )
+{
+ if ( volume > 0xe6 ) {
+ volume -= 0xe7;
+ } else {
+ volume += 0x19;
+ }
+ _cs43l22_set( CS43L22_REG_MASTER_VOLUME_A , volume );
+ _cs43l22_set( CS43L22_REG_MASTER_VOLUME_B , volume );
+}
+
+s16 * sndGetBuffer( void )
+{
+ if ( ! _snd_next_ok ) {
+ return NULL;
+ }
+
+ int next_write;
+ if ( _snd_playing ) {
+ next_write = ( SPID3.dmatx->stream->CR & 0x80000 )
+ ? 0 : 1;
+ _snd_next_ok = FALSE;
+ } else if ( _snd_init_buffer == 0 ) {
+ next_write = _snd_init_buffer++;
+ } else {
+ next_write = _snd_init_buffer++;
+ _snd_playing = TRUE;
+ _snd_next_ok = FALSE;
+ dmaStreamSetMemory0( SPID3.dmatx , _snd_buffer_address(0) );
+ dmaStreamSetMemory1( SPID3.dmatx , _snd_buffer_address(1) );
+ dmaStreamSetTransactionSize( SPID3.dmatx , SND_BUFSIZE );
+ dmaStreamEnable( SPID3.dmatx );
+ }
+ return _snd_buffer_address( next_write );
+}
+
+u8 sndGetStatus( void )
+{
+ return _cs43l22_get( CS43L22_REG_STATUS );
+}
diff --git a/09-PlaySound/sound.h b/09-PlaySound/sound.h
new file mode 100644
index 0000000..19cdbe2
--- /dev/null
+++ b/09-PlaySound/sound.h
@@ -0,0 +1,19 @@
+#ifndef __H_SOUND
+#define __H_SOUND
+
+#define SND_BUFSIZE 2304
+//#define USE_DMA_FOR_SEXY_BEEPS
+
+/* Initialise the driver at a specific audio sampling rate */
+void sndInit( u32 frequency );
+
+/* Set the driver's output volume */
+void sndOutputVolume( u8 volume );
+
+/* Get the next writeable buffer; returns NULL if all buffers are full */
+s16 * sndGetBuffer( void );
+
+/* Get the sound chip's status register */
+u8 sndGetStatus( void );
+
+#endif //__H_SOUND